diff options
author | Florian Weimer <fweimer@redhat.com> | 2016-12-10 21:16:57 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2016-12-10 21:16:57 +0100 |
commit | 341657bc9c17d3ea4546c6d998e67ca349a78e80 (patch) | |
tree | a04c0d038e35c35ef492f1fd358b4f8b151b8145 | |
parent | fea34d51e03ec5ebf9b25cb3010751782bf27fb1 (diff) | |
download | glibc-341657bc9c17d3ea4546c6d998e67ca349a78e80.tar.gz glibc-341657bc9c17d3ea4546c6d998e67ca349a78e80.tar.xz glibc-341657bc9c17d3ea4546c6d998e67ca349a78e80.zip |
debug: Additional compiler barriers for backtrace tests [BZ #20956]
The new test framework changed the call stacks. The weak attribute acts as a strong compiler barrier. Some static functions had to be declared extern as a consequence.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | debug/tst-backtrace.h | 2 | ||||
-rw-r--r-- | debug/tst-backtrace2.c | 10 | ||||
-rw-r--r-- | debug/tst-backtrace3.c | 8 | ||||
-rw-r--r-- | debug/tst-backtrace4.c | 8 | ||||
-rw-r--r-- | debug/tst-backtrace5.c | 8 |
6 files changed, 28 insertions, 22 deletions
diff --git a/ChangeLog b/ChangeLog index 5d51e9ac29..4d31f4f81e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2016-12-10 Florian Weimer <fweimer@redhat.com> + + [BZ #20956] + * debug/tst-backtrace.h (NO_INLINE): Add noclone, weak attributes + as additional compiler barriers. + * debug/tst-backtrace2.c: Switch to <support/test-driver.c>. + (fn2, do_test): Declare with external linkage. + * debug/tst-backtrace3.c: Switch to <support/test-driver.c>. + (do_test): Declare with external linkage. + * debug/tst-backtrace4.c: Switch to <support/test-driver.c>. + (do_test): Declare with external linkage. + * debug/tst-backtrace5.c: Switch to <support/test-driver.c>. + (do_test): Declare with external linkage. + 2016-12-10 Andreas Schwab <schwab@linux-m68k.org> * support/support_test_main.c (support_test_main): Use correct diff --git a/debug/tst-backtrace.h b/debug/tst-backtrace.h index 1a53048a49..6a4b200c80 100644 --- a/debug/tst-backtrace.h +++ b/debug/tst-backtrace.h @@ -33,7 +33,7 @@ volatile int x; /* Use this attribute to prevent inlining, so that all expected frames are present. */ -#define NO_INLINE __attribute__ ((noinline)) +#define NO_INLINE __attribute__ ((noinline, noclone, weak)) /* Look for a match in SYM from backtrace_symbols to NAME, a fragment of a function name. Ignore the filename before '(', but presume diff --git a/debug/tst-backtrace2.c b/debug/tst-backtrace2.c index d139c10638..4224b558af 100644 --- a/debug/tst-backtrace2.c +++ b/debug/tst-backtrace2.c @@ -24,10 +24,6 @@ #include "tst-backtrace.h" -static int do_test (void); -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" - /* The backtrace should include at least f1, f2, f3, and do_test. */ #define NUM_FUNCTIONS 4 @@ -75,7 +71,7 @@ fn1 (void) check do_test. */ } -NO_INLINE static int +NO_INLINE int fn2 (void) { fn1 (); @@ -91,7 +87,7 @@ fn3 (void) return x; } -NO_INLINE static int +NO_INLINE int do_test (void) { /* Test BZ #18084. */ @@ -103,3 +99,5 @@ do_test (void) fn3 (); return ret; } + +#include <support/test-driver.c> diff --git a/debug/tst-backtrace3.c b/debug/tst-backtrace3.c index 74514d7fe8..f3135f2ce7 100644 --- a/debug/tst-backtrace3.c +++ b/debug/tst-backtrace3.c @@ -24,10 +24,6 @@ #include "tst-backtrace.h" -static int do_test (void); -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" - /* The backtrace should include at least 3 * fn, and do_test. */ #define NUM_FUNCTIONS 4 @@ -75,9 +71,11 @@ fn (int c) return x; } -NO_INLINE static int +NO_INLINE int do_test (void) { fn (2); return ret; } + +#include <support/test-driver.c> diff --git a/debug/tst-backtrace4.c b/debug/tst-backtrace4.c index 965e6bdfb7..db2be10d9d 100644 --- a/debug/tst-backtrace4.c +++ b/debug/tst-backtrace4.c @@ -27,10 +27,6 @@ #include "tst-backtrace.h" -static int do_test (void); -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" - /* The backtrace should include at least handle_signal, a signal trampoline, 3 * fn, and do_test. */ #define NUM_FUNCTIONS 6 @@ -115,9 +111,11 @@ fn (int c) return 0; } -NO_INLINE static int +NO_INLINE int do_test (void) { fn (2); return ret; } + +#include <support/test-driver.c> diff --git a/debug/tst-backtrace5.c b/debug/tst-backtrace5.c index c049bcafbc..a6ed4740a1 100644 --- a/debug/tst-backtrace5.c +++ b/debug/tst-backtrace5.c @@ -32,10 +32,6 @@ # define SIGACTION_FLAGS 0 #endif -static int do_test (void); -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" - /* The backtrace should include at least handle_signal, a signal trampoline, read, 3 * fn, and do_test. */ #define NUM_FUNCTIONS 7 @@ -133,9 +129,11 @@ fn (int c, int flags) return 0; } -NO_INLINE static int +NO_INLINE int do_test (void) { fn (2, SIGACTION_FLAGS); return ret; } + +#include <support/test-driver.c> |