This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
LTO symtabs inconsistency
- From: Dave Korn <dave dot korn dot cygwin at gmail dot com>
- To: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Sat, 16 Oct 2010 21:20:11 +0100
- Subject: LTO symtabs inconsistency
Hello team,
Previously, I have noticed that symbols in LTO symtabs don't have
underscores. Now I have found that some of them do. These are the native
symbols from gcc/intl.o during LTO-enabled bootstrap stage2:
> $ nm intl.o
> 00000000 b .bss
> 00000000 d .data
> 00000000 N .debug_abbrev
> 00000000 N .debug_aranges
> 00000000 N .debug_info
> 00000000 N .debug_line
> 00000000 N .debug_loc
> 00000000 N .debug_str
> 00000000 r .eh_frame
> 00000000 r .gnu.lto_.cgraph.e2eb6ce9
> 00000000 r .gnu.lto_.decls.e2eb6ce9
> 00000000 r .gnu.lto_.jmpfuncs.e2eb6ce9
> 00000000 r .gnu.lto_.opts
> 00000000 r .gnu.lto_.pureconst.e2eb6ce9
> 00000000 r .gnu.lto_.refs.e2eb6ce9
> 00000000 r .gnu.lto_.statics.e2eb6ce9
> 00000000 r .gnu.lto_.symtab.e2eb6ce9
> 00000000 r .gnu.lto_.vars.e2eb6ce9
> 00000000 r .gnu.lto_gcc_gettext_width.e2eb6ce9
> 00000000 r .gnu.lto_gcc_init_libintl.e2eb6ce9
> 00000000 r .gnu.lto_get_spaces.e2eb6ce9
> 00000000 r .rdata
> 00000000 t .text
> U ___chkstk_ms
> 00000001 C ___gnu_lto_v1
> 00000000 D _close_quote
> 00000110 T _gcc_gettext_width
> 00000000 T _gcc_init_libintl
> 00000180 T _get_spaces
> U _libintl_bindtextdomain
> U _libintl_gettext
> U _libintl_textdomain
> 00000004 B _locale_encoding
> 00000000 B _locale_utf8
> U _mbstowcs
> U _memset
> U _nl_langinfo
> 00000004 D _open_quote
> U _setlocale
> U _strcasecmp
> U _wcswidth
> U _xmalloc
This is i686-pc-cygwin, btw, and PE-COFF object format. Here is the
contents of the LTO symtab from the file:
> $ objdump -s -j .gnu.lto_.symtab.e2eb6ce9 intl.o
>
> intl.o: file format pe-i386
>
> Contents of section .gnu.lto_.symtab.e2eb6ce9:
> 0000 6763635f 696e6974 5f6c6962 696e746c gcc_init_libintl
> 0010 00000000 00000000 00000000 70000000 ............p...
> 0020 6763635f 67657474 6578745f 77696474 gcc_gettext_widt
> 0030 68000000 00000000 00000000 00740000 h............t..
> 0040 00676574 5f737061 63657300 00000000 .get_spaces.....
> 0050 00000000 0000007b 0000006e 6c5f6c61 .......{...nl_la
> 0060 6e67696e 666f0000 02000000 00000000 nginfo..........
> 0070 00009600 00005f6c 6962696e 746c5f74 ......_libintl_t
> 0080 65787464 6f6d6169 6e000002 00000000 extdomain.......
> 0090 00000000 00a60000 005f6c69 62696e74 ........._libint
> 00a0 6c5f6269 6e647465 7874646f 6d61696e l_bindtextdomain
> 00b0 00000200 00000000 00000000 a9000000 ................
> 00c0 7365746c 6f63616c 65000002 00000000 setlocale.......
> 00d0 00000000 00af0000 00776373 77696474 .........wcswidt
> 00e0 68000002 00000000 00000000 00b50000 h...............
> 00f0 006d6273 746f7763 73000002 00000000 .mbstowcs.......
> 0100 00000000 00bd0000 00786d61 6c6c6f63 .........xmalloc
> 0110 00000200 00000000 00000000 cf000000 ................
> 0120 6f70656e 5f71756f 74650000 00000000 open_quote......
> 0130 00000000 0000d500 0000636c 6f73655f ..........close_
> 0140 71756f74 65000000 00000000 00000000 quote...........
> 0150 00da0000 006c6f63 616c655f 656e636f .....locale_enco
> 0160 64696e67 00000000 00000000 00000000 ding............
> 0170 df000000 6c6f6361 6c655f75 74663800 ....locale_utf8.
> 0180 00000000 00000000 000000e1 000000 ...............
For some reason, the two libintl symbols have underscores. gettext is
missing altogether because we have a builtin for it, but I don't think we do
for (bind)textdomain.
Is this expected?
cheers,
DaveK