yann@1: See http://sources.redhat.com/ml/libc-hacker/2005-03/msg00008.html yann@1: yann@1: From libc-hacker-return-8343-listarch-libc-hacker=sources dot redhat dot com at sources dot redhat dot com Sat Mar 05 09:21:18 2005 yann@1: Return-Path: yann@1: Delivered-To: listarch-libc-hacker at sources dot redhat dot com yann@1: Received: (qmail 23370 invoked by alias); 5 Mar 2005 09:21:15 -0000 yann@1: Mailing-List: contact libc-hacker-help at sources dot redhat dot com; run by ezmlm yann@1: Precedence: bulk yann@1: List-Subscribe: yann@1: List-Archive: yann@1: List-Post: yann@1: List-Help: , yann@1: Sender: libc-hacker-owner at sources dot redhat dot com yann@1: Delivered-To: mailing list libc-hacker at sources dot redhat dot com yann@1: Received: (qmail 22971 invoked from network); 5 Mar 2005 09:20:51 -0000 yann@1: Received: from unknown (HELO sunsite.mff.cuni.cz) (195.113.15.26) yann@1: by sourceware dot org with SMTP; 5 Mar 2005 09:20:51 -0000 yann@1: Received: from sunsite.mff.cuni.cz (sunsite.mff.cuni.cz [127.0.0.1]) yann@1: by sunsite dot mff dot cuni dot cz (8 dot 13 dot 1/8 dot 13 dot 1) with ESMTP id j259KoB5020894; yann@1: Sat, 5 Mar 2005 10:20:50 +0100 yann@1: Received: (from jj@localhost) yann@1: by sunsite dot mff dot cuni dot cz (8 dot 13 dot 1/8 dot 13 dot 1/Submit) id j259KnO1020889; yann@1: Sat, 5 Mar 2005 10:20:49 +0100 yann@1: Date: Sat, 5 Mar 2005 10:20:49 +0100 yann@1: From: Jakub Jelinek yann@1: To: Ulrich Drepper , Roland McGrath yann@1: Cc: Glibc hackers yann@1: Subject: [PATCH] Fix build with GCC 4 yann@1: Message-ID: <20050305092049.GJ4777@sunsite.mff.cuni.cz> yann@1: Reply-To: Jakub Jelinek yann@1: Mime-Version: 1.0 yann@1: Content-Type: text/plain; charset=us-ascii yann@1: Content-Disposition: inline yann@1: User-Agent: Mutt/1.4.1i yann@1: yann@1: Hi! yann@1: yann@1: The thread_offsetof change just mirrors what Alan Modra did to NPTL yann@1: tcb-offsets.sym. Apparently for GCC 4 an offsetof like expression, yann@1: but not really offsetof, is no longer constant folded and therefore yann@1: not suitable for "i" constraint. yann@1: yann@1: The ELF_MACHINE_NO_RELA change is needed to avoid yann@1: rtld.c: In function '_dl_start': yann@1: dynamic-link.h:50: error: nested function 'elf_machine_rela_relative' declared but never defined yann@1: dynamic-link.h:47: error: nested function 'elf_machine_rela' declared but never defined yann@1: This is what happens. yann@1: rtld.c first includes dl-machine.h without RESOLVE_MAP yann@1: and without RTLD_BOOTSTRAP defined. This means that ELF_MACHINE_NO_RELA yann@1: is not defined on i386/arm. Later on it defines RESOLVE_MAP yann@1: and RTLD_BOOTSTRAP and includes dynamic-link.h which has: yann@1: # if ! ELF_MACHINE_NO_RELA yann@1: auto void __attribute__((always_inline)) yann@1: elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, yann@1: const ElfW(Sym) *sym, const struct r_found_version *version, yann@1: void *const reloc_addr); yann@1: auto void __attribute__((always_inline)) yann@1: elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, yann@1: void *const reloc_addr); yann@1: # endif yann@1: and later on includes dl-machine.h which sees RTLD_BOOTSTRAP is yann@1: defined and defines ELF_MACHINE_NO_RELA and doesn't define yann@1: elf_machine_rela* nested functions. yann@1: But the prototypes were already defined and GCC 4 doesn't like this. yann@1: ELF_MACHINE_NO_RELA is only ever used in preprocessing conditionals yann@1: and never in defined ELF_MACHINE_NO_RELA, so the trick below yann@1: already defines ELF_MACHINE_NO_RELA to 1/0 depending on whether yann@1: RTLD_BOOTSTRAP is defined and thus the prototypes in dynamic-link.h yann@1: that are not desirable are gone. yann@1: yann@1: 2005-03-05 Jakub Jelinek yann@1: yann@1: * sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define yann@1: unconditionally to (defined RTLD_BOOTSTRAP). yann@1: * sysdeps/arm/dl-machine.h (ELF_MACHINE_NO_RELA): Likewise. yann@1: linuxthreads/ yann@1: * sysdeps/powerpc/tcb-offsets.sym (thread_offsetof): Rework for GCC 4. yann@1: yann@1: --- libc/linuxthreads/sysdeps/powerpc/tcb-offsets.sym.jj 2005-03-04 14:21:29.000000000 -0500 yann@1: +++ libc/linuxthreads/sysdeps/powerpc/tcb-offsets.sym 2005-03-04 14:26:29.000000000 -0500 yann@1: @@ -8,7 +8,7 @@ yann@1: -- Abuse tls.h macros to derive offsets relative to the thread register. yann@1: # undef __thread_register yann@1: # define __thread_register ((void *) 0) yann@1: -# define thread_offsetof(mem) ((void *) &THREAD_SELF->p_##mem - (void *) 0) yann@1: +# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct _pthread_descr_struct, p_##mem)) yann@1: yann@1: # else yann@1: