summaryrefslogtreecommitdiff
path: root/debug
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-12-10 21:16:57 +0100
committerFlorian Weimer <fweimer@redhat.com>2016-12-10 21:16:57 +0100
commit341657bc9c17d3ea4546c6d998e67ca349a78e80 (patch)
treea04c0d038e35c35ef492f1fd358b4f8b151b8145 /debug
parentfea34d51e03ec5ebf9b25cb3010751782bf27fb1 (diff)
downloadglibc-341657bc9c17d3ea4546c6d998e67ca349a78e80.tar.gz
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.
Diffstat (limited to 'debug')
-rw-r--r--debug/tst-backtrace.h2
-rw-r--r--debug/tst-backtrace2.c10
-rw-r--r--debug/tst-backtrace3.c8
-rw-r--r--debug/tst-backtrace4.c8
-rw-r--r--debug/tst-backtrace5.c8
5 files changed, 14 insertions, 22 deletions
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>