diff options
author | Roland McGrath <roland@gnu.org> | 1996-02-19 20:54:38 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-02-19 20:54:38 +0000 |
commit | be10a86854716071a64f559e1f5bc94e145d0fdb (patch) | |
tree | e7abce4d5ba8da4ff17dad3510c4bea6cb3e037e /sysdeps/m68k/dl-machine.h | |
parent | 1cbca0d93c6c1507c4e69a21e60c77e704b7e1da (diff) | |
download | glibc-be10a86854716071a64f559e1f5bc94e145d0fdb.tar glibc-be10a86854716071a64f559e1f5bc94e145d0fdb.tar.gz glibc-be10a86854716071a64f559e1f5bc94e145d0fdb.tar.bz2 glibc-be10a86854716071a64f559e1f5bc94e145d0fdb.zip |
*** empty log message ***
Mon Feb 19 15:30:26 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* stdio-common/tstscanf.c (main): Add check for "0" as %d.
* sysdeps/stub/msync.c: Undo change of Jan 29; just two args.
Only some systems have three args; let them define their own stub.
* sysdeps/generic/dl-sysdep.c: Declare _dl_secure.
* sysdeps/generic/machine-gmon.h: New file.
* gmon/Makefile (distribute): Add machine-gmon.h.
* gmon/mcount.c: Undo changes of Feb 13.
Include "machine-gmon.h".
Sun Feb 18 13:24:06 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/direct.h: File removed, since it is
identical to unix/common/direct.h.
* sysdeps/unix/Makefile [no_deps]: Don't include s-proto.d.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add ipc.
* stdio-common/Makefile (tests): Remove scanf6.
* sysdeps/unix/sysv/linux/Makefile (non-lib.a): Append libieee.a.
* time/mktime.c (mktime): Move static variable localtime_offset to
file scope.
* stdio-common/vfscanf.c: Put '0' in buffer before scanning for %i
base indicator.
Thu Feb 15 16:56:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_load_address): Corrected.
(ELF_MACHINE_BEFORE_RTLD_RELOC): Define.
(_dl_runtime_resolve): Save %a1 as well.
(ELF_MACHINE_RUNTIME_FIXUP_ARGS): Add second dummy arg.
(elf_machine_relplt): Define.
* elf/dl-runtime.c: Include possible extra args in declaration of
fixup.
Diffstat (limited to 'sysdeps/m68k/dl-machine.h')
-rw-r--r-- | sysdeps/m68k/dl-machine.h | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h index 2208cd2259..8cbb97787c 100644 --- a/sysdeps/m68k/dl-machine.h +++ b/sysdeps/m68k/dl-machine.h @@ -52,9 +52,22 @@ elf_machine_got (void) static inline Elf32_Addr elf_machine_load_address (void) { - ... + Elf32_Addr addr; + asm ("here: lea here(%%pc), %0\n" + " sub.l %#here, %0" + : "=a" (addr)); + return addr; } +/* The `subl' insn above will contain an R_68K_RELATIVE relocation + entry intended to insert the run-time address of the label `here'. + This will be the first relocation in the text of the dynamic + linker; we skip it to avoid trying to modify read-only text in this + early stage. */ +#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ + ((dynamic_info)[DT_RELA]->d_un.d_ptr += sizeof (Elf32_Rela), \ + (dynamic_info)[DT_RELASZ]->d_un.d_val -= sizeof (Elf32_Rela)) + /* Perform the relocation specified by RELOC and SYM (which is fully resolved). MAP is the object containing the reloc. */ @@ -158,11 +171,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy) .globl _dl_runtime_resolve .type _dl_runtime_resolve, @function _dl_runtime_resolve: - | Save %a0 (struct return address). + | Save %a0 (struct return address) and %a1. move.l %a0, -(%sp) + move.l %a1, -(%sp) | Call the real address resolver. - bsr.l fixup - | Restore register %a0. + jbsr fixup + | Restore register %a0 and %a1. + move.l (%sp)+, %a1 move.l (%sp)+, %a0 | Pop parameters addq.l #8, %sp @@ -170,7 +185,9 @@ _dl_runtime_resolve: jmp (%d0) .size _dl_runtime_resolve, . - _dl_runtime_resolve "); -#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0 +#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1 +/* The PLT uses Elf32_Rela relocs. */ +#define elf_machine_relplt elf_machine_rela } |