From a8129512f6cd2ce6cbf379f3bec00fe41c304a43 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 17 Sep 2020 23:33:42 +0100 Subject: [PATCH] gdb.base/{prologue,symbol-alias}.exp C++ify Make these testcases work when compiled as C++ programs. 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/ChangeLog | 9 +++++++++ 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 ++++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 211132a4362..b123bb60540 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2020-09-17 Pedro Alves + + * 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. + 2020-09-17 Pedro Alves * gdb.python/py-nested-maps.c (struct key_t): Rename to... 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 " + gdb_test "p $f" " = {(struct )?S \\*\\(void\\)} $hex " 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) { -- 2.30.2