⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dl-trampoline.s

📁 glibc 2.9,最新版的C语言库函数
💻 S
字号:
/* PLT trampolines.  s390 version.   Copyright (C) 2005 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  *//* This code is used in dl-runtime.c to call the `fixup' function   and then redirect to the address it returns.  *//* The PLT stubs will call _dl_runtime_resolve/_dl_runtime_profile * with the following linkage: *   r2 - r6 : parameter registers *   f0, f2 : floating point parameter registers *   24(r15), 28(r15) : PLT arguments PLT1, PLT2 *   96(r15) : additional stack parameters * The normal clobber rules for function calls apply: *   r0 - r5 : call clobbered *   r6 - r13 :	 call saved *   r14 : return address (call clobbered) *   r15 : stack pointer (call saved) *   f4, f6 : call saved *   f0 - f3, f5, f7 - f15 : call clobbered */#include <sysdep.h>	.text	.globl _dl_runtime_resolve	.type _dl_runtime_resolve, @function	cfi_startproc	.align 16_dl_runtime_resolve:	stm    %r2,%r5,32(%r15)		# save registers	st     %r14,8(%r15)	lr     %r0,%r15			# create stack frame	ahi    %r15,-96	cfi_adjust_cfa_offset (96)	st     0,0(%r15)	lm     %r2,%r3,120(%r15)	# load args saved by PLT	basr   %r1,00:	l      %r14,1f-0b(%r1)	bas    %r14,0(%r14,%r1)		# call resolver	lr     %r1,%r2			# function addr returned in r2	ahi    %r15,96			# remove stack frame	cfi_adjust_cfa_offset (-96)	l      %r14,8(15)		# restore registers	lm     %r2,%r5,32(%r15)	br     %r11:	.long  _dl_fixup - 0b	cfi_endproc	.size _dl_runtime_resolve, .-_dl_runtime_resolve#ifndef PROF	.globl _dl_runtime_profile	.type _dl_runtime_profile, @function	cfi_startproc	.align 16_dl_runtime_profile:	stm    %r2,%r6,32(%r15)		# save registers	std    %f0,56(%r15)	std    %f2,64(%r15)	st     %r6,8(%r15)	st     %r12,12(%r15)	st     %r14,16(%r15)	lr     %r12,%r15		# create stack frame	cfi_def_cfa_register (12)	ahi    %r15,-96	st     %r12,0(%r15)	lm     %r2,%r3,24(%r12)		# load arguments saved by PLT	lr     %r4,%r14			# return address as third parameter	basr   %r1,00:	l      %r14,6f-0b(%r1)	la     %r5,32(%r12)		# pointer to struct La_s390_32_regs	la     %r6,20(%r12)		# long int * framesize	bas    %r14,0(%r14,%r1)		# call resolver	lr     %r1,%r2			# function addr returned in r2	icm    %r0,15,20(%r12)		# load & test framesize	jnm    2f	lm     %r2,%r6,32(%r12)	ld     %f0,56(%r12)	ld     %f2,64(%r12)	basr   %r14,%r1			# call resolved function1:	lr     %r15,%r12		# remove stack frame	cfi_def_cfa_register (15)	l      %r14,16(%r15)		# restore registers	l      %r12,12(%r15)	l      %r6,8(%r15)	br     %r14	cfi_def_cfa_register (12)2:	jz     4f			# framesize == 0 ?	ahi    %r0,7			# align framesize to 8	lhi    %r2,-8	nr     %r0,%r2	slr    %r15,%r0			# make room for framesize bytes	st     %r12,0(%r15)	la     %r2,96(%r15)	la     %r3,96(%r12)	srl    %r0,33:	mvc    0(8,%r2),0(%r3)		# copy additional parameters	la     %r2,8(%r2)	la     %r3,8(%r3)	brct   %r0,3b4:	lm     %r2,%r6,32(%r12)		# load register parameters	ld     %f0,56(%r12)	ld     %f2,64(%r12)	basr   %r14,%r1			# call resolved function	stm    %r2,%r3,72(%r12)	std    %f0,80(%r12)	lm     %r2,%r3,24(%r12)		# load arguments saved by PLT	basr   %r1,05:	l      %r14,7f-5b(%r1)	la     %r4,32(%r12)		# pointer to struct La_s390_32_regs	la     %r5,72(%r12)		# pointer to struct La_s390_32_retval	basr   %r14,%r1			# call _dl_call_pltexit	j      1b6:	.long  _dl_profile_fixup - 0b7:	.long  _dl_call_pltexit - 5b	cfi_endproc	.size _dl_runtime_profile, .-_dl_runtime_profile#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -