aboutsummaryrefslogtreecommitdiff
path: root/libbacktrace
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2019-01-17 00:07:32 +0000
committerTom de Vries <tdevries@suse.de>2019-01-17 00:07:32 +0000
commit4b8ed894d4607910e7fc66ebed876133c6a96003 (patch)
treec45e23be50aa5e71905476e8df2e1ee1299a73ec /libbacktrace
parent3993e799ef76bb5fbb0e38cb482425c4d303e2f6 (diff)
[libbacktrace] Return struct dwarf_data pointer from elf_add
Allow the caller of elf_add access to the struct dwarf_data pointer corresponding to the added elf. 2019-01-17 Tom de Vries <tdevries@suse.de> * internal.h (backtrace_dwarf_add): Add fileline_entry parameter. * dwarf.c (backtrace_dwarf_add): Add and handle fileline_entry parameter. * elf.c (elf_add): Add and handle fileline_entry parameter. Add argument to backtrace_dwarf_add call. (phdr_callback, backtrace_initialize): Add argument to elf_add calls. * pecoff.c (coff_add): Add argument to backtrace_dwarf_add call. * xcoff.c (xcoff_add): Same. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@267993 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libbacktrace')
-rw-r--r--libbacktrace/ChangeLog10
-rw-r--r--libbacktrace/dwarf.c6
-rw-r--r--libbacktrace/elf.c23
-rw-r--r--libbacktrace/internal.h5
-rw-r--r--libbacktrace/pecoff.c3
-rw-r--r--libbacktrace/xcoff.c3
6 files changed, 37 insertions, 13 deletions
diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index d76341ac70e..f2d2954b1c6 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,5 +1,15 @@
2019-01-17 Tom de Vries <tdevries@suse.de>
+ * internal.h (backtrace_dwarf_add): Add fileline_entry parameter.
+ * dwarf.c (backtrace_dwarf_add): Add and handle fileline_entry parameter.
+ * elf.c (elf_add): Add and handle fileline_entry parameter. Add
+ argument to backtrace_dwarf_add call.
+ (phdr_callback, backtrace_initialize): Add argument to elf_add calls.
+ * pecoff.c (coff_add): Add argument to backtrace_dwarf_add call.
+ * xcoff.c (xcoff_add): Same.
+
+2019-01-17 Tom de Vries <tdevries@suse.de>
+
* elf.c (elf_add): Add and handle with_buildid_data and
with_buildid_size parameters. Handle .gnu_debugaltlink section.
(phdr_callback, backtrace_initialize): Add arguments to elf_add calls.
diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c
index dca5d909d9f..190c6fc131f 100644
--- a/libbacktrace/dwarf.c
+++ b/libbacktrace/dwarf.c
@@ -3064,7 +3064,8 @@ backtrace_dwarf_add (struct backtrace_state *state,
size_t dwarf_str_size,
int is_bigendian,
backtrace_error_callback error_callback,
- void *data, fileline *fileline_fn)
+ void *data, fileline *fileline_fn,
+ struct dwarf_data **fileline_entry)
{
struct dwarf_data *fdata;
@@ -3076,6 +3077,9 @@ backtrace_dwarf_add (struct backtrace_state *state,
if (fdata == NULL)
return 0;
+ if (fileline_entry != NULL)
+ *fileline_entry = fdata;
+
if (!state->threaded)
{
struct dwarf_data **pp;
diff --git a/libbacktrace/elf.c b/libbacktrace/elf.c
index abe4cded5e9..a863327df10 100644
--- a/libbacktrace/elf.c
+++ b/libbacktrace/elf.c
@@ -2638,8 +2638,8 @@ static int
elf_add (struct backtrace_state *state, const char *filename, int descriptor,
uintptr_t base_address, backtrace_error_callback error_callback,
void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf,
- int exe, int debuginfo, const char *with_buildid_data,
- uint32_t with_buildid_size)
+ struct dwarf_data **fileline_entry, int exe, int debuginfo,
+ const char *with_buildid_data, uint32_t with_buildid_size)
{
struct backtrace_view ehdr_view;
b_elf_ehdr ehdr;
@@ -3042,7 +3042,8 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
backtrace_release_view (state, &debugaltlink_view, error_callback,
data);
ret = elf_add (state, NULL, d, base_address, error_callback, data,
- fileline_fn, found_sym, found_dwarf, 0, 1, NULL, 0);
+ fileline_fn, found_sym, found_dwarf, NULL, 0, 1, NULL,
+ 0);
if (ret < 0)
backtrace_close (d, error_callback, data);
else
@@ -3080,7 +3081,8 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
backtrace_release_view (state, &debugaltlink_view, error_callback,
data);
ret = elf_add (state, NULL, d, base_address, error_callback, data,
- fileline_fn, found_sym, found_dwarf, 0, 1, NULL, 0);
+ fileline_fn, found_sym, found_dwarf, NULL, 0, 1, NULL,
+ 0);
if (ret < 0)
backtrace_close (d, error_callback, data);
else
@@ -3106,8 +3108,9 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
int ret;
ret = elf_add (state, filename, d, base_address, error_callback, data,
- fileline_fn, found_sym, found_dwarf, 0, 1,
- debugaltlink_buildid_data, debugaltlink_buildid_size);
+ fileline_fn, found_sym, found_dwarf, NULL,
+ 0, 1, debugaltlink_buildid_data,
+ debugaltlink_buildid_size);
backtrace_release_view (state, &debugaltlink_view, error_callback,
data);
debugaltlink_view_valid = 0;
@@ -3262,7 +3265,8 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
sections[DEBUG_STR].data,
sections[DEBUG_STR].size,
ehdr.e_ident[EI_DATA] == ELFDATA2MSB,
- error_callback, data, fileline_fn))
+ error_callback, data, fileline_fn,
+ fileline_entry))
goto fail;
*found_dwarf = 1;
@@ -3352,7 +3356,7 @@ phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED,
if (elf_add (pd->state, filename, descriptor, info->dlpi_addr,
pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym,
- &found_dwarf, 0, 0, NULL, 0))
+ &found_dwarf, NULL, 0, 0, NULL, 0))
{
if (found_dwarf)
{
@@ -3380,7 +3384,8 @@ backtrace_initialize (struct backtrace_state *state, const char *filename,
struct phdr_data pd;
ret = elf_add (state, filename, descriptor, 0, error_callback, data,
- &elf_fileline_fn, &found_sym, &found_dwarf, 1, 0, NULL, 0);
+ &elf_fileline_fn, &found_sym, &found_dwarf, NULL, 1, 0, NULL,
+ 0);
if (!ret)
return 0;
diff --git a/libbacktrace/internal.h b/libbacktrace/internal.h
index bf3e7d1989f..d9ab401ce41 100644
--- a/libbacktrace/internal.h
+++ b/libbacktrace/internal.h
@@ -286,6 +286,8 @@ extern int backtrace_initialize (struct backtrace_state *state,
void *data,
fileline *fileline_fn);
+struct dwarf_data;
+
/* Add file/line information for a DWARF module. */
extern int backtrace_dwarf_add (struct backtrace_state *state,
@@ -302,7 +304,8 @@ extern int backtrace_dwarf_add (struct backtrace_state *state,
size_t dwarf_str_size,
int is_bigendian,
backtrace_error_callback error_callback,
- void *data, fileline *fileline_fn);
+ void *data, fileline *fileline_fn,
+ struct dwarf_data **fileline_entry);
/* A test-only hook for elf_uncompress_zdebug. */
diff --git a/libbacktrace/pecoff.c b/libbacktrace/pecoff.c
index f51fc0f13c5..cd20cbe17a7 100644
--- a/libbacktrace/pecoff.c
+++ b/libbacktrace/pecoff.c
@@ -867,7 +867,8 @@ coff_add (struct backtrace_state *state, int descriptor,
sections[DEBUG_STR].data,
sections[DEBUG_STR].size,
0, /* FIXME */
- error_callback, data, fileline_fn))
+ error_callback, data, fileline_fn,
+ NULL))
goto fail;
*found_dwarf = 1;
diff --git a/libbacktrace/xcoff.c b/libbacktrace/xcoff.c
index 111134d4d21..095800b4f71 100644
--- a/libbacktrace/xcoff.c
+++ b/libbacktrace/xcoff.c
@@ -1315,7 +1315,8 @@ xcoff_add (struct backtrace_state *state, int descriptor, off_t offset,
dwsect[DWSECT_STR].data,
dwsect[DWSECT_STR].size,
1, /* big endian */
- error_callback, data, fileline_fn))
+ error_callback, data, fileline_fn,
+ NULL))
goto fail;
}