Hi, not sure if this is a bug or not, but not quite sure where else to turn.

Using Red Hat EL 5.7 (IA64), GCC 4.1.2

uname -a: Linux [Hostname] 2.6.18-274.el5 #1 SMP Fri Jul 8 17:41:07 EDT 2011 
ia64 ia64 ia64 GNU/Linux
gcc --version: gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51)

When compiling a single .cc file that defines an approximately 16KB (static) 
character array, the symbol for that variable is not stored in the object file 
resulting in a subsequent linker error.

It does not happen for all my static array definitions, including some much 
larger ones, and I am unable to see the pattern causing this so I am wondering 
if it is a GCC bug related to the size of this definition?

The array definitions look like this:

namespace MyNameSpace
{
char Data1234[] = {
37,33,80,83,45,65,100,111,98,101,45,51,46,48,32,82,101,115,111,117,114,99,101,45,67,77,97,112,10,37,37,68,111,99,117,109,101,110,116,78,101
,101,100,101,100,82,101,115,111,117,114,99,101,115,58,32,80,114,111,99,83,101,116,32,40,67,73,68,73,110,105,116,41,10,37,37,73,110,99,108,117,100
...SNIP...
  };
}; // namespace MyNameSpace

Test case 1 (that fails):

gcc -c test1.c
readelf -a test1.o

Symbol table '.symtab' contains 8 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    2
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     7: 0000000000000000 15494 OBJECT  GLOBAL DEFAULT    2

Note how there is a 15494 byte entry with no name...

Test case 2 (that passes, i.e. no problem):

gcc -c test2.c
readelf -a test2.o

Symbol table '.symtab' contains 8 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS test2.cc
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    2
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     7: 0000000000000000 17368 OBJECT  GLOBAL DEFAULT    2 
_ZN7ISYSpdf14CharmapData1

Note how there is a 17368 byte entry with its expected symbol name. This object 
file is correct and will link without error.

I have compiled this code on Linux/x86/x86_64, FreeBSD/GCC and many other 
compilers - this is the first time I have seen this when trying to build on 
Linux/GCC/IA64.

To keep the size of this post down, I have linked the 2 .cc files used above to:
http://download.isys-search.com/tmp/source.zip

Any ideas, help or workarounds would be greatly appreciated.

Derek


Reply via email to