Gcc doesn't generate symbol types for undefined symbol on ELF targets: bash-3.2$ cat x.c extern void foo() __attribute__((weak,visibility("hidden"))); extern int puts( char const* ); int main() { foo ? foo() : puts( "foo == null, skipped." ); return 0; } bash-3.2$ gcc -c x.c bash-3.2$ readelf -s x.o
Symbol table '.symtab' contains 12 entries: Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS x.c 2: 0000000000000000 0 SECTION LOCAL DEFAULT 1 3: 0000000000000000 0 SECTION LOCAL DEFAULT 3 4: 0000000000000000 0 SECTION LOCAL DEFAULT 4 5: 0000000000000000 0 SECTION LOCAL DEFAULT 5 6: 0000000000000000 0 SECTION LOCAL DEFAULT 6 7: 0000000000000000 0 SECTION LOCAL DEFAULT 9 8: 0000000000000000 0 SECTION LOCAL DEFAULT 8 9: 0000000000000000 43 FUNC GLOBAL DEFAULT 1 main 10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND foo 11: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND puts bash-3.2$ ELF linker needs symbol type to properly issue diagnostic message. -- Summary: Gcc shoud generate symbol type for undefined symbol Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hjl dot tools at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35514