diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-08-28 21:32:56 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-08-28 21:32:56 +0000 |
commit | 669ed638144a784bd7fdea2e922ddf5e85a6b2bc (patch) | |
tree | 8010af69c272d12d3f96342e34533777a47b2bd6 /sysdeps/arm/dl-machine.h | |
parent | 7f86dfcce9d628c757cf9ea7787d546fb953b2cc (diff) | |
download | glibc-669ed638144a784bd7fdea2e922ddf5e85a6b2bc.zip glibc-669ed638144a784bd7fdea2e922ddf5e85a6b2bc.tar.gz glibc-669ed638144a784bd7fdea2e922ddf5e85a6b2bc.tar.bz2 |
Update.
2002-08-28 Ulrich Drepper <drepper@redhat.com>
* sysdeps/s390/s390-64/dl-machine.h: Avoid unescaped newlines in
string constants.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* sysdeps/arm/dl-machine.h: Likewise.
* sysdeps/cris/dl-machine.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/register-dump.h: Likewise.
* sysdeps/unix/sysv/aix/gettimeofday.c: Likewise.
Diffstat (limited to 'sysdeps/arm/dl-machine.h')
-rw-r--r-- | sysdeps/arm/dl-machine.h | 355 |
1 files changed, 178 insertions, 177 deletions
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index aeee1d7..9905d15 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -126,14 +126,15 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) and then redirect to the address it returns. */ // macro for handling PIC situation.... #ifdef PIC -#define CALL_ROUTINE(x) " ldr sl,0f - add sl, pc, sl -1: ldr r2, 2f - mov lr, pc - add pc, sl, r2 - b 3f -0: .word _GLOBAL_OFFSET_TABLE_ - 1b - 4 -2: .word " #x "(GOTOFF) +#define CALL_ROUTINE(x) "\ + ldr sl,0f\n\ + add sl, pc, sl\n\ +1: ldr r2, 2f\n\ + mov lr, pc\n\ + add pc, sl, r2\n\ + b 3f\n\ +0: .word _GLOBAL_OFFSET_TABLE_ - 1b - 4\n\ +2: .word " #x "(GOTOFF)\n\ 3: " #else #define CALL_ROUTINE(x) " bl " #x @@ -141,114 +142,114 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) #ifndef PROF # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .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] - - @ save almost everything; lr is already on the stack - stmdb sp!,{r0-r3,sl,fp} - - @ prepare to call 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 - - @ get pointer to linker struct - ldr r0, [lr, #-4] - - @ call fixup routine - " CALL_ROUTINE(fixup) " - - @ save the return - mov ip, r0 - - @ restore the stack - ldmia sp!,{r0-r3,sl,fp,lr} - - @ jump to the newly found address - mov pc, ip - - .size _dl_runtime_resolve, .-_dl_runtime_resolve - - .globl _dl_runtime_profile - .type _dl_runtime_profile, #function - .align 2 -_dl_runtime_profile: - @ save almost everything; lr is already on the stack - stmdb sp!,{r0-r3,sl,fp} - - @ prepare to call 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 - - @ get pointer to linker struct - ldr r0, [lr, #-4] - - @ call profiling fixup routine - " CALL_ROUTINE(profile_fixup) " - - @ save the return - mov ip, r0 - - @ restore the stack - ldmia sp!,{r0-r3,sl,fp,lr} - - @ jump to the newly found address - mov pc, ip - - .size _dl_runtime_resolve, .-_dl_runtime_resolve - .previous + .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\ + @ save almost everything; lr is already on the stack\n\ + stmdb sp!,{r0-r3,sl,fp}\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\ + @ get pointer to linker struct\n\ + ldr r0, [lr, #-4]\n\ +\n\ + @ call fixup routine\n\ + " CALL_ROUTINE(fixup) "\n\ +\n\ + @ save the return\n\ + mov ip, r0\n\ +\n\ + @ restore the stack\n\ + ldmia sp!,{r0-r3,sl,fp,lr}\n\ +\n\ + @ jump to the newly found address\n\ + mov pc, 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\ + @ save almost everything; lr is already on the stack\n\ + stmdb sp!,{r0-r3,sl,fp}\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\ + @ get pointer to linker struct\n\ + ldr r0, [lr, #-4]\n\ +\n\ + @ call profiling fixup routine\n\ + " CALL_ROUTINE(profile_fixup) "\n\ +\n\ + @ save the return\n\ + mov ip, r0\n\ +\n\ + @ restore the stack\n\ + ldmia sp!,{r0-r3,sl,fp,lr}\n\ +\n\ + @ jump to the newly found address\n\ + mov pc, ip\n\ +\n\ + .size _dl_runtime_resolve, .-_dl_runtime_resolve\n\ + .previous\n\ "); #else // PROF # define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .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] - - @ save almost everything; return add is already on the stack - stmdb sp!,{r0-r3,sl,fp} - - @ prepare to call 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 - - @ get pointer to linker struct - ldr r0, [lr, #-4] - - @ call profiling fixup routine - " CALL_ROUTINE(fixup) " - - @ save the return - mov ip, r0 - - @ restore the stack - ldmia sp!,{r0-r3,sl,fp,lr} - - @ jump to the newly found address - mov pc, ip - - .size _dl_runtime_profile, .-_dl_runtime_profile - .previous + .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\ + @ save almost everything; return add is already on the stack\n\ + stmdb sp!,{r0-r3,sl,fp}\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\ + @ get pointer to linker struct\n\ + ldr r0, [lr, #-4]\n\ +\n\ + @ call profiling fixup routine\n\ + " CALL_ROUTINE(fixup) "\n\ +\n\ + @ save the return\n\ + mov ip, r0\n\ +\n\ + @ restore the stack\n\ + ldmia sp!,{r0-r3,sl,fp,lr}\n\ +\n\ + @ jump to the newly found address\n\ + mov pc, ip\n\ +\n\ + .size _dl_runtime_profile, .-_dl_runtime_profile\n\ + .previous\n\ "); #endif //PROF @@ -261,70 +262,70 @@ _dl_runtime_profile: its return value is the user program's entry point. */ #define RTLD_START asm ("\ -.text -.globl _start -.globl _dl_start_user -_start: - @ at start time, all the args are on the stack - mov r0, sp - bl _dl_start - @ returns user entry point in r0 -_dl_start_user: - mov r6, r0 - @ we are PIC code, so get global offset table - ldr sl, .L_GET_GOT - add sl, pc, sl -.L_GOT_GOT: - @ Store the highest stack address - ldr r1, .L_STACK_END - ldr r1, [sl, r1] - str sp, [r1] - @ See if we were run as a command with the executable file - @ name as an extra leading argument. - ldr r4, .L_SKIP_ARGS - ldr r4, [sl, r4] - @ get the original arg count - ldr r1, [sp] - @ subtract _dl_skip_args from it - sub r1, r1, r4 - @ adjust the stack pointer to skip them - add sp, sp, r4, lsl #2 - @ get the argv address - add r2, sp, #4 - @ store the new argc in the new stack location - str r1, [sp] - @ compute envp - add r3, r2, r1, lsl #2 - add r3, r3, #4 - - @ now we call _dl_init - ldr r0, .L_LOADED - ldr r0, [sl, r0] - ldr r0, [r0] - @ call _dl_init - bl _dl_init_internal(PLT) - @ clear the startup flag - ldr r2, .L_STARTUP_FLAG - ldr r1, [sl, r2] - mov r0, #0 - str r0, [r1] - @ load the finalizer function - ldr r0, .L_FINI_PROC - ldr r0, [sl, r0] - @ jump to the user_s entry point - mov pc, r6 -.L_GET_GOT: - .word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4 \n\ -.L_SKIP_ARGS: \n\ - .word _dl_skip_args(GOTOFF) \n\ -.L_STARTUP_FLAG: - .word _dl_starting_up(GOT) -.L_FINI_PROC: - .word _dl_fini(GOT) -.L_STACK_END: - .word __libc_stack_end(GOT) -.L_LOADED: - .word _rtld_local(GOT) +.text\n\ +.globl _start\n\ +.globl _dl_start_user\n\ +_start:\n\ + @ at start time, all the args are on the stack\n\ + mov r0, sp\n\ + bl _dl_start\n\ + @ returns user entry point in r0\n\ +_dl_start_user:\n\ + mov r6, r0\n\ + @ we are PIC code, so get global offset table\n\ + ldr sl, .L_GET_GOT\n\ + add sl, pc, sl\n\ +.L_GOT_GOT:\n\ + @ Store the highest stack address\n\ + ldr r1, .L_STACK_END\n\ + ldr r1, [sl, r1]\n\ + str sp, [r1]\n\ + @ See if we were run as a command with the executable file\n\ + @ name as an extra leading argument.\n\ + ldr r4, .L_SKIP_ARGS\n\ + ldr r4, [sl, r4]\n\ + @ get the original arg count\n\ + ldr r1, [sp]\n\ + @ subtract _dl_skip_args from it\n\ + sub r1, r1, r4\n\ + @ adjust the stack pointer to skip them\n\ + add sp, sp, r4, lsl #2\n\ + @ get the argv address\n\ + add r2, sp, #4\n\ + @ store the new argc in the new stack location\n\ + str r1, [sp]\n\ + @ compute envp\n\ + add r3, r2, r1, lsl #2\n\ + add r3, r3, #4\n\ +\n\ + @ now we call _dl_init\n\ + ldr r0, .L_LOADED\n\ + ldr r0, [sl, r0]\n\ + ldr r0, [r0]\n\ + @ call _dl_init\n\ + bl _dl_init_internal(PLT)\n\ + @ clear the startup flag\n\ + ldr r2, .L_STARTUP_FLAG\n\ + ldr r1, [sl, r2]\n\ + mov r0, #0\n\ + str r0, [r1]\n\ + @ load the finalizer function\n\ + ldr r0, .L_FINI_PROC\n\ + ldr r0, [sl, r0]\n\ + @ jump to the user_s entry point\n\ + mov pc, r6\n\ +.L_GET_GOT:\n\ + .word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4\n\ +.L_SKIP_ARGS:\n\ + .word _dl_skip_args(GOTOFF)\n\ +.L_STARTUP_FLAG:\n\ + .word _dl_starting_up(GOT)\n\ +.L_FINI_PROC:\n\ + .word _dl_fini(GOT)\n\ +.L_STACK_END:\n\ + .word __libc_stack_end(GOT)\n\ +.L_LOADED:\n\ + .word _rtld_local(GOT)\n\ .previous\n\ "); |