Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/usr.bin/c++ Move common UBSAN test case code into ubsa...



details:   https://anonhg.NetBSD.org/src/rev/2a58c2225bda
branches:  trunk
changeset: 447970:2a58c2225bda
user:      mgorny <mgorny%NetBSD.org@localhost>
date:      Tue Jan 29 20:07:03 2019 +0000

description:
Move common UBSAN test case code into ubsan_common.subr

Reviewed by <kamil>

diffstat:

 tests/usr.bin/c++/Makefile                     |   18 +-
 tests/usr.bin/c++/asan_common.subr             |    2 +-
 tests/usr.bin/c++/t_ubsan_int_add_overflow.sh  |  171 +-----------------------
 tests/usr.bin/c++/t_ubsan_int_divzero.sh       |  164 +----------------------
 tests/usr.bin/c++/t_ubsan_int_neg_overflow.sh  |  170 +-----------------------
 tests/usr.bin/c++/t_ubsan_int_sub_overflow.sh  |  171 +-----------------------
 tests/usr.bin/c++/t_ubsan_vla_out_of_bounds.sh |  169 +-----------------------
 tests/usr.bin/c++/ubsan_common.subr            |  162 +++++++++++++++++++++++
 8 files changed, 228 insertions(+), 799 deletions(-)

diffs (truncated from 1163 to 300 lines):

diff -r 7d8616e6093c -r 2a58c2225bda tests/usr.bin/c++/Makefile
--- a/tests/usr.bin/c++/Makefile        Tue Jan 29 20:02:34 2019 +0000
+++ b/tests/usr.bin/c++/Makefile        Tue Jan 29 20:07:03 2019 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.10 2019/01/29 20:02:34 mgorny Exp $
+# $NetBSD: Makefile,v 1.11 2019/01/29 20:07:03 mgorny Exp $
 
 .include <bsd.own.mk>
 
@@ -12,13 +12,16 @@
 ASAN_TESTS+=   t_asan_poison
 ASAN_TESTS+=   t_asan_uaf
 
+UBSAN_TESTS=   #
+UBSAN_TESTS+=  t_ubsan_int_add_overflow
+UBSAN_TESTS+=  t_ubsan_int_neg_overflow
+UBSAN_TESTS+=  t_ubsan_vla_out_of_bounds
+UBSAN_TESTS+=  t_ubsan_int_sub_overflow
+UBSAN_TESTS+=  t_ubsan_int_divzero
+
 TESTS_SH=      #
 TESTS_SH+=     $(ASAN_TESTS)
-TESTS_SH+=     t_ubsan_int_add_overflow
-TESTS_SH+=     t_ubsan_int_sub_overflow
-TESTS_SH+=     t_ubsan_int_neg_overflow
-TESTS_SH+=     t_ubsan_int_divzero
-TESTS_SH+=     t_ubsan_vla_out_of_bounds
+TESTS_SH+=     $(UBSAN_TESTS)
 TESTS_SH+=     t_call_once
 TESTS_SH+=     t_call_once2
 TESTS_SH+=     t_cxxruntime
@@ -29,5 +32,8 @@
 .for test in ${ASAN_TESTS}
 TESTS_SH_SRC_${test}=  asan_common.subr ${test}.sh
 .endfor
+.for test in ${UBSAN_TESTS}
+TESTS_SH_SRC_${test}=  ubsan_common.subr ${test}.sh
+.endfor
 
 .include <bsd.test.mk>
diff -r 7d8616e6093c -r 2a58c2225bda tests/usr.bin/c++/asan_common.subr
--- a/tests/usr.bin/c++/asan_common.subr        Tue Jan 29 20:02:34 2019 +0000
+++ b/tests/usr.bin/c++/asan_common.subr        Tue Jan 29 20:07:03 2019 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: asan_common.subr,v 1.1 2019/01/29 20:02:34 mgorny Exp $
+#      $NetBSD: asan_common.subr,v 1.2 2019/01/29 20:07:03 mgorny Exp $
 #
 # Copyright (c) 2018, 2019 The NetBSD Foundation, Inc.
 # All rights reserved.
