mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
2010-12-31 Michael Snyder <msnyder@vmware.com>
* annotate.c: Comment cleanup, shorten long lines. * arch-utils.c: Ditto. * arch-utils.h: Ditto. * auxv.c: Ditto. * auxv.h: Ditto. * ax-gdb.c: Ditto. * ax-gdb.h: Ditto. * ax-general.c: Ditto. * breakpoint.h: Ditto. * buildsym.h: Ditto.
This commit is contained in:
69
gdb/auxv.c
69
gdb/auxv.c
@ -34,8 +34,8 @@
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
/* This function handles access via /proc/PID/auxv, which is a common method
|
||||
for native targets. */
|
||||
/* This function handles access via /proc/PID/auxv, which is a common
|
||||
method for native targets. */
|
||||
|
||||
static LONGEST
|
||||
procfs_xfer_auxv (gdb_byte *readbuf,
|
||||
@ -90,35 +90,39 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
|
||||
if (MSYMBOL_SIZE (msym) != ptr_size)
|
||||
return -1;
|
||||
|
||||
/* POINTER_ADDRESS is a location where the `_dl_auxv' variable resides.
|
||||
DATA_ADDRESS is the inferior value present in `_dl_auxv', therefore the
|
||||
real inferior AUXV address. */
|
||||
/* POINTER_ADDRESS is a location where the `_dl_auxv' variable
|
||||
resides. DATA_ADDRESS is the inferior value present in
|
||||
`_dl_auxv', therefore the real inferior AUXV address. */
|
||||
|
||||
pointer_address = SYMBOL_VALUE_ADDRESS (msym);
|
||||
|
||||
/* The location of the _dl_auxv symbol may no longer be correct if
|
||||
ld.so runs at a different address than the one present in the file.
|
||||
This is very common case - for unprelinked ld.so or with a PIE executable.
|
||||
PIE executable forces random address even for libraries already being
|
||||
prelinked to some address. PIE executables themselves are never prelinked
|
||||
even on prelinked systems. Prelinking of a PIE executable would block
|
||||
their purpose of randomizing load of everything including the executable.
|
||||
ld.so runs at a different address than the one present in the
|
||||
file. This is very common case - for unprelinked ld.so or with a
|
||||
PIE executable. PIE executable forces random address even for
|
||||
libraries already being prelinked to some address. PIE
|
||||
executables themselves are never prelinked even on prelinked
|
||||
systems. Prelinking of a PIE executable would block their
|
||||
purpose of randomizing load of everything including the
|
||||
executable.
|
||||
|
||||
If the memory read fails, return -1 to fallback on another mechanism for
|
||||
retrieving the AUXV.
|
||||
If the memory read fails, return -1 to fallback on another
|
||||
mechanism for retrieving the AUXV.
|
||||
|
||||
In most cases of a PIE running under valgrind there is no way to find
|
||||
out the base addresses of any of ld.so, executable or AUXV as everything
|
||||
is randomized and /proc information is not relevant for the virtual
|
||||
executable running under valgrind. We think that we might need a valgrind
|
||||
extension to make it work. This is PR 11440. */
|
||||
In most cases of a PIE running under valgrind there is no way to
|
||||
find out the base addresses of any of ld.so, executable or AUXV
|
||||
as everything is randomized and /proc information is not relevant
|
||||
for the virtual executable running under valgrind. We think that
|
||||
we might need a valgrind extension to make it work. This is PR
|
||||
11440. */
|
||||
|
||||
if (target_read_memory (pointer_address, ptr_buf, ptr_size) != 0)
|
||||
return -1;
|
||||
|
||||
data_address = extract_typed_address (ptr_buf, ptr_type);
|
||||
|
||||
/* Possibly still not initialized such as during an inferior startup. */
|
||||
/* Possibly still not initialized such as during an inferior
|
||||
startup. */
|
||||
if (data_address == 0)
|
||||
return -1;
|
||||
|
||||
@ -132,8 +136,8 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Stop if trying to read past the existing AUXV block. The final AT_NULL
|
||||
was already returned before. */
|
||||
/* Stop if trying to read past the existing AUXV block. The final
|
||||
AT_NULL was already returned before. */
|
||||
|
||||
if (offset >= auxv_pair_size)
|
||||
{
|
||||
@ -154,9 +158,10 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
|
||||
if (block > len)
|
||||
block = len;
|
||||
|
||||
/* Reading sizes smaller than AUXV_PAIR_SIZE is not supported. Tails
|
||||
unaligned to AUXV_PAIR_SIZE will not be read during a call (they
|
||||
should be completed during next read with new/extended buffer). */
|
||||
/* Reading sizes smaller than AUXV_PAIR_SIZE is not supported.
|
||||
Tails unaligned to AUXV_PAIR_SIZE will not be read during a
|
||||
call (they should be completed during next read with
|
||||
new/extended buffer). */
|
||||
|
||||
block &= -auxv_pair_size;
|
||||
if (block == 0)
|
||||
@ -174,8 +179,9 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
|
||||
data_address += block;
|
||||
len -= block;
|
||||
|
||||
/* Check terminal AT_NULL. This function is being called indefinitely
|
||||
being extended its READBUF until it returns EOF (0). */
|
||||
/* Check terminal AT_NULL. This function is being called
|
||||
indefinitely being extended its READBUF until it returns EOF
|
||||
(0). */
|
||||
|
||||
while (block >= auxv_pair_size)
|
||||
{
|
||||
@ -207,10 +213,11 @@ memory_xfer_auxv (struct target_ops *ops,
|
||||
gdb_assert (object == TARGET_OBJECT_AUXV);
|
||||
gdb_assert (readbuf || writebuf);
|
||||
|
||||
/* ld_so_xfer_auxv is the only function safe for virtual executables being
|
||||
executed by valgrind's memcheck. Using ld_so_xfer_auxv during inferior
|
||||
startup is problematic, because ld.so symbol tables have not yet been
|
||||
relocated. So GDB uses this function only when attaching to a process.
|
||||
/* ld_so_xfer_auxv is the only function safe for virtual
|
||||
executables being executed by valgrind's memcheck. Using
|
||||
ld_so_xfer_auxv during inferior startup is problematic, because
|
||||
ld.so symbol tables have not yet been relocated. So GDB uses
|
||||
this function only when attaching to a process.
|
||||
*/
|
||||
|
||||
if (current_inferior ()->attach_flag != 0)
|
||||
@ -308,7 +315,7 @@ target_auxv_search (struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
|
||||
}
|
||||
|
||||
|
||||
/* Print the contents of the target's AUXV on the specified file. */
|
||||
/* Print the contents of the target's AUXV on the specified file. */
|
||||
int
|
||||
fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
|
||||
{
|
||||
|
Reference in New Issue
Block a user