summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.base/inlinedvars.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/systemtap.base/inlinedvars.c')
-rw-r--r--testsuite/systemtap.base/inlinedvars.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/testsuite/systemtap.base/inlinedvars.c b/testsuite/systemtap.base/inlinedvars.c
index 2756323e..ab1d9fb2 100644
--- a/testsuite/systemtap.base/inlinedvars.c
+++ b/testsuite/systemtap.base/inlinedvars.c
@@ -4,16 +4,20 @@ m(char *name, int i, long j)
// Random syntactical block to be inlined.
// Mimics what STAP_PROBE macro does a bit.
do {
+ // Dummy (volatile) counter to trick gcc into thinking we are actually
+ // using the label. If not it will partially optimize the label away,
+ // but still emits a somewhat bogus DW_AT_low_pc for it...
+ volatile int c = 0;
volatile __typeof__(name) p_name = name;
volatile __typeof__(i) p_i = i;
volatile __typeof__(j) p_j = j;
// empty asm to force locals into regs.
- inlined_label: asm volatile ("" :: "g"(p_name), "g"(p_i), "g"(p_j));
+ inlined_label: asm volatile ("nop" : "=g"(c) : "g"(p_name), "g"(p_i), "g"(p_j));
+ if (c != 0) goto inlined_label;
} while (0);
return i + 32;
}
-/* XXX PR10537 label() doesn't select multiple instances.
static inline int
call(int pi, long pj)
{
@@ -29,15 +33,14 @@ call2(int pi2, long pj2)
volatile jc2 = pj2 - 64;
return m("call2", ic2, jc2);
}
-*/
int
main (int argc, char **argv)
{
volatile int i = 64;
volatile long j = 42;
- i = 54;// XXX PR10537 call(i, j);
- j = 150; // XXX PR10537 call2(i, j);
+ call(i, j);
+ call2(i, j);
m("main", i, j);
return 0;
}