diff options
author | Kamil Rytarowski <n54@gmx.com> | 2020-04-08 04:01:10 +0200 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2020-04-09 13:17:29 +0200 |
commit | 206c98a6503de9c78550b7e503526f59b5b2f491 (patch) | |
tree | 02f2c466cd4d19c55101974b3a293016b724e946 /gdb/obsd-tdep.c | |
parent | ae4b1d73f97e0b2a5975b3c0039b12a7f64b793b (diff) | |
download | gdb-206c98a6503de9c78550b7e503526f59b5b2f491.zip gdb-206c98a6503de9c78550b7e503526f59b5b2f491.tar.gz gdb-206c98a6503de9c78550b7e503526f59b5b2f491.tar.bz2 |
Add SVR4 psABI specific parser for AUXV entries
NetBSD and OpenBSD always use an int to store the type as
defined in the SVR4 psABI specifications rather than long
as assumed by the default parser.
Define svr4_auxv_parse() that shares code with default_auxv_parse().
Remove obsd_auxv_parse() and switch OpenBSD to svr4_auxv_parse().
Remove not fully accurate comment from obsd-tdep.c.
Use svr4_auxv_parse() on NetBSD.
gdb/ChangeLog:
* auxv.h (svr4_auxv_parse): New.
* auxv.c (default_auxv_parse): Split into default_auxv_parse
and generic_auxv_parse.
(svr4_auxv_parse): Add.
* obsd-tdep.c: Include "auxv.h".
(obsd_auxv_parse): Remove.
(obsd_init_abi): Remove comment.
(obsd_init_abi): Change set_gdbarch_auxv_parse passed argument
from `obsd_auxv_parse' to `svr4_auxv_parse'.
* nbsd-tdep.c: Include "auxv.h".
(nbsd_init_abi): Call set_gdbarch_auxv_parse.
Diffstat (limited to 'gdb/obsd-tdep.c')
-rw-r--r-- | gdb/obsd-tdep.c | 30 |
1 files changed, 2 insertions, 28 deletions
diff --git a/gdb/obsd-tdep.c b/gdb/obsd-tdep.c index 1c1f574..f2c4d29 100644 --- a/gdb/obsd-tdep.c +++ b/gdb/obsd-tdep.c @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "defs.h" +#include "auxv.h" #include "frame.h" #include "symtab.h" #include "objfiles.h" @@ -289,32 +290,6 @@ obsd_gdb_signal_to_target (struct gdbarch *gdbarch, return -1; } -static int -obsd_auxv_parse (struct gdbarch *gdbarch, gdb_byte **readptr, - gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) -{ - struct type *int_type = builtin_type (gdbarch)->builtin_int; - struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; - const int sizeof_auxv_type = TYPE_LENGTH (int_type); - const int sizeof_auxv_val = TYPE_LENGTH (ptr_type); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - gdb_byte *ptr = *readptr; - - if (endptr == ptr) - return 0; - - if (endptr - ptr < 2 * sizeof_auxv_val) - return -1; - - *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order); - ptr += sizeof_auxv_val; /* Alignment. */ - *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order); - ptr += sizeof_auxv_val; - - *readptr = ptr; - return 1; -} - void obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -323,6 +298,5 @@ obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_gdb_signal_to_target (gdbarch, obsd_gdb_signal_to_target); - /* Unlike Linux, OpenBSD actually follows the ELF standard. */ - set_gdbarch_auxv_parse (gdbarch, obsd_auxv_parse); + set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse); } |