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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox