From: Luis Machado Date: Wed, 10 Mar 2021 13:16:56 +0000 (-0300) Subject: Fix extracting tags from PCC and CSP X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e3136f3dd60b870ca9c156dfc892dae77da236b;p=thirdparty%2Fbinutils-gdb.git Fix extracting tags from PCC and CSP The tags for PCC/CSP are stored in the order of struct user_morello_state. Make sure we account for that when extracting the tags. gdb/ChangeLog: 2021-03-17 Luis Machado * aarch64-tdep.c (aarch64_register_tag): Handle PCC/CSP tag extraction. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 97addfc322b..02fc5b8c149 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-17 Luis Machado + + * aarch64-tdep.c (aarch64_register_tag): Handle PCC/CSP tag + extraction. + 2021-03-17 Luis Machado * aarch64-tdep.c (aarch64_find_mapping_symbol, aarch64_pc_is_c64): New diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 9d11cba958b..fd3a8e8ae0d 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -4123,6 +4123,16 @@ aarch64_register_tag (struct gdbarch *gdbarch, regnum > tdep->cap_reg_last - 2) return false; + /* The CSP/PCC tags are swapped in the tag_map because the ordering of CSP/PCC + in struct user_morello_state is different from GDB's register description. + + Make sure we account for that when extracting the tag from those + registers. */ + if (regnum == tdep->cap_reg_pcc) + regnum = tdep->cap_reg_csp; + else if (regnum == tdep->cap_reg_csp) + regnum = tdep->cap_reg_pcc; + /* Find the proper bit within the tag_map. */ int shift = regnum - tdep->cap_reg_base; ULONGEST tag_map = 0;