diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-07-07 05:23:24 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-07-07 05:23:40 -0700 |
commit | ddd85a65b6e3d6ec1e756c1f78559f99a2c943ca (patch) | |
tree | af018587b3304c33b8aeb1016f3faa7737cb2396 /sysdeps/i386/dl-trampoline.S | |
parent | fa9fef1f9b683582892fe39c4d8cd7b164b3388d (diff) | |
download | glibc-ddd85a65b6e3d6ec1e756c1f78559f99a2c943ca.tar.gz glibc-ddd85a65b6e3d6ec1e756c1f78559f99a2c943ca.tar.xz glibc-ddd85a65b6e3d6ec1e756c1f78559f99a2c943ca.zip |
Add and use sysdeps/i386/link-defines.sym
Define macros for fields in La_i86_regs and La_i86_retval and use them in dl-trampoline.S, instead of hardcoded values. * sysdeps/i386/Makefile (gen-as-const-headers)[elf]: Add link-defines.sym. * sysdeps/i386/dl-trampoline.S: Include <link-defines.h>. (_dl_runtime_profile): Use LONG_DOUBLE_SIZE, LRV_SIZE, LRV_EAX_OFFSET, LRV_EDX_OFFSET, LRV_ST0_OFFSET, LRV_ST1_OFFSET and LR_SIZE. * sysdeps/i386/link-defines.sym: New file.
Diffstat (limited to 'sysdeps/i386/dl-trampoline.S')
-rw-r--r-- | sysdeps/i386/dl-trampoline.S | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/sysdeps/i386/dl-trampoline.S b/sysdeps/i386/dl-trampoline.S index f11972cb0d..7c72b03b19 100644 --- a/sysdeps/i386/dl-trampoline.S +++ b/sysdeps/i386/dl-trampoline.S @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <link-defines.h> .text .globl _dl_runtime_resolve @@ -161,24 +162,32 @@ _dl_runtime_profile: +4 free %esp free */ - subl $20, %esp - cfi_adjust_cfa_offset (20) - movl %eax, (%esp) - movl %edx, 4(%esp) - fstpt 8(%esp) - fstpt 20(%esp) +#if LONG_DOUBLE_SIZE != 12 +# error "long double size must be 12 bytes" +#endif + # Allocate space for La_i86_retval and subtract 12 free bytes. + subl $(LRV_SIZE - 12), %esp + cfi_adjust_cfa_offset (LRV_SIZE - 12) + movl %eax, LRV_EAX_OFFSET(%esp) + movl %edx, LRV_EDX_OFFSET(%esp) + fstpt LRV_ST0_OFFSET(%esp) + fstpt LRV_ST1_OFFSET(%esp) pushl %esp cfi_adjust_cfa_offset (4) - leal 36(%esp), %ecx - movl 56(%esp), %eax - movl 60(%esp), %edx + # Address of La_i86_regs area. + leal (LRV_SIZE + 4)(%esp), %ecx + # PLT2 + movl (LRV_SIZE + 4 + LR_SIZE)(%esp), %eax + # PLT1 + movl (LRV_SIZE + 4 + LR_SIZE + 4)(%esp), %edx call _dl_call_pltexit - movl (%esp), %eax - movl 4(%esp), %edx - fldt 20(%esp) - fldt 8(%esp) - addl $60, %esp - cfi_adjust_cfa_offset (-60) + movl LRV_EAX_OFFSET(%esp), %eax + movl LRV_EDX_OFFSET(%esp), %edx + fldt LRV_ST1_OFFSET(%esp) + fldt LRV_ST0_OFFSET(%esp) + # Restore stack before return. + addl $(LRV_SIZE + 4 + LR_SIZE + 4), %esp + cfi_adjust_cfa_offset (-(LRV_SIZE + 4 + LR_SIZE + 4)) ret cfi_endproc .size _dl_runtime_profile, .-_dl_runtime_profile |