1 |
commit: ed72f5d07f627464a95ab377cd101d90d4d10c7d |
2 |
Author: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Jun 23 20:48:26 2019 +0000 |
4 |
Commit: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Jun 25 06:39:05 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=ed72f5d0 |
7 |
|
8 |
libsandbox/trace.c: tweak ptrace command type for musl |
9 |
|
10 |
glibc defines ptrace as: |
11 |
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); |
12 |
musl defines ptrace as: |
13 |
long ptrace(int, ...); |
14 |
|
15 |
This causes build failure in for of: |
16 |
../../sandbox-2.17/libsandbox/trace/linux/x86_64.c: In function 'trace_set_ret': |
17 |
../../sandbox-2.17/libsandbox/trace/linux/x86_64.c:99:2: error: type of formal parameter 1 is incomplete |
18 |
trace_set_regs(regs); |
19 |
^~~~~~~~~~~~~~ |
20 |
|
21 |
Let's clobber to 'int' lowest common denominator. |
22 |
|
23 |
Bug: https://bugs.gentoo.org/549108 |
24 |
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org> |
25 |
|
26 |
libsandbox/trace.c | 13 +++++++++++-- |
27 |
1 file changed, 11 insertions(+), 2 deletions(-) |
28 |
|
29 |
diff --git a/libsandbox/trace.c b/libsandbox/trace.c |
30 |
index fb1fc32..3efef23 100644 |
31 |
--- a/libsandbox/trace.c |
32 |
+++ b/libsandbox/trace.c |
33 |
@@ -10,7 +10,16 @@ |
34 |
#include "sb_nr.h" |
35 |
|
36 |
static long do_peekdata(long offset); |
37 |
-static long _do_ptrace(enum __ptrace_request request, const char *srequest, void *addr, void *data); |
38 |
+/* Note on _do_ptrace argument types: |
39 |
+ glibc defines ptrace as: |
40 |
+ long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); |
41 |
+ musl defines ptrace as: |
42 |
+ long ptrace(int, ...); |
43 |
+ |
44 |
+ Let's clobber to 'int' lowest common denominator. |
45 |
+ */ |
46 |
+typedef int sb_ptrace_req_t; |
47 |
+static long _do_ptrace(sb_ptrace_req_t request, const char *srequest, void *addr, void *data); |
48 |
#define do_ptrace(request, addr, data) _do_ptrace(request, #request, addr, data) |
49 |
#define _trace_possible(data) true |
50 |
|
51 |
@@ -44,7 +53,7 @@ static void trace_exit(int status) |
52 |
_exit(status); |
53 |
} |
54 |
|
55 |
-static long _do_ptrace(enum __ptrace_request request, const char *srequest, void *addr, void *data) |
56 |
+static long _do_ptrace(sb_ptrace_req_t request, const char *srequest, void *addr, void *data) |
57 |
{ |
58 |
long ret; |
59 |
try_again: |