diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-07-15 17:37:27 +0200 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2015-07-15 17:40:38 +0200 |
commit | 9904185cfde13d6c6849f1f042c8e3b74974cf08 (patch) | |
tree | d5118046648aec766d6176db9b1ae6c1b7baecec /gdb/target | |
parent | Prepare linux_find_memory_regions_full & co. for move (diff) | |
download | binutils-gdb-9904185cfde13d6c6849f1f042c8e3b74974cf08.tar.gz binutils-gdb-9904185cfde13d6c6849f1f042c8e3b74974cf08.tar.bz2 binutils-gdb-9904185cfde13d6c6849f1f042c8e3b74974cf08.zip |
Move linux_find_memory_regions_full & co.
This should be just a move with no changes.
gdb/ChangeLog
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>
Move linux_find_memory_regions_full & co.
* linux-tdep.c (nat/linux-maps.h): Include.
(gdb_regex.h): Remove the include.
(enum filterflags, struct smaps_vmflags, read_mapping, decode_vmflags)
(mapping_is_anonymous_p, dump_mapping_p): Moved to nat/linux-maps.c.
(linux_find_memory_region_ftype): Moved typedef to nat/linux-maps.h.
(linux_find_memory_regions_full): Moved definition to nat/linux-maps.c.
* nat/linux-maps.c: Include ctype.h, target/target-utils.h, gdb_regex.h
and target/target.h.
(struct smaps_vmflags, read_mapping, decode_vmflags)
(mapping_is_anonymous_p, dump_mapping_p): Move from linux-tdep.c.
(linux_find_memory_regions_full): Move from linux-tdep.c.
* nat/linux-maps.h (read_mapping): New declaration.
(linux_find_memory_region_ftype, enum filterflags): Moved from
linux-tdep.c.
(linux_find_memory_regions_full): New declaration.
* target.c (target/target-utils.h): Include.
(read_alloc_pread_ftype): Moved typedef to target/target-utils.h.
(read_alloc, read_stralloc_func_ftype, read_stralloc): Moved
definitions to target/target-utils.c.
* target.h (target_fileio_read_stralloc): Move it to target/target.h.
* target/target-utils.c (read_alloc, read_stralloc): Move definitions
from target.c.
* target/target-utils.h (read_alloc_pread_ftype): New typedef.
(read_alloc): New declaration.
(read_stralloc_func_ftype): New typedef.
(read_stralloc): New declaration.
* target/target.h (target_fileio_read_stralloc): Move it from target.h.
gdb/gdbserver/ChangeLog
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
Jan Kratochvil <jan.kratochvil@redhat.com>
* target.c: Include target/target-utils.h and fcntl.h.
(target_fileio_read_stralloc_1_pread, target_fileio_read_stralloc_1)
(target_fileio_read_stralloc): New functions.
Diffstat (limited to 'gdb/target')
-rw-r--r-- | gdb/target/target-utils.c | 79 | ||||
-rw-r--r-- | gdb/target/target-utils.h | 12 | ||||
-rw-r--r-- | gdb/target/target.h | 11 |
3 files changed, 102 insertions, 0 deletions
diff --git a/gdb/target/target-utils.c b/gdb/target/target-utils.c index 4e8fae7bb5b..cdfa6e69803 100644 --- a/gdb/target/target-utils.c +++ b/gdb/target/target-utils.c @@ -19,3 +19,82 @@ #include "common-defs.h" #include "target/target-utils.h" + +LONGEST +read_alloc (gdb_byte **buf_p, int handle, read_alloc_pread_ftype *pread_func, + int padding) +{ + size_t buf_alloc, buf_pos; + gdb_byte *buf; + LONGEST n; + int target_errno; + + /* Start by reading up to 4K at a time. The target will throttle + this number down if necessary. */ + buf_alloc = 4096; + buf = xmalloc (buf_alloc); + buf_pos = 0; + while (1) + { + n = pread_func (handle, &buf[buf_pos], buf_alloc - buf_pos - padding, + buf_pos, &target_errno); + if (n <= 0) + { + if (n < 0 || (n == 0 && buf_pos == 0)) + xfree (buf); + else + *buf_p = buf; + if (n < 0) + { + /* An error occurred. */ + return -1; + } + else + { + /* Read all there was. */ + return buf_pos; + } + } + + buf_pos += n; + + /* If the buffer is filling up, expand it. */ + if (buf_alloc < buf_pos * 2) + { + buf_alloc *= 2; + buf = xrealloc (buf, buf_alloc); + } + } +} + +char * +read_stralloc (struct inferior *inf, const char *filename, + read_stralloc_func_ftype *func) +{ + gdb_byte *buffer; + char *bufstr; + LONGEST i, transferred; + + transferred = func (inf, filename, &buffer, 1); + bufstr = (char *) buffer; + + if (transferred < 0) + return NULL; + + if (transferred == 0) + return xstrdup (""); + + bufstr[transferred] = 0; + + /* Check for embedded NUL bytes; but allow trailing NULs. */ + for (i = strlen (bufstr); i < transferred; i++) + if (bufstr[i] != 0) + { + warning (_("target file %s " + "contained unexpected null characters"), + filename); + break; + } + + return bufstr; +} diff --git a/gdb/target/target-utils.h b/gdb/target/target-utils.h index 443ffc3ddad..e8bf52ac4f6 100644 --- a/gdb/target/target-utils.h +++ b/gdb/target/target-utils.h @@ -20,4 +20,16 @@ #ifndef TARGET_TARGET_UTILS_H #define TARGET_TARGET_UTILS_H +typedef int (read_alloc_pread_ftype) (int handle, gdb_byte *read_buf, int len, + ULONGEST offset, int *target_errno); +extern LONGEST read_alloc (gdb_byte **buf_p, int handle, + read_alloc_pread_ftype *pread_func, int padding); + +struct inferior; +typedef LONGEST (read_stralloc_func_ftype) (struct inferior *inf, + const char *filename, + gdb_byte **buf_p, int padding); +extern char *read_stralloc (struct inferior *inf, const char *filename, + read_stralloc_func_ftype *func); + #endif /* TARGET_TARGET_UTILS_H */ diff --git a/gdb/target/target.h b/gdb/target/target.h index 6ee0feeec0b..4c85fe019ed 100644 --- a/gdb/target/target.h +++ b/gdb/target/target.h @@ -70,4 +70,15 @@ extern void target_stop_and_wait (ptid_t ptid); extern void target_continue_no_signal (ptid_t ptid); +/* Read target file FILENAME, in the filesystem as seen by INF. If + INF is NULL, use the filesystem seen by the debugger (GDB or, for + remote targets, the remote stub). The result is NUL-terminated and + returned as a string, allocated using xmalloc. If an error occurs + or the transfer is unsupported, NULL is returned. Empty objects + are returned as allocated but empty strings. A warning is issued + if the result contains any embedded NUL bytes. */ +struct inferior; +extern char *target_fileio_read_stralloc (struct inferior *inf, + const char *filename); + #endif /* TARGET_COMMON_H */ |