svn commit: r353700 - in head: share/man/man4 sys/amd64/conf sys/conf sys/gdb sys/i386/conf sys/kern sys/net sys/sys

Hartmann, O. ohartmann at walstatt.org
Fri Oct 18 16:37:32 UTC 2019


On Fri, 18 Oct 2019 09:26:51 -0700
Cy Schubert <Cy.Schubert at cschubert.com> wrote:

> On October 18, 2019 8:54:06 AM PDT, "Hartmann, O."
> <ohartmann at walstatt.org> wrote:
> >On Fri, 18 Oct 2019 07:24:12 -0700
> >Cy Schubert <Cy.Schubert at cschubert.com> wrote:
> >  
> >> In message <20191018160935.7dda61c4 at hermann.fritz.box>, "Hartmann,
> >> O." writes:  
> >> > --Sig_/QDD9BZgeMM6.TJkOIciNb32
> >> > Content-Type: text/plain; charset=US-ASCII
> >> > Content-Transfer-Encoding: quoted-printable
> >> >
> >> > On Fri, 18 Oct 2019 14:00:45 +0200
> >> > Gary Jennejohn <gljennjohn at gmail.com> wrote:
> >> >    
> >> > > On Fri, 18 Oct 2019 12:21:04 +0200
> >> > > "Hartmann, O." <ohartmann at walstatt.org> wrote:
> >> > >=20    
> >> > > > On Thu, 17 Oct 2019 21:33:01 +0000 (UTC)
> >> > > > Conrad Meyer <cem at FreeBSD.org> wrote:
> >> > > >  =20    
> >> > > > > Author: cem
> >> > > > > Date: Thu Oct 17 21:33:01 2019
> >> > > > > New Revision: 353700
> >> > > > > URL: https://svnweb.freebsd.org/changeset/base/353700
> >> > > > >=20
> >> > > > > Log:
> >> > > > >   Implement NetGDB(4)
> >> > > > >  =20
> >> > > > >   NetGDB(4) is a component of a system using a panic-time
> >> > > > > network stack to remotely debug crashed FreeBSD kernels
> >> > > > > over the network, instead of traditional serial interfaces.
> >> > > > >  =20
> >> > > > >   There are three pieces in the complete NetGDB system.
> >> > > > >  =20
> >> > > > >   First, a dedicated proxy server must be running to accept
> >> > > > > connections from both NetGDB and gdb(1), and pass
> >> > > > > bidirectional traffic between the two protocols.
> >> > > > >  =20
> >> > > > >   Second, the NetGDB client is activated much like ordinary
> >> > > > > 'gdb' and similarly to 'netdump' in ddb(4) after a panic.
> >> > > > > Like other debugnet(4) clients (netdump(4)), the network
> >> > > > > interface on the route to the proxy server must be online
> >> > > > > and support debugnet(4). =20
> >> > > > >   Finally, the remote (k)gdb(1) uses 'target remote
> >> > > > > <proxy>:<port>' (like any other TCP remote) to connect to
> >> > > > > the proxy server.=20
> >> > > > >   The NetGDB v1 protocol speaks the literal GDB remote
> >> > > > > serial protocol, and uses a 1:1 relationship between GDB
> >> > > > > packets and sequences of debugnet packets (fragmented by
> >> > > > > MTU).  There is no encryption utilized to keep debugging
> >> > > > > sessions private, so this is only appropriate for local
> >> > > > > segments or trusted networks. =20
> >> > > > >   Submitted by:	John Reimer <john.reimer AT emc.com>
> >> > > > > (earlier version) Discussed some with:	emaste, markj
> >> > > > >   Relnotes:	sure
> >> > > > >   Differential Revision:
> >> > > > > https://reviews.freebsd.org/D21568
> >> > > > >=20
> >> > > > > Added:
> >> > > > >   head/share/man/man4/netgdb.4   (contents, props changed)
> >> > > > >   head/sys/gdb/netgdb.c   (contents, props changed)
> >> > > > >   head/sys/gdb/netgdb.h   (contents, props changed)
> >> > > > > Modified:
> >> > > > >   head/share/man/man4/Makefile
> >> > > > >   head/share/man/man4/ddb.4
> >> > > > >   head/sys/amd64/conf/GENERIC
> >> > > > >   head/sys/conf/NOTES
> >> > > > >   head/sys/conf/files
> >> > > > >   head/sys/conf/options
> >> > > > >   head/sys/gdb/gdb.h
> >> > > > >   head/sys/gdb/gdb_int.h
> >> > > > >   head/sys/gdb/gdb_main.c
> >> > > > >   head/sys/gdb/gdb_packet.c
> >> > > > >   head/sys/i386/conf/GENERIC
> >> > > > >   head/sys/kern/subr_kdb.c
> >> > > > >   head/sys/net/debugnet.c
> >> > > > >   head/sys/net/debugnet.h
> >> > > > >   head/sys/net/debugnet_inet.c
> >> > > > >   head/sys/net/debugnet_int.h
> >> > > > >   head/sys/sys/kdb.h
> >> > > > >   head/sys/sys/param.h
> >> > > > >=20
> >> > > > > Modified: head/share/man/man4/Makefile
> >> > > > >  
> >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> > 
> >> > > > >    
> >> >  
> >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> > 
> >> >  
> >=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> > 
> >> > =3D=3D=3D=3D=3D    
> >> > > > > --- head/share/man/man4/Makefile	Thu Oct 17 21:25:50
> >> > > > > 2019	(r353699) +++ head/share/man/man4/Makefile
> >> > > > > Thu Oct 17 21:33:01 2019	(r353700) @@ -307,6 +307,7
> >> > > > > @@ MAN=3D aac.4 \ net80211.4 \
> >> > > > >  	netdump.4 \
> >> > > > >  	netfpga10g_nf10bmac.4 \
> >> > > > > +	netgdb.4 \
> >> > > > >  	netgraph.4 \
> >> > > > >  	netintro.4 \
> >> > > > >  	netmap.4 \
> >> > > > >    =20    
> >> > > > [...]
> >> > > >=20
> >> > > >=20
> >> > > > Having "nooptions       NETGDB          # netgdb(4) client
> >> > > > support" defined in my kernel config file, buildkernel fails
> >> > > > with the error shown below.
> >> > > >=20
> >> > > > [...]
> >> > > > --- debugnet.o ---
> >> > > > /usr/src/sys/net/debugnet.c:662:4: error: implicit
> >> > > > declaration of function 'db_printf' is invalid in C99
> >> > > > [-Werror,-Wimplicit-function-declaration] db_printf("%s:
> >> > > > Could not get route for that server.\n", ^
> >> > > > /usr/src/sys/net/debugnet.c:662:4: note: did you mean
> >> > > > 'if_printf'? /usr/src/sys/net/if_var.h:679:5: note:
> >> > > > 'if_printf' declared here int     if_printf(struct ifnet *,
> >> > > > const char *, ...) __printflike(2, 3); ^ 1 error generated.
> >> > > > =20    
> >> > >=20
> >> > > And I also had to add "nooptions NETDUMP" to get the kernel to
> >> > > compile and link.
> >> > >=20    
> >> >
> >> > I already had "nooptions NETDUMP" defined.    
> >> 
> >> 
> >> This will fix it.
> >> 
> >> Index: sys/net/debugnet.c
> >> ===================================================================
> >> --- sys/net/debugnet.c	(revision 353717)
> >> +++ sys/net/debugnet.c	(working copy)
> >> @@ -659,8 +659,10 @@
> >>  		CURVNET_RESTORE();
> >>  
> >>  		if (dest_rt == NULL) {
> >> +#ifdef DDB
> >>  			db_printf("%s: Could not get route for
> >> that server.\n", __func__);
> >> +#endif
> >>  			error = ENOENT;
> >>  			goto cleanup;
> >>  		}
> >> 
> >> 
> >>   
> >
> >Doesn't work, either.
> >The kernel config in question doesn't have any debugging features
> >enabled, so nooptions DDB is alos part of the configuration.
> >buildkernel still fails.  
> 
> Hmm. Fixed my firewall build. My non-test firewall kernel config has
> the same nooption.
> 
> What other options/nooptions and patches are applied to your tree?
> 
> 

I use the vanilla CURRENT tree without any extra pachtes. There are
lots of other nooptions, especially for drivers I do not need and
debugging is completely turned off.

Having "nooptions DDB" commeted out fixes the build for me.
Anticipating the correct portion of my config file, here are those
nooptions I deem relevant. The nooptions are kept in a file added to
GENERIC afterwards:

[... sorry for the line wrap]
nooptions       DDB_CTF                 # Kernel ELF linker loads CTF
data nooptions       INCLUDE_CONFIG_FILE     # Include this file in
kernel #options        RACCT                   # Resource accounting
framework #options        RACCT_DEFAULT_TO_DISABLED # Set
kern.racct.enable=0 by default #options        RCTL
# Resource limits

# Debugging support.  Always need this:
#options        KDB                     # Enable kernel debugger
support. #options        KDB_TRACE               # Print a stack trace
for a panic. # For full debugger support use (turn off in stable
branch): nooptions       BUF_TRACKING            # Track buffer history
nooptions       DDB                     # Support DDB.
nooptions       FULL_BUF_TRACKING       # Track more buffer history
nooptions       GDB                     # Support remote GDB.
nooptions       DEADLKRES               # Enable the deadlock resolver
nooptions       INVARIANTS              # Enable calls of extra sanity
checking nooptions       INVARIANT_SUPPORT       # Extra sanity checks
of internal structures, required by INVARIANTS nooptions       WITNESS
               # Enable checks to detect deadlocks and cycles nooptions
      WITNESS_SKIPSPIN        # Don't run witness on spinlocks for
speed nooptions       MALLOC_DEBUG_MAXZONES   # Separate malloc(9)
zones nooptions       VERBOSE_SYSINIT # Support debug.verbose_sysinit,
off by default

# Kernel Sanitizers
#options        COVERAGE                # Generic kernel coverage. Used
by KCOV #options        KCOV                    # Kernel Coverage
Sanitizer # Warning: KUBSAN can result in a kernel too large for loader
to load #options        KUBSAN                  # Kernel Undefined
Behavior Sanitizer

# Kernel dump features.
#options        EKCD                    # Support for encrypted kernel
dumps #options        GZIO                    # gzip-compressed kernel
and user dumps #options        ZSTDIO                  #
zstd-compressed kernel and user dumps nooptions       NETDUMP
      # netdump(4) client support nooptions               NETGDB
          # netgdb(4) client support

# Make an SMP-capable kernel by default
#options        SMP                     # Symmetric MultiProcessor
Kernel #options        EARLY_AP_STARTUP

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 228 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20191018/e2061467/attachment-0001.sig>


More information about the svn-src-head mailing list