* Fix 16.0 handling. - Patches added: * gdb-testsuite-fix-gdb.python-py-format-string.exp-wi.patch * gdb-testsuite-fix-gdb.python-py-mi-cmd.exp-with-pyth.patch * gdb-testsuite-fix-gdb.ada-mi_task_arg.exp-on-arm-lin.patch * gdb-testsuite-fix-regexp-in-gdb.ada-mi_var_access.ex.patch * gdb-testsuite-check-gnatmake-version-in-gdb.ada-scal.patch * gdb-testsuite-fix-gdb.arch-arm-pseudo-unwind.exp-wit.patch * gdb-symtab-fix-target-type-of-complex-long-double-on.patch * gdb-testsuite-don-t-use-set-auto-solib-add-off.patch * gdb-tdep-fix-arm-thumb2-hw-breakpoint.patch * gdb-testsuite-fix-gdb.cp-m-static.exp-on-arm.patch * gdb-testsuite-fix-gdb.dwarf2-dw2-fixed-point.exp-on-.patch * gdb-testsuite-fix-gdb.dwarf2-dw2-lines.exp-on-arm-li.patch * gdb-exp-fix-gdb.fortran-intrinsics.exp-fail-on-arm.patch * gdb-tdep-handle-sycall-statx-for-arm-linux.patch * gdb-tdep-fix-recording-of-t1-push.patch * gdb-tdep-handle-syscall-clock_gettime64-for-arm-linu.patch * fix-gdb.dwarf2-shortpiece.exp-on-s390x.patch * handle-address-class-annotation-for-s390x-in-some-te.patch * fix-gdb.dap-step-out.exp-on-s390x.patch * use-setvariable-in-gdb.dap-scopes.exp.patch * fix-gdb.base-finish-pretty.exp-on-s390x.patch * fix-gdb.base-readnever.exp-on-s390x.patch * add-dwarf_expr_piece.op.patch * add-gdbarch_dwarf2_reg_piece_offset-hook.patch * fix-gdb.base-store.exp-on-s390x.patch * fix-gdb.ada-o2_float_param.exp-on-s390x-linux.patch * gdb-testsuite-fix-gdb.base-branch-to-self.exp-on-arm.patch * gdb-tdep-fix-gdb.cp-non-trivial-retval.exp-on-riscv6.patch * gdb-testsuite-fix-gdb.cp-non-trivial-retval.exp-on-a.patch * gdb-testsuite-fix-gdb.rust-completion.exp-timeout-on.patch * gdb-testsuite-require-supports_process_record-in-gdb.patch * gdb-testsuite-fix-regexp-in-gdb.arch-i386-disp-step-.patch * gdb-testsuite-fix-gdb.arch-arm-single-step-kernel-he.patch * gdb-testsuite-fix-gdb.python-py-format-address.exp-o.patch * gdb-testsuite-fix-gdb.arch-riscv-tdesc-regs.exp.patch * gdb-testsuite-fix-gdb.base-list-dot-nodebug-and-make.patch * gdb-testsuite-fix-gdb.base-list-dot-nodebug.exp-on-o.patch * gdb-testsuite-fix-gdb.base-empty-host-env-vars.exp.patch * gdb-prune-inferior-after-switching-inferior.patch * gdb-testsuite-use-nostdlib-in-gdb.base-list-dot-node.patch * gdb-testsuite-fix-timeout-in-gdb.mi-mi-multi-command.patch * gdb-testsuite-require-can_spawn_for_attach-in-gdb.ba.patch * fixup-gdb-6.5-gcore-buffer-limit-test.patch * gdb-testsuite-fix-gdb.ada-big_packed_array.exp-on-s3.patch * gdb-testsuite-fix-gdb.ada-convvar_comp.exp-on-s390x-.patch * gdb-testsuite-fix-regexp-in-gdb.threads-stepi-over-c.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=437
114 lines
4.0 KiB
Diff
114 lines
4.0 KiB
Diff
From ac9c99f7f6b86d536c60fcb4b5ecdd4a2e767603 Mon Sep 17 00:00:00 2001
|
|
From: Tom de Vries <tdevries@suse.de>
|
|
Date: Tue, 4 Feb 2025 14:06:20 +0100
|
|
Subject: [PATCH 45/46] [gdb/testsuite] Fix gdb.ada/convvar_comp.exp on
|
|
s390x-linux
|
|
|
|
When running test-case gdb.ada/convvar_comp.exp on s390x-linux, I get:
|
|
...
|
|
(gdb) run ^M
|
|
Starting program: pb16_063 ^M
|
|
^M
|
|
Breakpoint 1, pck.break_me (item=...) at pck.adb:17^M
|
|
17 function Break_Me (Item : T) return Boolean is^M
|
|
(gdb) print item.started^M
|
|
Cannot access memory at address 0x0^M
|
|
(gdb) FAIL: gdb.ada/convvar_comp.exp: print item.started
|
|
...
|
|
|
|
This happens as follows.
|
|
|
|
The parameter item is available in (DW_OP_fbreg: -168):
|
|
...
|
|
<2><912>: Abbrev Number: 18 (DW_TAG_formal_parameter)
|
|
<913> DW_AT_name : (indirect string, offset: 0x14ca): item
|
|
<919> DW_AT_type : <0x929>
|
|
<91d> DW_AT_location : 3 byte block: 91 d8 7e (DW_OP_fbreg: -168)
|
|
...
|
|
and according to the rules of -O0, it's considered to be available after the
|
|
prologue, which looks like this:
|
|
...
|
|
0000000001002998 <pck__break_me>:
|
|
1002998: b3 c1 00 2b ldgr %f2,%r11
|
|
100299c: b3 c1 00 0f ldgr %f0,%r15
|
|
10029a0: e3 f0 ff 58 ff 71 lay %r15,-168(%r15)
|
|
10029a6: b9 04 00 bf lgr %r11,%r15
|
|
10029aa: e3 20 b0 a0 00 24 stg %r2,160(%r11)
|
|
...
|
|
|
|
To detect the prologue, gdb checks the line info, which looks like this:
|
|
...
|
|
pck.adb:
|
|
File name Line number Starting address View Stmt
|
|
pck.adb 17 0x1002998 x
|
|
pck.adb 17 0x1002998 1 x
|
|
pck.adb 19 0x10029b0 x
|
|
pck.adb 20 0x10029b8 x
|
|
pck.adb - 0x10029c6
|
|
...
|
|
and gdb concludes that it's an empty prologue, so we stop at 0x1002998 and
|
|
try to print parameter item, which is not available yet.
|
|
|
|
For more details, see this comment in skip_prologue_using_sal:
|
|
...
|
|
/* For languages other than assembly, treat two consecutive line
|
|
entries at the same address as a zero-instruction prologue.
|
|
...
|
|
|
|
The same thing happens on x86_64-linux, but it causes no problem there,
|
|
because amd64_skip_prologue decides not to trust the result:
|
|
...
|
|
struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
|
|
|
|
/* LLVM backend (Clang/Flang) always emits a line note before the
|
|
prologue and another one after. We trust clang and newer Intel
|
|
compilers to emit usable line notes. */
|
|
if (post_prologue_pc
|
|
&& (cust != NULL
|
|
&& cust->producer () != nullptr
|
|
&& (producer_is_llvm (cust->producer ())
|
|
|| producer_is_icc_ge_19 (cust->producer ()))))
|
|
return std::max (start_pc, post_prologue_pc);
|
|
...
|
|
because the producer is GCC.
|
|
|
|
Work around this by setting a breakpoint on the first statement of
|
|
pck.break_me instead.
|
|
|
|
Tested on s390x-linux.
|
|
---
|
|
gdb/testsuite/gdb.ada/convvar_comp.exp | 4 +++-
|
|
gdb/testsuite/gdb.ada/convvar_comp/pck.adb | 2 +-
|
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/gdb/testsuite/gdb.ada/convvar_comp.exp b/gdb/testsuite/gdb.ada/convvar_comp.exp
|
|
index d59a19a40c3..e7ff3baa624 100644
|
|
--- a/gdb/testsuite/gdb.ada/convvar_comp.exp
|
|
+++ b/gdb/testsuite/gdb.ada/convvar_comp.exp
|
|
@@ -25,7 +25,9 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" }
|
|
|
|
clean_restart ${testfile}
|
|
|
|
-if {![runto "break_me"]} {
|
|
+set bp_location [gdb_get_line_number "BREAK" "$testdir/pck.adb"]
|
|
+
|
|
+if {![runto pck.adb:$bp_location]} {
|
|
return
|
|
}
|
|
|
|
diff --git a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb
|
|
index be5d8d719d8..b7bf3efe8f9 100644
|
|
--- a/gdb/testsuite/gdb.ada/convvar_comp/pck.adb
|
|
+++ b/gdb/testsuite/gdb.ada/convvar_comp/pck.adb
|
|
@@ -16,6 +16,6 @@
|
|
package body Pck is
|
|
function Break_Me (Item : T) return Boolean is
|
|
begin
|
|
- return False;
|
|
+ return False; -- BREAK
|
|
end Break_Me;
|
|
end Pck;
|
|
--
|
|
2.43.0
|
|
|