/* Constants: prefixed with AVR_ to avoid name space clashes */
-/* Address space flags */
+/* We are assigning the id 1 to the flash address space. */
-/* We are assigning the TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 to the flash address
- space. */
-
-#define AVR_TYPE_ADDRESS_CLASS_FLASH TYPE_ADDRESS_CLASS_1
-#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH \
+#define AVR_ADDRESS_CLASS_FLASH 1
+#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH \
TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* Is it a data address in flash? */
- if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
+ if (TYPE_ADDRESS_CLASS (type) == AVR_ADDRESS_CLASS_FLASH)
{
/* A data pointer in flash is byte addressed. */
store_unsigned_integer (buf, type->length (), byte_order,
= extract_unsigned_integer (buf, type->length (), byte_order);
/* Is it a data address in flash? */
- if (AVR_TYPE_ADDRESS_CLASS_FLASH (type))
+ if (TYPE_ADDRESS_CLASS (type) == AVR_ADDRESS_CLASS_FLASH)
{
/* A data pointer in flash is already byte addressed. */
return avr_make_iaddr (addr);
return 0;
}
-/* Implementation of `address_class_type_flags_to_name' gdbarch method.
+/* Implementation of `address_class_id_to_name' gdbarch method.
- Convert a type_instance_flag_value to an address space qualifier. */
+ Convert an address class id to an address class qualifier. */
static const char*
-avr_address_class_type_flags_to_name (struct gdbarch *gdbarch,
- type_instance_flags type_flags)
+avr_address_class_id_to_name (struct gdbarch *gdbarch,
+ unsigned int address_class)
{
- if (type_flags & AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH)
+ if (address_class == AVR_ADDRESS_CLASS_FLASH)
return "flash";
else
return NULL;
set_gdbarch_address_class_type_flags (gdbarch, avr_address_class_type_flags);
set_gdbarch_address_class_name_to_type_flags
(gdbarch, avr_address_class_name_to_type_flags);
- set_gdbarch_address_class_type_flags_to_name
- (gdbarch, avr_address_class_type_flags_to_name);
+ set_gdbarch_address_class_id_to_name
+ (gdbarch, avr_address_class_id_to_name);
return gdbarch;
}
return 0;
}
-/* Implementation of `address_class_type_flags_to_name' gdbarch method.
+/* Implementation of `address_class_id_to_name' gdbarch method.
- Convert a type_instance_flag_value to an address space qualifier. */
+ Convert an address class id to an address space qualifier. */
static const char*
-ft32_address_class_type_flags_to_name (struct gdbarch *gdbarch,
- type_instance_flags type_flags)
+ft32_address_class_id_to_name (struct gdbarch *gdbarch,
+ unsigned int address_class)
{
- if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
+ if (address_class == 1)
return "flash";
else
return NULL;
set_gdbarch_address_class_type_flags (gdbarch, ft32_address_class_type_flags);
set_gdbarch_address_class_name_to_type_flags
(gdbarch, ft32_address_class_name_to_type_flags);
- set_gdbarch_address_class_type_flags_to_name
- (gdbarch, ft32_address_class_type_flags_to_name);
+ set_gdbarch_address_class_id_to_name
+ (gdbarch, ft32_address_class_id_to_name);
return gdbarch;
}
bool cannot_step_breakpoint = false;
bool have_nonsteppable_watchpoint = false;
gdbarch_address_class_type_flags_ftype *address_class_type_flags = nullptr;
- gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name = nullptr;
+ gdbarch_address_class_id_to_name_ftype *address_class_id_to_name = nullptr;
gdbarch_execute_dwarf_cfa_vendor_op_ftype *execute_dwarf_cfa_vendor_op = default_execute_dwarf_cfa_vendor_op;
gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags = nullptr;
gdbarch_register_reggroup_p_ftype *register_reggroup_p = default_register_reggroup_p;
/* Skip verify of cannot_step_breakpoint, invalid_p == 0. */
/* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0. */
/* Skip verify of address_class_type_flags, has predicate. */
- /* Skip verify of address_class_type_flags_to_name, has predicate. */
+ /* Skip verify of address_class_id_to_name, has predicate. */
/* Skip verify of execute_dwarf_cfa_vendor_op, invalid_p == 0. */
/* Skip verify of address_class_name_to_type_flags, has predicate. */
/* Skip verify of register_reggroup_p, invalid_p == 0. */
"gdbarch_dump: address_class_type_flags = <%s>\n",
host_address_to_string (gdbarch->address_class_type_flags));
gdb_printf (file,
- "gdbarch_dump: gdbarch_address_class_type_flags_to_name_p() = %d\n",
- gdbarch_address_class_type_flags_to_name_p (gdbarch));
+ "gdbarch_dump: gdbarch_address_class_id_to_name_p() = %d\n",
+ gdbarch_address_class_id_to_name_p (gdbarch));
gdb_printf (file,
- "gdbarch_dump: address_class_type_flags_to_name = <%s>\n",
- host_address_to_string (gdbarch->address_class_type_flags_to_name));
+ "gdbarch_dump: address_class_id_to_name = <%s>\n",
+ host_address_to_string (gdbarch->address_class_id_to_name));
gdb_printf (file,
"gdbarch_dump: execute_dwarf_cfa_vendor_op = <%s>\n",
host_address_to_string (gdbarch->execute_dwarf_cfa_vendor_op));
}
bool
-gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch)
+gdbarch_address_class_id_to_name_p (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != nullptr);
- return gdbarch->address_class_type_flags_to_name != nullptr;
+ return gdbarch->address_class_id_to_name != nullptr;
}
const char *
-gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance_flags type_flags)
+gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, unsigned int address_class)
{
gdb_assert (gdbarch != nullptr);
- gdb_assert (gdbarch->address_class_type_flags_to_name != nullptr);
+ gdb_assert (gdbarch->address_class_id_to_name != nullptr);
if (gdbarch_debug >= 2)
- gdb_printf (gdb_stdlog, "gdbarch_address_class_type_flags_to_name called\n");
- return gdbarch->address_class_type_flags_to_name (gdbarch, type_flags);
+ gdb_printf (gdb_stdlog, "gdbarch_address_class_id_to_name called\n");
+ return gdbarch->address_class_id_to_name (gdbarch, address_class);
}
void
-set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch,
- gdbarch_address_class_type_flags_to_name_ftype address_class_type_flags_to_name)
+set_gdbarch_address_class_id_to_name (struct gdbarch *gdbarch,
+ gdbarch_address_class_id_to_name_ftype address_class_id_to_name)
{
- gdbarch->address_class_type_flags_to_name = address_class_type_flags_to_name;
+ gdbarch->address_class_id_to_name = address_class_id_to_name;
}
bool
type_instance_flags gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype *address_class_type_flags);
-bool gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
+/* Given an architecture-specific address class identifier, return the
+ name of that address class. */
-using gdbarch_address_class_type_flags_to_name_ftype = const char *(struct gdbarch *gdbarch, type_instance_flags type_flags);
-const char *gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance_flags type_flags);
-void set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name);
+bool gdbarch_address_class_id_to_name_p (struct gdbarch *gdbarch);
+
+using gdbarch_address_class_id_to_name_ftype = const char *(struct gdbarch *gdbarch, unsigned int address_class);
+const char *gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, unsigned int address_class);
+void set_gdbarch_address_class_id_to_name (struct gdbarch *gdbarch, gdbarch_address_class_id_to_name_ftype *address_class_id_to_name);
/* Execute vendor-specific DWARF Call Frame Instruction. OP is the instruction.
FS are passed from the generic execute_cfa_program function. */
)
Method(
+ comment="""
+Given an architecture-specific address class identifier, return the
+name of that address class.
+""",
type="const char *",
- name="address_class_type_flags_to_name",
- params=[("type_instance_flags", "type_flags")],
+ name="address_class_id_to_name",
+ params=[("unsigned int", "address_class")],
predicate=True,
)
return "code";
else if (space_flag & TYPE_INSTANCE_FLAG_DATA_SPACE)
return "data";
- else if ((space_flag & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
- && gdbarch_address_class_type_flags_to_name_p (gdbarch))
- return gdbarch_address_class_type_flags_to_name (gdbarch, space_flag);
+
+ unsigned int aclass = TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS (space_flag);
+
+ if (gdbarch_address_class_id_to_name_p (gdbarch))
+ return gdbarch_address_class_id_to_name (gdbarch, aclass);
else
return NULL;
}
(TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1 | TYPE_INSTANCE_FLAG_ADDRESS_CLASS_2)
#define TYPE_ADDRESS_CLASS_ALL(t) (((t)->instance_flags ()) \
& TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL)
+#define TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS(t) \
+ ((unsigned int) ((t) & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_ALL) >> 4)
+#define TYPE_ADDRESS_CLASS(t) \
+ (TYPE_ADDRESS_CLASS_FROM_INSTANCE_FLAGS ((t)->instance_flags ()))
/* Information about a single discriminant. */
return 0;
}
-/* Implement addr_class_type_flags_to_name gdbarch method.
+/* Implement addr_class_id_to_name gdbarch method.
Only used for ABI_LINUX_ZSERIES. */
static const char *
-s390_address_class_type_flags_to_name (struct gdbarch *gdbarch,
- type_instance_flags type_flags)
+s390_address_class_id_to_name (struct gdbarch *gdbarch,
+ unsigned int address_class)
{
- if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
+ if (address_class == 1)
return "mode32";
else
return NULL;
set_gdbarch_ptr_bit (gdbarch, 64);
set_gdbarch_address_class_type_flags (gdbarch,
s390_address_class_type_flags);
- set_gdbarch_address_class_type_flags_to_name (gdbarch,
- s390_address_class_type_flags_to_name);
+ set_gdbarch_address_class_id_to_name (gdbarch,
+ s390_address_class_id_to_name);
set_gdbarch_address_class_name_to_type_flags (gdbarch,
s390_address_class_name_to_type_flags);
break;