diff --git a/runners/bench_runner.c b/runners/bench_runner.c index d49f9761..e27c1899 100644 --- a/runners/bench_runner.c +++ b/runners/bench_runner.c @@ -123,8 +123,13 @@ typedef struct bench_id { // bench suites are linked into a custom ld section +#if defined(__APPLE__) +extern struct bench_suite __start__bench_suites __asm("section$start$__DATA$_bench_suites"); +extern struct bench_suite __stop__bench_suites __asm("section$end$__DATA$_bench_suites"); +#else extern struct bench_suite __start__bench_suites; extern struct bench_suite __stop__bench_suites; +#endif const struct bench_suite *bench_suites = &__start__bench_suites; #define BENCH_SUITE_COUNT \ diff --git a/runners/test_runner.c b/runners/test_runner.c index 37cd1e7d..76cb1497 100644 --- a/runners/test_runner.c +++ b/runners/test_runner.c @@ -136,8 +136,13 @@ typedef struct test_id { // test suites are linked into a custom ld section +#if defined(__APPLE__) +extern struct test_suite __start__test_suites __asm("section$start$__DATA$_test_suites"); +extern struct test_suite __stop__test_suites __asm("section$end$__DATA$_test_suites"); +#else extern struct test_suite __start__test_suites; extern struct test_suite __stop__test_suites; +#endif const struct test_suite *test_suites = &__start__test_suites; #define TEST_SUITE_COUNT \ diff --git a/scripts/bench.py b/scripts/bench.py index f22841ea..0ed24825 100755 --- a/scripts/bench.py +++ b/scripts/bench.py @@ -404,12 +404,15 @@ def compile(bench_paths, **args): f.writeln() # create suite struct - # + f.writeln('#if defined(__APPLE__)') + f.writeln('__attribute__((section("__DATA,_bench_suites")))') + f.writeln('#else') # note we place this in the custom bench_suites section with # minimum alignment, otherwise GCC ups the alignment to # 32-bytes for some reason f.writeln('__attribute__((section("_bench_suites"), ' 'aligned(1)))') + f.writeln('#endif') f.writeln('const struct bench_suite __bench__%s__suite = {' % suite.name) f.writeln(4*' '+'.name = "%s",' % suite.name) diff --git a/scripts/test.py b/scripts/test.py index e7f78e4c..0b3e68dd 100755 --- a/scripts/test.py +++ b/scripts/test.py @@ -412,12 +412,15 @@ def compile(test_paths, **args): f.writeln() # create suite struct - # + f.writeln('#if defined(__APPLE__)') + f.writeln('__attribute__((section("__DATA,_test_suites")))') + f.writeln('#else') # note we place this in the custom test_suites section with # minimum alignment, otherwise GCC ups the alignment to # 32-bytes for some reason f.writeln('__attribute__((section("_test_suites"), ' 'aligned(1)))') + f.writeln('#endif') f.writeln('const struct test_suite __test__%s__suite = {' % suite.name) f.writeln(4*' '+'.name = "%s",' % suite.name)