diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2021-10-25 23:29:34 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-12-03 16:41:38 -0500 |
commit | 2a50938ab740296a1d6df67feea9401e57e4d90e (patch) | |
tree | c0a570783faab4b4e5225e14a434739fa0264536 /gdb/dwarf2 | |
parent | 4bce7cdaf481901edbc5ee47d953ea7e8efb56ca (diff) | |
download | gdb-2a50938ab740296a1d6df67feea9401e57e4d90e.zip gdb-2a50938ab740296a1d6df67feea9401e57e4d90e.tar.gz gdb-2a50938ab740296a1d6df67feea9401e57e4d90e.tar.bz2 |
gdb: make extract_integer take an array_view
I think it would make sense for extract_integer, extract_signed_integer
and extract_unsigned_integer to take an array_view. This way, when we
extract an integer, we can validate that we don't overflow the buffer
passed by the caller (e.g. ask to extract a 4-byte integer but pass a
2-byte buffer).
- Change extract_integer to take an array_view
- Add overloads of extract_signed_integer and extract_unsigned_integer
that take array_views. Keep the existing versions so we don't
need to change all callers, but make them call the array_view
versions.
This shortens some places like:
result = extract_unsigned_integer (value_contents (result_val).data (),
TYPE_LENGTH (value_type (result_val)),
byte_order);
into
result = extract_unsigned_integer (value_contents (result_val), byte_order);
value_contents returns an array view that is of length
`TYPE_LENGTH (value_type (result_val))` already, so the length is
implicitly communicated through the array view.
Change-Id: Ic1c1f98c88d5c17a8486393af316f982604d6c95
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r-- | gdb/dwarf2/expr.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/gdb/dwarf2/expr.c b/gdb/dwarf2/expr.c index 592dbe1..b267785 100644 --- a/gdb/dwarf2/expr.c +++ b/gdb/dwarf2/expr.c @@ -577,8 +577,7 @@ indirect_pieced_value (value *value) encode address spaces and other things in CORE_ADDR. */ bfd_endian byte_order = gdbarch_byte_order (get_frame_arch (frame)); LONGEST byte_offset - = extract_signed_integer (value_contents (value).data (), - TYPE_LENGTH (type), byte_order); + = extract_signed_integer (value_contents (value), byte_order); byte_offset += piece->v.ptr.offset; return indirect_synthetic_pointer (piece->v.ptr.die_sect_off, @@ -1157,9 +1156,7 @@ dwarf_expr_context::fetch_address (int n) ULONGEST result; dwarf_require_integral (value_type (result_val)); - result = extract_unsigned_integer (value_contents (result_val).data (), - TYPE_LENGTH (value_type (result_val)), - byte_order); + result = extract_unsigned_integer (value_contents (result_val), byte_order); /* For most architectures, calling extract_unsigned_integer() alone is sufficient for extracting an address. However, some |