socsvn commit: r223960 - in soc2011/xxp/xxp-head/libexec/rtld-elf:
amd64 i386
xxp at FreeBSD.org
xxp at FreeBSD.org
Tue Jul 5 14:48:39 UTC 2011
Author: xxp
Date: Tue Jul 5 14:48:37 2011
New Revision: 223960
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=223960
Log:
Annotate rtld-elf.
Modified:
soc2011/xxp/xxp-head/libexec/rtld-elf/amd64/rtld_start.S
soc2011/xxp/xxp-head/libexec/rtld-elf/i386/rtld_start.S
Modified: soc2011/xxp/xxp-head/libexec/rtld-elf/amd64/rtld_start.S
==============================================================================
--- soc2011/xxp/xxp-head/libexec/rtld-elf/amd64/rtld_start.S Tue Jul 5 13:45:10 2011 (r223959)
+++ soc2011/xxp/xxp-head/libexec/rtld-elf/amd64/rtld_start.S Tue Jul 5 14:48:37 2011 (r223960)
@@ -31,13 +31,16 @@
.type .rtld_start, at function
.rtld_start:
xorq %rbp,%rbp # Clear frame pointer for good form
+ cfi_def_cfa(%rsp,0)
subq $24,%rsp # A place to store exit procedure addr
+ cfi_adjust_cfa_offset(24)
movq %rdi,%r12
movq %rsp,%rsi # save address of exit proc
movq %rsp,%rdx # construct address of obj_main
addq $8,%rdx
call _rtld at PLT # Call rtld(sp); returns entry point
popq %rsi # Get exit procedure address
+ cfi_adjust_cfa_offset(-8)
movq %r12,%rdi # *ap
/*
* At this point, %rax contains the entry point of the main program, and
@@ -80,16 +83,27 @@
.type _rtld_bind_start, at function
_rtld_bind_start:
subq $8,%rsp
+ cfi_adjust_cfa_offset(8)
pushfq # Save rflags
+ cfi_adjust_cfa_offset(8)
pushq %rax # Save %rax
+ cfi_adjust_cfa_offset(8)
pushq %rdx # Save %rdx
+ cfi_adjust_cfa_offset(8)
pushq %rcx # Save %rcx
+ cfi_adjust_cfa_offset(8)
pushq %rsi # Save %rsi
+ cfi_adjust_cfa_offset(8)
pushq %rdi # Save %rdi
+ cfi_adjust_cfa_offset(8)
pushq %r8 # Save %r8
+ cfi_adjust_cfa_offset(8)
pushq %r9 # Save %r9
+ cfi_adjust_cfa_offset(8)
pushq %r10 # Save %r10
+ cfi_adjust_cfa_offset(8)
pushq %r11 # Save %r11
+ cfi_adjust_cfa_offset(8)
movq 0x58(%rsp),%rdi # Fetch obj argument
movq 0x60(%rsp),%rsi # Fetch reloff argument
@@ -101,15 +115,25 @@
movq %rax,0x60(%rsp) # Store target over reloff argument
popq %r11 # Restore %r11
+ cfi_adjust_cfa_offset(-8)
popq %r10 # Restore %r10
+ cfi_adjust_cfa_offset(-8)
popq %r9 # Restore %r9
+ cfi_adjust_cfa_offset(-8)
popq %r8 # Restore %r8
+ cfi_adjust_cfa_offset(-8)
popq %rdi # Restore %rdi
+ cfi_adjust_cfa_offset(-8)
popq %rsi # Restore %rsi
+ cfi_adjust_cfa_offset(-8)
popq %rcx # Restore %rcx
+ cfi_adjust_cfa_offset(-8)
popq %rdx # Restore %rdx
+ cfi_adjust_cfa_offset(-8)
popq %rax # Restore %rax
+ cfi_adjust_cfa_offset(-8)
popfq # Restore rflags
+ cfi_adjust_cfa_offset(-8)
leaq 16(%rsp),%rsp # Discard spare, obj, do not change rflags
ret # "Return" to target address
Modified: soc2011/xxp/xxp-head/libexec/rtld-elf/i386/rtld_start.S
==============================================================================
--- soc2011/xxp/xxp-head/libexec/rtld-elf/i386/rtld_start.S Tue Jul 5 13:45:10 2011 (r223959)
+++ soc2011/xxp/xxp-head/libexec/rtld-elf/i386/rtld_start.S Tue Jul 5 14:48:37 2011 (r223960)
@@ -34,18 +34,27 @@
movl %esp,%eax # Save initial stack pointer
movl %esp,%esi # Save initial stack pointer
andl $0xfffffff0,%esp # Align stack pointer
+ cfi_def_cfa(%esp,0)
subl $16,%esp # A place to store exit procedure addr
+ cfi_adjust_cfa_offset(16)
movl %esp,%ebx # save address of exit proc
movl %esp,%ecx # construct address of obj_main
addl $4,%ecx
subl $4,%esp # Keep stack aligned
+ cfi_adjust_cfa_offset(4)
pushl %ecx # Pass address of obj_main
+ cfi_adjust_cfa_offset(4)
pushl %ebx # Pass address of exit proc
+ cfi_adjust_cfa_offset(4)
pushl %eax # Pass initial stack pointer to rtld
+ cfi_adjust_cfa_offset(4)
call _rtld at PLT # Call rtld(sp); returns entry point
addl $16,%esp # Remove arguments from stack
+ cfi_adjust_cfa_offset(-16)
popl %edx # Get exit procedure address
+ cfi_adjust_cfa_offset(-4)
movl %esi,%esp # Ignore obj_main
+ cfi_def_cfa(%esp,0)
/*
* At this point, %eax contains the entry point of the main program, and
* %edx contains a pointer to a termination function that should be
@@ -72,21 +81,32 @@
.type _rtld_bind_start, at function
_rtld_bind_start:
pushf # Save eflags
+ cfi_adjust_cfa_offset(4)
pushl %eax # Save %eax
+ cfi_adjust_cfa_offset(4)
pushl %edx # Save %edx
+ cfi_adjust_cfa_offset(4)
pushl %ecx # Save %ecx
+ cfi_adjust_cfa_offset(4)
pushl 20(%esp) # Copy reloff argument
+ cfi_adjust_cfa_offset(4)
pushl 20(%esp) # Copy obj argument
+ cfi_adjust_cfa_offset(4)
call _rtld_bind at PLT # Transfer control to the binder
/* Now %eax contains the entry point of the function being called. */
addl $8,%esp # Discard binder arguments
+ cfi_adjust_cfa_offset(-8)
movl %eax,20(%esp) # Store target over obj argument
popl %ecx # Restore %ecx
+ cfi_adjust_cfa_offset(-4)
popl %edx # Restore %edx
+ cfi_adjust_cfa_offset(-4)
popl %eax # Restore %eax
+ cfi_adjust_cfa_offset(-4)
popf # Restore eflags
+ cfi_adjust_cfa_offset(-4)
leal 4(%esp),%esp # Discard reloff, do not change eflags
ret # "Return" to target address
More information about the svn-soc-all
mailing list