Commit 652a12ef authored by Russell King's avatar Russell King
Browse files

[PATCH] ARM: showregs



Fix show_regs() to provide a backtrace.  Provide a new __show_regs()
function which implements the common subset of show_regs() and die().
Add prototypes to asm-arm/system.h

Signed-off-by: default avatarRussell King <rmk@arm.linux.org.uk>
parent 58c02ec4
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -168,12 +168,11 @@ void machine_restart(char * __unused)


EXPORT_SYMBOL(machine_restart);
EXPORT_SYMBOL(machine_restart);


void show_regs(struct pt_regs * regs)
void __show_regs(struct pt_regs *regs)
{
{
	unsigned long flags;
	unsigned long flags = condition_codes(regs);

	flags = condition_codes(regs);


	printk("CPU: %d\n", smp_processor_id());
	print_symbol("PC is at %s\n", instruction_pointer(regs));
	print_symbol("PC is at %s\n", instruction_pointer(regs));
	print_symbol("LR is at %s\n", regs->ARM_lr);
	print_symbol("LR is at %s\n", regs->ARM_lr);
	printk("pc : [<%08lx>]    lr : [<%08lx>]    %s\n"
	printk("pc : [<%08lx>]    lr : [<%08lx>]    %s\n"
@@ -213,6 +212,14 @@ void show_regs(struct pt_regs * regs)
	}
	}
}
}


void show_regs(struct pt_regs * regs)
{
	printk("\n");
	printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
	__show_regs(regs);
	__backtrace();
}

void show_fpregs(struct user_fp *regs)
void show_fpregs(struct user_fp *regs)
{
{
	int i;
	int i;
+2 −6
Original line number Original line Diff line number Diff line
@@ -31,9 +31,6 @@


#include "ptrace.h"
#include "ptrace.h"


extern void c_backtrace (unsigned long fp, int pmode);
extern void show_pte(struct mm_struct *mm, unsigned long addr);

const char *processor_modes[]=
const char *processor_modes[]=
{ "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,
{ "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,
  "UK8_26" , "UK9_26" , "UK10_26", "UK11_26", "UK12_26", "UK13_26", "UK14_26", "UK15_26",
  "UK8_26" , "UK9_26" , "UK10_26", "UK11_26", "UK12_26", "UK13_26", "UK14_26", "UK15_26",
@@ -216,8 +213,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)


	printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
	printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
	print_modules();
	print_modules();
	printk("CPU: %d\n", smp_processor_id());
	__show_regs(regs);
	show_regs(regs);
	printk("Process %s (pid: %d, stack limit = 0x%p)\n",
	printk("Process %s (pid: %d, stack limit = 0x%p)\n",
		tsk->comm, tsk->pid, tsk->thread_info + 1);
		tsk->comm, tsk->pid, tsk->thread_info + 1);


@@ -482,7 +478,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
		       current->pid, current->comm, no);
		       current->pid, current->comm, no);
		dump_instr(regs);
		dump_instr(regs);
		if (user_mode(regs)) {
		if (user_mode(regs)) {
			show_regs(regs);
			__show_regs(regs);
			c_backtrace(regs->ARM_fp, processor_mode(regs));
			c_backtrace(regs->ARM_fp, processor_mode(regs));
		}
		}
	}
	}
+1 −4
Original line number Original line Diff line number Diff line
@@ -142,11 +142,8 @@ extern unsigned long profile_pc(struct pt_regs *regs);
#endif
#endif


#ifdef __KERNEL__
#ifdef __KERNEL__
extern void show_regs(struct pt_regs *);
#define predicate(x)		((x) & 0xf0000000)

#define predicate(x)	(x & 0xf0000000)
#define PREDICATE_ALWAYS	0xe0000000
#define PREDICATE_ALWAYS	0xe0000000

#endif
#endif


#endif /* __ASSEMBLY__ */
#endif /* __ASSEMBLY__ */
+3 −0
Original line number Original line Diff line number Diff line
@@ -99,6 +99,9 @@ void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
#define tas(ptr) (xchg((ptr),1))
#define tas(ptr) (xchg((ptr),1))


extern asmlinkage void __backtrace(void);
extern asmlinkage void __backtrace(void);
extern asmlinkage void c_backtrace(unsigned long fp, int pmode);
extern void show_pte(struct mm_struct *mm, unsigned long addr);
extern void __show_regs(struct pt_regs *);


extern int cpu_architecture(void);
extern int cpu_architecture(void);