commit:     ed72f5d07f627464a95ab377cd101d90d4d10c7d
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 23 20:48:26 2019 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Tue Jun 25 06:39:05 2019 +0000
URL:        https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=ed72f5d0

libsandbox/trace.c: tweak ptrace command type for musl

glibc defines ptrace as:
  long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
musl defines ptrace as:
  long ptrace(int, ...);

This causes build failure in for of:
    ../../sandbox-2.17/libsandbox/trace/linux/x86_64.c: In function 
'trace_set_ret':
    ../../sandbox-2.17/libsandbox/trace/linux/x86_64.c:99:2: error: type of 
formal parameter 1 is incomplete
      trace_set_regs(regs);
      ^~~~~~~~~~~~~~

Let's clobber to 'int' lowest common denominator.

Bug: https://bugs.gentoo.org/549108
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 libsandbox/trace.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/libsandbox/trace.c b/libsandbox/trace.c
index fb1fc32..3efef23 100644
--- a/libsandbox/trace.c
+++ b/libsandbox/trace.c
@@ -10,7 +10,16 @@
 #include "sb_nr.h"
 
 static long do_peekdata(long offset);
-static long _do_ptrace(enum __ptrace_request request, const char *srequest, 
void *addr, void *data);
+/* Note on _do_ptrace argument types:
+   glibc defines ptrace as:
+     long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void 
*data);
+   musl defines ptrace as:
+     long ptrace(int, ...);
+
+   Let's clobber to 'int' lowest common denominator.
+ */
+typedef int sb_ptrace_req_t;
+static long _do_ptrace(sb_ptrace_req_t request, const char *srequest, void 
*addr, void *data);
 #define do_ptrace(request, addr, data) _do_ptrace(request, #request, addr, 
data)
 #define _trace_possible(data) true
 
@@ -44,7 +53,7 @@ static void trace_exit(int status)
        _exit(status);
 }
 
-static long _do_ptrace(enum __ptrace_request request, const char *srequest, 
void *addr, void *data)
+static long _do_ptrace(sb_ptrace_req_t request, const char *srequest, void 
*addr, void *data)
 {
        long ret;
  try_again:

Reply via email to