bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Core dump (semi) update


From: Alfred M. Szmidt
Subject: Re: Core dump (semi) update
Date: Sun, 8 Feb 2004 10:20:07 +0100 (MET)

   Like I said, this is the internal contents of the note.  readelf
   tells you the sizes and locations of the note, and if those are
   sane, you can look at the data directly and interpret according to
   the struct type.  This is what you have to do to have anything to
   say about whether the dumping is being done correctly or not.
   Please do it.

Here is what I got from the core file (using a bit of mmap() magic, so
hopefully it is correct), I took and formated it a bit so that it is a
bit easier on the eyes.  Some values look quite bogus; like most of
the pr_*id regs.

If you want to check it yourself, I can always send you the core dump,
it is only 30k compressed.

,----
| (gdb) print *u
| $2 = {sysname = "GNU", '\0' <repeats 1020 times>,
|       nodename = "hurd", '\0' <repeats 1019 times>, 
|       release = "0.3", '\0' <repeats 1020 times>, 
|       version = "GNUmach-1.2/Hurd-0.3", '\0' <repeats 1003 times>, 
|       machine = "i386-AT386", '\0' <repeats 1013 times>}
| (gdb) print *pi
| $3 = {pr_flag = 3, 
|       pr_nlwp = 2, 
|       pr_pid = 23268, 
|       pr_ppid = 694, 
|       pr_pgid = 23268, 
|       pr_sid = 694, 
|       pr_uid = 4294967295, 
|       pr_euid = 0, 
|       pr_gid = 4294967295, 
|       pr_egid = 4294967295, 
|       pr_size = 611418112, 
|       pr_rssize = 2654208, 
|       pr_pctcpu = 0, 
|       pr_pctmem = 54, 
|       pr_start = {tv_sec = 1076231792, tv_nsec = 760000000}, 
|       pr_time = {tv_sec = 0, tv_nsec = 10000000}, 
|       pr_ctime = {tv_sec = 0, tv_nsec = 0}, 
|       pr_reserved1 = {0, 0}, 
|       pr_fname = '\0' <repeats 15 times>, 
|       pr_psargs = "/sub-hurd/bin/gencat", '\0' <repeats 59 times>, 
|       pr_wstat = 5503, 
|       pr_argc = 1, 
|       pr_argv = 16874516, 
|       pr_envp = 16874524}
| (gdb) print *ps
| $4 = {pr_flags = 3, 
|       pr_nlwp = 2, 
|       pr_pid = 23268, 
|       pr_ppid = 694, 
|       pr_pgid = 23268, 
|       pr_sid = 694, 
|       pr_utime = {tv_sec = 0, tv_nsec = 0}, 
|       pr_stime = {tv_sec = 0, tv_nsec = 10000000}, 
|       pr_cutime = {tv_sec = 0, tv_nsec = 0}, 
|       pr_cstime = {tv_sec = 0, tv_nsec = 0}}
| (gdb) print *l1
| $5 = {pr_flags = 0, 
|       pr_lwpid = 0, 
|       pr_cursig = 0, 
|       pr_info = {si_signo = 0, si_code = 0, si_errno = 0}, 
|       pr_reg = {31, 31, 31, 31, 0, 3, 16873244, 2, 18340376,
|                 18579400, 0, -25, 0, 0, 17004764, 23, 17004764, 23, 
17004764}, 
|       pr_fpreg = {fp_reg_set = {fpchip_state = {state = {0 <repeats 27 
times>}, 
|                                                       status = 0}, 
|                               fp_emul_space = {fp_emul = '\0' <repeats 245 
times>, 
|                                                fp_epad = "\000"}, 
|                               f_fpregs = {0 <repeats 62 times>}}, 
|                 f_wregs = {0 <repeats 33 times>}}}
| (gdb) print *l2
| $6 = {pr_flags = 0, 
|       pr_lwpid = 1, 
|       pr_cursig = 0, 
|       pr_info = {si_signo = 0, si_code = 0, si_errno = 0}, 
|       pr_reg = {31, 31, 31, 31, 0, 2, 18616156, 0, 18340376, 
|                 1, 18615940, -25, 0, 0, 17004764, 23, 17004764, 23, 
17004764}, 
|       pr_fpreg = {fp_reg_set = {fpchip_state = {state = {0 <repeats 27 
times>}, 
|                                                       status = 0}, 
|                                 fp_emul_space = {fp_emul = '\0' <repeats 245 
times>, 
|                                                fp_epad = "\000"}, 
|                               f_fpregs = {0 <repeats 62 times>}},
|                 f_wregs = {0 <repeats 33 times>}}}
| (gdb) 
`----

   The configure checks for the fields of lwpstatus_t are what I had
   in mind.  Look at bfd/elf.c and see the various HAVE_* macros that
   elfcore_grok_lwpstatus depends on.  Make sure your bfd/config.h
   defines all the ones that should exist looking at Hurd's
   <sys/procfs.h>.

Looks sane, HAVE_LWPSTATUS_T, HAVE_LWPSTATUS_T_PR_FPREG, and
HAVE_LWPSTATUS_T_PR_REG, are defined.

   >    But looking at the source, there isn't a configure check for
   >    pr_fpreg to go with the bfd/elf.c code
   >    (elfcore_grok_lwpstatus).  That would explain that.
   > 
   > This didn't work, produced the same output as without it (and
   > yes, I did regenerate configure).

   And removed config.cache, I hope?

I forgot to re-run autoheader.  GDB is not silent about the size
mis-match about fpregset.  But it still doesn't read the core dumps
like it should.

,----
| hurd:/ams# ./sources.redhat.com/sources.redhat.com/obj/gdb/gdb 
/sub-hurd/bin/gencat core.23268 
| GNU gdb 2004-02-04-cvs
| 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 "i386-unknown-gnu0.3"...
| 
| warning: core file may not match specified executable file.
| Core was generated by `/sub-hurd/bin/gencat'.
| Reading symbols from /lib/libc.so.0.3...done.
| Loaded symbols for /lib/libc.so.0.3
| Reading symbols from /lib/ld.so.1...done.
| Loaded symbols for /lib/ld.so.1
| Reading symbols from /lib/libmachuser.so.1...done.
| Loaded symbols for /lib/libmachuser.so.1
| Reading symbols from /lib/libhurduser.so.0.3...done.
| Loaded symbols for /lib/libhurduser.so.0.3
| #0  0x00000000 in ?? ()
| (gdb) 
`----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]