[RFC,13/18] gdb.base/{prologue,symbol-alias}.exp C++ify

Message ID 20200914001437.31157-14-pedro@palves.net
State New
Headers show
Series
  • Allow building (more) C tests with a C++ compiler
Related show

Commit Message

Pedro Alves Sept. 14, 2020, 12:14 a.m.
These testcases use the alias attribute, which requires passing in the
target function's mangled name in C++.  To avoid having to figure out
how the functions are mangled, explicitly specify a linkage name.
This is preferred over 'extern "C"' because that doesn't work with
static functions.

gdb/testsuite/ChangeLog:

	* gdb.base/prologue.c [__cplusplus] (marker): Explicitly specify
	linkage name.
	* gdb.base/prologue.exp: Use print /d.
	* gdb.base/symbol-alias.exp: Handle C++ output.
	* gdb.base/symbol-alias2.c: Handle C++ output.
	[__cplusplus] (func): Explicitly specify linkage name.
---
 gdb/testsuite/gdb.base/prologue.c       | 6 ++++++
 gdb/testsuite/gdb.base/prologue.exp     | 2 +-
 gdb/testsuite/gdb.base/symbol-alias.exp | 2 +-
 gdb/testsuite/gdb.base/symbol-alias2.c  | 6 ++++++
 4 files changed, 14 insertions(+), 2 deletions(-)

-- 
2.14.5

Patch

diff --git a/gdb/testsuite/gdb.base/prologue.c b/gdb/testsuite/gdb.base/prologue.c
index c7de9162936..717bd3f106e 100644
--- a/gdb/testsuite/gdb.base/prologue.c
+++ b/gdb/testsuite/gdb.base/prologue.c
@@ -20,6 +20,12 @@  int leaf (void)
   return 1;
 }
 
+#ifdef __cplusplus
+/* So that the alias attribute below work without having to figure out
+   this function's mangled name.  */
+int marker (int val) asm ("marker");
+#endif
+
 int marker (int val)
 {
   leaf ();
diff --git a/gdb/testsuite/gdb.base/prologue.exp b/gdb/testsuite/gdb.base/prologue.exp
index ee834884735..20ab22efb9e 100644
--- a/gdb/testsuite/gdb.base/prologue.exp
+++ b/gdb/testsuite/gdb.base/prologue.exp
@@ -59,4 +59,4 @@  set pc1 [find_breakpoint_pc "marker"]
 
 set pc2 [find_breakpoint_pc "other"]
 
-gdb_test "print $pc1 == $pc2" "\\\$$decimal = 1" "same pc from minimal symbol"
+gdb_test "print /d $pc1 == $pc2" "\\\$$decimal = 1" "same pc from minimal symbol"
diff --git a/gdb/testsuite/gdb.base/symbol-alias.exp b/gdb/testsuite/gdb.base/symbol-alias.exp
index fcdcce2b702..1907cad478d 100644
--- a/gdb/testsuite/gdb.base/symbol-alias.exp
+++ b/gdb/testsuite/gdb.base/symbol-alias.exp
@@ -27,7 +27,7 @@  if ![runto_main] then {
 
 # Functions.
 foreach f {"func" "func_alias"} {
-    gdb_test "p $f" " = {struct S \\*\\(void\\)} $hex <func>"
+    gdb_test "p $f" " = {(struct )?S \\*\\(void\\)} $hex <func(\\(\\))?>"
     gdb_test "p *${f}()" "= {field1 = 1, field2 = 2}"
 }
 
diff --git a/gdb/testsuite/gdb.base/symbol-alias2.c b/gdb/testsuite/gdb.base/symbol-alias2.c
index e53c212607e..2c6185f4516 100644
--- a/gdb/testsuite/gdb.base/symbol-alias2.c
+++ b/gdb/testsuite/gdb.base/symbol-alias2.c
@@ -23,6 +23,12 @@  struct S
 
 struct S g_var_s = { 1, 2 };
 
+#ifdef __cplusplus
+/* So that the alias attribute below work without having to figure out
+   this function's mangled name.  */
+static struct S *func (void) asm ("func");
+#endif
+
 static struct S *
 func (void)
 {