svn commit: r339908 - in head: etc/mtree lib/csu/tests lib/csu/tests/dso lib/csu/tests/dynamiclib
Andrew Turner
andrew at FreeBSD.org
Tue Oct 30 09:43:28 UTC 2018
Author: andrew
Date: Tue Oct 30 09:43:26 2018
New Revision: 339908
URL: https://svnweb.freebsd.org/changeset/base/339908
Log:
Run the csu tests on a DSO. This builds the tests into a shared library,
then runs these from the base test programs. With this we can check
crtbeginS.o and crtendS.o are working as expected.
MFC with: r339738
Sponsored by: DARPA, AFRL
Added:
head/lib/csu/tests/dso/
head/lib/csu/tests/dso/Makefile (contents, props changed)
head/lib/csu/tests/dynamiclib/
head/lib/csu/tests/dynamiclib/Makefile (contents, props changed)
Modified:
head/etc/mtree/BSD.tests.dist
head/lib/csu/tests/Makefile
head/lib/csu/tests/cxx_constructors.cc
head/lib/csu/tests/fini_test.c
head/lib/csu/tests/init_test.c
Modified: head/etc/mtree/BSD.tests.dist
==============================================================================
--- head/etc/mtree/BSD.tests.dist Tue Oct 30 09:36:31 2018 (r339907)
+++ head/etc/mtree/BSD.tests.dist Tue Oct 30 09:43:26 2018 (r339908)
@@ -273,6 +273,8 @@
csu
dynamic
..
+ dynamiclib
+ ..
static
..
..
Modified: head/lib/csu/tests/Makefile
==============================================================================
--- head/lib/csu/tests/Makefile Tue Oct 30 09:36:31 2018 (r339907)
+++ head/lib/csu/tests/Makefile Tue Oct 30 09:43:26 2018 (r339908)
@@ -1,6 +1,8 @@
# $FreeBSD$
+SUBDIR= dso
TESTS_SUBDIRS= dynamic
+TESTS_SUBDIRS+= dynamiclib
TESTS_SUBDIRS+= static
.include <bsd.test.mk>
Modified: head/lib/csu/tests/cxx_constructors.cc
==============================================================================
--- head/lib/csu/tests/cxx_constructors.cc Tue Oct 30 09:36:31 2018 (r339907)
+++ head/lib/csu/tests/cxx_constructors.cc Tue Oct 30 09:43:26 2018 (r339908)
@@ -39,10 +39,18 @@ __FBSDID("$FreeBSD$");
#include <stdlib.h>
#include <unistd.h>
+#ifndef DSO_LIB
#include <atf-c++.hpp>
+#endif
-static volatile int constructor_run;
-static bool run_destructor_test = false;
+extern volatile int constructor_run;
+extern bool run_destructor_test;
+
+#ifndef DSO_BASE
+volatile int constructor_run;
+bool run_destructor_test = false;
+#endif
+
struct Foo {
Foo() {
constructor_run = 1;
@@ -53,8 +61,12 @@ struct Foo {
}
};
extern Foo foo;
+
+#ifndef DSO_BASE
Foo foo;
+#endif
+#ifndef DSO_LIB
ATF_TEST_CASE_WITHOUT_HEAD(cxx_constructor);
ATF_TEST_CASE_BODY(cxx_constructor)
{
@@ -90,3 +102,4 @@ ATF_INIT_TEST_CASES(tcs)
ATF_ADD_TEST_CASE(tcs, cxx_constructor);
ATF_ADD_TEST_CASE(tcs, cxx_destructor);
}
+#endif
Added: head/lib/csu/tests/dso/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lib/csu/tests/dso/Makefile Tue Oct 30 09:43:26 2018 (r339908)
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR:H}
+SHLIB= h_csu
+SHLIB_NAME= libh_csu.so
+SHLIB_MAJOR= 1
+
+WITHOUT_STATIC=
+WITHOUT_PROFILE=
+WITHOUT_PIC=
+
+CFLAGS+= -DDSO_LIB
+
+.include "../Makefile.tests"
+SRCS=
+.for src in ${ATF_TESTS_C}
+SRCS+= ${src}.c
+.endfor
+.for src in ${ATF_TESTS_CXX}
+SRCS+= ${src}.cc
+.endfor
+
+LIBDIR= ${TESTSBASE}/lib/csu/dynamiclib/
+
+.include <bsd.lib.mk>
Added: head/lib/csu/tests/dynamiclib/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lib/csu/tests/dynamiclib/Makefile Tue Oct 30 09:43:26 2018 (r339908)
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR:H}
+CFLAGS+= -DDSO_BASE
+DPADD+= ${.OBJDIR:H}/dso/libh_csu.so
+LDFLAGS+= -Wl,-rpath,${TESTSDIR} -L${.OBJDIR:H}/dso
+LDADD+= -lh_csu
+
+.include "../Makefile.tests"
+
+.for test in ${ATF_TESTS_C}
+ATF_TESTS_CXX+= ${test}
+SRCS.${test}= ${test}.c
+.endfor
+ATF_TESTS_C:=
+
+.include <bsd.test.mk>
Modified: head/lib/csu/tests/fini_test.c
==============================================================================
--- head/lib/csu/tests/fini_test.c Tue Oct 30 09:36:31 2018 (r339907)
+++ head/lib/csu/tests/fini_test.c Tue Oct 30 09:43:26 2018 (r339908)
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/wait.h>
#include <errno.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <unistd.h>
@@ -43,10 +44,16 @@ __FBSDID("$FreeBSD$");
#include <crt.h>
+extern bool run_dtors_test;
+extern bool run_fini_array_test;
+void dso_handle_check(void);
+
+
+#ifndef DSO_BASE
typedef void (*func_ptr)(void);
-static bool run_dtors_test = false;
-static bool run_fini_array_test = false;
+bool run_dtors_test = false;
+bool run_fini_array_test = false;
static void
dtors_handler(void)
@@ -57,7 +64,9 @@ dtors_handler(void)
}
__section(".dtors") __used static func_ptr dtors_func =
&dtors_handler;
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(dtors_test);
ATF_TC_BODY(dtors_test, tc)
{
@@ -85,7 +94,9 @@ ATF_TC_BODY(dtors_test, tc)
break;
}
}
+#endif
+#ifndef DSO_BASE
static void
fini_array_handler(void)
{
@@ -95,7 +106,9 @@ fini_array_handler(void)
}
__section(".fini_array") __used static func_ptr fini_array_func =
&fini_array_handler;
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(fini_array_test);
ATF_TC_BODY(fini_array_test, tc)
{
@@ -118,15 +131,32 @@ ATF_TC_BODY(fini_array_test, tc)
break;
}
}
+#endif
+#ifndef DSO_BASE
extern void *__dso_handle;
+void
+dso_handle_check(void)
+{
+ void *dso = __dso_handle;
+
+#ifdef DSO_LIB
+ ATF_REQUIRE_MSG(dso != NULL,
+ "Null __dso_handle in DSO");
+#else
+ ATF_REQUIRE_MSG(dso == NULL,
+ "Invalid __dso_handle in non-DSO");
+#endif
+}
+#endif
+
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(dso_handle_test);
ATF_TC_BODY(dso_handle_test, tc)
{
- ATF_REQUIRE_MSG(__dso_handle == NULL,
- "Invalid __dso_handle in non-DSO");
+ dso_handle_check();
}
ATF_TP_ADD_TCS(tp)
@@ -138,3 +168,4 @@ ATF_TP_ADD_TCS(tp)
return (atf_no_error());
}
+#endif
Modified: head/lib/csu/tests/init_test.c
==============================================================================
--- head/lib/csu/tests/init_test.c Tue Oct 30 09:36:31 2018 (r339907)
+++ head/lib/csu/tests/init_test.c Tue Oct 30 09:43:26 2018 (r339908)
@@ -32,23 +32,36 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#ifndef DSO_LIB
#include <atf-c.h>
+#endif
#include <crt.h>
typedef void (*func_ptr)(void);
-static volatile int jcr_run;
-static const func_ptr *jcr_ptr;
-static volatile int ctors_run;
-static volatile int preinit_array_run;
-static volatile int preinit_array_state = -1;
-static volatile int init_array_run;
-static volatile int init_array_state = -1;
+extern volatile int jcr_run;
+extern const func_ptr *jcr_ptr;
+extern const void *jcr_func_ptr;
+extern volatile int ctors_run;
+extern volatile int preinit_array_run;
+extern volatile int preinit_array_state;
+extern volatile int init_array_run;
+extern volatile int init_array_state;
+#ifndef DSO_BASE
+volatile int jcr_run;
+const func_ptr *jcr_ptr;
+volatile int ctors_run;
+volatile int preinit_array_run;
+volatile int preinit_array_state = -1;
+volatile int init_array_run;
+volatile int init_array_state = -1;
+
void _Jv_RegisterClasses(const func_ptr *);
-__section(".jcr") __used static func_ptr jcr_func = (func_ptr)1;
+__section(".jcr") __used func_ptr static jcr_func = (func_ptr)1;
+const void *jcr_func_ptr = &jcr_func;
void
_Jv_RegisterClasses(const func_ptr *jcr)
@@ -57,16 +70,20 @@ _Jv_RegisterClasses(const func_ptr *jcr)
jcr_run = 1;
jcr_ptr = jcr;
}
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(jcr_test);
ATF_TC_BODY(jcr_test, tc)
{
ATF_REQUIRE_MSG(jcr_run == 1, ".jcr not run");
- ATF_REQUIRE_MSG(jcr_ptr == &jcr_func,
+ ATF_REQUIRE_MSG(jcr_ptr == jcr_func_ptr,
"Incorrect pointer passed to _Jv_RegisterClasses");
}
+#endif
+#ifndef DSO_BASE
static void
ctors_handler(void)
{
@@ -75,7 +92,9 @@ ctors_handler(void)
}
__section(".ctors") __used static func_ptr ctors_func =
&ctors_handler;
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(ctors_test);
ATF_TC_BODY(ctors_test, tc)
{
@@ -86,7 +105,9 @@ ATF_TC_BODY(ctors_test, tc)
ATF_REQUIRE_MSG(ctors_run == 0, ".ctors run");
#endif
}
+#endif
+#ifndef DSO_BASE
static void
preinit_array_handler(void)
{
@@ -96,16 +117,25 @@ preinit_array_handler(void)
}
__section(".preinit_array") __used static func_ptr preinit_array_func =
&preinit_array_handler;
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(preinit_array_test);
ATF_TC_BODY(preinit_array_test, tc)
{
+#ifdef DSO_BASE
+ /* Check .preinit_array wasn't run in a DSO */
+ ATF_REQUIRE_MSG(preinit_array_run == 0, ".preinit_array run in DSO");
+#else
ATF_REQUIRE_MSG(preinit_array_run == 1, ".preinit_array not run");
ATF_REQUIRE_MSG(preinit_array_state == 0,
".preinit_array was not run before .init_array");
+#endif
}
+#endif
+#ifndef DSO_BASE
static void
init_array_handler(void)
{
@@ -115,14 +145,18 @@ init_array_handler(void)
}
__section(".init_array") __used static func_ptr init_array_func =
&init_array_handler;
+#endif
+#ifndef DSO_LIB
ATF_TC_WITHOUT_HEAD(init_array_test);
ATF_TC_BODY(init_array_test, tc)
{
ATF_REQUIRE_MSG(init_array_run == 1, ".init_array not run");
+#ifndef DSO_BASE
ATF_REQUIRE_MSG(init_array_state == 1,
".init_array was not run after .preinit_array");
+#endif
}
ATF_TP_ADD_TCS(tp)
@@ -135,3 +169,4 @@ ATF_TP_ADD_TCS(tp)
return (atf_no_error());
}
+#endif
More information about the svn-src-all
mailing list