[[!meta copyright="Copyright © 2007, 2008, 2010, 2011, 2012 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!tag open_issue_gdb]] Here's what's to be done for maintaining GNU GDB. [[!toc levels=2]] # [[General information|/gdb]] # [[Sources|source_repositories/gdb]] # Configuration Last reviewed up to the [[Git mirror's fe19822761b4635f392875a186e48af446b40f41 (2012-01-01) sources|source_repositories/gdb]]. * Globally * a.out, COFF, PE image support and 64 bit support are not interesting. * In the testsuites, `.exp` and `.d` files very likely should not only care for `*-*-linux*`, but also `*-*-gnu*`. (If the need to be conditionalized like this at all.) * `bfd/` See [[binutils]]. * `libdecnumber/` Should/can probably align to GNU/Linux. * Have a look at config/i386/i386gnu.mh. * configure.tgt * glibc-tdep et al. also for GNU/Hurd? * [[gdbserver]] # Build Here's a log of a GDB build run; this is from our [[Git repository|source_repositories/gdb]]'s `tschwinge/Ferry_Tagscherer` branch, commit fe19822761b4635f392875a186e48af446b40f41 (2012-01-01), run on kepler.SCHWINGE and coulomb.SCHWINGE. $ export LC_ALL=C $ ../Ferry_Tagscherer/configure --prefix="$PWD".install SHELL=/bin/dash CC=gcc-4.6 CXX=g++-4.6 --disable-werror 2>&1 | tee log_build [...] $ make 2>&1 | tee log_build_ [...] Different hosts may default to different shells and compiler versions; thus harmonized. There are several occurences of *error: dereferencing type-punned pointer will break strict-aliasing rules* in the MIG-generated stub files; thus no `-Werror` until that is resolved ([[strict_aliasing]]). This takes up around 210 MiB and needs roughly 6 min on kepler.SCHWINGE and 25 min on coulomb.SCHWINGE. ## Analysis x86 GNU/Linux' and GNU/Hurd's configurations are slightly different, thus mask out most of the differences that are due to GNU/Linux supporting more core file formats and more emulation vectors. $ toolchain/logs/process gdb build * DFP -checking for decimal floating point... bid +checking for decimal floating point... configure: WARNING: decimal float is not supported for this target, ignored +dpd Have to sync libdecnumber? * Why do we specify `-D_GNU_SOURCE`, and GNU/Linux doesn't? * GNU/Linux: `gdb/symfile-mem.c` for vDSO. * GNU/Linux: `gdb/i386-nat.c` for hardware breakpoints, etc. -- we should probably use that, too. Related to Samuel's Hurd GDB patch? * `gdb/gnu-nat.c` gnu-nat.c: In function 'proc_set_exception_port': gnu-nat.c:409:3: warning: format '%d' expects argument of type 'int', but argument 8 has type 'mach_port_t' [-Wformat] gnu-nat.c: In function 'proc_steal_exc_port': gnu-nat.c:449:7: warning: format '%d' expects argument of type 'int', but argument 8 has type 'mach_port_t' [-Wformat] gnu-nat.c:470:7: warning: format '%d' expects argument of type 'int', but argument 8 has type 'mach_port_t' [-Wformat] gnu-nat.c: In function 'make_proc': gnu-nat.c:583:7: warning: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Wformat] gnu-nat.c:586:7: warning: format '%d' expects argument of type 'int', but argument 8 has type 'mach_port_t' [-Wformat] gnu-nat.c: In function 'inf_set_pid': gnu-nat.c:761:3: warning: format '%d' expects argument of type 'int', but argument 7 has type 'task_t' [-Wformat] gnu-nat.c: In function 'inf_validate_procs': gnu-nat.c:1085:6: warning: format '%d' expects argument of type 'int', but argument 8 has type 'thread_t' [-Wformat] gnu-nat.c: In function 'inf_signal': gnu-nat.c:1349:4: warning: format '%d' expects argument of type 'int', but argument 7 has type 'thread_t' [-Wformat] gnu-nat.c:1349:4: warning: format '%d' expects argument of type 'int', but argument 8 has type 'thread_t' [-Wformat] gnu-nat.c: In function 'S_exception_raise_request': gnu-nat.c:1668:3: warning: format '%d' expects argument of type 'int', but argument 7 has type 'thread_t' [-Wformat] gnu-nat.c:1668:3: warning: format '%d' expects argument of type 'int', but argument 8 has type 'task_t' [-Wformat] gnu-nat.c:1705:8: warning: format '%d' expects argument of type 'int', but argument 7 has type 'mach_port_t' [-Wformat] gnu-nat.c:1711:8: warning: format '%d' expects argument of type 'int', but argument 7 has type 'mach_port_t' [-Wformat] gnu-nat.c: In function 'do_mach_notify_dead_name': gnu-nat.c:1762:3: warning: format '%d' expects argument of type 'int', but argument 7 has type 'mach_port_t' [-Wformat] gnu-nat.c: In function 'gnu_write_inferior': gnu-nat.c:2383:8: warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Wformat] gnu-nat.c:2393:8: warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'vm_address_t' [-Wformat] gnu-nat.c: In function 'steal_exc_port': gnu-nat.c:2864:5: warning: format '%d' expects argument of type 'int', but argument 2 has type 'mach_port_t' [-Wformat] * Why does GNU/Linux have an additional `-ldl -rdynamic` when linking `gdb`? # Install $ make install 2>&1 | tee log_install [...] This takes up around 50 MiB, and needs roughly 1 min on kepler.SCHWINGE and 3 min on coulomb.SCHWINGE. ## Analysis $ toolchain/logs/process gdb install * `libtool: finish`: `ldconfig` is not run for the Hurd. # Testsuite $ make -k check [...] This needs roughly 11 min on kepler.SCHWINGE and 128 min on coulomb.SCHWINGE. When running `make -k check 2>&1 | tee log_test`, at the end of the testsuite the `tee` process does not terminate if there are still stray leftover processes that [have their stdout/stderr open](http://sourceware.org/ml/gdb-patches/2012-10/msg00489.html). `kill`ing these (`SIGKILL` may be needed), makes the `tee` process terminate, too. On GNU/Hurd, this has be seen for `gdb.base/structs-tf-td`, `gdb.cp/meth-typedefs`, and an unknown (`?`) one ("57 PIDs before" `expect [...] gdb.cp`). ## Analysis $ toolchain/logs/process gdb test * Disabled * `gdb.base/morestack.exp` TODO `-fsplit-stack` issue. * `gdb.base/readline.exp` [[term_blocking]] issue. * `gdb.base/sigall.exp` From `send signal TSTP` on, all FAIL running into timeouts. * `UNSUPPORTED: gdb.threads/ia64-sigill.exp: Couldn't compile ../../../master/gdb/testsuite/gdb.threads/ia64-sigill.c: unrecognized error` ../../../master/gdb/testsuite/gdb.threads/ia64-sigill.c:29:24: fatal error: asm/unistd.h: No such file or directory * `UNSUPPORTED: gdb.threads/multi-create.exp: Couldn't compile ../../../master/gdb/testsuite/gdb.threads/multi-create.c: unrecognized error` ../../../master/gdb/testsuite/gdb.threads/multi-create.c: In function 'create_function': ../../../master/gdb/testsuite/gdb.threads/multi-create.c:46:39: error: 'PTHREAD_STACK_MIN' undeclared (first use in this function) ../../../master/gdb/testsuite/gdb.threads/multi-create.c:46:39: note: each undeclared identifier is reported only once for each function it appears in ../../../master/gdb/testsuite/gdb.threads/multi-create.c: In function 'main': ../../../master/gdb/testsuite/gdb.threads/multi-create.c:73:39: error: 'PTHREAD_STACK_MIN' undeclared (first use in this function) * `UNSUPPORTED: gdb.threads/staticthreads.exp: Couldn't compile ../../../master/gdb/testsuite/gdb.threads/staticthreads.c: unrecognized error` ../../../master/gdb/testsuite/gdb.threads/staticthreads.c: In function 'main': ../../../master/gdb/testsuite/gdb.threads/staticthreads.c:52:37: error: 'PTHREAD_STACK_MIN' undeclared (first use in this function) ../../../master/gdb/testsuite/gdb.threads/staticthreads.c:52:37: note: each undeclared identifier is reported only once for each function it appears in TODO.