From: Olaf Hering <olh@suse.de>
To: Alan Modra <amodra@bigpond.net.au>
Cc: linuxppc-dev@lists.linuxppc.org
Subject: kernel oops due to unaligned access with lswi
Date: Sat, 15 Nov 2003 22:04:49 +0100 [thread overview]
Message-ID: <20031115210449.GA10105@suse.de> (raw)
Alan,
2.6 has a function parse_header(), its part of gunzip and used for
initramfs as example. I got an oops, exception 600, sig 7. I think that
means unaligned access.
Why does the compiler optimize this one? I see it with 2.95, 3.2, 3.3
and 3.4 with -O1 and better, not with -O0.
gcc -msoft-float -mmultiple -mstring -O2 -Wall -Wstrict-prototypes \
-Wno-trigraphs -Wno-uninitialized -version -fno-strict-aliasing \
-fno-common -ffixed-r2 -fomit-frame-pointer -o parse_header \
-c parse_header.c -v --save-temps
lswi 9,31,8
stswi 9,28,8
s = r31. How can gcc be sure that s aligned?
ppc64 will call memcpy (tested with gcc3.2.3).
.file "parse_header.c"
.section .init.text,"ax",@progbits
.align 2
.type parse_header,@function
parse_header:
stwu 1,-112(1)
mflr 0
stmw 27,92(1)
stw 0,116(1)
li 0,0
stb 0,64(1)
li 30,0
addi 31,3,6
addi 28,1,56
addi 27,1,8
.L6:
lswi 9,31,8
stswi 9,28,8
slwi 29,30,2
mr 3,28
li 4,0
li 5,16
bl simple_strtoul
stwx 3,29,27
addi 30,30,1
addi 31,31,8
cmpwi 0,30,11
ble+ 0,.L6
lwz 0,116(1)
mtlr 0
lmw 27,92(1)
addi 1,1,112
blr
.Lfe1:
.size parse_header,.Lfe1-parse_header
.section ".text"
.align 2
.globl main
.type main,@function
main:
stwu 1,-16(1)
mflr 0
stw 0,20(1)
lis 3,0x1
ori 3,3,57920
bl malloc
bl parse_header
li 3,0
lwz 0,20(1)
mtlr 0
addi 1,1,16
blr
.Lfe2:
.size main,.Lfe2-main
.ident "GCC: (GNU) 3.2.3 (SuSE Linux)"
#include <stdlib.h>
typedef unsigned int __kernel_size_t;
extern void *memcpy(void *, const void *, __kernel_size_t);
extern unsigned long simple_strtoul(const char *, char **, unsigned int);
static void __attribute__ ((__section__(".init.text"))) parse_header(char *s)
{
unsigned long parsed[12];
char buf[9];
int i;
buf[8] = '\0';
for (i = 0, s += 6; i < 12; i++, s += 8) {
memcpy(buf, s, 8);
parsed[i] = simple_strtoul(buf, ((void *) 0), 16);
}
}
int
main(void)
{
char *s;
s = malloc(123456);
parse_header(s);
return 0;
}
--
USB is for mice, FireWire is for men!
sUse lINUX ag, nÜRNBERG
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
next reply other threads:[~2003-11-15 21:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-15 21:04 Olaf Hering [this message]
2003-11-15 22:24 ` kernel oops due to unaligned access with lswi Olaf Hering
2003-11-15 22:30 ` David Edelsohn
2003-11-15 22:37 ` Olaf Hering
2003-11-15 22:43 ` Olaf Hering
2003-11-15 22:59 ` David Edelsohn
2003-11-16 10:17 ` Benjamin Herrenschmidt
2003-11-16 17:49 ` Kumar Gala
2003-11-16 22:19 ` Alan Modra
2003-11-16 22:45 ` Jon Masters
2003-11-17 0:50 ` Paul Mackerras
2003-11-17 7:55 ` Olaf Hering
2003-11-16 23:12 ` Benjamin Herrenschmidt
2003-11-16 23:31 ` David Edelsohn
2003-11-17 9:19 ` Gabriel Paubert
2003-11-16 23:04 ` David Edelsohn
2003-11-17 0:40 ` Paul Mackerras
2003-11-19 21:51 ` linas
2003-11-19 22:06 ` Hollis Blanchard
2003-11-19 22:50 ` linas
2003-11-16 0:40 ` Paul Mackerras
2003-11-16 1:45 ` Olaf Hering
2003-11-16 16:49 ` Olaf Hering
2003-11-16 5:07 ` Benjamin Herrenschmidt
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=20031115210449.GA10105@suse.de \
--to=olh@suse.de \
--cc=amodra@bigpond.net.au \
--cc=linuxppc-dev@lists.linuxppc.org \
/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.