Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110723683
D28852.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D28852.diff
View Options
diff --git a/lib/libc/tests/ssp/Makefile b/lib/libc/tests/ssp/Makefile
--- a/lib/libc/tests/ssp/Makefile
+++ b/lib/libc/tests/ssp/Makefile
@@ -6,9 +6,10 @@
WARNS?= 2
CFLAGS.h_raw+= -fstack-protector-all -Wstack-protector
-.if ${COMPILER_TYPE} == "clang" && ${CC} == "cc"
-# Only use -fsanitize=bounds when using the in-tree compiler. Otherwise
-# we may link to a sanitizer library targeted at a newer kernel/libc.
+.if ${COMPILER_TYPE} == "clang"
+# Only use -fsanitize=bounds when using clang. Otherwise we are not able to
+# override the sanitizer runtime libraries to be the ones installed on the
+# target system.
CFLAGS.h_raw+= -fsanitize=bounds
.elif ${COMPILER_TYPE} == "gcc"
CFLAGS.h_raw+= --param ssp-buffer-size=1
@@ -25,24 +26,20 @@
PROGS+= h_memcpy
PROGS+= h_memmove
PROGS+= h_memset
-# This testcase doesn't run properly when not compiled with -fsantize=bounds
-# with clang, which is currently contingent on a compiler_rt update
-#
# XXX: the h_raw/h_read testcases don't cause a SIGABRT with in-tree gcc right
# now on amd64 when it trips the stack bounds specified in t_ssp.sh . This
# probably needs to be fixed as it's currently hardcoded.
-#
-# sanitizer is not tested or supported for ARM right now. sbruno
-.if ${COMPILER_TYPE} == "clang" && ${CC} == "cc" && !defined(_SKIP_BUILD) && \
+.if ${COMPILER_TYPE} == "clang" && !defined(_SKIP_BUILD) && \
(!defined(_RECURSING_PROGS) || ${PROG} == "h_raw")
-.if !defined(_CLANG_RESOURCE_DIR)
-_CLANG_RESOURCE_DIR!= ${CC:N${CCACHE_BIN}} -print-resource-dir
-.export _CLANG_RESOURCE_DIR
-.endif
-_libclang_rt_arch= ${MACHINE_ARCH:S/amd64/x86_64/:C/hf$//:S/mipsn32/mips64/}
-_libclang_rt_ubsan= ${_CLANG_RESOURCE_DIR}/lib/freebsd/libclang_rt.ubsan_standalone-${_libclang_rt_arch}.a
+.include "${SRCTOP}/lib/libclang_rt/compiler-rt-vars.mk"
+_libclang_rt_ubsan= ${SYSROOT}${SANITIZER_LIBDIR}/libclang_rt.ubsan_standalone-${CRTARCH}.a
.if exists(${_libclang_rt_ubsan})
PROGS+= h_raw
+LDADD.h_raw+= ${SANITIZER_LDFLAGS}
+.else
+.if make(all)
+.info "Could not find runtime library ${_libclang_rt_ubsan}, skipping h_raw"
+.endif
.endif
.endif
PROGS+= h_read
diff --git a/lib/libclang_rt/Makefile.inc b/lib/libclang_rt/Makefile.inc
--- a/lib/libclang_rt/Makefile.inc
+++ b/lib/libclang_rt/Makefile.inc
@@ -2,20 +2,12 @@
.include <bsd.compiler.mk>
-# armv[67] is a bit special since we allow a soft-floating version via
-# CPUTYPE matching *soft*. This variant may not actually work though.
-.if ${MACHINE_ARCH:Marmv[67]*} != "" && \
- (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "")
-CRTARCH?= armhf
-.else
-CRTARCH?= ${MACHINE_ARCH:C/amd64/x86_64/}
-.endif
CRTSRC= ${SRCTOP}/contrib/llvm-project/compiler-rt
+.include "compiler-rt-vars.mk"
.PATH: ${CRTSRC}/lib
-CLANGDIR= /usr/lib/clang/11.0.1
-LIBDIR= ${CLANGDIR}/lib/freebsd
+LIBDIR= ${SANITIZER_LIBDIR}
SHLIBDIR= ${LIBDIR}
NO_PIC=
diff --git a/lib/libclang_rt/compiler-rt-vars.mk b/lib/libclang_rt/compiler-rt-vars.mk
new file mode 100644
--- /dev/null
+++ b/lib/libclang_rt/compiler-rt-vars.mk
@@ -0,0 +1,24 @@
+CLANG_SUBDIR=clang/11.0.1
+CLANGDIR= /usr/lib/${CLANG_SUBDIR}
+SANITIZER_LIBDIR= ${CLANGDIR}/lib/freebsd
+
+# armv[67] is a bit special since we allow a soft-floating version via
+# CPUTYPE matching *soft*. This variant may not actually work though.
+.if ${MACHINE_ARCH:Marmv[67]*} != "" && \
+ (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "")
+CRTARCH?= armhf
+.else
+CRTARCH?= ${MACHINE_ARCH:S/amd64/x86_64/:C/hf$//:S/mipsn32/mips64/}
+.endif
+
+.if ${COMPILER_TYPE} == "clang"
+# The only way to set the path to the sanitizer libraries with clang is to
+# override the resource directory.
+# Note: lib/freebsd is automatically appended to the -resource-dir value.
+SANITIZER_LDFLAGS= -resource-dir=${SYSROOT}${CLANGDIR}
+# Also set RPATH to ensure that the dynamically linked runtime libs are found.
+SANITIZER_LDFLAGS+= -Wl,--enable-new-dtags
+SANITIZER_LDFLAGS+= -Wl,-rpath,${SANITIZER_LIBDIR}
+.else
+.error "Unknown link flags for -fsanitize=... COMPILER_TYPE=${COMPILER_TYPE}"
+.endif
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 23, 8:51 AM (5 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16791578
Default Alt Text
D28852.diff (3 KB)
Attached To
Mode
D28852: Allow using sanitizers for ssp tests with out-of-tree compiler
Attached
Detach File
Event Timeline
Log In to Comment