Hmm... It looks like the output format changed between linux 2.4 ->
2.6. In 2.4's include/asm-mips/ptrace.h, we have:
struct pt_regs {
/* Pad bytes for argument save space on the stack. */
unsigned long pad0[6];
/* Saved main processor registers. */
unsigned long regs[32];
/* Other saved registers. */
unsigned long lo;
unsigned long hi;
/*
* saved cp0 registers
*/
unsigned long cp0_epc;
unsigned long cp0_badvaddr;
unsigned long cp0_status;
unsigned long cp0_cause;
Then in 2.6, it changes to:
struct pt_regs {
#ifdef CONFIG_MIPS32
/* Pad bytes for argument save space on the stack. */
unsigned long pad0[6];
#endif
/* Saved main processor registers. */
unsigned long regs[32];
/* Saved special registers. */
unsigned long cp0_status;
unsigned long lo;
unsigned long hi;
unsigned long cp0_badvaddr;
unsigned long cp0_cause;
unsigned long cp0_epc;
};
Notice how the offsets has changed, no idea why this was done. I
loaded the core file in the hex dump, and sure enough it is dumped
with this new ordering.
I guess gdb is still trying to decode using the old pt_regs format. Is
it correct to modify gdb to use this new format? Or modify linux to
output using the old format?
Thanks much,
- Tony
On 5/25/06, Daniel Jacobowitz <dan@debian.org> wrote:
On Wed, May 24, 2006 at 06:44:26PM -0700, Tony Lin wrote:
> I've pretty much concluded the gdb is not at fault. Loading a coredump
> generated by another mips-linux system, it was able to read the
> registers correctly and lookup the program counter.
>
> So the problem now is my 32-bit mips-linux is generating core files in
> a different format than what gdb expects. I've been digging into
> fs/exec.c and fs/binfmt_elf.c without much success. Are there
> documents describing the expected coredump header format?
No. But...
> I'm not really familiar with the register terminology (fpu? xfpregs?)
> so am having some trouble figuring out where linux write the program
> counter into the core dump.
Take a look at asm-mips/elf.h and IIRC arch/mips/kernel/process.c. Or,
trace the macros through binfmt_elf.c, where it creates NOTE sections.
--
Daniel Jacobowitz
CodeSourcery
|