96cf5fb95f
* gdb-testsuite-make-gdb.base-annota1.exp-more-robust.patch * gdb-testsuite-fix-gdb.base-annota1.exp-with-pie.patch - patches added (gdb-patches ml backport): * gdb-tdep-handle-pipe2-syscall-for-amd64.patch * gdb-testsuite-handle-pipe2-syscall-in-gdb.base-catch-syscall.exp.patch * gdb-tdep-support-catch-syscall-pipe2-for-i386.patch - Maintenance script qa.sh: * Add Leap 15.4 x86_64 to know good configs. OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=322
62 lines
1.9 KiB
Diff
62 lines
1.9 KiB
Diff
[gdb/tdep] Handle pipe2 syscall for amd64
|
|
|
|
When running test-case gdb.reverse/pipe-reverse.exp on openSUSE Tumbleweed,
|
|
I run into:
|
|
...
|
|
(gdb) continue^M
|
|
Continuing.^M
|
|
Process record and replay target doesn't support syscall number 293^M
|
|
Process record: failed to record execution log.^M
|
|
^M
|
|
Program stopped.^M
|
|
0x00007ffff7daabdb in pipe () from /lib64/libc.so.6^M
|
|
(gdb) FAIL: gdb.reverse/pipe-reverse.exp: continue to breakpoint: marker2
|
|
...
|
|
|
|
The current glibc on Tumbleweed is 2.35, which contains commit
|
|
"linux: Implement pipe in terms of __NR_pipe2", and consequently syscall pipe2
|
|
is used in stead of syscall pipe.
|
|
|
|
There is already support added for syscall pipe2 for aarch64 (which only has
|
|
syscall pipe2, not syscall pipe), so enable the same for amd64, by:
|
|
- adding amd64_sys_pipe2 in enum amd64_syscall
|
|
- translating amd64_sys_pipe2 to gdb_sys_pipe2 in amd64_canonicalize_syscall
|
|
|
|
Tested on x86_64-linux, specifically on:
|
|
- openSUSE Tumbleweed (with glibc 2.35), and
|
|
- openSUSE Leap 15.3 (with glibc 2.31).
|
|
|
|
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056
|
|
|
|
---
|
|
gdb/amd64-linux-tdep.c | 3 +++
|
|
gdb/amd64-linux-tdep.h | 1 +
|
|
2 files changed, 4 insertions(+)
|
|
|
|
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
|
|
index 0e5194fbeee..9a0759d639c 100644
|
|
--- a/gdb/amd64-linux-tdep.c
|
|
+++ b/gdb/amd64-linux-tdep.c
|
|
@@ -460,6 +460,9 @@ amd64_canonicalize_syscall (enum amd64_syscall syscall_number)
|
|
case amd64_x32_sys_pipe:
|
|
return gdb_sys_pipe;
|
|
|
|
+ case amd64_sys_pipe2:
|
|
+ return gdb_sys_pipe2;
|
|
+
|
|
case amd64_sys_select:
|
|
case amd64_x32_sys_select:
|
|
return gdb_sys_select;
|
|
diff --git a/gdb/amd64-linux-tdep.h b/gdb/amd64-linux-tdep.h
|
|
index 4a41b3b8245..184b0c86f07 100644
|
|
--- a/gdb/amd64-linux-tdep.h
|
|
+++ b/gdb/amd64-linux-tdep.h
|
|
@@ -320,6 +320,7 @@ enum amd64_syscall {
|
|
amd64_sys_sync_file_range = 277,
|
|
amd64_sys_vmsplice = 278,
|
|
amd64_sys_move_pages = 279,
|
|
+ amd64_sys_pipe2 = 293
|
|
};
|
|
|
|
/* Enum that defines the syscall identifiers for x32 linux.
|