40 lines
1.1 KiB
Diff
40 lines
1.1 KiB
Diff
commit e4d985a3c1c873f77d20fa0cd421458cc2824996
|
|
Author: Andreas Krebbel <krebbel@linux.ibm.com>
|
|
Date: Thu Nov 19 20:32:24 2020 +0100
|
|
|
|
IBM Z: Fix endianess problem in pid_memory_read
|
|
|
|
The cached reads lack the big endian adjustments done in the fallback
|
|
path.
|
|
|
|
Signed-off-by: Andreas Krebbel <krebbel@linux.ibm.com>
|
|
|
|
diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
|
|
index 3a6af997..b23139d9 100644
|
|
--- a/libdwfl/linux-pid-attach.c
|
|
+++ b/libdwfl/linux-pid-attach.c
|
|
@@ -193,14 +193,22 @@ pid_memory_read (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Word *result, void *arg)
|
|
{
|
|
struct __libdwfl_pid_arg *pid_arg = arg;
|
|
pid_t tid = pid_arg->tid_attached;
|
|
+ Dwfl_Process *process = dwfl->process;
|
|
assert (tid > 0);
|
|
|
|
#ifdef HAVE_PROCESS_VM_READV
|
|
if (read_cached_memory (pid_arg, addr, result))
|
|
+ {
|
|
+#if SIZEOF_LONG == 8
|
|
+# if BYTE_ORDER == BIG_ENDIAN
|
|
+ if (ebl_get_elfclass (process->ebl) == ELFCLASS32)
|
|
+ *result >>= 32;
|
|
+# endif
|
|
+#endif
|
|
return true;
|
|
+ }
|
|
#endif
|
|
|
|
- Dwfl_Process *process = dwfl->process;
|
|
if (ebl_get_elfclass (process->ebl) == ELFCLASS64)
|
|
{
|
|
#if SIZEOF_LONG == 8
|