[aarch64] Remove handling of ADR/ADRP from prologue analyzer
authorLuis Machado <luis.machado@arm.com>
Tue, 16 Aug 2022 08:08:44 +0000 (09:08 +0100)
committerLuis Machado <luis.machado@arm.com>
Thu, 18 Aug 2022 15:42:50 +0000 (16:42 +0100)
As reported by Tom in https://sourceware.org/pipermail/gdb-patches/2022-August/191357.html,
the aarch64 prologue analyzer considers the adrp instruction in the
gdb.dwarf2/dw2-dir-file-name.exp testcase to be part of a prologue.

The function has no prologue though, and it only loads the volatile variable
from memory.  GDB should not skip any instructions in this case.

Doing some archaeology, it seems handling for adr/adrp in prologues was
included with the original aarch64 port.  It might've been an oversight.

In the particular case of gdb.dwarf2/dw2-dir-file-name.exp, the analyzer skips
a couple instructions and leaves us in a nice spot where the address to the
variable "v" is already in w0. But no prologues exists.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29481

gdb/aarch64-tdep.c

index ba9b2d896b77fa48b89ab4ec3cefac2887291c20..7229b53838e8e86384d57d40784562e5dc4ada9f 100644 (file)
@@ -354,14 +354,6 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 
          regs[rd] = pv_subtract (regs[rn], regs[rm]);
        }
-      else if (inst.opcode->iclass == pcreladdr
-              && inst.operands[1].type == AARCH64_OPND_ADDR_ADRP)
-       {
-         gdb_assert (aarch64_num_of_operands (inst.opcode) == 2);
-         gdb_assert (inst.operands[0].type == AARCH64_OPND_Rd);
-
-         regs[inst.operands[0].reg.regno] = pv_unknown ();
-       }
       else if (inst.opcode->iclass == branch_imm)
        {
          /* Stop analysis on branch.  */