mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Fix some problem of 32-bit pldd on 64-bit platforms
This commit is contained in:
parent
2772459841
commit
c5305d88c7
@ -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.
|
||||
|
||||
|
@ -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"));
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user