diff -r 7d8616e6093c -r 2a58c2225bda tests/usr.bin/c++/t_ubsan_int_add_overflow.sh
--- a/tests/usr.bin/c++/t_ubsan_int_add_overflow.sh     Tue Jan 29 20:02:34 2019 +0000
+++ b/tests/usr.bin/c++/t_ubsan_int_add_overflow.sh     Tue Jan 29 20:07:03 2019 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 The NetBSD Foundation, Inc.
+# Copyright (c) 2018, 2019 The NetBSD Foundation, Inc.
 # All rights reserved.
 #
 # This code is derived from software contributed to The NetBSD Foundation
@@ -26,172 +26,23 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-test_target()
-{
-       SUPPORT='n'
-       if ! echo __GNUC__ | c++ -E - | grep -q __GNUC__; then
-               SUPPORT='y'
-       fi
-
-       if ! echo __clang__ | c++ -E - | grep -q __clang__; then
-               SUPPORT='y'
-       fi
-}
-
-atf_test_case int_add_overflow
-int_add_overflow_head() {
-       atf_set "descr" "Test Undefined Behavior for int addition overflows"
-       atf_set "require.progs" "c++"
-}
-
-atf_test_case int_add_overflow_profile
-int_add_overflow_profile_head() {
-       atf_set "descr" "Test Undefined Behavior for int addition overflows with profiling option"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_add_overflow_pic
-int_add_overflow_pic_head() {
-       atf_set "descr" "Test Undefined Behavior for int addition overflows with position independent code (PIC) flag"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_add_overflow_pie
-int_add_overflow_pie_head() {
-       atf_set "descr" "Test Undefined Behavior for int addition overflows with position independent execution (PIE) flag"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_add_overflow32
-int_add_overflow32_head() {
-       atf_set "descr" "Test Undefined Behavior for int addition overflows in NetBSD_32 emulation"
-       atf_set "require.progs" "c++ file diff cat"
-}
-
-
-int_add_overflow_body(){
-       cat > test.c << EOF
+UBSAN_CODE='
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = INT_MAX; l+=argc; return l;}
-EOF
-
-       c++ -fsanitize=undefined -o test test.c
-       atf_check -e match:"signed integer overflow" ./test
-}
-
-int_add_overflow_profile_body(){
-       cat > test.c << EOF
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = INT_MAX; l+=argc; return l;}
-EOF
-
-       c++ -fsanitize=undefined -o test -pg test.c
-       atf_check -e match:"signed integer overflow" ./test
-}
-
-int_add_overflow_pic_body(){
-       cat > test.c << EOF
-#include <stdio.h>
-#include <stdlib.h>
 int help(int);
-int main(int argc, char **argv) {volatile int k = help(argc); return k;}
-EOF
-
-       cat > pic.c << EOF
-#include <stdlib.h>
-#include <stdio.h>
-#include <limits.h>
+#ifndef PIC_MAIN
 int help(int count) {volatile int l = INT_MAX; l+= count; return l;}
-EOF
-
-       c++ -fsanitize=undefined -fPIC -shared -o libtest.so pic.c
-       c++ -o test test.c -fsanitize=undefined -L. -ltest
-
-       export LD_LIBRARY_PATH=.
-       atf_check -e match:"signed integer overflow" ./test
-}
-
-int_add_overflow_pie_body(){
-
-       #check whether -pie flag is supported on this architecture
-       if ! c++ -pie -dM -E - < /dev/null 2>/dev/null >/dev/null; then
-               atf_set_skip "c++ -pie not supported on this architecture"
-       fi
-       cat > test.c << EOF
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = INT_MAX; l+= argc; return l;}
-EOF
-
-       c++ -fsanitize=undefined -o test -fpie -pie test.c
-       atf_check -e match:"signed integer overflow" ./test
-}
-
-
-int_add_overflow32_body(){
+#endif
+#ifndef PIC_FOO
+int main(int argc, char **argv) {volatile int l = INT_MAX; l+=argc; return l;}
+#endif
+'
 
-       # check what this architecture is, after all
-       if ! c++ -dM -E - < /dev/null | grep -F -q _LP64; then
-               atf_skip "This is not a 64 bit architecture"
-       fi
-       if ! c++ -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then
-               atf_skip "c++ -m32 Not supported on this architecture"
-       else
-               if grep -F -q _LP64 ./def32; then
-               atf_fail "c++ -m32 Does not generate NetBSD32 binaries"
-               fi
-       fi
-
-       cat > test.c << EOF
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = INT_MAX; l+= argc; return l;}
-EOF
-
-       c++ -fsanitize=undefined -o md32 -m32 test.c
-       c++ -fsanitize=undefined -o md64 test.c
-       file -b ./md32 > ./ftype32
-       file -b ./md64 > ./ftype64
-       if diff ./ftype32 ./ftype64 >/dev/null; then
-               atf_fail "Generated 32bit binaries do not differ from 64bit ones"
-       fi
-       echo "32bit binaries on this platform are:"
-       cat ./ftype32
-       echo "64bit binaries are on the other hand:"
-       cat ./ftype64
-       atf_check -e match:"signed integer overflow" ./md32
-
-       # Another test with profile 32bit binaries, just to make sure everything has been thoroughly done
-       cat > test.c << EOF
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = INT_MAX; l+= argc; return l;}
-EOF
-
-       c++ -fsanitize=undefined -pg -m32 -o test test.c
-       atf_check -e match:"signed integer overflow" ./test
-}
-
-atf_test_case target_not_supported
-target_not_supported_head()
-{
-       atf_set "descr" "Test forced skip"
-}
+ubsan_test_case int_add_overflow "int addition overflows" \
+       "signed integer overflow"
 
 atf_init_test_cases()
 {
-       test_target
-       test $SUPPORT = 'n' && {
-               atf_add_test_case target_not_supported
-               return 0
-       }
-       atf_add_test_case int_add_overflow
-#      atf_add_test_case int_add_overflow_profile
-       atf_add_test_case int_add_overflow_pie
-       atf_add_test_case int_add_overflow_pic
-#      atf_add_test_case int_add_overflow32
+       ubsan_add_test_cases int_add_overflow
 }
