summaryrefslogtreecommitdiff
path: root/sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch')
-rw-r--r--sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch b/sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch
new file mode 100644
index 000000000000..0d3e8c5cb949
--- /dev/null
+++ b/sys-devel/gdb/files/gdb-10.2-DW_LLE-riscv64.patch
@@ -0,0 +1,41 @@
+https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=80d1206d7fea6eb756183e2825abdfd0f00cd976
+https://sourceware.org/PR27999
+
+From 80d1206d7fea6eb756183e2825abdfd0f00cd976 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Mon, 21 Jun 2021 11:38:23 +0200
+Subject: [PATCH] gdb: Support DW_LLE_start_end
+
+Without that it is impossible to debug on riscv64.
+
+--- a/gdb/dwarf2/loc.c
++++ b/gdb/dwarf2/loc.c
+@@ -255,9 +255,27 @@ decode_debug_loclists_addresses (dwarf2_per_cu_data *per_cu,
+ *new_ptr = loc_ptr;
+ return DEBUG_LOC_OFFSET_PAIR;
+
++ case DW_LLE_start_end:
++ if (loc_ptr + 2 * addr_size > buf_end)
++ return DEBUG_LOC_BUFFER_OVERFLOW;
++
++ if (signed_addr_p)
++ *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
++ else
++ *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
++
++ loc_ptr += addr_size;
++ if (signed_addr_p)
++ *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
++ else
++ *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
++
++ loc_ptr += addr_size;
++ *new_ptr = loc_ptr;
++ return DEBUG_LOC_START_END;
++
+ /* Following cases are not supported yet. */
+ case DW_LLE_startx_endx:
+- case DW_LLE_start_end:
+ case DW_LLE_default_location:
+ default:
+ return DEBUG_LOC_INVALID_ENTRY;