This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! The thread_offsetof change just mirrors what Alan Modra did to NPTL tcb-offsets.sym. Apparently for GCC 4 an offsetof like expression, but not really offsetof, is no longer constant folded and therefore not suitable for "i" constraint. The ELF_MACHINE_NO_RELA change is needed to avoid rtld.c: In function '_dl_start': dynamic-link.h:50: error: nested function 'elf_machine_rela_relative' declared but never defined dynamic-link.h:47: error: nested function 'elf_machine_rela' declared but never defined This is what happens. rtld.c first includes dl-machine.h without RESOLVE_MAP and without RTLD_BOOTSTRAP defined. This means that ELF_MACHINE_NO_RELA is not defined on i386/arm. Later on it defines RESOLVE_MAP and RTLD_BOOTSTRAP and includes dynamic-link.h which has: # if ! ELF_MACHINE_NO_RELA auto void __attribute__((always_inline)) elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, const ElfW(Sym) *sym, const struct r_found_version *version, void *const reloc_addr); auto void __attribute__((always_inline)) elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, void *const reloc_addr); # endif and later on includes dl-machine.h which sees RTLD_BOOTSTRAP is defined and defines ELF_MACHINE_NO_RELA and doesn't define elf_machine_rela* nested functions. But the prototypes were already defined and GCC 4 doesn't like this. ELF_MACHINE_NO_RELA is only ever used in preprocessing conditionals and never in defined ELF_MACHINE_NO_RELA, so the trick below already defines ELF_MACHINE_NO_RELA to 1/0 depending on whether RTLD_BOOTSTRAP is defined and thus the prototypes in dynamic-link.h that are not desirable are gone. 2005-03-05 Jakub Jelinek <jakub@redhat.com> * sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define unconditionally to (defined RTLD_BOOTSTRAP). * sysdeps/arm/dl-machine.h (ELF_MACHINE_NO_RELA): Likewise. linuxthreads/ * sysdeps/powerpc/tcb-offsets.sym (thread_offsetof): Rework for GCC 4. --- libc/linuxthreads/sysdeps/powerpc/tcb-offsets.sym.jj 2005-03-04 14:21:29.000000000 -0500 +++ libc/linuxthreads/sysdeps/powerpc/tcb-offsets.sym 2005-03-04 14:26:29.000000000 -0500 @@ -8,7 +8,7 @@ -- Abuse tls.h macros to derive offsets relative to the thread register. # undef __thread_register # define __thread_register ((void *) 0) -# define thread_offsetof(mem) ((void *) &THREAD_SELF->p_##mem - (void *) 0) +# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct _pthread_descr_struct, p_##mem)) # else --- libc/sysdeps/i386/dl-machine.h.jj 2005-02-16 20:16:33.000000000 -0500 +++ libc/sysdeps/i386/dl-machine.h 2005-03-04 16:50:32.313591897 -0500 @@ -301,9 +301,7 @@ elf_machine_plt_value (struct link_map * /* The i386 never uses Elf32_Rela relocations for the dynamic linker. Prelinked libraries may use Elf32_Rela though. */ -#ifdef RTLD_BOOTSTRAP -# define ELF_MACHINE_NO_RELA 1 -#endif +#define ELF_MACHINE_NO_RELA (defined RTLD_BOOTSTRAP) #ifdef RESOLVE_MAP --- libc/sysdeps/arm/dl-machine.h.jj 2005-03-01 15:34:40.000000000 -0500 +++ libc/sysdeps/arm/dl-machine.h 2005-03-04 16:50:43.913473979 -0500 @@ -353,9 +353,7 @@ elf_machine_plt_value (struct link_map * /* ARM never uses Elf32_Rela relocations for the dynamic linker. Prelinked libraries may use Elf32_Rela though. */ -#ifdef RTLD_BOOTSTRAP -# define ELF_MACHINE_NO_RELA 1 -#endif +#define ELF_MACHINE_NO_RELA (defined RTLD_BOOTSTRAP) #ifdef RESOLVE Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |