Pull up following revision(s) (requested by kamil in ticket #126):

external/bsd/compiler_rt/lib/clang/lib/netbsd/ubsan_minimal-m64/Makefile: revision 1.3
	external/bsd/compiler_rt/lib/clang/lib/netbsd/msan_cxx-m64/Makefile: revision 1.3
	external/gpl2/lvm2/lvm2tools.mk: revision 1.5
	common/lib/libc/gmon/mcount.c: revision 1.14
	Makefile: revision 1.331
	share/mk/Makefile: revision 1.51
	external/bsd/fetch/lib/Makefile: revision 1.12
	external/bsd/compiler_rt/lib/clang/lib/netbsd/asan_cxx-m64/Makefile: revision 1.3
	tests/lib/libc/net/Makefile: revision 1.12
	external/bsd/compiler_rt/lib/clang/lib/netbsd/ubsan_standalone_cxx-m64/Makefile: revision 1.3
	external/bsd/compiler_rt/lib/clang/lib/netbsd/msan-m64/Makefile: revision 1.3
	distrib/sets/lists/base/mi: revision 1.1213
	share/mk/bsd.lib.mk: revision 1.380
	external/bsd/compiler_rt/lib/clang/lib/netbsd/ubsan_standalone-m64/Makefile: revision 1.3
	external/bsd/compiler_rt/lib/clang/lib/netbsd/asan-m64/Makefile: revision 1.3
	share/mk/bsd.sanitizer.mk: revision 1.1
	share/mk/bsd.prog.mk: revision 1.323
	external/bsd/compiler_rt/lib/clang/lib/netbsd/tsan-m64/Makefile: revision 1.3
	external/bsd/compiler_rt/lib/clang/lib/netbsd/tsan_cxx-m64/Makefile: revision 1.3
	lib/libc/gen/sysctlgetmibinfo.c: revision 1.14

Enhance the support of LLVM sanitizers

Define _REENTRANT for MKSANITIZER build. This is needed for at least stdio
code. This caused new build issued with duplicated symbols in few places
and rump kernel code picking different code paths borrowed from libc.

Handle all this in one go.

Add bsd.sanitizer.mk to share common code used by programs and libraries.

Switch from realall to beforeinstall target in .syms files. This is more
reliable in MKSANITIZER.
This commit is contained in:
martin 2019-09-01 10:44:22 +00:00
parent 67f995c3bf
commit 489c11d4fa
20 changed files with 81 additions and 62 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.327.2.1 2019/09/01 10:36:26 martin Exp $
# $NetBSD: Makefile,v 1.327.2.2 2019/09/01 10:44:22 martin Exp $
#
# This is the top-level makefile for building NetBSD. For an outline of
@ -481,7 +481,7 @@ do-compat-lib: .PHONY .MAKE
${MAKEDIRTARGET} compat build_install BOOTSTRAP_SUBDIRS="../../../lib"
do-sanitizer: .PHONY .MAKE
${MAKEDIRTARGET} external/bsd/compiler_rt all
${MAKEDIRTARGET} external/bsd/compiler_rt build_install
do-sanitizer-tools: .PHONY .MAKE
.if !exists(${TOOLDIR}/lib/clang) && ${HAVE_LLVM:Uno} == "yes"

View File

@ -1,4 +1,4 @@
/* $NetBSD: mcount.c,v 1.13 2016/02/28 02:56:39 christos Exp $ */
/* $NetBSD: mcount.c,v 1.13.18.1 2019/09/01 10:44:22 martin Exp $ */
/*
* Copyright (c) 2003, 2004 Wasabi Systems, Inc.
@ -76,7 +76,7 @@
#if 0
static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID("$NetBSD: mcount.c,v 1.13 2016/02/28 02:56:39 christos Exp $");
__RCSID("$NetBSD: mcount.c,v 1.13.18.1 2019/09/01 10:44:22 martin Exp $");
#endif
#endif
@ -88,7 +88,7 @@ __RCSID("$NetBSD: mcount.c,v 1.13 2016/02/28 02:56:39 christos Exp $");
#include "reentrant.h"
#endif
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(_RUMPKERNEL)
extern thread_key_t _gmonkey;
extern struct gmonparam _gmondummy;
struct gmonparam *_m_gmon_alloc(void);
@ -143,7 +143,7 @@ _MCOUNT_DECL(u_long frompc, u_long selfpc)
int s;
#endif
#if defined(_REENTRANT) && !defined(_KERNEL)
#if defined(_REENTRANT) && !defined(_KERNEL) && !defined(_RUMPKERNEL)
if (__isthreaded) {
/* prevent re-entry via thr_getspecific */
if (_gmonparam.state != GMON_PROF_ON)

View File

@ -1,4 +1,4 @@
# $NetBSD: mi,v 1.1209.2.1 2019/08/16 19:10:42 martin Exp $
# $NetBSD: mi,v 1.1209.2.2 2019/09/01 10:44:23 martin Exp $
#
# Note: Don't delete entries from here - mark them as "obsolete" instead,
# unless otherwise stated below.
@ -4837,6 +4837,7 @@
./usr/share/mk/bsd.port.subdir.mk base-obsolete obsolete
./usr/share/mk/bsd.prog.mk base-mk-share share
./usr/share/mk/bsd.rpc.mk base-mk-share share
./usr/share/mk/bsd.sanitizer.mk base-mk-share share
./usr/share/mk/bsd.shlib.mk base-mk-share share
./usr/share/mk/bsd.subdir.mk base-mk-share share
./usr/share/mk/bsd.sys.mk base-mk-share share

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:27 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:24 martin Exp $
NOSANITIZER= # defined
@ -56,7 +56,7 @@ COPTS+= -fPIC
SYMS= libclang_rt.asan-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:26 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:23 martin Exp $
NOSANITIZER= # defined
@ -39,7 +39,7 @@ COPTS+= -fPIC
SYMS= libclang_rt.asan_cxx-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:26 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:23 martin Exp $
NOSANITIZER= # defined
@ -51,7 +51,7 @@ COPTS+= -fPIC
SYMS= libclang_rt.msan-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:25 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:22 martin Exp $
NOSANITIZER= # defined
@ -40,7 +40,7 @@ COPTS+= -fPIC
SYMS= libclang_rt.msan_cxx-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:27 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:24 martin Exp $
NOSANITIZER= # defined
@ -51,7 +51,7 @@ CPPFLAGS+= -I${TOPDIR}/lib
SYMS= libclang_rt.tsan-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:27 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:24 martin Exp $
NOSANITIZER= # defined
@ -39,7 +39,7 @@ CPPFLAGS+= -I${TOPDIR}/lib
SYMS= libclang_rt.tsan_cxx-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:25 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:22 martin Exp $
NOSANITIZER= # defined
@ -35,7 +35,7 @@ CPPFLAGS+= -I${TOPDIR}/lib
SYMS= libclang_rt.ubsan_minimal-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:26 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:23 martin Exp $
NOSANITIZER= # defined
@ -49,7 +49,7 @@ CPPFLAGS+= -I${TOPDIR}/lib
SYMS= libclang_rt.ubsan_standalone-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.1.2.3 2019/09/01 10:36:26 martin Exp $
# $NetBSD: Makefile,v 1.1.2.4 2019/09/01 10:44:23 martin Exp $
NOSANITIZER= # defined
@ -35,7 +35,7 @@ CPPFLAGS+= -I${TOPDIR}/lib
SYMS= libclang_rt.ubsan_standalone_cxx-x86_64.a.syms
realall: ${SYMS}
beforeinstall: ${SYMS}
CLEANFILES+= ${SYMS}
FILES= ${SYMS}

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.11 2018/02/04 03:19:52 christos Exp $
# $NetBSD: Makefile,v 1.11.6.1 2019/09/01 10:44:23 martin Exp $
LIB= fetch
SRCS= fetch.c common.c ftp.c http.c file.c
@ -32,4 +32,8 @@ httperr.h: ${LIBFETCHDIR}/http.errors ${LIBFETCHDIR}/errlist.sh
${HOST_SH} ${LIBFETCHDIR}/errlist.sh http_errlist HTTP \
${LIBFETCHDIR}/http.errors > ${.TARGET}
.if ${MKSANITIZER:Uno} == "yes"
CFLAGS+= -Wno-macro-redefined # _REENTRANT redefined
.endif
.include <bsd.lib.mk>

View File

@ -1,4 +1,4 @@
# $NetBSD: lvm2tools.mk,v 1.4 2011/03/04 22:48:29 matt Exp $
# $NetBSD: lvm2tools.mk,v 1.4.46.1 2019/09/01 10:44:22 martin Exp $
.include <bsd.own.mk>
@ -24,3 +24,7 @@ CPPFLAGS+=-DDM_DEVICE_UID=0 -DDM_DEVICE_GID=5 -DDM_DEVICE_MODE=0640 \
#.endif
#
#LVM2.liblvm= ${LVM2OBJDIR.liblvm}/liblvm.a
.if ${MKSANITIZER:Uno} == "yes"
CFLAGS+= -Wno-macro-redefined # _REENTRANT redefined in lib.h
.endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: sysctlgetmibinfo.c,v 1.13 2016/09/30 06:22:21 dholland Exp $ */
/* $NetBSD: sysctlgetmibinfo.c,v 1.13.16.1 2019/09/01 10:44:24 martin Exp $ */
/*-
* Copyright (c) 2003,2004 The NetBSD Foundation, Inc.
@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
__RCSID("$NetBSD: sysctlgetmibinfo.c,v 1.13 2016/09/30 06:22:21 dholland Exp $");
__RCSID("$NetBSD: sysctlgetmibinfo.c,v 1.13.16.1 2019/09/01 10:44:24 martin Exp $");
#endif /* LIBC_SCCS and not lint */
#ifndef RUMP_ACTION
@ -386,16 +386,16 @@ __learn_tree(int *name, u_int namelen, struct sysctlnode *pnode)
* the mib while parsing, and you should try again. in the case of an
* invalid node name, cname will be set to contain the offending name.
*/
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(RUMP_ACTION)
static mutex_t sysctl_mutex = MUTEX_INITIALIZER;
static int sysctlgetmibinfo_unlocked(const char *, int *, u_int *, char *,
size_t *, struct sysctlnode **, int);
#endif /* __REENTRANT */
#endif /* __REENTRANT && !RUMP_ACTION */
int
sysctlgetmibinfo(const char *gname, int *iname, u_int *namelenp,
char *cname, size_t *csz, struct sysctlnode **rnode, int v)
#ifdef _REENTRANT
#if defined(_REENTRANT) && !defined(RUMP_ACTION)
{
int rc;
@ -411,7 +411,7 @@ static int
sysctlgetmibinfo_unlocked(const char *gname, int *iname, u_int *namelenp,
char *cname, size_t *csz, struct sysctlnode **rnode,
int v)
#endif /* _REENTRANT */
#endif /* _REENTRANT && !RUMP_ACTION */
{
struct sysctlnode *pnode, *node;
int name[CTL_MAXNAME], n, haven;

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.50 2018/05/28 13:21:50 christos Exp $
# $NetBSD: Makefile,v 1.50.4.1 2019/09/01 10:44:22 martin Exp $
# @(#)Makefile 8.1 (Berkeley) 6/8/93
NOOBJ= # defined
@ -12,7 +12,8 @@ FILES= bsd.README bsd.buildinstall.mk bsd.clang-analyze.mk bsd.clean.mk \
bsd.info.mk bsd.init.mk bsd.ioconf.mk bsd.kernobj.mk bsd.kinc.mk \
bsd.klinks.mk bsd.kmodule.mk bsd.lib.mk bsd.links.mk bsd.lua.mk \
bsd.man.mk bsd.nls.mk \
bsd.obj.mk bsd.own.mk bsd.prog.mk bsd.rpc.mk bsd.shlib.mk \
bsd.obj.mk bsd.own.mk bsd.prog.mk bsd.rpc.mk \
bsd.sanitizer.mk bsd.shlib.mk \
bsd.subdir.mk bsd.sys.mk bsd.syscall.mk bsd.test.mk bsd.x11.mk sys.mk
FILESDIR=/usr/share/mk

View File

@ -1,16 +1,10 @@
# $NetBSD: bsd.lib.mk,v 1.379 2019/01/21 21:11:54 christos Exp $
# $NetBSD: bsd.lib.mk,v 1.379.2.1 2019/09/01 10:44:22 martin Exp $
# @(#)bsd.lib.mk 8.3 (Berkeley) 4/22/94
.include <bsd.init.mk>
.include <bsd.shlib.mk>
.include <bsd.gcc.mk>
# Rename the local function definitions to not conflict with libc/rt/pthread/m.
.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_SYMBOL)
. for _symbol in ${SANITIZER_RENAME_SYMBOL}
CPPFLAGS+= -D${_symbol}=__mksanitizer_${_symbol}
. endfor
.endif
.include <bsd.sanitizer.mk>
# Pull in <bsd.sys.mk> here so we can override its .c.o rule
.include <bsd.sys.mk>

View File

@ -1,4 +1,4 @@
# $NetBSD: bsd.prog.mk,v 1.319.2.2 2019/08/19 15:53:40 martin Exp $
# $NetBSD: bsd.prog.mk,v 1.319.2.3 2019/09/01 10:44:22 martin Exp $
# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94
.ifndef HOSTPROG
@ -6,6 +6,7 @@
.include <bsd.init.mk>
.include <bsd.shlib.mk>
.include <bsd.gcc.mk>
.include <bsd.sanitizer.mk>
##### Sanitizer specific flags.
@ -13,23 +14,6 @@ CFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS}
CXXFLAGS+= ${SANITIZERFLAGS} ${LIBCSANITIZERFLAGS}
LDFLAGS+= ${SANITIZERFLAGS}
# Rename the local function definitions to not conflict with libc/rt/pthread/m.
.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_SYMBOL)
. for _symbol in ${SANITIZER_RENAME_SYMBOL}
CPPFLAGS+= -D${_symbol}=__mksanitizer_${_symbol}
. endfor
.endif
.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_CLASSES)
. for _class in ${SANITIZER_RENAME_CLASSES}
. for _file in ${SANITIZER_RENAME_FILES.${_class}}
. for _symbol in ${SANITIZER_RENAME_SYMBOL.${_class}}
COPTS.${_file}+= -D${_symbol}=__mksanitizer_${_symbol}
. endfor
. endfor
. endfor
.endif
#
# Definitions and targets shared among all programs built by a single
# Makefile.

