[2/2] gdb/testsuite/gdb.trace: Deduplicate set_point assembly.
Commit Message
The assembly code for emitting the proper tracepointable instruction
was duplicated in many places. Keep it in one place, to reduce work
needed for new targets.
gdb/testsuite/ChangeLog:
* gdb.trace/change-loc.h: include "trace-common.h", remove SYMBOL
macro.
(func5): Removed.
(func4): Use TRACEPOINT_ASM.
* gdb.trace/ftrace-lock.c: include "trace-common.h", remove SYMBOL
macro.
(func): Removed.
(thread_function): Use TRACEPOINT_ASM.
* gdb.trace/ftrace.c: include "trace-common.h", remove SYMBOL macro.
(func): Remove.
(marker): Use TRACEPOINT_ASM.
* gdb.trace/pendshr1.c: include "trace-common.h", remove SYMBOL macro.
(pendfunc1): Remove.
(pendfunc): Use TRACEPOINT_ASM.
* gdb.trace/pendshr2.c: include "trace-common.h", remove SYMBOL macro.
(foo): Remove.
(pendfunc2): Use TRACEPOINT_ASM.
* gdb.trace/trace-break.c: include "trace-common.h", remove SYMBOL
macro.
(func): Remove.
(marker): Use TRACEPOINT_ASM.
* gdb.trace/trace-common.h: New header.
* gdb.trace/trace-condition.c: include "trace-common.h", remove SYMBOL
macro.
(func): Remove.
(marker): Use TRACEPOINT_ASM.
* gdb.trace/trace-mt.c: include "trace-common.h", remove SYMBOL macro.
(func): Remove.
(thread_function): Use TRACEPOINT_ASM.
---
Preparation for s390 trace support.
gdb/testsuite/ChangeLog | 32 ++++++++++++++++++
gdb/testsuite/gdb.trace/change-loc.h | 24 ++------------
gdb/testsuite/gdb.trace/ftrace-lock.c | 25 ++------------
gdb/testsuite/gdb.trace/ftrace.c | 23 ++-----------
gdb/testsuite/gdb.trace/pendshr1.c | 25 ++------------
gdb/testsuite/gdb.trace/pendshr2.c | 22 ++-----------
gdb/testsuite/gdb.trace/trace-break.c | 32 ++----------------
gdb/testsuite/gdb.trace/trace-common.h | 55 +++++++++++++++++++++++++++++++
gdb/testsuite/gdb.trace/trace-condition.c | 24 ++------------
gdb/testsuite/gdb.trace/trace-mt.c | 23 ++-----------
10 files changed, 104 insertions(+), 181 deletions(-)
create mode 100644 gdb/testsuite/gdb.trace/trace-common.h
Comments
Marcin Kościelnicki <koriakin@0x04.net> writes:
> +/* TRACEPOINT_ASM expands to an assembly instruction large enough to fit
> + a fast tracepoint jump. The parameter is the label where we'll set
> + tracepoints and breakpoints. */
> +
> +#if (defined __x86_64__ || defined __i386__)
> +
> +static void
> +x86_trace_dummy ()
> +{
> + int x = 0;
> + int y = x + 4;
> +}
> +
> +#define TRACEPOINT_ASM(name) \
> + asm (" .global " SYMBOL(name) "\n" \
> + SYMBOL(name) ":\n" \
> + " call " SYMBOL(x86_trace_dummy) "\n" \
> + )
> +
> +#elif (defined __aarch64__)
> +
> +#define TRACEPOINT_ASM(name) \
> + asm (" .global " SYMBOL(name) "\n" \
> + SYMBOL(name) ":\n" \
> + " nop\n" \
> + )
> +
> +#else
TRACEPOINT_ASM isn't a good name to me. How about
FAST_TRACEPOINT_LABEL?
Otherwise the patch looks good to me.
On 11/11/15 09:42, Yao Qi wrote:
> Marcin Kościelnicki <koriakin@0x04.net> writes:
>
>> +/* TRACEPOINT_ASM expands to an assembly instruction large enough to fit
>> + a fast tracepoint jump. The parameter is the label where we'll set
>> + tracepoints and breakpoints. */
>> +
>> +#if (defined __x86_64__ || defined __i386__)
>> +
>> +static void
>> +x86_trace_dummy ()
>> +{
>> + int x = 0;
>> + int y = x + 4;
>> +}
>> +
>> +#define TRACEPOINT_ASM(name) \
>> + asm (" .global " SYMBOL(name) "\n" \
>> + SYMBOL(name) ":\n" \
>> + " call " SYMBOL(x86_trace_dummy) "\n" \
>> + )
>> +
>> +#elif (defined __aarch64__)
>> +
>> +#define TRACEPOINT_ASM(name) \
>> + asm (" .global " SYMBOL(name) "\n" \
>> + SYMBOL(name) ":\n" \
>> + " nop\n" \
>> + )
>> +
>> +#else
>
> TRACEPOINT_ASM isn't a good name to me. How about
> FAST_TRACEPOINT_LABEL?
>
> Otherwise the patch looks good to me.
>
Yeah, that sounds better, will push with FAST_TRACEPOINT_LABEL.
Thanks!
@@ -1,5 +1,37 @@
2015-11-10 Marcin Kościelnicki <koriakin@0x04.net>
+ * gdb.trace/change-loc.h: include "trace-common.h", remove SYMBOL
+ macro.
+ (func5): Removed.
+ (func4): Use TRACEPOINT_ASM.
+ * gdb.trace/ftrace-lock.c: include "trace-common.h", remove SYMBOL
+ macro.
+ (func): Removed.
+ (thread_function): Use TRACEPOINT_ASM.
+ * gdb.trace/ftrace.c: include "trace-common.h", remove SYMBOL macro.
+ (func): Remove.
+ (marker): Use TRACEPOINT_ASM.
+ * gdb.trace/pendshr1.c: include "trace-common.h", remove SYMBOL macro.
+ (pendfunc1): Remove.
+ (pendfunc): Use TRACEPOINT_ASM.
+ * gdb.trace/pendshr2.c: include "trace-common.h", remove SYMBOL macro.
+ (foo): Remove.
+ (pendfunc2): Use TRACEPOINT_ASM.
+ * gdb.trace/trace-break.c: include "trace-common.h", remove SYMBOL
+ macro.
+ (func): Remove.
+ (marker): Use TRACEPOINT_ASM.
+ * gdb.trace/trace-common.h: New header.
+ * gdb.trace/trace-condition.c: include "trace-common.h", remove SYMBOL
+ macro.
+ (func): Remove.
+ (marker): Use TRACEPOINT_ASM.
+ * gdb.trace/trace-mt.c: include "trace-common.h", remove SYMBOL macro.
+ (func): Remove.
+ (thread_function): Use TRACEPOINT_ASM.
+
+2015-11-10 Marcin Kościelnicki <koriakin@0x04.net>
+
* gdb.trace/backtrace.exp: Use global fpreg/spreg definition, add $
in front.
* gdb.trace/change-loc.exp: Use global pcreg definition.
@@ -15,30 +15,10 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
-
-/* Called from asm. */
-static void __attribute__((used))
-func5 (void)
-{}
+#include "trace-common.h"
static void
func4 (void)
{
- /* `set_tracepoint' is the label where we'll set multiple tracepoints and
- breakpoints at. The insn at the label must the large enough to
- fit a fast tracepoint jump. */
- asm (" .global " SYMBOL(set_tracepoint) "\n"
- SYMBOL(set_tracepoint) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(func5) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
-
+ TRACEPOINT_ASM(set_tracepoint);
}
@@ -16,12 +16,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <pthread.h>
-
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
+#include "trace-common.h"
/* Called if the testcase failed. */
static void
@@ -61,26 +56,10 @@ gdb_agent_gdb_collect (void *tpoint, unsigned char *regs)
}
}
-/* Called from asm. */
-static void __attribute__((used))
-func (void)
-{
-}
-
static void *
thread_function (void *arg)
{
- /* `set_point' is the label at which to set a fast tracepoint. The
- insn at the label must be large enough to fit a fast tracepoint
- jump. */
- asm (" .global " SYMBOL (set_point) "\n"
- SYMBOL (set_point) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL (func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point);
}
static void
@@ -15,11 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
+#include "trace-common.h"
int globvar;
@@ -27,25 +23,10 @@ static void
begin (void)
{}
-/* Called from asm. */
-static void __attribute__((used))
-func (void)
-{}
-
static void
marker (int anarg)
{
- /* `set_point' is the label at which to set a fast tracepoint. The
- insn at the label must be large enough to fit a fast tracepoint
- jump. */
- asm (" .global " SYMBOL(set_point) "\n"
- SYMBOL(set_point) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point);
++anarg;
@@ -15,31 +15,10 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
-
-static void
-pendfunc1 (void)
-{
- int x = 0;
- int y = x + 4;
-}
+#include "trace-common.h"
void
pendfunc (int x)
{
- /* `set_point1' is the label where we'll set multiple tracepoints and
- breakpoints at. The insn at the label must the large enough to
- fit a fast tracepoint jump. */
- asm (" .global " SYMBOL(set_point1) "\n"
- SYMBOL(set_point1) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(pendfunc1) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point1);
}
@@ -15,28 +15,10 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
-
-static void
-foo ()
-{}
+#include "trace-common.h"
void
pendfunc2 (int x)
{
- /* `set_point2' is the label where we'll set multiple tracepoints and
- breakpoints at. The insn at the label must the large enough to
- fit a fast tracepoint jump. */
- asm (" .global " SYMBOL(set_point2) "\n"
- SYMBOL(set_point2) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(foo) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point2);
}
@@ -15,16 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
-
-/* Called from asm. */
-static void __attribute__((used))
-func (void)
-{}
+#include "trace-common.h"
static void
marker (void)
@@ -34,26 +25,9 @@ marker (void)
int a = 0;
int b = a;
- /* `set_point' is the label where we'll set multiple tracepoints and
- breakpoints at. The insn at the label must the large enough to
- fit a fast tracepoint jump. */
- asm (" .global " SYMBOL(set_point) "\n"
- SYMBOL(set_point) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point);
- asm (" .global " SYMBOL(after_set_point) "\n"
- SYMBOL(after_set_point) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(after_set_point);
}
static void
new file mode 100644
@@ -0,0 +1,55 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2011-2015 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef SYMBOL_PREFIX
+#define SYMBOL(str) SYMBOL_PREFIX #str
+#else
+#define SYMBOL(str) #str
+#endif
+
+/* TRACEPOINT_ASM expands to an assembly instruction large enough to fit
+ a fast tracepoint jump. The parameter is the label where we'll set
+ tracepoints and breakpoints. */
+
+#if (defined __x86_64__ || defined __i386__)
+
+static void
+x86_trace_dummy ()
+{
+ int x = 0;
+ int y = x + 4;
+}
+
+#define TRACEPOINT_ASM(name) \
+ asm (" .global " SYMBOL(name) "\n" \
+ SYMBOL(name) ":\n" \
+ " call " SYMBOL(x86_trace_dummy) "\n" \
+ )
+
+#elif (defined __aarch64__)
+
+#define TRACEPOINT_ASM(name) \
+ asm (" .global " SYMBOL(name) "\n" \
+ SYMBOL(name) ":\n" \
+ " nop\n" \
+ )
+
+#else
+
+#error "unsupported architecture for trace tests"
+
+#endif
@@ -15,11 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
+#include "trace-common.h"
int globvar;
@@ -28,26 +24,10 @@ begin (void)
{
}
-/* Called from asm. */
-static void __attribute__((used))
-func (void)
-{
-}
-
static void
marker (int anarg)
{
- /* `set_point' is the label at which to set a fast tracepoint. The
- insn at the label must be large enough to fit a fast tracepoint
- jump. */
- asm (" .global " SYMBOL (set_point) "\n"
- SYMBOL (set_point) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL (func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point);
}
static void
@@ -16,31 +16,12 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <pthread.h>
-
-#ifdef SYMBOL_PREFIX
-#define SYMBOL(str) SYMBOL_PREFIX #str
-#else
-#define SYMBOL(str) #str
-#endif
-/* Called from asm. */
-static void __attribute__((used))
-func (void)
-{}
+#include "trace-common.h"
static void *
thread_function(void *arg)
{
- /* `set_point1' is the label at which to set a fast tracepoint. The
- insn at the label must be large enough to fit a fast tracepoint
- jump. */
- asm (" .global " SYMBOL(set_point1) "\n"
- SYMBOL(set_point1) ":\n"
-#if (defined __x86_64__ || defined __i386__)
- " call " SYMBOL(func) "\n"
-#elif (defined __aarch64__)
- " nop\n"
-#endif
- );
+ TRACEPOINT_ASM(set_point1);
}
static void