Instruction dump?

Sep 16, 2008 4 Replies

Can someone please explain the contents of the instruction dump in an a Linux OOPS, or have a reference which does so? How does one go about using it in debugging? For instance, I have the following instruction dump:



Instruction dump:



7F850000 41BEFF7C 3860FFFF 4BFFFF78 9421FFE0 7C0802A6 BF61000C
7C9E2379
7C7C1B78 90010024 41820188 83BE034C 70090008 40820014
2F83001F

What can I do with this information? I am running Linux 2.6.26 on a powerpc.


Usually you get a stackdump and often some messages that will tell you what source file originated the code that was running at the time of the oops. If you get some addresses you can also manually convert that if you have the kernel symbols file for the kernel that crashed. Generally try to figure out what went wrong. Consider instrumenting suspect kernel code with additional printk's. Also do web searches and see if maybe the problem you found is known.

Oh, and is it repeatable? How long and or how complicated external conditions does it take to cause?

Use the source Luke.

Specifically, show_instructions in arch/ppc64/kernel/process.c may be a good start.

One becomes a kernel hacker :)

Write it to an assembly file, like this:

.long 0x7F850000,0x41BEFF7C,0x3860FFFF,0x4BFFFF78,...

Compile and disasseble the result:

0: 7f 85 00 00 cmpw cr7,r5,r0 4: 41 be ff 7c beq- cr7,0xffffffffffffff80 8: 38 60 ff ff li r3,-1 c: 4b ff ff 78 b 0xffffffffffffff84 10: 94 21 ff e0 stwu r1,-32(r1) 14: 7c 08 02 a6 mflr r0 18: bf 61 00 0c stmw r27,12(r1) 1c: 7c 9e 23 79 mr. r30,r4 20: 7c 7c 1b 78 mr r28,r3 24: 90 01 00 24 stw r0,36(r1) 28: 41 82 01 88 beq- 0x1b0 2c: 83 be 03 4c lwz r29,844(r30) 30: 80 1d 00 34 lwz r0,52(r29)

You need a PowerPC disassembler. I assume there must be one that can disassemble raw dwords like this. You could use objdump or gdb, with some trickery.

Tim Roberts, timr@probo.com Providenza & Boekelheide, Inc.

Its easier to find the source line in the C code than to understand what happens in assembler...

Enable: CONFIG_KALLSYMS, CONFIG_KALLSYMS_EXTRA_PASS, CONFIG_DEBUG_INFO, CONFIG_DEBUG_BUGVERBOSE

this will output a stack strace so you will get an idea what's currently happen. After that "addr2line" is your friend to find the source line where the failure happens (works on the file "vmlinux").

jbe

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required