diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-11-19 15:46:03 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-11-19 15:46:03 +0100 |
commit | 1f96a712d15825c10b61db3febb85b7cd4c245dc (patch) | |
tree | a719603a47f4d7b58bb0a1113198349a988a2ba4 /libbacktrace/btest.c | |
parent | e4effef72de27cd0a9b16f9c6190ab7f97e92a5c (diff) | |
download | gcc-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.c | 30 |
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", |