Created attachment 6422 [details] Broken fix attempt. $ ./gdb /lib64/libc.so.6 GNU gdb (GDB) 7.4.50.20120523-cvs (gdb) p memmove $1 = {<text gnu-indirect-function variable, no debug info>} 0x88a70 <memmove> (gdb) p memmove $2 = {void *(void)} 0x88a70 <memmove> DWARF has no way how to mark a function as IFUNC. Only ELF has a way. No DWARF DIE definition must use ELF IFUNC symbol names as GDB prefers DWARF symbols more than ELF symbols. These DWARF DW_AT_linkage_name symbols are marked in ELF as IFUNC: __GI___strcasecmp __GI_time __gettimeofday __memmove_chk __sched_cpucount __strcasestr memmove strstr time Out of those only these are of concern to users: memmove strstr time <0><18c0c5>: Abbrev Number: 1 (DW_TAG_compile_unit) <18c0cb> DW_AT_name : ../sysdeps/x86_64/multiarch/memmove.c <1><18c3f8>: Abbrev Number: 27 (DW_TAG_subprogram) <18c3f9> DW_AT_external : 1 <18c3f9> DW_AT_name : memmove_ifunc <18c3fd> DW_AT_decl_file : 2 <18c3fe> DW_AT_decl_line : 46 <18c3ff> DW_AT_linkage_name: memmove ^^^^^^^^^^^^^^^^^^^^^^^^^^^ <18c403> DW_AT_prototyped : 1 <18c403> DW_AT_type : <0x18c126> <18c407> DW_AT_low_pc : 0x88a70 <18c40f> DW_AT_high_pc : 0x88ab7 <18c417> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa) <18c419> DW_AT_GNU_all_call_sites: 1 <18c419> DW_AT_sibling : <0x18c43a> libc_ifunc (memmove, ^^^^^^^ Other uses of libc_ifunc are for example: libc_ifunc (__strcasestr, Attached broken fix attempt fails to build: ../sysdeps/x86_64/multiarch/memmove.c: In function '__memmove_ifunc': ../sysdeps/x86_64/multiarch/memmove.c:42:1: error: '__memmove' undeclared (first use in this function)
What should debug info look like? How will debug info be used by GDB?
There should be no DWARF for memmove. GDB should see just the ELF symbol (which is IFUNC). There can be some DWARF for memmove but if it is it must have different name, such as __GI_memmove or whatever.
Created attachment 6569 [details] A patch Please try this and let me know if it fixes your problem.
It looks perfect during all the tests I made, thanks! The Fedora GDB workaround is no longer needed: http://pkgs.fedoraproject.org/cgit/gdb.git/tree/gdb-glibc-strstr-workaround.patch
commit f85fa27058eb7d4b56b8deaf885064cf8d730f68 Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Aug 9 16:04:37 2012 -0700 Avoid DWARF definition DIE on ifunc symbols