diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-07-12 18:13:45 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-07-12 18:13:45 +0000 |
commit | 13547ab600a0929b12f354dc144f1aef37938f30 (patch) | |
tree | 76460826dbe9bbd235dd48cbc8a638b06193c9ec /gdb/auxv.c | |
parent | edfb1a26487b8c8263b434dd07466733ea17ace9 (diff) | |
download | gdb-13547ab600a0929b12f354dc144f1aef37938f30.zip gdb-13547ab600a0929b12f354dc144f1aef37938f30.tar.gz gdb-13547ab600a0929b12f354dc144f1aef37938f30.tar.bz2 |
* target.c (target_read): Stop if target_read_partial returns 0
when some bytes have already been read.
(target_write): Likewise for target_write_partial.
(target_read_partial, target_write_partial): Make static.
(target_read_alloc): New.
* target.h: Doc fixes.
(target_read_partial, target_write_partial): Delete prototypes.
(target_read_alloc): New prototype.
* auxv.c (target_auxv_read): Delete.
(target_auxv_search, fprint_target_auxv): Use target_read_alloc.
* auxv.h (target_auxv_read): Delete prototype.
* avr-tdep.c (avr_io_reg_read_command): Use target_read_alloc.
* ia64-tdep.c (getunwind_table, get_kernel_table): Likewise.
* linux-nat.c (linux_nat_make_corefile_notes): Likewise.
* procfs.c (procfs_make_note_section): Likewise.
* remote.c (remote_xfer_partial): Don't loop here.
* sparc-tdep.c (sparc_fetch_wcookie): Use target_read.
Diffstat (limited to 'gdb/auxv.c')
-rw-r--r-- | gdb/auxv.c | 44 |
1 files changed, 4 insertions, 40 deletions
@@ -1,6 +1,6 @@ /* Auxiliary vector support for GDB, the GNU debugger. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GDB. @@ -76,43 +76,6 @@ procfs_xfer_auxv (struct target_ops *ops, return n; } -/* Read all the auxv data into a contiguous xmalloc'd buffer, - stored in *DATA. Return the size in bytes of this data. - If zero, there is no data and *DATA is null. - if < 0, there was an error and *DATA is null. */ -LONGEST -target_auxv_read (struct target_ops *ops, gdb_byte **data) -{ - size_t auxv_alloc = 512, auxv_pos = 0; - gdb_byte *auxv = xmalloc (auxv_alloc); - int n; - - while (1) - { - n = target_read_partial (ops, TARGET_OBJECT_AUXV, - NULL, &auxv[auxv_pos], 0, - auxv_alloc - auxv_pos); - if (n <= 0) - break; - auxv_pos += n; - if (auxv_pos < auxv_alloc) /* Read all there was. */ - break; - gdb_assert (auxv_pos == auxv_alloc); - auxv_alloc *= 2; - auxv = xrealloc (auxv, auxv_alloc); - } - - if (auxv_pos == 0) - { - xfree (auxv); - *data = NULL; - return n; - } - - *data = auxv; - return auxv_pos; -} - /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR. Return 0 if *READPTR is already at the end of the buffer. Return -1 if there is insufficient buffer for a whole entry. @@ -148,7 +111,7 @@ target_auxv_search (struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp) { CORE_ADDR type, val; gdb_byte *data; - int n = target_auxv_read (ops, &data); + LONGEST n = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, &data); gdb_byte *ptr = data; int ents = 0; @@ -184,7 +147,8 @@ fprint_target_auxv (struct ui_file *file, struct target_ops *ops) { CORE_ADDR type, val; gdb_byte *data; - int len = target_auxv_read (ops, &data); + LONGEST len = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, + &data); gdb_byte *ptr = data; int ents = 0; |