gdb: move store/extract integer functions to extract-store-integer.{c,h}

Move the declarations out of defs.h, and the implementations out of
findvar.c.

I opted for a new file, because this functionality of converting
integers to bytes and vice-versa seems a bit to generic to live in
findvar.c.

Change-Id: I524858fca33901ee2150c582bac16042148d2251
Approved-By: John Baldwin <jhb@FreeBSD.org>
This commit is contained in:
Simon Marchi
2024-04-22 16:10:14 -04:00
committed by Simon Marchi
parent 15afb100ea
commit ec45252592
141 changed files with 559 additions and 327 deletions

View File

@@ -422,95 +422,6 @@ enum symbol_needs_kind
SYMBOL_NEEDS_FRAME
};
/* In findvar.c. */
template<typename T, typename = RequireLongest<T>>
T extract_integer (gdb::array_view<const gdb_byte>, enum bfd_endian byte_order);
static inline LONGEST
extract_signed_integer (gdb::array_view<const gdb_byte> buf,
enum bfd_endian byte_order)
{
return extract_integer<LONGEST> (buf, byte_order);
}
static inline LONGEST
extract_signed_integer (const gdb_byte *addr, int len,
enum bfd_endian byte_order)
{
return extract_signed_integer (gdb::array_view<const gdb_byte> (addr, len),
byte_order);
}
static inline ULONGEST
extract_unsigned_integer (gdb::array_view<const gdb_byte> buf,
enum bfd_endian byte_order)
{
return extract_integer<ULONGEST> (buf, byte_order);
}
static inline ULONGEST
extract_unsigned_integer (const gdb_byte *addr, int len,
enum bfd_endian byte_order)
{
return extract_unsigned_integer (gdb::array_view<const gdb_byte> (addr, len),
byte_order);
}
extern CORE_ADDR extract_typed_address (const gdb_byte *buf,
struct type *type);
/* All 'store' functions accept a host-format integer and store a
target-format integer at ADDR which is LEN bytes long. */
template<typename T, typename = RequireLongest<T>>
extern void store_integer (gdb::array_view<gdb_byte> dst,
bfd_endian byte_order, T val);
template<typename T>
static inline void
store_integer (gdb_byte *addr, int len, bfd_endian byte_order, T val)
{
return store_integer (gdb::make_array_view (addr, len), byte_order, val);
}
static inline void
store_signed_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
LONGEST val)
{
return store_integer (dst, byte_order, val);
}
static inline void
store_signed_integer (gdb_byte *addr, int len, bfd_endian byte_order,
LONGEST val)
{
return store_signed_integer (gdb::make_array_view (addr, len), byte_order,
val);
}
static inline void
store_unsigned_integer (gdb::array_view<gdb_byte> dst, bfd_endian byte_order,
ULONGEST val)
{
return store_integer (dst, byte_order, val);
}
static inline void
store_unsigned_integer (gdb_byte *addr, int len, bfd_endian byte_order,
ULONGEST val)
{
return store_unsigned_integer (gdb::make_array_view (addr, len), byte_order,
val);
}
extern void store_typed_address (gdb_byte *buf, struct type *type,
CORE_ADDR addr);
extern void copy_integer_to_size (gdb_byte *dest, int dest_size,
const gdb_byte *source, int source_size,
bool is_signed, enum bfd_endian byte_order);
/* Hooks for alternate command interfaces. */
struct target_waitstatus;