aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-08-17 10:31:15 -0400
committerUlrich Drepper <drepper@gmail.com>2011-08-17 10:31:15 -0400
commitc5305d88c7dc519edfaf55eed8d026a9038d7978 (patch)
tree2c999d13ecdcf2e37323a1e81b4ce5eed96eb0ef /elf
parent2772459841f32f2d5866672145f533975ebec717 (diff)
downloadglibc-c5305d88c7dc519edfaf55eed8d026a9038d7978.zip
glibc-c5305d88c7dc519edfaf55eed8d026a9038d7978.tar.gz
glibc-c5305d88c7dc519edfaf55eed8d026a9038d7978.tar.bz2
Fix some problem of 32-bit pldd on 64-bit platforms
Diffstat (limited to 'elf')
-rw-r--r--elf/pldd-xx.c5
-rw-r--r--elf/pldd.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/elf/pldd-xx.c b/elf/pldd-xx.c
index 0e3fcb7..59419bc 100644
--- a/elf/pldd-xx.c
+++ b/elf/pldd-xx.c
@@ -64,6 +64,9 @@ static_assert (next, (offsetof (struct libname_list, next)
struct E(r_debug)
{
int r_version;
+#if CLASS == 64
+ int pad;
+#endif
EW(Addr) r_map;
};
#if CLASS == __ELF_NATIVE_CLASS
@@ -75,6 +78,7 @@ static_assert (r_map, (offsetof (struct r_debug, r_map)
static int
+
E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size)
{
EW(Addr) phdr = 0;
@@ -97,6 +101,7 @@ E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size)
default:
break;
}
+ printf("progam header at offset %lu\n", (unsigned long)phdr);
if (phdr == 0 || phnum == 0 || phent == 0)
error (EXIT_FAILURE, 0, gettext ("cannot find program header of process"));
diff --git a/elf/pldd.c b/elf/pldd.c
index ef3621c..29879f7 100644
--- a/elf/pldd.c
+++ b/elf/pldd.c
@@ -274,7 +274,7 @@ get_process_info (int dfd, long int pid)
auxv_size += 512;
auxv = xrealloc (auxv, auxv_size);
- ssize_t n = read (fd, auxv, auxv_size);
+ ssize_t n = pread (fd, auxv, auxv_size, 0);
if (n < 0)
goto no_info;
if (n < auxv_size)