This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/33740] New: gcc 4.1.1 on AIX - gdb and TV fail to see static value due to likely gcc compiler bug
- From: "seppo at totalviewtech dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Oct 2007 19:53:54 -0000
- Subject: [Bug debug/33740] New: gcc 4.1.1 on AIX - gdb and TV fail to see static value due to likely gcc compiler bug
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
I would like to report a probable gcc compiler bug that is to present on AIX
5.3, but not on x86 linux. The problem is that Totalview and gdb fail to see a
static value 'stupify' when the program is compiled and linked using gcc 4.1.1.
If I cross link and compile (e.g. compile using gcc and link using xlc
8.0.0.0), things do not work if the compilation is done using gcc. Things do
work if I compile using xlc and then link using gcc (or use xlc for both). This
makes us suspect that this is a compiler problem specific to AIX OS: the gcc
compiler apparently creates an .o file that is not anymore understandable to
the linker (more details below).
Compiler + Linker
gcc + gcc FAIL
gcc + xlc FAIL
xlc + xlc OK
xlc + gcc OK
Below please find the dump info related to two pure cases: gcc+gcc and xlc+xlc,
compilation and linking respectively. It seems to me that in the gcc case, the
final executable (see gcc_gcc_dump) has incorrect/undefined type declaration
(unamex), whereas the xlc version has the type of stupify as 'stsym' which
sounds right to me?
Our internal code for this bug is #10494. More details below:
XXXXXXXXXXXXXXXXXXXXXXXXXXX
# AIX 5.3
# compilation
/home/compilers/gnu/gcc/4.1.1/rs6000_5.3/bin/gcc -g -c -o file_static.o
file_static.c
# linking
/home/compilers/gnu/gcc/4.1.1/rs6000_5.3/bin/gcc -g -o file_static
file_static.o
#-> 5.3, and gcc 4.1.1 does NOT WORK
objdump --syms ./file_static.o | grep stupify
dump -tv ./file_static | grep stupify
# AIX 5.3
# compilation
/home/compilers/ibm/c++/8.0.0.0/rs6000_5.3/usr/vac/bin/xlc -g -c -o
file_static.o file_static.c
# linking
/home/compilers/ibm/c++/8.0.0.0/rs6000_5.3/usr/vac/bin/xlc -g -o file_static
file_static.o
#-> 5.3, and xlc 8.0.0.0 works
objdump --syms ./file_static.o | grep stupify
dump -tv ./file_static | grep stupify
In the latter case both Totalview and gdb see the variable 'stupify', whereas
with gcc compilation and linking, the symbol is not available to the debuggers.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
On older versions of gcc, we see the following:
On AIX 5.1, gcc 3.2.3 works, but 3.3.3 does not:
gcc V3.2.3 compiles file_static.c into an object file containing both:
1. A hidden external CSECT definition for ``stupify'' in the TOC,
pointing to 4 anonymous bytes in BSS.
-and-
2. An initialized per-module static variable debug symbol for ``stupify''.
gcc V3.3 generates the same two symbols (although it denotes the COMMON
block containing ``stupify''s actual storage in a subtly different fashion).
However, when the V3.2.3 object file is linked, the a.out file preserves
both ``stupify''s CSECT definition, *and* its debug symbol,
while when the V3.3 object file is linked, the a.out file does not
contain ``stupify''s debug symbol.
This is true whether the object files in question are linked via by the
compiler driver gcc (3.2.3, 3.3 or 4.1.1), or IBM xlc.
The difference in symbols between the two executables may stem from
linker handling of the COMMON storage for ``stupify''.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
file_static.c:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#include <stdio.h>
static unsigned long int stupify = 0;
void a(void)
{
if (!stupify) {
unsigned long int t = 0;
stupify = 256 * 1024 * 1024;
t = stupify;
printf("s = %lu, t = %lu\n",stupify,t);
}
}
main()
{
a();
printf("hello, world\n");
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The key segments of the symbol info look like as follows
gcc compilation and linking::
chrome:/home/seppo/Bugs/Bug_10494 > grep -A 3 -B 3 stupify gcc_gcc_objdump.txt
[259](sec 1)(fl 0x00)(ty 0)(scl 101) (nx 1) 0x00000138 .ef
AUX lnno 19 size 0x0 tagndx 0
[261](sec 1)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x0000010a .bs
[262](sec -2)(fl 0x00)(ty 0)(scl 133) (nx 0) 0x00000000 stupify:S-10
[263](sec 1)(fl 0x00)(ty 0)(scl 144) (nx 0) 0x00000000 .es
[264](sec 1)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x00000150 _filestatic.rw_
AUX val 33 prmhsh 0 snhsh 0 typ 1 algn 3 clss 1 stb 0 snstb 0
--
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 3 clss 5 stb 0 snstb 0
[280](sec 2)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x000001a4 TOC
AUX val 0 prmhsh 0 snhsh 0 typ 1 algn 2 clss 15 stb 0 snstb 0
[282](sec 2)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x000001a4 stupify
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
[284](sec 2)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x000001a8 LC..1
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
chrome:/home/seppo/Bugs/Bug_10494 > grep -A 3 -B 3 stupify gcc_gcc_dump.txt
[49] a4 0x00000004 0 0 SD TC 0 0
[50] m 0x20000e04 .data 1 unamex __strtollmax
[51] a4 0x00000004 0 0 SD TC 0 0
[52] m 0x20000e08 .data 1 unamex stupify
[53] a4 0x00000004 0 0 SD TC 0 0
[54] m 0x20000e0c .data 1 unamex LC..1
[55] a4 0x00000004 0 0 SD TC 0 0
xlc compilation and linking::
chrome:/home/seppo/Bugs/Bug_10494 > grep -A 3 -B 3 stupify xlc_xlc_objdump.txt
[ 66](sec 2)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x00000108 _$STATIC
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 5 stb 0 snstb 0
[ 68](sec -2)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x00000042 .bs
[ 69](sec -2)(fl 0x00)(ty 0)(scl 133) (nx 0) 0x00000000 stupify:V-10
[ 70](sec -2)(fl 0x00)(ty 0)(scl 144) (nx 0) 0x00000000 .es
[ 71](sec 2)(fl 0x00)(ty 0)(scl 107) (nx 1) 0x000000e4 _$STATIC
AUX val 4 prmhsh 0 snhsh 0 typ 1 algn 2 clss 3 stb 0 snstb 0
chrome:/home/seppo/Bugs/Bug_10494 > grep -A 3 -B 3 stupify xlc_xlc_dump.txt
[140] m 0x20000580 .data 1 unamex _$STATIC
[141] a4 0x00000004 0 0 SD RW 0 0
[142] m 0x0000008c debug 0 bstat .bs
[143] m 0x00000000 debug 0 stsym stupify:V-10
[144] m 0x00000000 debug 0 estat .es
[145] m 0x000000a2 debug 0 FILE ASM:COM dbxxx.s
[146] m 0x10000488 .text 1 extern .__dbsubc
chrome:/home/seppo/Bugs/Bug_10494 >
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--
Summary: gcc 4.1.1 on AIX - gdb and TV fail to see static value
due to likely gcc compiler bug
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: debug
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: seppo at totalviewtech dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33740