summaryrefslogtreecommitdiff
path: root/sys-apps/sandbox/files/musl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/sandbox/files/musl.patch')
-rw-r--r--sys-apps/sandbox/files/musl.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/sys-apps/sandbox/files/musl.patch b/sys-apps/sandbox/files/musl.patch
new file mode 100644
index 000000000000..419d067f2a29
--- /dev/null
+++ b/sys-apps/sandbox/files/musl.patch
@@ -0,0 +1,42 @@
+--- 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:
+--- a/scripts/gen_symbol_header.awk
++++ b/scripts/gen_symbol_header.awk
+@@ -117,6 +117,10 @@ END {
+ gsub(/@|\./, "_", sym_real_name);
+ }
+
++ # Avoid libc's symbol rename via #define. musl defines aliases as:
++ # #define mkstemp64 mkstemp
++ # #define mkstemps64 mkstemps
++ printf("#undef %s\n", sym_index);
+ printf("#define symname_%s \"%s\"\n", sym_real_name, sym_index);
+
+ # We handle non-versioned libc's by setting symver_*