From be10a86854716071a64f559e1f5bc94e145d0fdb Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 19 Feb 1996 20:54:38 +0000 Subject: *** empty log message *** Mon Feb 19 15:30:26 1996 Roland McGrath * 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 * 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 * 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. --- sysdeps/m68k/dl-machine.h | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'sysdeps/m68k/dl-machine.h') 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 } -- cgit v1.2.3