summaryrefslogtreecommitdiff
path: root/libbacktrace/btest.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-11-19 15:46:03 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-11-19 15:46:03 +0100
commit1f96a712d15825c10b61db3febb85b7cd4c245dc (patch)
treea719603a47f4d7b58bb0a1113198349a988a2ba4 /libbacktrace/btest.c
parente4effef72de27cd0a9b16f9c6190ab7f97e92a5c (diff)
downloadgcc-1f96a712d15825c10b61db3febb85b7cd4c245dc.tar.gz
backtrace.h (backtrace_syminfo_callback): Add symsize argument.
* backtrace.h (backtrace_syminfo_callback): Add symsize argument. * elf.c (elf_syminfo): Pass 0 or sym->size to the callback as last argument. * btest.c (struct symdata): Add size field. (callback_three): Add symsize argument. Copy it to the data->size field. (f23): Set symdata.size to 0. (test5): Likewise. If sizeof (int) > 1, lookup address of ((uintptr_t) &global) + 1. Verify symdata.val and symdata.size values. From-SVN: r205028
Diffstat (limited to 'libbacktrace/btest.c')
-rw-r--r--libbacktrace/btest.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/libbacktrace/btest.c b/libbacktrace/btest.c
index c06493f341e..22b08e05030 100644
--- a/libbacktrace/btest.c
+++ b/libbacktrace/btest.c
@@ -92,7 +92,7 @@ struct sdata
struct symdata
{
const char *name;
- uintptr_t val;
+ uintptr_t val, size;
int failed;
};
@@ -238,7 +238,8 @@ error_callback_two (void *vdata, const char *msg, int errnum)
static void
callback_three (void *vdata, uintptr_t pc ATTRIBUTE_UNUSED,
- const char *symname, uintptr_t symval)
+ const char *symname, uintptr_t symval,
+ uintptr_t symsize)
{
struct symdata *data = (struct symdata *) vdata;
@@ -250,6 +251,7 @@ callback_three (void *vdata, uintptr_t pc ATTRIBUTE_UNUSED,
assert (data->name != NULL);
}
data->val = symval;
+ data->size = symsize;
}
/* The backtrace_syminfo error callback function. */
@@ -458,6 +460,7 @@ f23 (int f1line, int f2line)
symdata.name = NULL;
symdata.val = 0;
+ symdata.size = 0;
symdata.failed = 0;
i = backtrace_syminfo (state, addrs[j], callback_three,
@@ -605,12 +608,17 @@ test5 (void)
{
struct symdata symdata;
int i;
+ uintptr_t addr = (uintptr_t) &global;
+
+ if (sizeof (global) > 1)
+ addr += 1;
symdata.name = NULL;
symdata.val = 0;
+ symdata.size = 0;
symdata.failed = 0;
- i = backtrace_syminfo (state, (uintptr_t) &global, callback_three,
+ i = backtrace_syminfo (state, addr, callback_three,
error_callback_three, &symdata);
if (i == 0)
{
@@ -634,6 +642,22 @@ test5 (void)
symdata.name, "global");
symdata.failed = 1;
}
+ else if (symdata.val != (uintptr_t) &global)
+ {
+ fprintf (stderr,
+ "test5: unexpected syminfo value got %lx expected %lx\n",
+ (unsigned long) symdata.val,
+ (unsigned long) (uintptr_t) &global);
+ symdata.failed = 1;
+ }
+ else if (symdata.size != sizeof (global))
+ {
+ fprintf (stderr,
+ "test5: unexpected syminfo size got %lx expected %lx\n",
+ (unsigned long) symdata.size,
+ (unsigned long) sizeof (global));
+ symdata.failed = 1;
+ }
}
printf ("%s: backtrace_syminfo variable\n",