27
share/mk/bsd.sanitizer.mk Normal file
View File

@ -0,0 +1,27 @@
# $NetBSD: bsd.sanitizer.mk,v 1.1.2.2 2019/09/01 10:44:22 martin Exp $
.if !defined(_BSD_SANITIZER_MK_)
_BSD_SANITIZER_MK_=1
.if ${MKSANITIZER:Uno} == "yes"
CPPFLAGS+= -D_REENTRANT
.endif
# Rename the local function definitions to not conflict with libc/rt/pthread/m.
.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_SYMBOL)
. for _symbol in ${SANITIZER_RENAME_SYMBOL}
CPPFLAGS+= -D${_symbol}=__mksanitizer_${_symbol}
. endfor
.endif
.if ${MKSANITIZER:Uno} == "yes" && defined(SANITIZER_RENAME_CLASSES)
. for _class in ${SANITIZER_RENAME_CLASSES}
. for _file in ${SANITIZER_RENAME_FILES.${_class}}
. for _symbol in ${SANITIZER_RENAME_SYMBOL.${_class}}
COPTS.${_file}+= -D${_symbol}=__mksanitizer_${_symbol}
. endfor
. endfor
. endfor
.endif
.endif # !defined(_BSD_SANITIZER_MK_)

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.11 2018/08/06 04:50:11 msaitoh Exp $
# $NetBSD: Makefile,v 1.11.2.1 2019/09/01 10:44:23 martin Exp $
.include <bsd.own.mk>
@ -41,4 +41,8 @@ LDADD.h_nsd_recurse+= -lpthread
CLEANFILES+= aton_ether_subr.c
.if ${MKSANITIZER:Uno} == "yes"
COPTS.h_nsd_recurse.c+= -Wno-macro-redefined # _REENTRANT redefined
.endif
.include <bsd.test.mk>