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

📄 backtrace.s

📁 arm平台上的uclinux系统全部源代码
💻 S
字号:
/* * linux/arch/arm/lib/backtrace.S * * Copyright (C) 1995, 1996 Russell King */#include <asm/assembler.h>		.text@ fp is 0 or stack frame#define frame	r4#define next	r5#define save	r6#define mask	r7#define offset	r8		.global	___backtrace,__backtrace__backtrace:___backtrace:#ifdef __arm6__		mrs	r1, cpsr#else		mov	r1, pc		and	r1, r1, #0xfc000003#endif		mov	r0, fp		.global	_c_backtrace,c_backtracec_backtrace:_c_backtrace:	stmfd	sp!, {r4 - r8, lr}	@ Save an extra register so we have a location...		tst	r1, #0x10		@ 26 or 32-bit?		moveq	mask, #0xfc000003		movne	mask, #0		tst	mask, r0		movne	r0, #0		movs	frame, r0Lbadbacktrace:	moveq	r0, #-2		LOADREGS(eqfd, sp!, {r4 - r8, pc})Lst:		stmfd	sp!, {pc}			@ calculate offset of PC in STMIA instruction		ldr	r0, [sp], #4		adr	r1, Lst - 4		sub	offset, r0, r1Lloop:		tst	frame, mask			@ Check for address exceptions...		bne	Lbadbacktrace		ldmda	frame, {r0, r1, r2, r3}		@ fp, sp, lr, pc		mov	next, r0		sub	save, r3, offset		@ Correct PC for prefetching		bic	save, save, mask		adr	r0, Lfe		mov	r1, save		bic	r2, r2, mask		bl	printk		sub	r0, frame, #16		ldr	r1, [save, #4]		mov	r3, r1, lsr #10		ldr	r2, Ldsi+4		teq	r3, r2			@ Check for stmia sp!, {args}		addeq	save, save, #4		@ next instruction		bleq	Ldumpstm		ldr	r1, [save, #4]		@ Get 'stmia sp!, {rlist, fp, ip, lr, pc}' instruction		mov	r3, r1, lsr #10		ldr	r2, Ldsi		teq	r3, r2		bleq	Ldumpstm		teq	frame, next		movne	frame, next		teqne	frame, #0		bne	Lloop		LOADREGS(fd, sp!, {r4 - r8, pc})#define instr r4#define reg   r5#define stack r6Ldumpstm:	stmfd	sp!, {instr, reg, stack, lr}		mov	stack, r0		mov	instr, r1		mov	reg, #91:		mov	r3, #1		tst	instr, r3, lsl reg		beq	2f		ldr	r2, [stack], #-4		mov	r1, reg		adr	r0, Lfp		bl	printk2:		subs	reg, reg, #1		bpl	1b		mov	r0, stack		LOADREGS(fd, sp!, {instr, reg, stack, pc})Lfe:		.ascii	"Function entered at [<%p>] from [<%p>]\n"		.byte 0Lfp:		.ascii	"  r%d = %p\n"		.byte 0		.alignLdsi:		.word	0x00e92dd8 >> 2		.word	0x00e92d00 >> 2

⌨️ 快捷键说明

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