Fix some problem of 32-bit pldd on 64-bit platforms

This commit is contained in:
Ulrich Drepper 2011-08-17 10:31:15 -04:00
parent 2772459841
commit c5305d88c7
3 changed files with 10 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2011-08-17 Ulrich Drepper <drepper@gmail.com>
* elf/pldd-xx.c (r_debug): Explicitly add padding when needed.
* elf/pldd.c (get_process_info): Use pread to re-read auxiliary vector
if buffer was too small.
* elf/pldd.c (main): Attach to all threads in the process.
Rewrite /proc handling to use *at functions.

View File

@ -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"));

View File

@ -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)