How to get anything useful out of kgdb?

NGie Cooper yaneurabeya at gmail.com
Tue May 19 00:29:52 UTC 2015


On Mon, May 18, 2015 at 3:44 PM, NGie Cooper <yaneurabeya at gmail.com> wrote:

...

> This isn't working as advertised.
>
> While trying to track down issues with clang at $work with variables
> that were optimized out, I noticed that it was passing through -O2
> explicitly, even though DEBUG=-g was defined in our KERNCONF, which is
> supposed to set _MINUS_O to -O.
>
> I did some more poking around and it appears to always be the case
> with 11-CURRENT as well (see below).
>
> I'll post a diff for kern.pre.mk that fixes this on Phabricator soon,
> because this is breaking our debuggability of clang kernels.
>
> Thanks,
> -NGie
>
> $ git diff sys/conf/kern.pre.mk
> diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk
> index 8c3b9c6..2ab0647 100644
> --- a/sys/conf/kern.pre.mk
> +++ b/sys/conf/kern.pre.mk
> @@ -102,6 +102,8 @@ CFLAGS.gcc+=${CFLAGS_ARCH_PARAMS}
>  .endif
>  WERROR?= -Werror
>
> +.error "CFLAGS: ${CFLAGS}"
> +
>  # XXX LOCORE means "don't declare C stuff" not "for locore.s".
>  ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} ${ASM_CFLAGS.${.IMPSRC:T}}
>
> $ script ts make buildkernel KERNCONF=GENERIC
> KERNCONFDIR=/sys/amd64/conf/ SRCCONF=/dev/null __MAKE_CONF=/dev/null
> -j12
> Script started, output file is ts
> --- buildkernel ---
> --- buildkernel ---
> --------------------------------------------------------------
>>>> Kernel build for GENERIC started on Mon May 18 15:38:04 PDT 2015
> --------------------------------------------------------------
> ===> GENERIC
> mkdir -p /usr/obj/usr/src/sys
> --------------------------------------------------------------
>>>> stage 1: configuring the kernel
> --------------------------------------------------------------
> cd /usr/src/sys/amd64/conf;
> PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
>  config  -d /usr/obj/usr/src/sys/GENERIC  -I '/sys/amd64/conf/'
> '/sys/amd64/conf//GENERIC'
> Kernel build directory is /usr/obj/usr/src/sys/GENERIC
> Don't forget to do ``make cleandepend && make depend''
> --------------------------------------------------------------
>>>> stage 2.1: cleaning up the object tree
> --------------------------------------------------------------
> cd /usr/obj/usr/src/sys/GENERIC; MAKEOBJDIRPREFIX=/usr/obj
> MACHINE_ARCH=amd64  MACHINE=amd64  CPUTYPE=
> GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin
> GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font
> GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac
> _SHLIBDIRPREFIX=/usr/obj/usr/src/tmp  _LDSCRIPTROOT=  VERSION="FreeBSD
> 11.0-CURRENT amd64 1100073"  INSTALL="sh /usr/src/tools/install.sh"
> PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
> CC="cc " CXX="c++  "  DEPFLAGS=""  CPP="cpp "  AS="as" AR="ar" LD="ld"
> NM=nm  OBJDUMP=objdump OBJCOPY="objcopy"  RANLIB=ranlib STRINGS=
> SIZE="size" make  -j 12 -J 15,16 -m /usr/src/share/mk  KERNEL=kernel
> cleandir
> make[2]: "/usr/src/sys/conf/kern.pre.mk" line 105: "CFLAGS: -O2 -pipe
> -fno-strict-aliasing  -g -nostdinc  -I. -I/usr/src/sys -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h"
>
> From /usr/obj/usr/src/sys/GENERIC/Makefile:
>
>     1 KERN_IDENT=GENERIC
>     2 MACHINE=amd64
>     3 MACHINE_ARCH=amd64
>     4 WITH_CTF=1
>     5 DEBUG=-g
>     6 S=/usr/src/sys

As a sidenote, this has been broken for over a decade:
https://svnweb.freebsd.org/base?view=revision&revision=127204 :(...


More information about the freebsd-hackers mailing list