From: Marcin Kościelnicki Date: Tue, 10 Nov 2015 11:12:00 +0000 (+0100) Subject: gdb/testsuite/gdb.trace: Deduplicate set_point assembly. X-Git-Tag: users/ARM/embedded-binutils-2_26-branch-2016q1~126 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=430e004ef7ecb3f75fc3c6642c9fdfb1d85a3694;p=external%2Fbinutils.git gdb/testsuite/gdb.trace: Deduplicate set_point assembly. 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 FAST_TRACEPOINT_LABEL. * gdb.trace/ftrace-lock.c: include "trace-common.h", remove SYMBOL macro. (func): Removed. (thread_function): Use FAST_TRACEPOINT_LABEL. * gdb.trace/ftrace.c: include "trace-common.h", remove SYMBOL macro. (func): Remove. (marker): Use FAST_TRACEPOINT_LABEL. * gdb.trace/pendshr1.c: include "trace-common.h", remove SYMBOL macro. (pendfunc1): Remove. (pendfunc): Use FAST_TRACEPOINT_LABEL. * gdb.trace/pendshr2.c: include "trace-common.h", remove SYMBOL macro. (foo): Remove. (pendfunc2): Use FAST_TRACEPOINT_LABEL. * gdb.trace/trace-break.c: include "trace-common.h", remove SYMBOL macro. (func): Remove. (marker): Use FAST_TRACEPOINT_LABEL. * gdb.trace/trace-common.h: New header. * gdb.trace/trace-condition.c: include "trace-common.h", remove SYMBOL macro. (func): Remove. (marker): Use FAST_TRACEPOINT_LABEL. * gdb.trace/trace-mt.c: include "trace-common.h", remove SYMBOL macro. (func): Remove. (thread_function): Use FAST_TRACEPOINT_LABEL. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0f04109..85dcbe9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,35 @@ +2015-11-11 Marcin Kościelnicki + + * gdb.trace/change-loc.h: include "trace-common.h", remove SYMBOL + macro. + (func5): Removed. + (func4): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/ftrace-lock.c: include "trace-common.h", remove SYMBOL + macro. + (func): Removed. + (thread_function): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/ftrace.c: include "trace-common.h", remove SYMBOL macro. + (func): Remove. + (marker): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/pendshr1.c: include "trace-common.h", remove SYMBOL macro. + (pendfunc1): Remove. + (pendfunc): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/pendshr2.c: include "trace-common.h", remove SYMBOL macro. + (foo): Remove. + (pendfunc2): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/trace-break.c: include "trace-common.h", remove SYMBOL + macro. + (func): Remove. + (marker): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/trace-common.h: New header. + * gdb.trace/trace-condition.c: include "trace-common.h", remove SYMBOL + macro. + (func): Remove. + (marker): Use FAST_TRACEPOINT_LABEL. + * gdb.trace/trace-mt.c: include "trace-common.h", remove SYMBOL macro. + (func): Remove. + (thread_function): Use FAST_TRACEPOINT_LABEL. + 2015-11-10 Marcin Kościelnicki * gdb.trace/backtrace.exp: Use global fpreg/spreg definition, add $ diff --git a/gdb/testsuite/gdb.trace/change-loc.h b/gdb/testsuite/gdb.trace/change-loc.h index 8201455..00037e2 100644 --- a/gdb/testsuite/gdb.trace/change-loc.h +++ b/gdb/testsuite/gdb.trace/change-loc.h @@ -15,30 +15,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); - + FAST_TRACEPOINT_LABEL(set_tracepoint); } diff --git a/gdb/testsuite/gdb.trace/ftrace-lock.c b/gdb/testsuite/gdb.trace/ftrace-lock.c index 8ed45f4..a89af51 100644 --- a/gdb/testsuite/gdb.trace/ftrace-lock.c +++ b/gdb/testsuite/gdb.trace/ftrace-lock.c @@ -16,12 +16,7 @@ along with this program. If not, see . */ #include - -#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 - ); + FAST_TRACEPOINT_LABEL(set_point); } static void diff --git a/gdb/testsuite/gdb.trace/ftrace.c b/gdb/testsuite/gdb.trace/ftrace.c index 7373d66..4e80bf1 100644 --- a/gdb/testsuite/gdb.trace/ftrace.c +++ b/gdb/testsuite/gdb.trace/ftrace.c @@ -15,11 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); + FAST_TRACEPOINT_LABEL(set_point); ++anarg; diff --git a/gdb/testsuite/gdb.trace/pendshr1.c b/gdb/testsuite/gdb.trace/pendshr1.c index f08fb91..85fb743 100644 --- a/gdb/testsuite/gdb.trace/pendshr1.c +++ b/gdb/testsuite/gdb.trace/pendshr1.c @@ -15,31 +15,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); + FAST_TRACEPOINT_LABEL(set_point1); } diff --git a/gdb/testsuite/gdb.trace/pendshr2.c b/gdb/testsuite/gdb.trace/pendshr2.c index f7ec733..23fda6f 100644 --- a/gdb/testsuite/gdb.trace/pendshr2.c +++ b/gdb/testsuite/gdb.trace/pendshr2.c @@ -15,28 +15,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); + FAST_TRACEPOINT_LABEL(set_point2); } diff --git a/gdb/testsuite/gdb.trace/trace-break.c b/gdb/testsuite/gdb.trace/trace-break.c index 66bbe53..cb6d14b 100644 --- a/gdb/testsuite/gdb.trace/trace-break.c +++ b/gdb/testsuite/gdb.trace/trace-break.c @@ -15,16 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); + FAST_TRACEPOINT_LABEL(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 - ); + FAST_TRACEPOINT_LABEL(after_set_point); } static void diff --git a/gdb/testsuite/gdb.trace/trace-common.h b/gdb/testsuite/gdb.trace/trace-common.h new file mode 100644 index 0000000..f1d7339 --- /dev/null +++ b/gdb/testsuite/gdb.trace/trace-common.h @@ -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 . */ + +#ifdef SYMBOL_PREFIX +#define SYMBOL(str) SYMBOL_PREFIX #str +#else +#define SYMBOL(str) #str +#endif + +/* FAST_TRACEPOINT_LABEL 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 FAST_TRACEPOINT_LABEL(name) \ + asm (" .global " SYMBOL(name) "\n" \ + SYMBOL(name) ":\n" \ + " call " SYMBOL(x86_trace_dummy) "\n" \ + ) + +#elif (defined __aarch64__) + +#define FAST_TRACEPOINT_LABEL(name) \ + asm (" .global " SYMBOL(name) "\n" \ + SYMBOL(name) ":\n" \ + " nop\n" \ + ) + +#else + +#error "unsupported architecture for trace tests" + +#endif diff --git a/gdb/testsuite/gdb.trace/trace-condition.c b/gdb/testsuite/gdb.trace/trace-condition.c index d988d76..8eda10c 100644 --- a/gdb/testsuite/gdb.trace/trace-condition.c +++ b/gdb/testsuite/gdb.trace/trace-condition.c @@ -15,11 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#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 - ); + FAST_TRACEPOINT_LABEL(set_point); } static void diff --git a/gdb/testsuite/gdb.trace/trace-mt.c b/gdb/testsuite/gdb.trace/trace-mt.c index 7ae0305..af6d2c1 100644 --- a/gdb/testsuite/gdb.trace/trace-mt.c +++ b/gdb/testsuite/gdb.trace/trace-mt.c @@ -16,31 +16,12 @@ along with this program. If not, see . */ #include - -#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 - ); + FAST_TRACEPOINT_LABEL(set_point1); } static void