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

📄 eabi.asm

📁 GUN开源阻止下的编译器GCC
💻 ASM
字号:
# File to either setup register 2 to point to the GOT, or to adjust the# pointers in the .got2 section to point to their new addresses.	.file	"eabi.asm"	.section ".text"	.globl	 __eabi	 .section ".got2","aw".LCTOC1 = . # +32768# Table of addresses.Ltable = .-.LCTOC1	.long	.LCTOC1				# address we are really at.Lgot = .-.LCTOC1	.long	_GLOBAL_OFFSET_TABLE_		# normal GOT address.Lgots = .-.LCTOC1	.long	_GOT_START_			# start of .got section.Lgote = .-.LCTOC1	.long	_GOT_END_			# end of .got section.Lgot2s = .-.LCTOC1	.long	_GOT2_START_			# -mrelocatable GOT pointers start.Lgot2e = .-.LCTOC1	.long	_GOT2_END_			# -mrelocatable GOT pointers end.Lfixups = .-.LCTOC1	.long	_FIXUP_START_			# start of .fixup section.Lfixupe = .-.LCTOC1	.long	_FIXUP_END_			# end of .fixup section	.text.Lptr:	.long	.LCTOC1-.Laddr			# PC relative pointer to .got2	.long	0x4000				# traceback table__eabi:	mflr	0	bl	.Laddr				# get current address.Laddr:	mflr	12				# real address of .Laddr	lwz	11,(.Lptr-.Laddr)(12)		# linker generated address of .LCTOC1	add	11,11,12			# correct to real pointer	lwz	12,.Ltable(11)			# get linker's idea of where .Laddr is	subf.	12,12,11			# calculate difference	mtlr	0				# restore link register	bc	4,2,.Lreloc			# skip if we need to relocate# Only load up register 2 if there is a .got section	lwz	3,.Lgots(11)			# start of .got section	lwz	4,.Lgote(11)			# end of .got section	cmpw	1,3,4				# .got section non-empty?	bc	12,6,.Ldone# Normal program, load up register 2	lwz	2,.Lgot(11)			# normal GOT address (obsolete in register 2)	mr	13,2				# also same as _SDA_BASE_ (V.4 small data ptr)	b	__do_global_ctors		# do any C++ global constructors (which returns to caller)# We need to relocate the .got2 pointers.  Don't load register 2.Lreloc:	lwz	3,.Lgot2s(11)			# GOT pointers start	lwz	4,.Lgot2e(11)			# GOT pointers end	add	3,12,3				# adjust pointers	add	4,12,4	cmpw	1,3,4				# any pointers to adjust	bc	12,6,.Lfix.Lloop:	lwz	5,0(3)				# next pointer	add	5,5,12				# adjust	stw	5,0(3)	addi	3,3,4				# bump to next word	cmpw	1,3,4				# more pointers to adjust?	bc	4,6,.Lloop# Fixup any user initialized pointers now (the compiler drops pointers to# each of the relocs that it does in the .fixup section).  Note, the pointers# themselves have already been fixed up by the previous loop..Lfix:	lwz	3,.Lfixups(11)			# fixup pointers start	lwz	4,.Lfixupe(11)			# fixup pointers end	cmpw	1,3,4				# any user pointers to adjust	bc	12,6,.Ldone.Lfloop:	lwz	5,0(3)				# next pointer	lwz	6,0(5)				# get the pointer it points to	add	6,6,12				# adjust	stw	6,0(5)	addi	3,3,4				# bump to next word	cmpw	1,3,4				# more pointers to adjust?	bc	4,6,.Lfloop# Done adjusting pointers, return.Ldone:	b	__do_global_ctors		# do any C++ global constructors (which returns to caller)# Routines for saving floating point registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the floating point save area.	.globl	_savefpr_14	.globl	_savefpr_15	.globl	_savefpr_16	.globl	_savefpr_17	.globl	_savefpr_18	.globl	_savefpr_19	.globl	_savefpr_20	.globl	_savefpr_21	.globl	_savefpr_22	.globl	_savefpr_23	.globl	_savefpr_24	.globl	_savefpr_25	.globl	_savefpr_26	.globl	_savefpr_27	.globl	_savefpr_28	.globl	_savefpr_29	.globl	_savefpr_30	.globl	_savefpr_31		.long	0x00400000	# traceback tag_savefpr_14:	stfd	14,-144(11)	# save fp registers_savefpr_15:	stfd	15,-136(11)_savefpr_16:	stfd	16,-128(11)_savefpr_17:	stfd	17,-120(11)_savefpr_18:	stfd	18,-112(11)_savefpr_19:	stfd	19,-104(11)_savefpr_20:	stfd	20,-96(11)_savefpr_21:	stfd	21,-88(11)_savefpr_22:	stfd	22,-80(11)_savefpr_23:	stfd	23,-72(11)_savefpr_24:	stfd	24,-64(11)_savefpr_25:	stfd	25,-56(11)_savefpr_26:	stfd	26,-48(11)_savefpr_27:	stfd	27,-40(11)_savefpr_28:	stfd	28,-32(11)_savefpr_29:	stfd	29,-24(11)_savefpr_30:	stfd	30,-16(11)_savefpr_31:	stfd	31,-8(11)		blr# Routines for saving integer registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the integer save area.	.globl	_savegpr_14	.globl	_savegpr_15	.globl	_savegpr_16	.globl	_savegpr_17	.globl	_savegpr_18	.globl	_savegpr_19	.globl	_savegpr_20	.globl	_savegpr_21	.globl	_savegpr_22	.globl	_savegpr_23	.globl	_savegpr_24	.globl	_savegpr_25	.globl	_savegpr_26	.globl	_savegpr_27	.globl	_savegpr_28	.globl	_savegpr_29	.globl	_savegpr_30	.globl	_savegpr_31		.long	0x00400000	# traceback tag_savegpr_14:	stw	14,-72(11)	# save gp registers_savegpr_15:	stw	15,-68(11)_savegpr_16:	stw	16,-64(11)_savegpr_17:	stw	17,-60(11)_savegpr_18:	stw	18,-56(11)_savegpr_19:	stw	19,-52(11)_savegpr_20:	stw	20,-48(11)_savegpr_21:	stw	21,-44(11)_savegpr_22:	stw	22,-40(11)_savegpr_23:	stw	23,-36(11)_savegpr_24:	stw	24,-32(11)_savegpr_25:	stw	25,-28(11)_savegpr_26:	stw	26,-24(11)_savegpr_27:	stw	27,-20(11)_savegpr_28:	stw	28,-16(11)_savegpr_29:	stw	29,-12(11)_savegpr_30:	stw	30,-8(11)_savegpr_31:	stw	31,-4(11)		blr# Routines for restoring floating point registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the floating point save area.	.globl	_restfpr_14	.globl	_restfpr_15	.globl	_restfpr_16	.globl	_restfpr_17	.globl	_restfpr_18	.globl	_restfpr_19	.globl	_restfpr_20	.globl	_restfpr_21	.globl	_restfpr_22	.globl	_restfpr_23	.globl	_restfpr_24	.globl	_restfpr_25	.globl	_restfpr_26	.globl	_restfpr_27	.globl	_restfpr_28	.globl	_restfpr_29	.globl	_restfpr_30	.globl	_restfpr_31		.long	0x00600000	# traceback tag_restfpr_14:	lfd	14,-144(11)	# restore fp registers_restfpr_15:	lfd	15,-136(11)_restfpr_16:	lfd	16,-128(11)_restfpr_17:	lfd	17,-120(11)_restfpr_18:	lfd	18,-112(11)_restfpr_19:	lfd	19,-104(11)_restfpr_20:	lfd	20,-96(11)_restfpr_21:	lfd	21,-88(11)_restfpr_22:	lfd	22,-80(11)_restfpr_23:	lfd	23,-72(11)_restfpr_24:	lfd	24,-64(11)_restfpr_25:	lfd	25,-56(11)_restfpr_26:	lfd	26,-48(11)_restfpr_27:	lfd	27,-40(11)_restfpr_28:	lfd	28,-32(11)_restfpr_29:	lfd	29,-24(11)_restfpr_30:	lfd	30,-16(11)_restfpr_31:	lfd	31,-8(11)		blr# Routines for restoring integer registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the integer restore area.	.globl	_restgpr_14	.globl	_restgpr_15	.globl	_restgpr_16	.globl	_restgpr_17	.globl	_restgpr_18	.globl	_restgpr_19	.globl	_restgpr_20	.globl	_restgpr_21	.globl	_restgpr_22	.globl	_restgpr_23	.globl	_restgpr_24	.globl	_restgpr_25	.globl	_restgpr_26	.globl	_restgpr_27	.globl	_restgpr_28	.globl	_restgpr_29	.globl	_restgpr_30	.globl	_restgpr_31		.long	0x00600000	# traceback tag_restgpr_14:	lwz	14,-72(11)	# rest gp registers_restgpr_15:	lwz	15,-68(11)_restgpr_16:	lwz	16,-64(11)_restgpr_17:	lwz	17,-60(11)_restgpr_18:	lwz	18,-56(11)_restgpr_19:	lwz	19,-52(11)_restgpr_20:	lwz	20,-48(11)_restgpr_21:	lwz	21,-44(11)_restgpr_22:	lwz	22,-40(11)_restgpr_23:	lwz	23,-36(11)_restgpr_24:	lwz	24,-32(11)_restgpr_25:	lwz	25,-28(11)_restgpr_26:	lwz	26,-24(11)_restgpr_27:	lwz	27,-20(11)_restgpr_28:	lwz	28,-16(11)_restgpr_29:	lwz	29,-12(11)_restgpr_30:	lwz	30,-8(11)_restgpr_31:	lwz	31,-4(11)		blr# Routines for restoring floating point registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the floating point save area.# In addition to restoring the fp registers, it will return to the caller's# caller	.globl	_restfpr_14_x	.globl	_restfpr_15_x	.globl	_restfpr_16_x	.globl	_restfpr_17_x	.globl	_restfpr_18_x	.globl	_restfpr_19_x	.globl	_restfpr_20_x	.globl	_restfpr_21_x	.globl	_restfpr_22_x	.globl	_restfpr_23_x	.globl	_restfpr_24_x	.globl	_restfpr_25_x	.globl	_restfpr_26_x	.globl	_restfpr_27_x	.globl	_restfpr_28_x	.globl	_restfpr_29_x	.globl	_restfpr_30_x	.globl	_restfpr_31_x		.long	0x00600000	# traceback tag_restfpr_14_x:	lfd	14,-144(11)	# restore fp registers_restfpr_15_x:	lfd	15,-136(11)_restfpr_16_x:	lfd	16,-128(11)_restfpr_17_x:	lfd	17,-120(11)_restfpr_18_x:	lfd	18,-112(11)_restfpr_19_x:	lfd	19,-104(11)_restfpr_20_x:	lfd	20,-96(11)_restfpr_21_x:	lfd	21,-88(11)_restfpr_22_x:	lfd	22,-80(11)_restfpr_23_x:	lfd	23,-72(11)_restfpr_24_x:	lfd	24,-64(11)_restfpr_25_x:	lfd	25,-56(11)_restfpr_26_x:	lfd	26,-48(11)_restfpr_27_x:	lfd	27,-40(11)_restfpr_28_x:	lfd	28,-32(11)_restfpr_29_x:	lfd	29,-24(11)_restfpr_30_x:	lfd	30,-16(11)_restfpr_31_x:	lwz	0,4(11)		lfd	31,-8(11)		mtlr	0		mr	1,11		blr# Routines for restoring integer registers, called by the compiler.# Called with r11 pointing to the stack header word of the caller of the# function, just beyond the end of the integer restore area.	.globl	_restgpr_14_x	.globl	_restgpr_15_x	.globl	_restgpr_16_x	.globl	_restgpr_17_x	.globl	_restgpr_18_x	.globl	_restgpr_19_x	.globl	_restgpr_20_x	.globl	_restgpr_21_x	.globl	_restgpr_22_x	.globl	_restgpr_23_x	.globl	_restgpr_24_x	.globl	_restgpr_25_x	.globl	_restgpr_26_x	.globl	_restgpr_27_x	.globl	_restgpr_28_x	.globl	_restgpr_29_x	.globl	_restgpr_30_x	.globl	_restgpr_31_x		.long	0x00600000	# traceback tag_restgpr_14_x:	lwz	14,-72(11)	# rest gp registers_restgpr_15_x:	lwz	15,-68(11)_restgpr_16_x:	lwz	16,-64(11)_restgpr_17_x:	lwz	17,-60(11)_restgpr_18_x:	lwz	18,-56(11)_restgpr_19_x:	lwz	19,-52(11)_restgpr_20_x:	lwz	20,-48(11)_restgpr_21_x:	lwz	21,-44(11)_restgpr_22_x:	lwz	22,-40(11)_restgpr_23_x:	lwz	23,-36(11)_restgpr_24_x:	lwz	24,-32(11)_restgpr_25_x:	lwz	25,-28(11)_restgpr_26_x:	lwz	26,-24(11)_restgpr_27_x:	lwz	27,-20(11)_restgpr_28_x:	lwz	28,-16(11)_restgpr_29_x:	lwz	29,-12(11)_restgpr_30_x:	lwz	30,-8(11)_restgpr_31_x:	lwz	0,4(11)		lwz	31,-4(11)		mtlr	0		mr	1,11		blr

⌨️ 快捷键说明

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