diff options
Diffstat (limited to 'packages/glibc/glibc-cvs/trampoline.patch')
-rw-r--r-- | packages/glibc/glibc-cvs/trampoline.patch | 560 |
1 files changed, 0 insertions, 560 deletions
diff --git a/packages/glibc/glibc-cvs/trampoline.patch b/packages/glibc/glibc-cvs/trampoline.patch deleted file mode 100644 index 86cfc0a539..0000000000 --- a/packages/glibc/glibc-cvs/trampoline.patch +++ /dev/null @@ -1,560 +0,0 @@ -From libc-alpha-return-16890-listarch-libc-alpha=sources dot redhat dot com at sources dot redhat dot com Wed Jan 19 18:02:53 2005 -Return-Path: <libc-alpha-return-16890-listarch-libc-alpha=sources dot redhat dot com at sources dot redhat dot com> -Delivered-To: listarch-libc-alpha at sources dot redhat dot com -Received: (qmail 26073 invoked by alias); 19 Jan 2005 18:02:41 -0000 -Mailing-List: contact libc-alpha-help at sources dot redhat dot com; run by ezmlm -Precedence: bulk -List-Subscribe: <mailto:libc-alpha-subscribe at sources dot redhat dot com> -List-Archive: <http://sources.redhat.com/ml/libc-alpha/> -List-Post: <mailto:libc-alpha at sources dot redhat dot com> -List-Help: <mailto:libc-alpha-help at sources dot redhat dot com>, <http://sources dot redhat dot com/ml/#faqs> -Sender: libc-alpha-owner at sources dot redhat dot com -Delivered-To: mailing list libc-alpha at sources dot redhat dot com -Received: (qmail 25420 invoked from network); 19 Jan 2005 18:01:47 -0000 -Received: from unknown (HELO mail.codesourcery.com) (65.74.133.9) - by sourceware dot org with SMTP; 19 Jan 2005 18:01:47 -0000 -Received: (qmail 7456 invoked from network); 19 Jan 2005 18:01:44 -0000 -Received: from localhost (HELO ?192.168.0.100?) (mitchell@127.0.0.1) - by mail dot codesourcery dot com with SMTP; 19 Jan 2005 18:01:44 -0000 -Message-ID: <41EEA082.1020000@codesourcery.com> -Date: Wed, 19 Jan 2005 10:01:38 -0800 -From: Mark Mitchell <mark at codesourcery dot com> -Organization: CodeSourcery, LLC -User-Agent: Mozilla Thunderbird 0.9 (Windows/20041103) -MIME-Version: 1.0 -To: Daniel Jacobowitz <drow at false dot org> -CC: libc-alpha at sources dot redhat dot com -Subject: Re: PATCH: ARM dl-trampoline.S -References: <200501191631.j0JGVVRA002591@sirius.codesourcery.com> <20050119170217.GA3137@nevyn.them.org> -In-Reply-To: <20050119170217 dot GA3137 at nevyn dot them dot org> -Content-Type: multipart/mixed; - boundary="------------050601050507020101060100" - -This is a multi-part message in MIME format. ---------------050601050507020101060100 -Content-Type: text/plain; charset=ISO-8859-1; format=flowed -Content-Transfer-Encoding: 7bit - -Daniel Jacobowitz wrote: -> On Wed, Jan 19, 2005 at 08:31:31AM -0800, Mark Mitchell wrote: -> ->>This patch updates the ARM port for the recent dl-trampoline.S and ->>link.h changes. OK to apply? -> -> -> Did you test this? I'm pretty sure that RESOLVE_MAP returns a link -> map, unlike RESOLVE. - -No, I didn't test -- except by building glibc. (There are other -problems at the moment, AFAICT, with actually running the library on ARM.) - -However, you're definitely correct -- good catch! -- and, in fact, in -looking at my logs I see compiler warnings about the mismatched type -assignment. Here is a more plausible version. How about this one? - -Thanks, - --- -Mark Mitchell -CodeSourcery, LLC -mark@codesourcery.com -(916) 791-8304 - ---------------050601050507020101060100 -Content-Type: text/plain; - name="glibc.patch" -Content-Transfer-Encoding: 7bit -Content-Disposition: inline; - filename="glibc.patch" - -2005-01-19 Mark Mitchell <mark@codesourcery.com> - - * elf/tst-auditmod1.c: Add ARM support. - * sysdeps/arm/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE): - Remove. - (RESOLVE): Do not use it; use ... - (RESOLVE_MAP): ... instead. - (ARCH_LA_PLTENTER): Define. - (ARCH_LA_PLTEXIT): Likewise. - (elf_machine_rel): Use RESOLVE_MAP, not RESOLVE. - (elf_machine_rela): Likewise. - * sysdeps/arm/dl-trampoline.S: New file. - * sysdeps/arm/bits/link.h: Likewise. - * sysdeps/generic/ldsodefs.h (struct La_arm_regs): Declare. - (struct audit_ifaces): Add ARM functions. - -Index: elf/tst-auditmod1.c -=================================================================== -RCS file: /cvs/glibc/libc/elf/tst-auditmod1.c,v -retrieving revision 1.7 -diff -c -5 -p -r1.7 tst-auditmod1.c -*** elf/tst-auditmod1.c 16 Jan 2005 06:24:59 -0000 1.7 ---- elf/tst-auditmod1.c 19 Jan 2005 17:54:32 -0000 -*************** la_symbind64 (Elf64_Sym *sym, unsigned i -*** 100,110 **** - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; - } - -! #ifdef __i386__ - # define pltenter la_i86_gnu_pltenter - # define pltexit la_i86_gnu_pltexit - # define La_regs La_i86_regs - # define La_retval La_i86_retval - # define int_retval lrv_eax ---- 100,116 ---- - symname, (long int) sym->st_value, ndx, *flags); - - return sym->st_value; - } - -! #ifdef __arm__ -! # define pltenter la_arm_gnu_plteneter -! # define pltext la_arm_gnu_pltexit -! # define La_regs La_arm_regs -! # define La_retval La_arm_retval -! # define int_retval lvr_r0 -! #elif defined __i386__ - # define pltenter la_i86_gnu_pltenter - # define pltexit la_i86_gnu_pltexit - # define La_regs La_i86_regs - # define La_retval La_i86_retval - # define int_retval lrv_eax -Index: sysdeps/arm/dl-trampoline.S -=================================================================== -RCS file: sysdeps/arm/dl-trampoline.S -diff -N sysdeps/arm/dl-trampoline.S -*** /dev/null 1 Jan 1970 00:00:00 -0000 ---- sysdeps/arm/dl-trampoline.S 19 Jan 2005 17:54:32 -0000 -*************** -*** 0 **** ---- 1,135 ---- -+ /* PLT trampolines. ARM version. -+ Copyright (C) 2005 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+ #include <sysdep.h> -+ -+ #if defined(__USE_BX__) -+ #define BX(x) bx x -+ #else -+ #define BX(x) mov pc, x -+ #endif -+ -+ #ifndef PROF -+ .text -+ .globl _dl_runtime_resolve -+ .type _dl_runtime_resolve, #function -+ .align 2 -+ _dl_runtime_resolve: -+ @ we get called with -+ @ stack[0] contains the return address from this call -+ @ ip contains &GOT[n+3] (pointer to function) -+ @ lr points to &GOT[2] -+ -+ @ stack arguments -+ stmdb sp!,{r0-r3} -+ -+ @ get pointer to linker struct -+ ldr r0, [lr, #-4] -+ -+ @ prepare to call _dl_fixup() -+ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each -+ sub r1, ip, lr -+ sub r1, r1, #4 -+ add r1, r1, r1 -+ -+ @ call fixup routine -+ bl _dl_fixup -+ -+ @ save the return -+ mov ip, r0 -+ -+ @ get arguments and return address back -+ ldmia sp!, {r0-r3,lr} -+ -+ @ jump to the newly found address -+ BX(ip) -+ -+ .size _dl_runtime_resolve, .-_dl_runtime_resolve -+ -+ .globl _dl_runtime_profile -+ .type _dl_runtime_profile, #function -+ .align 2 -+ _dl_runtime_profile: -+ @ stack arguments -+ stmdb sp!, {r0-r3} -+ -+ @ get pointer to linker struct -+ ldr r0, [lr, #-4] -+ -+ @ prepare to call _dl_profile_fixup() -+ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each -+ sub r1, ip, lr -+ sub r1, r1, #4 -+ add r1, r1, r1 -+ -+ @ call profiling fixup routine -+ bl _dl_profile_fixup -+ -+ @ save the return -+ mov ip, r0 -+ -+ @ get arguments and return address back -+ ldmia sp!, {r0-r3,lr} -+ -+ @ jump to the newly found address -+ BX(ip) -+ -+ .size _dl_runtime_resolve, .-_dl_runtime_resolve -+ .previous -+ #else -+ .text -+ .globl _dl_runtime_resolve -+ .globl _dl_runtime_profile -+ .type _dl_runtime_resolve, #function -+ .type _dl_runtime_profile, #function -+ .align 2 -+ _dl_runtime_resolve: -+ _dl_runtime_profile: -+ @ we get called with -+ @ stack[0] contains the return address from this call -+ @ ip contains &GOT[n+3] (pointer to function) -+ @ lr points to &GOT[2] -+ -+ @ stack arguments -+ stmdb sp!, {r0-r3} -+ -+ @ get pointer to linker struct -+ ldr r0, [lr, #-4] -+ -+ @ prepare to call _dl_fixup() -+ @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each -+ sub r1, ip, lr -+ sub r1, r1, #4 -+ add r1, r1, r1 -+ -+ @ call profiling fixup routine -+ bl _dl_fixup -+ -+ @ save the return -+ mov ip, r0 -+ -+ @ get arguments and return address back -+ ldmia sp!, {r0-r3,lr} -+ -+ @ jump to the newly found address -+ BX(ip) -+ -+ .size _dl_runtime_profile, .-_dl_runtime_profile -+ .previous -+ #endif -Index: sysdeps/arm/bits/link.h -=================================================================== -RCS file: /cvs/glibc/libc/sysdeps/arm/bits/link.h,v -retrieving revision 1.2 -diff -c -5 -p -r1.2 link.h -*** sysdeps/arm/bits/link.h 6 Jan 2005 22:40:20 -0000 1.2 ---- sysdeps/arm/bits/link.h 19 Jan 2005 17:54:32 -0000 -*************** -*** 0 **** ---- 1,57 ---- -+ /* Copyright (C) 2005 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+ #ifndef _LINK_H -+ # error "Never include <bits/link.h> directly; use <link.h> instead." -+ #endif -+ -+ -+ /* Registers for entry into PLT on ARM. */ -+ typedef struct La_arm_regs -+ { -+ uint32_t lvr_r0; -+ uint32_t lvr_r1; -+ uint32_t lvr_r2; -+ uint32_t lvr_r3; -+ } La_arm_regs; -+ -+ /* Return values for calls from PLT on ARM. */ -+ typedef struct La_arm_retval -+ { -+ uint32_t lvr_r0; -+ uint32_t lvr_r1; -+ } La_arm_retval; -+ -+ -+ __BEGIN_DECLS -+ -+ extern Elf32_Addr la_arm_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, -+ uintptr_t *__refcook, -+ uintptr_t *__defcook, -+ La_arm_regs *__regs, -+ unsigned int *__flags, -+ const char *__symname, -+ long int *__framesizep); -+ extern unsigned int la_arm_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, -+ uintptr_t *__refcook, -+ uintptr_t *__defcook, -+ const La_arm_regs *__inregs, -+ La_arm_retval *__outregs, -+ const char *symname); -+ -+ __END_DECLS -Index: sysdeps/generic/ldsodefs.h -=================================================================== -RCS file: /cvs/glibc/libc/sysdeps/generic/ldsodefs.h,v -retrieving revision 1.112 -diff -c -5 -p -r1.112 ldsodefs.h -*** sysdeps/generic/ldsodefs.h 16 Jan 2005 02:07:29 -0000 1.112 ---- sysdeps/generic/ldsodefs.h 19 Jan 2005 17:54:32 -0000 -*************** enum allowmask -*** 173,182 **** ---- 173,183 ---- - allow_ldso = 8 - }; - - - /* Type for list of auditing interfaces. */ -+ struct La_arm_regs; - struct La_i86_regs; - struct La_i86_retval; - struct La_x86_64_regs; - struct La_x86_64_retval; - struct La_ppc32_regs; -*************** struct audit_ifaces -*** 202,211 **** ---- 203,216 ---- - uintptr_t (*symbind64) (Elf64_Sym *, unsigned int, uintptr_t *, - uintptr_t *, unsigned int *, const char *); - }; - union - { -+ Elf32_Addr (*arm_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, -+ uintptr_t *, struct La_arm_regs *, -+ unsigned int *, const char *name, -+ long int *framesizep); - Elf32_Addr (*i86_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, - uintptr_t *, struct La_i86_regs *, - unsigned int *, const char *name, - long int *framesizep); - Elf64_Addr (*x86_64_gnu_pltenter) (Elf64_Sym *, unsigned int, uintptr_t *, -*************** struct audit_ifaces -*** 229,238 **** ---- 234,246 ---- - unsigned int *, const char *name, - long int *framesizep); - }; - union - { -+ unsigned int (*arm_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, -+ uintptr_t *, const struct La_arm_regs *, -+ struct La_i86_retval *, const char *); - unsigned int (*i86_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, - uintptr_t *, const struct La_i86_regs *, - struct La_i86_retval *, const char *); - unsigned int (*x86_64_gnu_pltexit) (Elf64_Sym *, unsigned int, uintptr_t *, - uintptr_t *, - ---------------050601050507020101060100-- - -diff -u -r1.52 dl-machine.h ---- sysdeps/arm/dl-machine.h 15 Mar 2005 22:57:26 -0000 1.52 -+++ sysdeps/arm/dl-machine.h 22 Apr 2005 03:38:15 -0000 -@@ -129,119 +129,6 @@ - #define BX(x) "mov\tpc, " #x - #endif - --#ifndef PROF --# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ -- .text\n\ -- .globl _dl_runtime_resolve\n\ -- .type _dl_runtime_resolve, #function\n\ -- .align 2\n\ --_dl_runtime_resolve:\n\ -- @ we get called with\n\ -- @ stack[0] contains the return address from this call\n\ -- @ ip contains &GOT[n+3] (pointer to function)\n\ -- @ lr points to &GOT[2]\n\ --\n\ -- @ stack arguments\n\ -- stmdb sp!,{r0-r3}\n\ --\n\ -- @ get pointer to linker struct\n\ -- ldr r0, [lr, #-4]\n\ --\n\ -- @ prepare to call fixup()\n\ -- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\ -- sub r1, ip, lr\n\ -- sub r1, r1, #4\n\ -- add r1, r1, r1\n\ --\n\ -- @ call fixup routine\n\ -- bl fixup\n\ --\n\ -- @ save the return\n\ -- mov ip, r0\n\ --\n\ -- @ get arguments and return address back\n\ -- ldmia sp!, {r0-r3,lr}\n\ --\n\ -- @ jump to the newly found address\n\ -- " BX(ip) "\n\ --\n\ -- .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ --\n\ -- .globl _dl_runtime_profile\n\ -- .type _dl_runtime_profile, #function\n\ -- .align 2\n\ --_dl_runtime_profile:\n\ -- @ stack arguments\n\ -- stmdb sp!, {r0-r3}\n\ --\n\ -- @ get pointer to linker struct\n\ -- ldr r0, [lr, #-4]\n\ --\n\ -- @ prepare to call fixup()\n\ -- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\ -- sub r1, ip, lr\n\ -- sub r1, r1, #4\n\ -- add r1, r1, r1\n\ --\n\ -- @ call profiling fixup routine\n\ -- bl profile_fixup\n\ --\n\ -- @ save the return\n\ -- mov ip, r0\n\ --\n\ -- @ get arguments and return address back\n\ -- ldmia sp!, {r0-r3,lr}\n\ --\n\ -- @ jump to the newly found address\n\ -- " BX(ip) "\n\ --\n\ -- .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ -- .previous\n\ --"); --#else // PROF --# define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ -- .text\n\ -- .globl _dl_runtime_resolve\n\ -- .globl _dl_runtime_profile\n\ -- .type _dl_runtime_resolve, #function\n\ -- .type _dl_runtime_profile, #function\n\ -- .align 2\n\ --_dl_runtime_resolve:\n\ --_dl_runtime_profile:\n\ -- @ we get called with\n\ -- @ stack[0] contains the return address from this call\n\ -- @ ip contains &GOT[n+3] (pointer to function)\n\ -- @ lr points to &GOT[2]\n\ --\n\ -- @ stack arguments\n\ -- stmdb sp!, {r0-r3}\n\ --\n\ -- @ get pointer to linker struct\n\ -- ldr r0, [lr, #-4]\n\ --\n\ -- @ prepare to call fixup()\n\ -- @ change &GOT[n+3] into 8*n NOTE: reloc are 8 bytes each\n\ -- sub r1, ip, lr\n\ -- sub r1, r1, #4\n\ -- add r1, r1, r1\n\ --\n\ -- @ call profiling fixup routine\n\ -- bl fixup\n\ --\n\ -- @ save the return\n\ -- mov ip, r0\n\ --\n\ -- @ get arguments and return address back\n\ -- ldmia sp!, {r0-r3,lr}\n\ --\n\ -- @ jump to the newly found address\n\ -- " BX(ip) "\n\ --\n\ -- .size _dl_runtime_profile, .-_dl_runtime_profile\n\ -- .previous\n\ --"); --#endif //PROF -- - /* Mask identifying addresses reserved for the user program, - where the dynamic linker should not map anything. */ - #define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL -@@ -348,6 +235,10 @@ - return value; - } - -+/* Names of the architecture-specific auditing callback functions. */ -+#define ARCH_LA_PLTENTER arm_gnu_pltenter -+#define ARCH_LA_PLTEXIT arm_gnu_pltexit -+ - #endif /* !dl_machine_h */ - - -@@ -355,7 +246,7 @@ - Prelinked libraries may use Elf32_Rela though. */ - #define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP - --#ifdef RESOLVE -+#ifdef RESOLVE_MAP - - /* Deal with an out-of-range PC24 reloc. */ - static Elf32_Addr -@@ -425,7 +316,8 @@ - #endif - { - const Elf32_Sym *const refsym = sym; -- Elf32_Addr value = RESOLVE (&sym, version, r_type); -+ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); -+ Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - if (sym) - value += sym->st_value; - -@@ -535,7 +427,8 @@ - # ifndef RESOLVE_CONFLICT_FIND_MAP - const Elf32_Sym *const refsym = sym; - # endif -- Elf32_Addr value = RESOLVE (&sym, version, r_type); -+ struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); -+ Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; - if (sym) - value += sym->st_value; - -@@ -637,4 +530,4 @@ - _dl_reloc_bad_type (map, r_type, 1); - } - --#endif /* RESOLVE */ -+#endif /* RESOLVE_MAP */ |