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.
This commit is contained in:
H.J. Lu 2015-07-07 05:23:24 -07:00
parent fa9fef1f9b
commit ddd85a65b6
4 changed files with 53 additions and 15 deletions

View File

@ -1,3 +1,13 @@
2015-07-07 H.J. Lu <hongjiu.lu@intel.com>
* 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.
2015-07-07 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/i386/Makefile (tests)[elf]: Add tst-audit3.

View File

@ -33,6 +33,7 @@ sysdep-CFLAGS += -mpreferred-stack-boundary=4
else
ifeq ($(subdir),csu)
sysdep-CFLAGS += -mpreferred-stack-boundary=4
gen-as-const-headers += link-defines.sym
else
# Likewise, any function which calls user callbacks
uses-callbacks += -mpreferred-stack-boundary=4

View File

@ -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

View File

@ -0,0 +1,18 @@
#include "link.h"
#include <stddef.h>
--
LONG_DOUBLE_SIZE sizeof (long double)
LR_SIZE sizeof (struct La_i86_regs)
LR_EDX_OFFSET offsetof (struct La_i86_regs, lr_edx)
LR_ECX_OFFSET offsetof (struct La_i86_regs, lr_ecx)
LR_EAX_OFFSET offsetof (struct La_i86_regs, lr_eax)
LR_EBP_OFFSET offsetof (struct La_i86_regs, lr_ebp)
LR_ESP_OFFSET offsetof (struct La_i86_regs, lr_esp)
LRV_SIZE sizeof (struct La_i86_retval)
LRV_EAX_OFFSET offsetof (struct La_i86_retval, lrv_eax)
LRV_EDX_OFFSET offsetof (struct La_i86_retval, lrv_edx)
LRV_ST0_OFFSET offsetof (struct La_i86_retval, lrv_st0)
LRV_ST1_OFFSET offsetof (struct La_i86_retval, lrv_st1)