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:
Michael Snyder
2010-12-31 19:16:37 +00:00
parent 40a41a9acc
commit 0e2de36609
11 changed files with 248 additions and 195 deletions

View File

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