diff options
author | Andrew Burgess <aburgess@redhat.com> | 2022-08-30 15:21:47 +0100 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2022-10-02 14:21:24 +0100 |
commit | 9a972b54040c6791a163b65a27d24d1acad7c397 (patch) | |
tree | 839d94225a4640966b5c1bba18479a7d4f1a465c /gdb/sh-tdep.c | |
parent | 89e601ac3a2e29da46275a3dcb83855e662fb0c9 (diff) | |
download | gdb-9a972b54040c6791a163b65a27d24d1acad7c397.zip gdb-9a972b54040c6791a163b65a27d24d1acad7c397.tar.gz gdb-9a972b54040c6791a163b65a27d24d1acad7c397.tar.bz2 |
gdb: add a gdbarch_register_name self test, and fix some architectures
This commit adds a self-test that checks that gdbarch_register_name
never returns nullptr for any valid register number.
Most architectures already met this requirement, there were just 6
that failed the new selftest, and are updated in this commit.
Beyond the self-tests I don't have any facilities to test that the
architectures I've adjusted still work correctly.
If you review all the various gdbarch_register_name implementations
then you will see that there are far more architectures that seem like
they might return nullptr in some situations, e.g. alpha, avr, bpf,
etc. This commit doesn't attempt to address these cases as non of
them are hit during the selftest. Many of these cases can never be
hit, for example, in alpha_register_name GDB checks for a register
number less than zero, this case can't happen and could be changed
into an assert.
A later commit in this series will have a general cleanup of all the
various register_name methods, and remove all references to NULL from
their code, however, as that commit will be mostly adjusting code that
is never hit, I want to keep those changes separate.
The selftest has been tested on x86-64, but I don't have access to
suitable systems to fully test any of the *-tdep.c code I've changed
in this commit.
Diffstat (limited to 'gdb/sh-tdep.c')
-rw-r--r-- | gdb/sh-tdep.c | 89 |
1 files changed, 30 insertions, 59 deletions
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c index f6b7df5..e4c631b 100644 --- a/gdb/sh-tdep.c +++ b/gdb/sh-tdep.c @@ -112,19 +112,12 @@ sh_sh_register_name (struct gdbarch *gdbarch, int reg_nr) static const char *register_names[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", - "pc", "pr", "gbr", "vbr", "mach", "macl", "sr", - "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", + "pc", "pr", "gbr", "vbr", "mach", "macl", "sr" }; - if (reg_nr < 0) - return NULL; + + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -140,13 +133,12 @@ sh_sh3_register_name (struct gdbarch *gdbarch, int reg_nr) "", "", "", "", "", "", "", "", "ssr", "spc", "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", - "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1" - "", "", "", "", "", "", "", "", + "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1", }; - if (reg_nr < 0) - return NULL; + + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -163,12 +155,10 @@ sh_sh3e_register_name (struct gdbarch *gdbarch, int reg_nr) "ssr", "spc", "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0", "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1", - "", "", "", "", "", "", "", "", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -182,15 +172,10 @@ sh_sh2e_register_name (struct gdbarch *gdbarch, int reg_nr) "fpul", "fpscr", "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15", - "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -227,10 +212,9 @@ sh_sh2a_register_name (struct gdbarch *gdbarch, int reg_nr) /* double precision (pseudo) 68 - 75 */ "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -264,13 +248,11 @@ sh_sh2a_nofpu_register_name (struct gdbarch *gdbarch, int reg_nr) "ibcr", "ibnr", "tbr", /* 67: register bank number, the user visible pseudo register. */ "bank", - /* double precision (pseudo) 68 - 75 */ - "", "", "", "", "", "", "", "", + /* double precision (pseudo) 68 - 75: report blank, see below. */ }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -285,14 +267,11 @@ sh_sh_dsp_register_name (struct gdbarch *gdbarch, int reg_nr) "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1", "y0", "y1", "", "", "", "", "", "mod", "", "", - "rs", "re", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", + "rs", "re", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -309,13 +288,10 @@ sh_sh3_dsp_register_name (struct gdbarch *gdbarch, int reg_nr) "ssr", "spc", "rs", "re", "", "", "", "", "", "", "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -350,10 +326,9 @@ sh_sh4_register_name (struct gdbarch *gdbarch, int reg_nr) /* FIXME: missing XF */ /* FIXME: missing XD */ }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -383,13 +358,12 @@ sh_sh4_nofpu_register_name (struct gdbarch *gdbarch, int reg_nr) "", /* double precision (pseudo) 68 - 75 -- not for nofpu target */ "", "", "", "", "", "", "", "", - /* vectors (pseudo) 76 - 79 -- not for nofpu target */ - "", "", "", "", + /* vectors (pseudo) 76 - 79 -- not for nofpu target: report blank + below. */ }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } @@ -406,13 +380,10 @@ sh_sh4al_dsp_register_name (struct gdbarch *gdbarch, int reg_nr) "ssr", "spc", "rs", "re", "", "", "", "", "", "", "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b", - "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", }; - if (reg_nr < 0) - return NULL; + gdb_assert (reg_nr >= 0); if (reg_nr >= (sizeof (register_names) / sizeof (*register_names))) - return NULL; + return ""; return register_names[reg_nr]; } |