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>
next 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.