aboutsummaryrefslogtreecommitdiff
path: root/gdb/arch-utils.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2019-02-22 20:49:04 +0000
committerAndrew Burgess <andrew.burgess@embecosm.com>2019-02-27 10:38:15 +0200
commit5561fc304ff2a93a33a42df63eaf18b92483b307 (patch)
treebc30aaaedd4280f162d2a8e46dbfe743644ebfa1 /gdb/arch-utils.c
parent9335e75a6170fbf76f60548690d5724198cf0440 (diff)
downloadgdb-5561fc304ff2a93a33a42df63eaf18b92483b307.zip
gdb-5561fc304ff2a93a33a42df63eaf18b92483b307.tar.gz
gdb-5561fc304ff2a93a33a42df63eaf18b92483b307.tar.bz2
gdb: Restructure type_align and gdbarch_type_align
This commit restructures the relationship between the type_align function and the gdbarch_type_align method. The problem being addressed with this commit is this; previously the type_align function was structured so that for "basic" types (int, float, etc) the gdbarch_type_align hook was called, which for "compound" types (arrays, structs, etc) the common type_align code has a fixed method for how to extract a "basic" type and would then call itself on that "basic" type. The problem is that if an architecture wants to modify the alignment rules for a "compound" type then this is not currently possible. In the revised structure, all types pass through the gdbarch_type_align method. If this method returns 0 then this indicates that the architecture has no special rules for this type, and GDB should apply the default rules for alignment. However, the architecture is free to provide an alignment for any type, both "basic" and "compound". After this commit the default alignment rules now all live in the type_align function, the default_type_align only ever returns 0, meaning apply the default rules. I've updated the 3 targets (arc, i386, and nios2) that already override the gdbarch_type_align method to fit the new scheme. Tested on X86-64/GNU Linux with no regressions. gdb/ChangeLog: * arc-tdep.c (arc_type_align): Provide alignment for basic types, return 0 for other types. * arch-utils.c (default_type_align): Always return 0. * gdbarch.h: Regenerate. * gdbarch.sh (type_align): Extend comment. * gdbtypes.c (type_align): Add additional comments, always call gdbarch_type_align before applying the default rules. * i386-tdep.c (i386_type_align): Return 0 as the default rule, generic code will then apply a suitable default. * nios2-tdep.c (nios2_type_align): Provide alignment for basic types, return 0 for other types.
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r--gdb/arch-utils.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index d2e27d9..52a08da 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -993,7 +993,7 @@ default_in_indirect_branch_thunk (gdbarch *gdbarch, CORE_ADDR pc)
ULONGEST
default_type_align (struct gdbarch *gdbarch, struct type *type)
{
- return type_length_units (check_typedef (type));
+ return 0;
}
void