aboutsummaryrefslogtreecommitdiff
path: root/gdb/arch-utils.c
diff options
context:
space:
mode:
authorLuis Machado <luis.machado@linaro.org>2021-04-14 11:20:18 -0300
committerLuis Machado <luis.machado@linaro.org>2021-04-16 11:14:16 -0300
commit1b6b755e91408011fa74f0a245369c1979586f9e (patch)
tree6e845854e05071e891c236777d37a8c8b573ea86 /gdb/arch-utils.c
parent6f8f6017a0c4e22c6417c597c31b0a937d148a39 (diff)
downloadgdb-1b6b755e91408011fa74f0a245369c1979586f9e.zip
gdb-1b6b755e91408011fa74f0a245369c1979586f9e.tar.gz
gdb-1b6b755e91408011fa74f0a245369c1979586f9e.tar.bz2
Print bfloat16 DWARF types correctly
Even if the DWARF information contains a bfloat16 base type (__bf16), a variable of such type will still be printed using the IEEE half float format, which is wrong. This patch teaches GDB how to pick the bfloat16 format for __bf16 types in DWARF (based on the base type name) and uses IEEE half float for all the other 16-bit float formats. Tested on aarch64-linux/x86_64-linux. OK? gdb/ChangeLog: 2021-04-16 Luis Machado <luis.machado@linaro.org> * arch-utils.c (default_floatformat_for_type): Handle bfloat16. gdb/testsuite: 2021-04-16 Luis Machado <luis.machado@linaro.org> * gdb.dwarf2/dw2-bfloat16.exp: New file.
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r--gdb/arch-utils.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 0017e70..e1d5afd 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -279,7 +279,13 @@ default_floatformat_for_type (struct gdbarch *gdbarch,
{
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);