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.
|