This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/26687] New: gcc -O1 -fno-pic generates bad code that references uninitialized r31
- From: "bardwell at curl dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 15 Mar 2006 06:36:30 -0000
- Subject: [Bug c/26687] New: gcc -O1 -fno-pic generates bad code that references uninitialized r31
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Overview Description:
gcc 3.3 or gcc 4.0 on Apple's OSX 10.4 generates bad code that references r31
when called with -O1 -fno-pic. If you use -O0 or do not use -fno-pic the
problem.
Steps to Reproduce:
run gcc -O1 -fno-pic -c or gcc-4.0 -O1 -fno-pic -c on:
void broken(double *ret, int num)
{
ret[0] = num ? 0.1 : 0.0;
}
Actual Results:
Compile this source file with "gcc-4.0 -c -O1 -fno-pic".
View the object file with "otool -lrtvdI -s __TEXT __literal8":
[...]
Relocation information (__TEXT,__text) 8 entries
address pcrel length extern type scattered symbolnum/value
00000014 False long n/a LO16 True 0x00000030
False long False PAIR False half = 0x0000
00000010 False long n/a HA16 True 0x00000030
False long False PAIR False half = 0x0034
0000000c False long False LO16 False 2 (__TEXT,__literal8)
False long False PAIR False half = 0x0000
00000008 False long False HA16 False 2 (__TEXT,__literal8)
False long False PAIR False half = 0x0030
(__TEXT,__text) section
_broken:
00000000 cmpwi cr7,r4,0x0
00000004 beq+ cr7,0x1c
00000008 lis r2,0x0
0000000c lwz r9,0x30(r2)
00000010 addis r10,r31,0x0
00000014 lwz r10,0x34(r10)
00000018 b 0x24
0000001c li r9,0x0
00000020 li r10,0x0
00000024 stw r9,0x0(r3)
00000028 stw r10,0x4(r3)
0000002c blr
Contents of (__TEXT,__literal8) section
00000030 0x3fb99999 0x9999999a (1.0000000000000001e-01)
Observe that "r31" is being used without being initialized.
Expected Results:
It should not reference r31 unless it has initialized it...
And if you compile this source file with "gcc-4.0 -c -O1".
View the object file with "otool -lrtvdI -s __TEXT __literal8":
[...]
Relocation information (__TEXT,__text) 8 entries
address pcrel length extern type scattered symbolnum/value
00000024 False long n/a LO16DIF True 0x00000040
False long n/a PAIR True 0x00000008 other_half = 0x0000
00000020 False long n/a HA16DIF True 0x00000040
False long n/a PAIR True 0x00000008 other_half = 0x003c
0000001c False long n/a LO16DIF True 0x00000040
False long n/a PAIR True 0x00000008 other_half = 0x0000
00000018 False long n/a HA16DIF True 0x00000040
False long n/a PAIR True 0x00000008 other_half = 0x0038
(__TEXT,__text) section
_broken:
00000000 mfspr r0,lr
00000004 bcl 20,31,0x8
00000008 mfspr r8,lr
0000000c mtspr lr,r0
00000010 cmpwi cr7,r4,0x0
00000014 beq+ cr7,0x2c
00000018 addis r2,r8,0x0
0000001c lwz r9,0x38(r2)
00000020 addis r10,r8,0x0
00000024 lwz r10,0x3c(r10)
00000028 b 0x34
0000002c li r9,0x0
00000030 li r10,0x0
00000034 stw r9,0x0(r3)
00000038 stw r10,0x4(r3)
0000003c blr
Contents of (__TEXT,__literal8) section
00000040 0x3fb99999 0x9999999a (1.0000000000000001e-01)
Observe that the code seems reasonable.
--
Summary: gcc -O1 -fno-pic generates bad code that references
uninitialized r31
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bardwell at curl dot com
GCC host triplet: gcc version 4.0.0 20041026 (Apple Computer, Inc. build
4061), OS
GCC target triplet: gcc version 4.0.0 20041026 (Apple Computer, Inc. build
4061), OS
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26687