Fix build of stand/ when building world with ASAN

The userboot/test  program links against the default userspace libraries
(e.g. shared libgcc_s.so) that will be instrumented if WITH_ASAN is set.
All other programs link against libsa instead of libc and therefore can't
use the sanitizer runtime library. To fix the stand/ build with
sanitizers, we disable MK_ASAN/MK_UBSAN if -nostdlib is found in the
LDFLAGS (i.e. we are using libsa instead of libc).

Reviewed By:	imp, tsoome
Differential Revision: https://reviews.freebsd.org/D31047
This commit is contained in:
Alex Richardson 2021-08-02 09:50:16 +01:00
parent c826e08841
commit 5e9226f063
2 changed files with 9 additions and 2 deletions

View File

@ -24,6 +24,12 @@ INTERNALLIB=
# enough to make that hassle worth chasing.
_CPUCFLAGS=
.if ${LDFLAGS:M-nostdlib}
# Sanitizers won't work unless we link against libc (e.g. in userboot/test).
MK_ASAN:= no
MK_UBSAN:= no
.endif
.include <src.opts.mk>
.include <bsd.linker.mk>

View File

@ -6,6 +6,9 @@ LOADER_CD9660_SUPPORT?= no
LOADER_EXT2FS_SUPPORT?= no
PIC=yes
# Note: -nostdlib needs to be added to LDFLAGS before including defs.mk
LDFLAGS+= -nostdlib -Wl,-Bsymbolic
.include <bsd.init.mk>
SHLIB_NAME= userboot_${LOADER_INTERP}.so
@ -39,8 +42,6 @@ CFLAGS.main.c+= -I${SYSDIR}/contrib/openzfs/include/os/freebsd/zfs
CFLAGS.gfx_fb.c+= -I$(SRCTOP)/sys/teken -I${SRCTOP}/contrib/pnglite
CWARNFLAGS.main.c += -Wno-implicit-function-declaration
LDFLAGS+= -nostdlib -Wl,-Bsymbolic
NEWVERSWHAT= "User boot ${LOADER_INTERP}" ${MACHINE_CPUARCH}
VERSION_FILE= ${.CURDIR}/../userboot/version