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.
This commit is contained in:
Florian Weimer 2016-12-10 21:16:57 +01:00
parent fea34d51e0
commit 341657bc9c
6 changed files with 28 additions and 22 deletions

View file

@ -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

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>