This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Michael, I make a patch to fix it. I try in i386-ubuntu. It is OK now. Please help me review it. Thanks, Hui 2009-11-04 Hui Zhu <teawater@gmail.com> * gcore.c (gcore_copy_callback): Remove bfd_get_section_flags check. --- gcore.c | 4 ---- 1 file changed, 4 deletions(-) --- a/gcore.c +++ b/gcore.c @@ -510,10 +510,6 @@ gcore_copy_callback (bfd *obfd, asection struct cleanup *old_chain = NULL; void *memhunk; - /* Read-only sections are marked; we don't have to copy their contents. */ - if ((bfd_get_section_flags (obfd, osec) & SEC_LOAD) == 0) - return; - /* Only interested in "load" sections. */ if (strncmp ("load", bfd_section_name (obfd, osec), 4) != 0) return; On Sun, Nov 1, 2009 at 01:32, Michael Snyder <msnyder@vmware.com> wrote: > Hi Hui, > > Nice job of diagnostics. ?You feel up to fixing it? > This would be a nice fix for gcore as well. > > Michael > > Hui Zhu wrote: >> >> Hi guys, >> >> I found that prec save/restore reverse exec behavior error. ?For example: >> gdb ./a.out ./gdb_record.8810 >> Reading symbols from /home/teawater/gdb/a.out...done. >> [New Thread 8810] >> Core was generated by `/home/teawater/gdb/a.out'. >> Program terminated with signal 5, Trace/breakpoint trap. >> #0 ?main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> (gdb) record >> Restored records from core file /home/teawater/gdb/./gdb_record.8810. >> #0 ?main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> (gdb) n >> 21 ? ? ? ? ? ? int ? ? c = 1; >> (gdb) >> 24 ? ? ? ? ? ? ?printf ("a = %d b = %d c = %d\n", a, b, c); >> (gdb) >> 25 ? ? ? ? ? ? b = cool (); >> (gdb) rn >> >> No more reverse-execution history. >> main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> >> The reason is: >> (gdb) rn >> infrun: stop_pc = 0x7ffff7abbec1 >> infrun: stepped into subroutine >> infrun: inserting step-resume breakpoint at 0x0 ?#address error >> infrun: ? status->kind = no-history >> infrun: infwait_normal_state >> >> No more reverse-execution history. >> infrun: stop_stepping >> main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> >> The address is not right because: >> (gdb) info sharedlibrary >> From ? ? ? ? ? ? ? ?To ? ? ? ? ? ? ? ? ?Syms Read ? Shared Object Library >> 0x00007ffff7ddea90 ?0x00007ffff7df7334 ?Yes (*) >> /lib64/ld-linux-x86-64.so.2 >> (*): Shared library is missing debugging information. >> >> Without the solib that have printf, gdb cannot find the debug message.of >> printf. >> >> >> But current gdb way cannot get the solib message. >> For example: >> gdb ./a.out ./gdb_record.8810 >> [New Thread 8810] >> Core was generated by `/home/teawater/gdb/a.out'. >> Program terminated with signal 5, Trace/breakpoint trap. >> #0 ?main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> (gdb) record >> Restored records from core file /home/teawater/gdb/./gdb_record.8810. >> #0 ?main () at 1.c:20 >> 20 ? ? ? ? ? ? int ? ? b = 0; >> (gdb) set solib-search-path >> (gdb) >> Not any output is because gdb cannot get any message of solib. >> To get solib message need .dynamic section in >> "solib-svr4.c:scan_dyntag", but this section's flags is: >> ?[21] .dynamic ? ? ? ? ?DYNAMIC ? ? ? ? ?0000000000600e40 ?00000e40 >> ? ? ? 00000000000001a0 ?0000000000000010 ?WA ? ? ? 6 ? ? 0 ? ? 8 >> It just alloc when inferior exec. ?And gcore didn't save the memory of >> .dynamic. >> So when prec restore (inferior didn't exec) cannot get the the solib >> message. >> >> I found that kernel coredump have the .dynamic message: >> ./a.out >> a.out: 2.c:5: main: Assertion `0' failed. >> ?(core dumped) >> gdb ./a.out core >> (gdb) info sharedlibrary >> From ? ? ? ? ? ? ? ?To ? ? ? ? ? ? ? ? ?Syms Read ? Shared Object Library >> 0x00007fcc52666230 ?0x00007fcc5276b0e8 ?Yes (*) ? ? /lib/libc.so.6 >> 0x00007fcc529baa90 ?0x00007fcc529d3334 ?Yes (*) >> /lib64/ld-linux-x86-64.so.2 >> (*): Shared library is missing debugging information. >> >> >> Core file of gcore didn't make gdb auto load solib because in >> "solib-svr4.c:scan_dyntag" get value from .dynamic section. >> 635 ? ? ? ? ? ? ? ? ? ?dyn_ptr = extract_typed_address (ptr_buf, >> ptr_type); >> (gdb) x ptr_addr >> 0x600ed8 >> (gdb) p ptr_buf >> $20 = "\000\000\000\000\000\000\000" >> Then gdb >> But when gcore didn't save the value from this section in >> "gcore_copy_callback": >> ?/* Read-only sections are marked; we don't have to copy their contents. >> ?*/ >> ?if ((bfd_get_section_flags (obfd, osec) & SEC_LOAD) == 0) >> ? ?return; >> cat /proc/7122/maps >> 00400000-00401000 r-xp 00000000 08:06 4980746 >> ?/home/teawater/gdb/a.out >> 00600000-00601000 r--p 00000000 08:06 4980746 >> ?/home/teawater/gdb/a.out >> 00601000-00602000 rw-p 00001000 08:06 4980746 >> ?/home/teawater/gdb/a.out >> 7ffff7a6c000-7ffff7bd4000 r-xp 00000000 08:06 3022954 >> ?/lib/libc-2.9.so >> 7ffff7bd4000-7ffff7dd4000 ---p 00168000 08:06 3022954 >> ?/lib/libc-2.9.so >> 7ffff7dd4000-7ffff7dd8000 r--p 00168000 08:06 3022954 >> ?/lib/libc-2.9.so >> 7ffff7dd8000-7ffff7dd9000 rw-p 0016c000 08:06 3022954 >> ?/lib/libc-2.9.so >> 7ffff7dd9000-7ffff7dde000 rw-p 7ffff7dd9000 00:00 0 >> 7ffff7dde000-7ffff7dfe000 r-xp 00000000 08:06 3022858 >> ?/lib/ld-2.9.so >> 7ffff7fd5000-7ffff7fd7000 rw-p 7ffff7fd5000 00:00 0 >> 7ffff7ff9000-7ffff7ffc000 rw-p 7ffff7ff9000 00:00 0 >> 7ffff7ffc000-7ffff7ffd000 r-xp 7ffff7ffc000 00:00 0 >> ?[vdso] >> 7ffff7ffd000-7ffff7ffe000 r--p 0001f000 08:06 3022858 >> ?/lib/ld-2.9.so >> 7ffff7ffe000-7ffff7fff000 rw-p 00020000 08:06 3022858 >> ?/lib/ld-2.9.so >> 7ffffffea000-7ffffffff000 rw-p 7ffffffea000 00:00 0 >> ?[stack] >> ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 >> ?[vsyscall] >> >> >> >> I think this is the root cause of this issue. ?Sorry guys, I use a >> long mail to show it. >> >> Do you have some comment with it? >> >> Thanks, >> Hui > >
Attachment:
fix-gcore-lib.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |