How to use cross gdb to examine core file from crosstarget machine

7

I have a core file from embedded SH3 linux device, and gdb of the cross compiler environment (sh3-linux-gdb) in my host linux.

But I have problems loading the core file with gdb:

$ sh3-linux-gdb ./myprogram ./core
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
...
This GDB was configured as "--host=i386-pc-linux-gnu --target=sh3-linux"...
GDB can't read core files on this machine.
(gdb)

Why it can't read the core file? Is there any way to read the core file from target system to the cross gdb?

There is gdbserver in target machine (SH3-linux), but not gdb itself. I am able to do runtime debuging of processes of target machine with gdbserver and sh3-linux-gdb, so sh3-linux-gdb should be correctly compiled.

EDIT: readelf dump was requested:

[build]$ sh3-linux-readelf -a core
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              CORE (Core file)
  Machine:                           Renesas / SuperH SH
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          0 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         51
  Size of section headers:           0 (bytes)
  Number of section headers:         0
  Section header string table index: 0

There are no sections in this file.

There are no sections in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  NOTE           0x000694 0x00000000 0x00000000 0x00200 0x00000     0
  LOAD           0x001000 0x00400000 0x00000000 0x00000 0x01000 R E 0x1000
  ----- several boring lines removed -----
  LOAD           0x05a000 0x29952000 0x00000000 0x01000 0x01000 RW  0x1000
  LOAD           0x05b000 0x7be48000 0x00000000 0x15000 0x15000 RWE 0x1000

There is no dynamic section in this file.

There are no relocations in this file.

There are no unwind sections in this file.

No version information found in this file.

Notes at offset 0x00000694 with length 0x00000200:
  Owner         Data size       Description
  CORE          0x000000a8      NT_PRSTATUS (prstatus structure)
  CORE          0x0000007c      NT_PRPSINFO (prpsinfo structure)
  CORE          0x000000a0      NT_AUXV (auxiliary vector)
[build]$ 

EDIT2: Same problem with --core option:

$ sh3-linux-gdb ./myprogram --core=./core 
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=sh3-linux"...RUN GDB INIT
GDB can't read core files on this machine.
(gdb)
c
linux
gdb
cross-compiling
gdbserver
asked on Stack Overflow Jul 21, 2011 by SKi • edited Aug 23, 2011 by SKi

2 Answers

1

Try according to http://forums.freescale.com/t5/68K-ColdFire-reg-Microprocessors/GDB-can-t-read-core-files/td-p/70181

 sh3-linux-gdb ./myprogram --core=./core

It may be a bug in the old gdb http://sourceware.org/bugzilla/show_bug.cgi?id=9542 - so try newer gdb (7) too.

Also possible that core was dumped in unsupported format. What is target's OS, version?

Can you post the output or readelf -a core ?

answered on Stack Overflow Aug 23, 2011 by osgx
-2

It is possible to debug your application, not with gdb directly but with gdb server. The first thing you have to do is to call gdbserver in the target system (you said in your question that this package is already installed) :

gdbserver AAA.BBB.CCC.DDD:port ./myprogram

It is assume that the target machine is accessible to an IP address : AAA.BBB.CCC.DDD:port. Once, you have done that, you can call gdb in your development machine by specifying the target remote server :

   % gdb ./myprogram
   % [...]
   (gdb) target remote AAA.BBB.CCC.DDD:port

Note that the target remote server IP address are the same of the gdbserver.

answered on Stack Overflow Jul 21, 2011 by Dimitri

User contributions licensed under CC BY-SA 3.0