aboutsummaryrefslogtreecommitdiff
path: root/libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2023-02-16 13:57:58 -0800
committerIndu Bhagat <indu.bhagat@oracle.com>2024-04-25 15:03:50 -0700
commitbb5f22a1a3db024ed8068e87a9df4ee2ee516252 (patch)
treefb64b62400d5c673b945f851d47e269c2ec5f267 /libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c
parentf512d7fb5d9bdda349b3410d1905599b5989e35e (diff)
downloadgdb-bb5f22a1a3db024ed8068e87a9df4ee2ee516252.zip
gdb-bb5f22a1a3db024ed8068e87a9df4ee2ee516252.tar.gz
gdb-bb5f22a1a3db024ed8068e87a9df4ee2ee516252.tar.bz2
libsframest: use as a test tool instead
Add a configure time check for dl_iterate_phdr and run libsframe.stacktrace testsuite using libsframest. libsframest is the library for stack tracing using the SFrame stack trace format. libsframest is not installed anymore but used in the testsuite only. TBD: - More renamings are in order. - Cleanup the .exp files. - Disable (libsframest based) stack tracer tests in a cross build
Diffstat (limited to 'libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c')
-rw-r--r--libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c b/libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c
new file mode 100644
index 0000000..3b0ee91
--- /dev/null
+++ b/libsframe/testsuite/libsframe.stacktrace/stacktrace-inline-2.c
@@ -0,0 +1,108 @@
+/* Copyright (C) 2022 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/>. */
+
+/* This is only ever run if it is compiled with a new-enough GCC, but
+ we don't want the compilation to fail if compiled by some other
+ compiler. */
+
+/* This is a revised version of gdb/testsuite/gdb.opt/inline-cmds.c. */
+
+#ifdef __GNUC__
+#define ATTR __attribute__((always_inline))
+#else
+#define ATTR
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <execinfo.h>
+#include "sframe-stacktrace-api.h"
+
+#define BT_BUF_SIZE 10
+
+int x, y;
+volatile int z = 0;
+volatile int result;
+
+void noinline(void);
+
+inline ATTR void outer_inline1(void)
+{
+ noinline ();
+}
+
+inline ATTR void outer_inline2(void)
+{
+ outer_inline1 ();
+}
+
+int main (void)
+{ /* start of main */
+ int val;
+
+ x = 7;
+ y = 8;
+
+ outer_inline2 ();
+
+ return 0;
+}
+
+
+/* funclist for inline-cmds. */
+const char *const func_list[] =
+{
+ "noinline",
+ "main"
+};
+
+inline ATTR void inlined_fn(void)
+{
+ x += y + z;
+
+ void *buffer[BT_BUF_SIZE];
+ char **strings;
+ /* Call the unwinder to get an array of return addresses. */
+ int j, err;
+ int nptrs = sframe_stacktrace (buffer, BT_BUF_SIZE, &err);
+ if (nptrs == -1 || nptrs != 2)
+ {
+ printf ("SFrame error: %s (%d)\n", sframe_bt_errmsg (err), nptrs);
+ return;
+ }
+
+ /* Get these addresses symbolically. */
+ strings = backtrace_symbols (buffer, nptrs);
+ if (strings == NULL)
+ {
+ printf ("Error in backtrace_symbols");
+ return;
+ }
+
+ /* Verify the results. */
+ for (j = 0; j < nptrs; j++)
+ if (!strstr (strings[j], func_list[j]))
+ break;
+
+ free(strings);
+ printf ("%s: stacktrace with inlined function test 2\n",
+ (j == nptrs) ? "PASS" : "FAIL");
+}
+
+void noinline(void)
+{
+ inlined_fn (); /* inlined */
+}