summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2013-11-07 21:27:54 +0100
committerJan Kratochvil <jan.kratochvil@redhat.com>2013-11-07 21:27:54 +0100
commitb947ee100ac604a2f6877a790b57bdf80e4123d5 (patch)
treee8f6c62d5367c4c36880ac2f24459c521900257e
parent35d95f378d2f2732055523abcbbfd58f7a404dcd (diff)
downloadelfutils-b947ee100ac604a2f6877a790b57bdf80e4123d5.tar.gz
dwfl_core_file_report: Fix a regression of dwfl_core_file_report retval
Signed-off-by: Jan Kratochvil <jan.kratochvil@redhat.com>
-rw-r--r--libdwfl/ChangeLog5
-rw-r--r--libdwfl/core-file.c9
2 files changed, 10 insertions, 4 deletions
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 7f36bdf8..2355cc5b 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,5 +1,10 @@
2013-11-07 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * core-file.c (dwfl_core_file_report): Replaced variable sniffed by
+ retval. Fix one forgotten LISTED increase.
+
+2013-11-07 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Fix core files for re-prelink-ed files.
* core-file.c (dynamic_vaddr_get): New function.
(dwfl_core_file_report): New variable file_dynamic_vaddr. Call
diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c
index 665fcf7a..72a44f86 100644
--- a/libdwfl/core-file.c
+++ b/libdwfl/core-file.c
@@ -483,14 +483,14 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
struct r_debug_info r_debug_info;
memset (&r_debug_info, 0, sizeof r_debug_info);
- int listed = dwfl_link_map_report (dwfl, auxv, auxv_size,
+ int retval = dwfl_link_map_report (dwfl, auxv, auxv_size,
dwfl_elf_phdr_memory_callback, elf,
&r_debug_info);
+ int listed = MAX (0, retval);
/* Now sniff segment contents for modules hinted by information gathered
from DT_DEBUG. */
- int sniffed = 0;
ndx = 0;
do
{
@@ -506,7 +506,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
if (seg > ndx)
{
ndx = seg;
- ++sniffed;
+ ++listed;
}
else
++ndx;
@@ -534,6 +534,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
true, true);
if (mod == NULL)
continue;
+ ++listed;
module->elf = NULL;
module->fd = -1;
/* Move this module to the end of the list, so that we end
@@ -560,7 +561,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable)
/* We return the number of modules we found if we found any.
If we found none, we return -1 instead of 0 if there was an
error rather than just nothing found. */
- return sniffed || listed >= 0 ? listed + sniffed : listed;
+ return listed > 0 ? listed : retval;
}
INTDEF (dwfl_core_file_report)
NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158)