mirror of
https://git.yoctoproject.org/poky
synced 2026-09-14 21:49:33 +02:00
Rename /openembedded/ -> /meta/
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@530 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
560
meta/packages/glibc/glibc-cvs/trampoline.patch
Normal file
560
meta/packages/glibc/glibc-cvs/trampoline.patch
Normal file
@@ -0,0 +1,560 @@
|
||||
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 */
|
||||
Reference in New Issue
Block a user