/* Dynamic architecture support for GDB, the GNU debugger.
- Copyright (C) 1998-2020 Free Software Foundation, Inc.
+ Copyright (C) 1998-2021 Free Software Foundation, Inc.
This file is part of GDB.
#include "dis-asm.h"
bool
-default_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
- struct displaced_step_closure *closure)
+default_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
{
return !gdbarch_software_single_step_p (gdbarch);
}
return LEGACY_SIM_REGNO_IGNORE;
}
+
+/* See arch-utils.h */
+
+std::string
+default_memtag_to_string (struct gdbarch *gdbarch, struct value *tag)
+{
+ error (_("This architecture has no method to convert a memory tag to"
+ " a string."));
+}
+
+/* See arch-utils.h */
+
+bool
+default_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
+{
+ /* By default, assume the address is untagged. */
+ return false;
+}
+
+/* See arch-utils.h */
+
+bool
+default_memtag_matches_p (struct gdbarch *gdbarch, struct value *address)
+{
+ /* By default, assume the tags match. */
+ return true;
+}
+
+/* See arch-utils.h */
+
+bool
+default_set_memtags (struct gdbarch *gdbarch, struct value *address,
+ size_t length, const gdb::byte_vector &tags,
+ memtag_type tag_type)
+{
+ /* By default, return true (successful); */
+ return true;
+}
+
+/* See arch-utils.h */
+
+struct value *
+default_get_memtag (struct gdbarch *gdbarch, struct value *address,
+ memtag_type tag_type)
+{
+ /* By default, return no tag. */
+ return nullptr;
+}
+
CORE_ADDR
generic_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
{
*frame_regnum = gdbarch_deprecated_fp_regnum (gdbarch);
else if (gdbarch_sp_regnum (gdbarch) >= 0
&& gdbarch_sp_regnum (gdbarch)
- < gdbarch_num_regs (gdbarch))
+ < gdbarch_num_regs (gdbarch))
*frame_regnum = gdbarch_sp_regnum (gdbarch);
else
/* Should this be an internal error? I guess so, it is reflecting
{
const struct floatformat **format = NULL;
- if (len == gdbarch_half_bit (gdbarch))
+ /* Check if this is a bfloat16 type. It has the same size as the
+ IEEE half float type, so we use the base type name to tell them
+ apart. */
+ if (name != nullptr && strcmp (name, "__bf16") == 0
+ && len == gdbarch_bfloat16_bit (gdbarch))
+ format = gdbarch_bfloat16_format (gdbarch);
+ else if (len == gdbarch_half_bit (gdbarch))
format = gdbarch_half_format (gdbarch);
else if (len == gdbarch_float_bit (gdbarch))
format = gdbarch_float_format (gdbarch);
return gdbarch_bfd_arch_info (gdbarch)->arch_name;
}
-/* Default method for gdbarch_addressable_memory_unit_size. By default, a memory byte has
- a size of 1 octet. */
+/* Default method for gdbarch_addressable_memory_unit_size. The default is
+ based on the bits_per_byte defined in the bfd library for the current
+ architecture, this is usually 8-bits, and so this function will usually
+ return 1 indicating 1 byte is 1 octet. */
int
default_addressable_memory_unit_size (struct gdbarch *gdbarch)
{
- return 1;
+ return gdbarch_bfd_arch_info (gdbarch)->bits_per_byte / 8;
}
void
/* See arch-utils.h. */
void
default_read_core_file_mappings (struct gdbarch *gdbarch,
- struct bfd *cbfd,
+ struct bfd *cbfd,
gdb::function_view<void (ULONGEST count)>
pre_loop_cb,
gdb::function_view<void (int num,
- ULONGEST start,
+ ULONGEST start,
ULONGEST end,
ULONGEST file_ofs,
- const char *filename,
- const void *other)>
+ const char *filename)>
loop_cb)
{
}