mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-10 11:20:10 +00: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>
|
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.
|
* elf/pldd.c (main): Attach to all threads in the process.
|
||||||
Rewrite /proc handling to use *at functions.
|
Rewrite /proc handling to use *at functions.
|
||||||
|
|
||||||
|
@ -64,6 +64,9 @@ static_assert (next, (offsetof (struct libname_list, next)
|
|||||||
struct E(r_debug)
|
struct E(r_debug)
|
||||||
{
|
{
|
||||||
int r_version;
|
int r_version;
|
||||||
|
#if CLASS == 64
|
||||||
|
int pad;
|
||||||
|
#endif
|
||||||
EW(Addr) r_map;
|
EW(Addr) r_map;
|
||||||
};
|
};
|
||||||
#if CLASS == __ELF_NATIVE_CLASS
|
#if CLASS == __ELF_NATIVE_CLASS
|
||||||
@ -75,6 +78,7 @@ static_assert (r_map, (offsetof (struct r_debug, r_map)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
||||||
E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size)
|
E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size)
|
||||||
{
|
{
|
||||||
EW(Addr) phdr = 0;
|
EW(Addr) phdr = 0;
|
||||||
@ -97,6 +101,7 @@ E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
printf("progam header at offset %lu\n", (unsigned long)phdr);
|
||||||
|
|
||||||
if (phdr == 0 || phnum == 0 || phent == 0)
|
if (phdr == 0 || phnum == 0 || phent == 0)
|
||||||
error (EXIT_FAILURE, 0, gettext ("cannot find program header of process"));
|
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_size += 512;
|
||||||
auxv = xrealloc (auxv, auxv_size);
|
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)
|
if (n < 0)
|
||||||
goto no_info;
|
goto no_info;
|
||||||
if (n < auxv_size)
|
if (n < auxv_size)
|
||||||
|
Loading…
Reference in New Issue
Block a user