All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] Data Abort with gcc 7.1
Date: Tue, 11 Jul 2017 18:54:55 +0200	[thread overview]
Message-ID: <20170711165455.xtpi4qdncftbuglt@flea> (raw)

Hi,

I recently got a gcc 7.1 based toolchain, and it seems like it
generates unaligned code, specifically in the net_set_ip_header
function in my case.

Whenever some packet is sent, this data abort is triggered:

=> setenv ipaddr 10.42.0.1; ping 10.42.0.254
using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in
MAC de:ad:be:ef:00:01
HOST MAC de:ad:be:af:00:00
RNDIS ready
musb-hdrc: peripheral reset irq lost!
high speed config #2: 2 mA, Ethernet Gadget, using RNDIS
USB RNDIS network up!
Using usb_ether device
data abort
pc : [<7ff9db10>]	   lr : [<7ff9f00c>]
reloc pc : [<4a043b10>]	   lr : [<4a04500c>]
sp : 7bf37cc8  ip : 00000000	 fp : 7ff6236c
r10: 7ffed2b8  r9 : 7bf39ee8	 r8 : 7ffed2b8
r7 : 00000001  r6 : 00000000	 r5 : 0000002a  r4 : 7ffed30e
r3 : 14000045  r2 : 01002a0a	 r1 : fe002a0a  r0 : 7ffed30e
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...


Running objdump on it gives us this:

4a043b04 <net_set_ip_header>:

	/*
	 *	Construct an IP header.
	 */
	/* IP_HDR_SIZE / 4 (not including UDP) */
	ip->ip_hl_v  = 0x45;
4a043b04:	e59f3074 	ldr	r3, [pc, #116]	; 4a043b80 <net_set_ip_header+0x7c>
{
4a043b08:	e92d4013 	push	{r0, r1, r4, lr}
4a043b0c:	e1a04000 	mov	r4, r0
	ip->ip_hl_v  = 0x45;
4a043b10:	e5803000 	str	r3, [r0] <---- Abort
	ip->ip_tos   = 0;
	ip->ip_len   = htons(IP_HDR_SIZE);
	ip->ip_id    = htons(net_ip_id++);
4a043b14:	e59f3068 	ldr	r3, [pc, #104]	; 4a043b84 <net_set_ip_header+0x80>

It seems like r0 is indeed set to an unaligned address (0x7ffed30e)
for some reason.

Using a Linaro 6.3 toolchain works on the same commit with the same
config, so it really seems to be a compiler-related issue.

It generates this code:

4a043ec4 <net_set_ip_header>:

	/*
	 *	Construct an IP header.
	 */
	/* IP_HDR_SIZE / 4 (not including UDP) */
	ip->ip_hl_v  = 0x45;
4a043ec4:	e3a03045 	mov	r3, #69	; 0x45
{
4a043ec8:	e92d4013 	push	{r0, r1, r4, lr}
4a043ecc:	e1a04000 	mov	r4, r0
	ip->ip_hl_v  = 0x45;
4a043ed0:	e5c03000 	strb	r3, [r0]
	ip->ip_tos   = 0;
	ip->ip_len   = htons(IP_HDR_SIZE);
4a043ed4:	e3a03b05 	mov	r3, #5120	; 0x1400
	ip->ip_tos   = 0;
4a043ed8:	e3a00000 	mov	r0, #0
	ip->ip_len   = htons(IP_HDR_SIZE);
4a043edc:	e1c430b2 	strh	r3, [r4, #2]
	ip->ip_id    = htons(net_ip_id++);
4a043ee0:	e59f3064 	ldr	r3, [pc, #100]	; 4a043f4c <net_set_ip_header+0x88>

And it seems like it's using an strb instruction to avoid the
unaligned access.

As far as I know, we are passing --wno-unaligned-access, so the broken
situation should not arise, and yet it does, so I'm a bit confused,
and not really sure what to do from there.

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170711/c1c12a1f/attachment.sig>

             reply	other threads:[~2017-07-11 16:54 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-11 16:54 Maxime Ripard [this message]
2017-07-11 16:59 ` [U-Boot] Data Abort with gcc 7.1 Tom Rini
2017-07-11 17:59   ` Dr. Philipp Tomsich
2017-07-12 14:20     ` Maxime Ripard
2017-07-12 14:34       ` Tom Rini
2017-07-12 14:41         ` Dr. Philipp Tomsich
2017-07-12 15:30         ` Thomas Petazzoni
2017-07-12 17:37           ` Tom Rini
2017-07-12 15:48         ` Dr. Philipp Tomsich
2017-07-12 17:49           ` Tom Rini
2017-07-12 17:49             ` Dr. Philipp Tomsich
2017-07-12 18:07           ` Siarhei Siamashka
2017-07-12 18:26             ` Dr. Philipp Tomsich
2017-07-12 20:42               ` Mark Kettenis
2017-07-12 17:55 ` Siarhei Siamashka
2017-07-13  0:43 ` Måns Rullgård
2017-07-13  3:52   ` Siarhei Siamashka
2017-07-13 10:11     ` Måns Rullgård
2017-07-13 10:20       ` Peter Robinson
2017-07-13 12:32         ` Maxime Ripard
2017-07-13 12:34           ` Måns Rullgård
2017-07-23 10:55   ` Jörg Krause

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170711165455.xtpi4qdncftbuglt@flea \
    --to=maxime.ripard@free-electrons.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.