diff -r 7d8616e6093c -r 2a58c2225bda tests/usr.bin/c++/t_ubsan_int_divzero.sh
--- a/tests/usr.bin/c++/t_ubsan_int_divzero.sh  Tue Jan 29 20:02:34 2019 +0000
+++ b/tests/usr.bin/c++/t_ubsan_int_divzero.sh  Tue Jan 29 20:07:03 2019 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 The NetBSD Foundation, Inc.
+# Copyright (c) 2018, 2019 The NetBSD Foundation, Inc.
 # All rights reserved.
 #
 # This code is derived from software contributed to The NetBSD Foundation
@@ -26,165 +26,21 @@
 # POSSIBILITY OF SUCH DAMAGE.
 #
 
-test_target()
-{
-       SUPPORT='n'
-       if ! echo __GNUC__ | c++ -E - | grep -q __GNUC__; then 
-               SUPPORT='y'
-       fi
-
-       if ! echo __clang__ | c++ -E - | grep -q __clang__; then 
-               SUPPORT='y'
-       fi
-}
-
-atf_test_case int_divzero
-int_divzero_head() {
-       atf_set "descr" "Test Undefined Behavior for int division with zero"
-       atf_set "require.progs" "c++"
-}
-
-atf_test_case int_divzero_profile
-int_divzero_profile_head() {
-       atf_set "descr" "Test Undefined Behavior for int division with zero with profiling option"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_divzero_pic
-int_divzero_pic_head() {
-       atf_set "descr" "Test Undefined Behavior for int division with zero with position independent code (PIC) flag"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_divzero_pie
-int_divzero_pie_head() {
-       atf_set "descr" "Test Undefined Behavior for int division with zero with position independent execution (PIE) flag"
-       atf_set "require.progs" "c++"
-}
-atf_test_case int_divzero32
-int_divzero32_head() {
-       atf_set "descr" "Test Undefined Behavior for int division with zero in NetBSD_32 emulation"
-       atf_set "require.progs" "c++ file diff cat"
-}
-
-
-int_divzero_body(){
-       cat > test.c << EOF
-#include <stdio.h>
-#include <stdlib.h>
-int main(int argc, char **argv) {volatile int l = argc; volatile int k = 0; l/= k; return l;}
-EOF



Home | Main Index | Thread Index | Old Index