mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
Update.
2003-05-30 Andreas Jaeger <aj@suse.de> * sysdeps/x86_64/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE): Add CFI directives. * sysdeps/unix/sysv/linux/x86_64/sigaction.c (RESTORE2): Add CFI directives. * sysdeps/generic/sysdep.h: Add CFI_* macros for C files. * sysdeps/unix/sysv/linux/x86_64/sysdep.h (SYSCALL_ERROR_HANDLER): Add CFI directives.
This commit is contained in:
parent
b34f9a90b1
commit
2b1c0eeae3
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
||||
2003-05-30 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/x86_64/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
|
||||
Add CFI directives.
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/sigaction.c (RESTORE2): Add CFI
|
||||
directives.
|
||||
|
||||
* sysdeps/generic/sysdep.h: Add CFI_* macros for C files.
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/sysdep.h (SYSCALL_ERROR_HANDLER):
|
||||
Add CFI directives.
|
||||
|
||||
2003-05-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/elf/start.S: Make code compilable with
|
||||
|
@ -66,5 +66,31 @@
|
||||
# define cfi_offset(reg, off)
|
||||
# endif
|
||||
|
||||
#else /* ! ASSEMBLER */
|
||||
# ifdef HAVE_ASM_CFI_DIRECTIVES
|
||||
# define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name)
|
||||
# define CFI_STRINGIFY2(Name) #Name
|
||||
# define CFI_STARTPROC ".cfi_startproc"
|
||||
# define CFI_ENDPROC ".cfi_endproc"
|
||||
# define CFI_DEF_CFA(reg, off) \
|
||||
".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
|
||||
# define CFI_DEF_CFA_REGISTER(reg) \
|
||||
".cfi_def_cfa_register " CFI_STRINGIFY(reg)
|
||||
# define CFI_DEF_CFA_OFFSET(off) \
|
||||
".cfi_def_cfa_offset " CFI_STRINGIFY(off)
|
||||
# define CFI_ADJUST_CFA_OFFSET(off) \
|
||||
".cfi_adjust_cfa_offset " CFI_STRINGIFY(off)
|
||||
# define CFI_OFFSET(reg, off) \
|
||||
".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
|
||||
# else
|
||||
# define CFI_STARTPROC
|
||||
# define CFI_ENDPROC
|
||||
# define CFI_DEF_CFA(reg, off)
|
||||
# define CFI_DEF_CFA_REGISTER(reg)
|
||||
# define CFI_DEF_CFA_OFFSET(off)
|
||||
# define CFI_ADJUST_CFA_OFFSET(off)
|
||||
# define CFI_OFFSET(reg, off)
|
||||
# endif
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
|
@ -97,14 +97,15 @@ weak_alias (__libc_sigaction, sigaction)
|
||||
appropriate GDB maintainer. */
|
||||
|
||||
#define RESTORE(name, syscall) RESTORE2 (name, syscall)
|
||||
#define RESTORE2(name, syscall) \
|
||||
# define RESTORE2(name, syscall) \
|
||||
asm \
|
||||
( \
|
||||
".align 16\n" \
|
||||
CFI_STARTPROC "\n" \
|
||||
"__" #name ":\n" \
|
||||
" movq $" #syscall ", %rax\n" \
|
||||
" syscall\n" \
|
||||
CFI_ENDPROC "\n" \
|
||||
);
|
||||
|
||||
/* The return code for realtime-signals. */
|
||||
RESTORE (restore_rt, __NR_rt_sigreturn)
|
||||
|
@ -132,11 +132,13 @@
|
||||
0: \
|
||||
xorq %rdx, %rdx; \
|
||||
subq %rax, %rdx; \
|
||||
pushq %rdx \
|
||||
pushq %rdx; \
|
||||
cfi_adjust_cfa_offset(8); \
|
||||
PUSH_ERRNO_LOCATION_RETURN; \
|
||||
call BP_SYM (__errno_location)@PLT; \
|
||||
POP_ERRNO_LOCATION_RETURN; \
|
||||
popq %rdx; \
|
||||
cfi_adjust_cfa_offset(-8); \
|
||||
movl %edx, (%rax); \
|
||||
orq $-1, %rax; \
|
||||
jmp L(pseudo_end);
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define ELF_MACHINE_NAME "x86_64"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
/* Return nonzero iff ELF header is compatible with the running host. */
|
||||
static inline int __attribute__ ((unused))
|
||||
@ -136,14 +137,17 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
.globl _dl_runtime_resolve\n\
|
||||
.type _dl_runtime_resolve, @function\n\
|
||||
.align 16\n\
|
||||
" CFI_STARTPROC "\n\
|
||||
_dl_runtime_resolve:\n\
|
||||
pushq %rax # Preserve registers otherwise clobbered.\n\
|
||||
pushq %rcx\n\
|
||||
pushq %rdx\n\
|
||||
pushq %rsi\n\
|
||||
pushq %rdi\n\
|
||||
pushq %r8\n\
|
||||
pushq %r9\n\
|
||||
subq $56,%rsp\n\
|
||||
" CFI_ADJUST_CFA_OFFSET(72)" # Incorporate PLT\n\
|
||||
movq %rax,(%rsp) # Preserve registers otherwise clobbered.\n\
|
||||
movq %rcx,8(%rsp)\n\
|
||||
movq %rdx,16(%rsp)\n\
|
||||
movq %rsi,24(%rsp)\n\
|
||||
movq %rdi,32(%rsp)\n\
|
||||
movq %r8,40(%rsp)\n\
|
||||
movq %r9,48(%rsp)\n\
|
||||
movq 64(%rsp), %rsi # Copy args pushed by PLT in register.\n\
|
||||
movq %rsi,%r11 # Multiply by 24\n\
|
||||
addq %r11,%rsi\n\
|
||||
@ -152,28 +156,33 @@ _dl_runtime_resolve:\n\
|
||||
movq 56(%rsp), %rdi # %rdi: link_map, %rsi: reloc_offset\n\
|
||||
call fixup # Call resolver.\n\
|
||||
movq %rax, %r11 # Save return value\n\
|
||||
popq %r9 # Get register content back.\n\
|
||||
popq %r8\n\
|
||||
popq %rdi\n\
|
||||
popq %rsi\n\
|
||||
popq %rdx\n\
|
||||
popq %rcx\n\
|
||||
popq %rax\n\
|
||||
addq $16,%rsp # Adjust stack\n\
|
||||
movq 48(%rsp),%r9 # Get register content back.\n\
|
||||
movq 40(%rsp),%r8\n\
|
||||
movq 32(%rsp),%rdi\n\
|
||||
movq 24(%rsp),%rsi\n\
|
||||
movq 16(%rsp),%rdx\n\
|
||||
movq 8(%rsp),%rcx\n\
|
||||
movq (%rsp),%rax\n\
|
||||
addq $72,%rsp # Adjust stack(PLT did 2 pushes)\n\
|
||||
" CFI_ADJUST_CFA_OFFSET(-72)" \n\
|
||||
jmp *%r11 # Jump to function address.\n\
|
||||
" CFI_ENDPROC "\n\
|
||||
.size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
|
||||
\n\
|
||||
.globl _dl_runtime_profile\n\
|
||||
.type _dl_runtime_profile, @function\n\
|
||||
.align 16\n\
|
||||
" CFI_STARTPROC "\n\
|
||||
_dl_runtime_profile:\n\
|
||||
pushq %rax # Preserve registers otherwise clobbered.\n\
|
||||
pushq %rcx\n\
|
||||
pushq %rdx\n\
|
||||
pushq %rsi\n\
|
||||
pushq %rdi\n\
|
||||
pushq %r8\n\
|
||||
pushq %r9\n\
|
||||
subq $56,%rsp\n\
|
||||
" CFI_ADJUST_CFA_OFFSET(72)" # Incorporate PLT\n\
|
||||
movq %rax,(%rsp) # Preserve registers otherwise clobbered.\n\
|
||||
movq %rcx,8(%rsp)\n\
|
||||
movq %rdx,16(%rsp)\n\
|
||||
movq %rsi,24(%rsp)\n\
|
||||
movq %rdi,32(%rsp)\n\
|
||||
movq %r8,40(%rsp)\n\
|
||||
movq %r9,48(%rsp)\n\
|
||||
movq 72(%rsp), %rdx # Load return address if needed\n\
|
||||
movq 64(%rsp), %rsi # Copy args pushed by PLT in register.\n\
|
||||
movq %rsi,%r11 # Multiply by 24\n\
|
||||
@ -183,15 +192,17 @@ _dl_runtime_profile:\n\
|
||||
movq 56(%rsp), %rdi # %rdi: link_map, %rsi: reloc_offset\n\
|
||||
call profile_fixup # Call resolver.\n\
|
||||
movq %rax, %r11 # Save return value\n\
|
||||
popq %r9 # Get register content back.\n\
|
||||
popq %r8\n\
|
||||
popq %rdi\n\
|
||||
popq %rsi\n\
|
||||
popq %rdx\n\
|
||||
popq %rcx\n\
|
||||
popq %rax\n\
|
||||
addq $16,%rsp # Adjust stack\n\
|
||||
movq 48(%rsp),%r9 # Get register content back.\n\
|
||||
movq 40(%rsp),%r8\n\
|
||||
movq 32(%rsp),%rdi\n\
|
||||
movq 24(%rsp),%rsi\n\
|
||||
movq 16(%rsp),%rdx\n\
|
||||
movq 8(%rsp),%rcx\n\
|
||||
movq (%rsp),%rax\n\
|
||||
addq $72,%rsp # Adjust stack\n\
|
||||
" CFI_ADJUST_CFA_OFFSET(-72)"\n\
|
||||
jmp *%r11 # Jump to function address.\n\
|
||||
" CFI_ENDPROC "\n\
|
||||
.size _dl_runtime_profile, .-_dl_runtime_profile\n\
|
||||
.previous\n\
|
||||
");
|
||||
@ -203,6 +214,7 @@ _dl_runtime_profile:\n\
|
||||
.type _dl_runtime_resolve, @function\n\
|
||||
.type _dl_runtime_profile, @function\n\
|
||||
.align 16\n\
|
||||
" CFI_STARTPROC "\n\
|
||||
_dl_runtime_resolve:\n\
|
||||
_dl_runtime_profile:\n\
|
||||
pushq %rax # Preserve registers otherwise clobbered.\n\
|
||||
@ -229,6 +241,7 @@ _dl_runtime_profile:\n\
|
||||
popq %rax\n\
|
||||
addq $16,%rsp # Adjust stack\n\
|
||||
jmp *%r11 # Jump to function address.\n\
|
||||
" CFI_ENDPROC "\n\
|
||||
.size _dl_runtime_resolve, .-_dl_runtime_resolve\n\
|
||||
.size _dl_runtime_profile, .-_dl_runtime_profile\n\
|
||||
.previous\n\
|
||||
|
Loading…
Reference in New Issue
Block a user