Convert some frame functions to use gdb::array_view.

This patch converts the most obvious functions from gdb/frame.h to use
the gdb::array_view abstraction.  I've converted the ones that used buffer +
length.

There are others using only the buffer, with an implicit size. I did not
touch those for now. But it would be nice to pass the size for safety.

Tested with --enable-targets=all on Ubuntu 18.04/20.04 aarch64-linux.

gdb/ChangeLog

2021-01-19  Luis Machado  <luis.machado@linaro.org>

	* frame.h (get_frame_register_bytes): Pass a gdb::array_view instead
	of buffer + length.
	(put_frame_register_bytes): Likewise.
	Adjust documentation.
	(get_frame_memory): Pass a gdb::array_view instead of buffer + length.
	(safe_frame_unwind_memory): Likewise.
	* frame.c (get_frame_register_bytes, put_frame_register_bytes)
	(get_frame_memory, safe_frame_unwind_memory): Adjust to use
	gdb::array_view.
	* amd64-fbsd-tdep.c (amd64fbsd_sigtramp_p): Likewise.
	* amd64-linux-tdep.c (amd64_linux_sigtramp_start): Likewise.
	* amd64-obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
	* arc-linux-tdep.c (arc_linux_is_sigtramp): Likewise.
	* cris-tdep.c (cris_sigtramp_start, cris_rt_sigtramp_start): Likewise.
	* dwarf2/loc.c (rw_pieced_value): Likewise.
	* hppa-tdep.c (hppa_frame_cache): Likewise.
	* i386-fbsd-tdep.c (i386fbsd_sigtramp_p): Likewise.
	* i386-gnu-tdep.c (i386_gnu_sigtramp_start): Likewise.
	* i386-linux-tdep.c (i386_linux_sigtramp_start)
	(i386_linux_rt_sigtramp_start): Likewise.
	* i386-obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
	* i386-tdep.c (i386_register_to_value): Likewise.
	* i387-tdep.c (i387_register_to_value): Likewise.
	* ia64-tdep.c (ia64_register_to_value): Likewise.
	* m32r-linux-tdep.c (m32r_linux_sigtramp_start)
	(m32r_linux_rt_sigtramp_start): Likewise.
	* m68k-linux-tdep.c (m68k_linux_pc_in_sigtramp): Likewise.
	* m68k-tdep.c (m68k_register_to_value): Likewise.
	* mips-tdep.c (mips_register_to_value)
	(mips_value_to_register): Likewise.
	* ppc-fbsd-tdep.c (ppcfbsd_sigtramp_frame_sniffer)
	(ppcfbsd_sigtramp_frame_cache): Likewise.
	* ppc-obsd-tdep.c (ppcobsd_sigtramp_frame_sniffer)
	(ppcobsd_sigtramp_frame_cache): Likewise.
	* rs6000-tdep.c (rs6000_in_function_epilogue_frame_p)
	(rs6000_register_to_value): Likewise.
	* tilegx-tdep.c (tilegx_analyze_prologue): Likewise.
	* tramp-frame.c (tramp_frame_start): Likewise.
	* valops.c (value_assign): Likewise.
This commit is contained in:
Luis Machado
2021-01-15 13:16:04 -03:00
parent c65ca138c4
commit bdec2917b1
27 changed files with 147 additions and 84 deletions

View File

@ -1469,7 +1469,8 @@ deprecated_frame_register_read (frame_info *frame, int regnum,
bool
get_frame_register_bytes (frame_info *frame, int regnum,
CORE_ADDR offset, int len, gdb_byte *myaddr,
CORE_ADDR offset,
gdb::array_view<gdb_byte> buffer,
int *optimizedp, int *unavailablep)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
@ -1496,6 +1497,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
break; /* This register is not available on this architecture. */
maxsize += thissize;
}
int len = buffer.size ();
if (len > maxsize)
error (_("Bad debug information detected: "
"Attempt to read %d bytes from registers."), len);
@ -1508,6 +1511,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
if (curr_len > len)
curr_len = len;
gdb_byte *myaddr = buffer.data ();
if (curr_len == register_size (gdbarch, regnum))
{
enum lval_type lval;
@ -1551,7 +1556,8 @@ get_frame_register_bytes (frame_info *frame, int regnum,
void
put_frame_register_bytes (struct frame_info *frame, int regnum,
CORE_ADDR offset, int len, const gdb_byte *myaddr)
CORE_ADDR offset,
gdb::array_view<const gdb_byte> buffer)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
@ -1562,6 +1568,7 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
regnum++;
}
int len = buffer.size ();
/* Copy the data. */
while (len > 0)
{
@ -1570,6 +1577,7 @@ put_frame_register_bytes (struct frame_info *frame, int regnum,
if (curr_len > len)
curr_len = len;
const gdb_byte *myaddr = buffer.data ();
if (curr_len == register_size (gdbarch, regnum))
{
put_frame_register (frame, regnum, myaddr);
@ -2891,9 +2899,9 @@ get_frame_address_space (struct frame_info *frame)
void
get_frame_memory (struct frame_info *this_frame, CORE_ADDR addr,
gdb_byte *buf, int len)
gdb::array_view<gdb_byte> buffer)
{
read_memory (addr, buf, len);
read_memory (addr, buffer.data (), buffer.size ());
}
LONGEST
@ -2918,10 +2926,10 @@ get_frame_memory_unsigned (struct frame_info *this_frame, CORE_ADDR addr,
bool
safe_frame_unwind_memory (struct frame_info *this_frame,
CORE_ADDR addr, gdb_byte *buf, int len)
CORE_ADDR addr, gdb::array_view<gdb_byte> buffer)
{
/* NOTE: target_read_memory returns zero on success! */
return target_read_memory (addr, buf, len) == 0;
return target_read_memory (addr, buffer.data (), buffer.size ()) == 0;
}
/* Architecture methods. */