Subject: how do I build a debugger (-g) instbin in the build.sh world?
To: NetBSD-current Discussion List <current-users@NetBSD.ORG>
From: Greg A. Woods <woods@weird.com>
List: current-users
Date: 06/08/2003 18:04:26
How do I build a debugger-ready (-g) version of the 'instbin' binary in
the build.sh world?

I'm working on the the netbsd-1-6 branch at the moment but I suspect the
answer is generic to -current.

When I build the '-g' flag is passed to sparc--netbsdelf-gcc because I
have it set to do so in /etc/mk.conf (my whole build is done this way),
but of course the resulting 'instbin' file is still stripped.  I'm just
not quite sure how to (optionally) get the resulting objects to the
final binary with their full symbol tables intact.

I'm guessing the symbols I want are disappearing when the build runs
commands like this one:

	sparc--netbsdelf-objcopy --strip-debug --keep-global-symbol _crunched_tset_stub tset.cro

and so on.

It would seem one has to manually edit the generated "instbin.mk" file
to get rid of all the '--strip-debug' options, then remove all the
"*.cro" files, and finally re-run:

	$TOOLSDIR/bin/nbmake-sparc -f instbin.mk STRIP=: all

Hopefully there's an easier way.....


The reason I as is I have a sysinst.core file that I'd like to debug.
It was generated on a sparc, and it happened right at the end of an
install.

[Sun Jun  8 16:02:17 2003] The installation of NetBSD-1.6.1_STABLE is now complete.  The system should
[Sun Jun  8 16:02:17 2003] boot from hard disk.  Follow the instructions in the INSTALL document about
[Sun Jun  8 16:02:17 2003] final configuration of your system.
[Sun Jun  8 16:02:17 2003]
[Sun Jun  8 16:02:17 2003] At a minimum, you should edit /etc/rc.conf to match your needs.  See
[Sun Jun  8 16:02:17 2003] /etc/defaults/rc.conf for the default values.
[Sun Jun  8 16:02:17 2003] ESC[13;28HESC(0lqqqqqqqqqqqqqqqqqqqqqqqkESC(BESC[14;28HESC(0xESC(B Hit enter to continue ESC(0xESC(BESC[15;28HESC(0xESC(BESC[15;52HESC(0xESC(BESC[16;
28HESC(0xESC(B>ESC[7ma: okESC[16;52HESC[mESC(0xESC(BESC[17;28HESC(0mqqqqqqqqqqqqqqqqqqqqqqqjESC(BESC[16;29HESC[13;28HESC[KESC[14;28HESC[KESC[15;28HESC[KESC[16;28HESC[KESC[17;28
HESC[KESC[13;28Hsysinst: pid 17 [eid 0:0, rid 0:0] exited on signal 11: dumped core [in //sysinst.core]
[Sun Jun  8 16:02:23 2003]^MSegmentation fault - core dumped


# file sysinst sysinst.core
sysinst:      ELF 32-bit MSB executable, SPARC, version 1 (SYSV), for NetBSD, statically linked, stripped
sysinst.core: ELF 32-bit MSB core file, SPARC, version 1 (SYSV), NetBSD-style, from 'sysinst' (signal 11)
# nm sysinst
nm: sysinst: no symbols
# gdb sysinst sysinst.core 
GNU gdb 5.0nb1
Copyright 2000 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 "sparc--netbsdelf"...(no debugging symbols found)...
Core was generated by `sysinst'.
Program terminated with signal 11, Segmentation fault.
#0  0x1204c0 in ?? ()
(gdb) where
#0  0x1204c0 in ?? ()
#1  0x121298 in ?? ()
#2  0x11e34c in ?? ()
#3  0x1060c in ?? ()
#4  0x1030c in ?? ()
(gdb) 


OK, after doing all the fiddling around to get the instfs and all the
sources mounted in the right place (this freshly installed machine is
the only one where I have the right version of gdb -- maybe $TOOLSDIR
should include gdb?), rebuilding instbin by hand, I think this is where
I've ended up:

# gdb /sometimes/almost/sysinst.gdb /sometimes/almost/sysinst.core 
GNU gdb 5.0nb1
Copyright 2000 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 "sparc--netbsdelf"...

warning: exec file is newer than core file.
Core was generated by `sysinst'.
Program terminated with signal 11, Segmentation fault.
#0  0x1204c0 in process_menu (num=0) at menu_defs.c:1794
1794                            if (m->opts[sel].opt_menu != -1) {
(gdb) where
#0  0x1204c0 in process_menu (num=0) at menu_defs.c:1794
#1  0x121298 in main (argc=1, argv=0xeffff89c)
    at /work/woods/m-NetBSD-1.6/distrib/utils/sysinst/arch/sparc/../../main.c:157
#2  0x11e34c in _crunched_sysinst_stub (argc=1, argv=0xeffff89c, envp=0x11e338)
    at sysinst_stub.c:1
#3  0x1060c in main (argc=1, argv=0xeffff89c) at instbin.c:67
#4  0x1030c in ___start (argc=1, argv=0xeffff89c, envp=0x215110, cleanup=0, 
    obj=0x0, ps_strings=0xeffffff0)
    at /work/woods/m-NetBSD-1.6/lib/csu/sparc_elf/crt0.c:97
#5  0x10238 in _start ()
    at /work/woods/m-NetBSD-1.6/lib/csu/sparc_elf/../common_elf/crtbegin.c:167
(gdb) list
1789                                    endwin();
1790                                    __m_endwin = 1;
1791                            }
1792                            if (m->opts[sel].opt_action)
1793                                    done = (*m->opts[sel].opt_action)(m);
1794                            if (m->opts[sel].opt_menu != -1) {
1795                                    if (m->opts[sel].opt_flags & OPT_SUB)
1796                                            process_menu (m->opts[sel].opt_menu);
1797                                    else
1798                                            num = m->opts[sel].opt_menu;
(gdb) print m
$1 = (struct menudesc *) 0x33b000
(gdb) print *m
$2 = {title = 0x20 <Address 0x20 out of bounds>, y = 0, x = 32, h = 0, w = 32, 
  mopt = 0, numopts = 32, cursel = 0, topline = 32, opts = 0x0, mw = 0x20, 
  helpstr = 0x0, exitstr = 0x20 <Address 0x20 out of bounds>, post_act = 0, 
  exit_act = 0x20}
(gdb) print sel
$3 = 0
(gdb) print m->opts[0]
Cannot access memory at address 0x0
(gdb) 



-- 
								Greg A. Woods

+1 416 218-0098;            <g.a.woods@ieee.org>;           <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; VE3TCP; Secrets of the Weird <woods@weird.com>