From 6717dbfd3f5af7013d40ad2be82060d251269e23 Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Thu, 12 Nov 2015 06:18:48 +0300 Subject: gdb: add xtensa-specific patches for 7.10 Signed-off-by: Max Filippov diff --git a/patches/gdb/7.10/110-xtensa-initialize-call_abi-in-xtensa_tdep.patch b/patches/gdb/7.10/110-xtensa-initialize-call_abi-in-xtensa_tdep.patch new file mode 100644 index 0000000..1182a45 --- /dev/null +++ b/patches/gdb/7.10/110-xtensa-initialize-call_abi-in-xtensa_tdep.patch @@ -0,0 +1,39 @@ +From 7f8c0d8984bf5754807d3bb543cbc3ffc634e9e4 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sat, 30 May 2015 13:00:32 +0300 +Subject: [PATCH] xtensa: initialize call_abi in xtensa_tdep + +Use XSHAL_ABI value provided by xtensa-config.h to correctly initialize +xtensa_tdep.call_abi +This fixes calls to functions from GDB that otherwise fail with the +following assertion in call0 configuration: + + gdb/regcache.c:602: internal-error: regcache_raw_read: Assertion + `regnum >= 0 && regnum < regcache->descr->nr_raw_registers' failed. + +gdb/ + * xtensa-tdep.h (XTENSA_GDBARCH_TDEP_INSTANTIATE): Initialize + call_abi using XSHAL_ABI macro. + +Signed-off-by: Max Filippov +--- + gdb/xtensa-tdep.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/gdb/xtensa-tdep.h b/gdb/xtensa-tdep.h +index adacaf8..3b6ea66 100644 +--- a/gdb/xtensa-tdep.h ++++ b/gdb/xtensa-tdep.h +@@ -246,7 +246,8 @@ struct gdbarch_tdep + .spill_location = -1, \ + .spill_size = (spillsz), \ + .unused = 0, \ +- .call_abi = 0, \ ++ .call_abi = (XSHAL_ABI == XTHAL_ABI_CALL0) ? \ ++ CallAbiCall0Only : CallAbiDefault, \ + .debug_interrupt_level = XCHAL_DEBUGLEVEL, \ + .icache_line_bytes = XCHAL_ICACHE_LINESIZE, \ + .dcache_line_bytes = XCHAL_DCACHE_LINESIZE, \ +-- +1.8.1.4 + diff --git a/patches/gdb/7.10/111-xtensa-make-sure-ar_base-is-initialized.patch b/patches/gdb/7.10/111-xtensa-make-sure-ar_base-is-initialized.patch new file mode 100644 index 0000000..982bd7f --- /dev/null +++ b/patches/gdb/7.10/111-xtensa-make-sure-ar_base-is-initialized.patch @@ -0,0 +1,35 @@ +From 208ea73d38c9c16cf983b6419f58050dbadcb6a9 Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 7 Jun 2015 22:43:49 +0300 +Subject: [PATCH 2/2] xtensa: make sure ar_base is initialized + +ar_base is uninitialized for cores w/o windowed registers as their +regmap doesn't have register 0x0100. +Check that ar_base is initialized and if not initialize it with a0_base. + +gdb/ + * xtensa-tdep.c (xtensa_derive_tdep): Make sure ar_base is + initialized. + +Signed-off-by: Max Filippov +--- + gdb/xtensa-tdep.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c +index 55e7d98..41f5ec1 100644 +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -3175,6 +3175,9 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep) + tdep->num_regs = n; + } + ++ if (tdep->ar_base == -1) ++ tdep->ar_base = tdep->a0_base; ++ + /* Number of pseudo registers. */ + tdep->num_pseudo_regs = n - tdep->num_regs; + +-- +1.8.1.4 + diff --git a/patches/gdb/7.10/112-WIP-end-of-prologue-detection-hack.patch b/patches/gdb/7.10/112-WIP-end-of-prologue-detection-hack.patch new file mode 100644 index 0000000..506a57c --- /dev/null +++ b/patches/gdb/7.10/112-WIP-end-of-prologue-detection-hack.patch @@ -0,0 +1,31 @@ +From 7f8eacbb468575fb67db7fd1155a3aedaa91911b Mon Sep 17 00:00:00 2001 +From: Max Filippov +Date: Sun, 7 Jun 2015 23:15:39 +0300 +Subject: [PATCH] WIP: *end of prologue* detection hack + +see + http://www.esp8266.com/viewtopic.php?p=18461#p18461 + http://www.esp8266.com/viewtopic.php?p=19026#p19026 + http://www.esp8266.com/viewtopic.php?p=19683#p19683 + +Signed-off-by: Max Filippov +--- + gdb/xtensa-tdep.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c +index 41f5ec1..6a7dba7 100644 +--- a/gdb/xtensa-tdep.c ++++ b/gdb/xtensa-tdep.c +@@ -2410,7 +2410,7 @@ call0_analyze_prologue (struct gdbarch *gdbarch, + /* Find out, if we have an information about the prologue from DWARF. */ + prologue_sal = find_pc_line (start, 0); + if (prologue_sal.line != 0) /* Found debug info. */ +- body_pc = prologue_sal.end; ++ body_pc = prologue_sal.end + 40; + + /* If we are going to analyze the prologue in general without knowing about + the current PC, make the best assumtion for the end of the prologue. */ +-- +1.8.1.4 + -- cgit v0.10.2-6-g49f6