On Wednesday 08 September 2004 19:24, Andreas Jaeger wrote: > Roland McGrath writes: > >> -static inline void > >> +inline void > >> +__attribute ((always_inline)) > >> elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, > >> const Elf64_Sym *sym, const struct r_found_version *version, > >> void *const reloc_addr_arg) > > > > Does this really do the right thing in all of 3.[345]? > > I would think this would generate an external entry point too. > > It seems so :-( > > $ nm dl-conflict.os > U _dl_argv_internal > U _dl_dprintf > U _dl_reloc_bad_type > 00000000000000a0 T _dl_resolve_conflicts > 0000000000000000 t elf_machine_rela.0 > U _GLOBAL_OFFSET_TABLE_ > 0000000000000017 r .LC0 > 0000000000000000 r .LC1 > 0000000000000000 r .LC2 > U _rtld_local > U _rtld_local_ro > > So, should I add #ifndef RESOLVE here also? Wait - this seems to be produced even with the current glibc without my changes (glibc compiled by GCC 3.3): nm /lib64/ld-linux-x86-64.so.2 |grep elf_machine_rela 0000000000000d40 t elf_machine_rela.0 0000000000007fa0 t elf_machine_rela.0 000000000000d010 t elf_machine_rela.0 0000000000000d70 t elf_machine_rela_relative.1 0000000000008330 t elf_machine_rela_relative.1 For reference, compile: int test (int j) { static inline int __attribute__ ((always_inline)) test_inline (int i) { return i++; } return test_inline (j); } I get with GCC 3.3: gromit:/tmp:[0]$ gcc -Wall -c t.c -O2 gromit:/tmp:[0]$ nm t.o 0000000000000010 T test 0000000000000000 t test_inline.0 But with 3.4 (and also 3.5 removing the static): gromit:/tmp:[0]$ /opt/gcc/3.4-devel/bin/gcc -Wall -c t.c -O2 gromit:/tmp:[0]$ nm t.o 0000000000000000 T test It's a local entry point in 3.3. The local entry point exists for me with both 3.3 and 3.5 in dl-reloc.o. I guess we should go with my patch. Ok? Andreas -- Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj SUSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126