return tags;
}
-/* AArch64 Linux implementation of the get_cap_tag_from_address gdbarch
- hook. Returns the tag from the capability located at ADDR. */
-
-static bool
-aarch64_linux_get_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr)
-{
- gdb::byte_vector cap;
-
- cap = target_read_capability (addr);
-
- if (cap.size () == 0)
- return false;
-
- return cap[0] != 0;
-}
-
-/* AArch64 Linux implementation of the set_cap_tag_from_address gdbarch
- hook. Sets the tag from the capability located at ADDR to TAG. */
-
-static void
-aarch64_linux_set_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr,
- bool tag)
-{
- gdb::byte_vector cap;
-
- /* Read original capability at ADDR. */
- cap = target_read_capability (addr);
-
- cap[0] = tag? 1 : 0;
-
- /* Write back the same contents but with a custom tag. */
- target_write_capability (addr, cap);
-}
-
/* Implement the maintenance print capability tag command. */
static void
set_gdbarch_report_signal_info (gdbarch,
aarch64_linux_report_signal_info);
- set_gdbarch_get_cap_tag_from_address (gdbarch,
- aarch64_linux_get_cap_tag_from_address);
- set_gdbarch_set_cap_tag_from_address (gdbarch,
- aarch64_linux_set_cap_tag_from_address);
add_cmd ("cap_from_addr", class_maintenance,
maint_print_cap_from_addr_cmd,
{
}
-/* See arch-utils.h. */
-bool default_get_cap_tag_from_address (struct gdbarch *gdbarch,
- CORE_ADDR addr)
-{
- return false;
-}
-
-/* See arch-utils.h. */
-void
-default_set_cap_tag_from_address (struct gdbarch *gdbarch,
- CORE_ADDR addr, bool tag)
-{
- return;
-}
-
/* See arch-utils.h. */
void
read_core_file_mappings_pre_loop_ftype pre_loop_cb,
read_core_file_mappings_loop_ftype loop_cb);
-/* Default implementation of gdbarch_cap_tag_from_address. */
-extern bool default_get_cap_tag_from_address (struct gdbarch *gdbarch,
- CORE_ADDR addr);
-
-/* Default implementation of gdbarch_set_cap_tag_from_address. */
-extern void default_set_cap_tag_from_address (struct gdbarch *gdbarch,
- CORE_ADDR addr, bool tag);
-
/* Default implementation of gdbarch_print_cap_attributes. */
extern void default_print_cap (struct gdbarch *gdbarch,
const gdb_byte *contents, bool tag, bool compact,
invalid=False,
)
-Method(
- comment="""
-Return the tag from a capability stored at address ADDR.
-""",
- type="bool",
- name="get_cap_tag_from_address",
- params=[("CORE_ADDR", "addr")],
- predefault="default_get_cap_tag_from_address",
- invalid=False,
-)
-
-Method(
- comment="""
-Set the tag from a capability stored at address ADDR to TAG.
-""",
- type="void",
- name="set_cap_tag_from_address",
- params=[("CORE_ADDR", "addr"), ("bool", "tag")],
- predefault="default_set_cap_tag_from_address",
- invalid=False,
-)
-
Method(
comment="""
Print value of a capability containing CONTENTS and TAG to STREAM.
extern int gdbarch_remote_register_number (struct gdbarch *gdbarch, int regno);
extern void set_gdbarch_remote_register_number (struct gdbarch *gdbarch, gdbarch_remote_register_number_ftype *remote_register_number);
-/* Return the tag from a capability stored at address ADDR. */
-
-typedef bool (gdbarch_get_cap_tag_from_address_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
-extern bool gdbarch_get_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr);
-extern void set_gdbarch_get_cap_tag_from_address (struct gdbarch *gdbarch, gdbarch_get_cap_tag_from_address_ftype *get_cap_tag_from_address);
-
-/* Set the tag from a capability stored at address ADDR to TAG. */
-
-typedef void (gdbarch_set_cap_tag_from_address_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, bool tag);
-extern void gdbarch_set_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr, bool tag);
-extern void set_gdbarch_set_cap_tag_from_address (struct gdbarch *gdbarch, gdbarch_set_cap_tag_from_address_ftype *set_cap_tag_from_address);
-
/* Print value of a capability containing CONTENTS and TAG to STREAM. */
typedef void (gdbarch_print_cap_ftype) (struct gdbarch *gdbarch, const gdb_byte *contents, bool tag, bool compact, struct ui_file *stream);
CORE_ADDR decr_pc_after_break;
CORE_ADDR deprecated_function_start_offset;
gdbarch_remote_register_number_ftype *remote_register_number;
- gdbarch_get_cap_tag_from_address_ftype *get_cap_tag_from_address;
- gdbarch_set_cap_tag_from_address_ftype *set_cap_tag_from_address;
gdbarch_print_cap_ftype *print_cap;
gdbarch_print_cap_attributes_ftype *print_cap_attributes;
gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address;
gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
gdbarch->remote_register_number = default_remote_register_number;
- gdbarch->get_cap_tag_from_address = default_get_cap_tag_from_address;
- gdbarch->set_cap_tag_from_address = default_set_cap_tag_from_address;
gdbarch->print_cap = default_print_cap;
gdbarch->print_cap_attributes = default_print_cap_attributes;
gdbarch->unwind_pc = default_unwind_pc;
/* Skip verify of decr_pc_after_break, invalid_p == 0 */
/* Skip verify of deprecated_function_start_offset, invalid_p == 0 */
/* Skip verify of remote_register_number, invalid_p == 0 */
- /* Skip verify of get_cap_tag_from_address, invalid_p == 0 */
- /* Skip verify of set_cap_tag_from_address, invalid_p == 0 */
/* Skip verify of print_cap, invalid_p == 0 */
/* Skip verify of print_cap_attributes, invalid_p == 0 */
/* Skip verify of fetch_tls_load_module_address, has predicate. */
fprintf_filtered (file,
"gdbarch_dump: remote_register_number = <%s>\n",
host_address_to_string (gdbarch->remote_register_number));
- fprintf_filtered (file,
- "gdbarch_dump: get_cap_tag_from_address = <%s>\n",
- host_address_to_string (gdbarch->get_cap_tag_from_address));
- fprintf_filtered (file,
- "gdbarch_dump: set_cap_tag_from_address = <%s>\n",
- host_address_to_string (gdbarch->set_cap_tag_from_address));
fprintf_filtered (file,
"gdbarch_dump: print_cap = <%s>\n",
host_address_to_string (gdbarch->print_cap));
gdbarch->remote_register_number = remote_register_number;
}
-bool
-gdbarch_get_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr)
-{
- gdb_assert (gdbarch != NULL);
- gdb_assert (gdbarch->get_cap_tag_from_address != NULL);
- if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_get_cap_tag_from_address called\n");
- return gdbarch->get_cap_tag_from_address (gdbarch, addr);
-}
-
-void
-set_gdbarch_get_cap_tag_from_address (struct gdbarch *gdbarch,
- gdbarch_get_cap_tag_from_address_ftype get_cap_tag_from_address)
-{
- gdbarch->get_cap_tag_from_address = get_cap_tag_from_address;
-}
-
-void
-gdbarch_set_cap_tag_from_address (struct gdbarch *gdbarch, CORE_ADDR addr, bool tag)
-{
- gdb_assert (gdbarch != NULL);
- gdb_assert (gdbarch->set_cap_tag_from_address != NULL);
- if (gdbarch_debug >= 2)
- fprintf_unfiltered (gdb_stdlog, "gdbarch_set_cap_tag_from_address called\n");
- gdbarch->set_cap_tag_from_address (gdbarch, addr, tag);
-}
-
-void
-set_gdbarch_set_cap_tag_from_address (struct gdbarch *gdbarch,
- gdbarch_set_cap_tag_from_address_ftype set_cap_tag_from_address)
-{
- gdbarch->set_cap_tag_from_address = set_cap_tag_from_address;
-}
-
void
gdbarch_print_cap (struct gdbarch *gdbarch, const gdb_byte *contents, bool tag, bool compact, struct ui_file *stream)
{