aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-07-19 17:51:05 +0100
committerPedro Alves <palves@redhat.com>2016-07-19 17:51:05 +0100
commit1f960ced9a3e4aa0823dcc234d9de49aebaee055 (patch)
tree45af369fc6b8311d228cee5a0eac38e6d4ccdf71
parenta6ebf6169a1bd14724b9ac49990089542396f576 (diff)
downloadbinutils-1f960ced9a3e4aa0823dcc234d9de49aebaee055.zip
binutils-1f960ced9a3e4aa0823dcc234d9de49aebaee055.tar.gz
binutils-1f960ced9a3e4aa0823dcc234d9de49aebaee055.tar.bz2
Build gdb.opt/inline-*.exp tests at -O0, rely on __attribute__((always_inline))
A test recently added to gdb.opt/inline-cmds.exp fails for arm-none-eabi targets because -O2 leads to instructions to be reordered widely. I guess it might have made sense years ago to enable optimization in these tests, but I fail to see the need for that nowadays. Using -O0 while relying on __attribute__((always_inline)), which is already used in the tests [1] [2], avoids this sort of trouble, while still exercising the inlining-related use cases that are the focus of these tests. I think that nowadays we can safely assume that all compilers we care about support __attribute__((always_inline)) or similar. [1] - Except one spot that missed it. [2] - Note that the .exp files make sure the frames that should have been inlined are indeed inlined, with "info frame". gdb/testsuite/ChangeLog: 2016-07-19 Pedro Alves <palves@redhat.com> * gdb.opt/inline-break.exp: Remove optimize=-O2. * gdb.opt/inline-bt.exp: Likewise. * gdb.opt/inline-cmds.exp: Remove optimize=-O2 and add additional_flags=-Winline. * gdb.opt/inline-locals.exp: Likewise. * gdb.opt/inline-markers.c (ATTR): Define. (inlined_fn): Use it.
-rw-r--r--gdb/testsuite/ChangeLog10
-rw-r--r--gdb/testsuite/gdb.opt/inline-break.exp2
-rw-r--r--gdb/testsuite/gdb.opt/inline-bt.exp2
-rw-r--r--gdb/testsuite/gdb.opt/inline-cmds.exp2
-rw-r--r--gdb/testsuite/gdb.opt/inline-locals.exp2
-rw-r--r--gdb/testsuite/gdb.opt/inline-markers.c8
6 files changed, 21 insertions, 5 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c92264f..fb1f3b1 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2016-07-19 Pedro Alves <palves@redhat.com>
+
+ * gdb.opt/inline-break.exp: Remove optimize=-O2.
+ * gdb.opt/inline-bt.exp: Likewise.
+ * gdb.opt/inline-cmds.exp: Remove optimize=-O2 and add
+ additional_flags=-Winline.
+ * gdb.opt/inline-locals.exp: Likewise.
+ * gdb.opt/inline-markers.c (ATTR): Define.
+ (inlined_fn): Use it.
+
2016-07-19 Yao Qi <yao.qi@linaro.org>
* gdb.gdb/selftest.exp: Remove checks on is_remote and isnative.
diff --git a/gdb/testsuite/gdb.opt/inline-break.exp b/gdb/testsuite/gdb.opt/inline-break.exp
index b2aa22e..ac56b04 100644
--- a/gdb/testsuite/gdb.opt/inline-break.exp
+++ b/gdb/testsuite/gdb.opt/inline-break.exp
@@ -20,7 +20,7 @@
standard_testfile
if { [prepare_for_testing $testfile.exp $testfile $srcfile \
- {debug optimize=-O2 additional_flags=-Winline}] } {
+ {debug additional_flags=-Winline}] } {
return -1
}
diff --git a/gdb/testsuite/gdb.opt/inline-bt.exp b/gdb/testsuite/gdb.opt/inline-bt.exp
index 63d76e2..13c6993 100644
--- a/gdb/testsuite/gdb.opt/inline-bt.exp
+++ b/gdb/testsuite/gdb.opt/inline-bt.exp
@@ -17,7 +17,7 @@ standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
[list $srcfile $srcfile2] \
- {debug optimize=-O2 additional_flags=-Winline}]} {
+ {debug additional_flags=-Winline}]} {
return -1
}
diff --git a/gdb/testsuite/gdb.opt/inline-cmds.exp b/gdb/testsuite/gdb.opt/inline-cmds.exp
index 684f4dd..6c84848 100644
--- a/gdb/testsuite/gdb.opt/inline-cmds.exp
+++ b/gdb/testsuite/gdb.opt/inline-cmds.exp
@@ -19,7 +19,7 @@ set MIFLAGS "-i=mi"
standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
- [list $srcfile $srcfile2] {debug optimize=-O2}]} {
+ [list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
return -1
}
diff --git a/gdb/testsuite/gdb.opt/inline-locals.exp b/gdb/testsuite/gdb.opt/inline-locals.exp
index df2253a..36f7ed2 100644
--- a/gdb/testsuite/gdb.opt/inline-locals.exp
+++ b/gdb/testsuite/gdb.opt/inline-locals.exp
@@ -16,7 +16,7 @@
standard_testfile .c inline-markers.c
if {[prepare_for_testing $testfile.exp $testfile \
- [list $srcfile $srcfile2] {debug optimize=-O2}]} {
+ [list $srcfile $srcfile2] {debug additional_flags=-Winline}]} {
return -1
}
diff --git a/gdb/testsuite/gdb.opt/inline-markers.c b/gdb/testsuite/gdb.opt/inline-markers.c
index cf92e79..41f8a38 100644
--- a/gdb/testsuite/gdb.opt/inline-markers.c
+++ b/gdb/testsuite/gdb.opt/inline-markers.c
@@ -13,6 +13,12 @@
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 __GNUC__
+# define ATTR __attribute__((always_inline))
+#else
+# define ATTR
+#endif
+
extern int x, y;
extern volatile int z;
@@ -26,7 +32,7 @@ void marker(void)
x += y - z; /* set breakpoint 2 here */
}
-inline void inlined_fn(void)
+inline ATTR void inlined_fn(void)
{
x += y + z;
}