no the companion patch was wrong that's all. On Mon, Aug 29, 2016 at 3:47 PM, Nadav Har'El <[email protected]> wrote:
> It seems I committed the first version of this patch. I don't know how the > second version differed. If it did, please send an incremental patch. > > > -- > Nadav Har'El > [email protected] > > On Mon, Aug 29, 2016 at 4:10 PM, Benoit Canet <benoit.canet.contrib@gmail. > com> wrote: > >> This is one of the first syscall used by go binaries. >> The kernel syscall have some custom layout that must >> be convert forth and back to and from libc. Do it. >> >> Signed-off-by: Benoît Canet <[email protected]> >> --- >> linux.cc | 29 +++++++++++++++++++++++++++++ >> 1 file changed, 29 insertions(+) >> >> diff --git a/linux.cc b/linux.cc >> index 843d131..08341f9 100644 >> --- a/linux.cc >> +++ b/linux.cc >> @@ -17,6 +17,7 @@ >> #include <syscall.h> >> #include <stdarg.h> >> #include <errno.h> >> +#include <signal.h> >> #include <time.h> >> #include <sys/epoll.h> >> #include <sys/eventfd.h> >> @@ -26,6 +27,8 @@ >> >> #include <unordered_map> >> >> +#include <musl/src/internal/ksigaction.h> >> + >> extern "C" long gettid() >> { >> return sched::thread::current()->id(); >> @@ -263,6 +266,31 @@ long long_mmap(void *addr, size_t length, int prot, >> int flags, int fd, off_t off >> return fn(arg1, arg2, arg3, arg4, arg5, arg6); \ >> } while (0) >> >> +int rt_sigaction(int sig, const struct k_sigaction * act, struct >> k_sigaction * oact, size_t sigsetsize) >> +{ >> + struct sigaction libc_act, libc_oact, *libc_act_p = nullptr; >> + memset(&libc_act, 0, sizeof(libc_act)); >> + memset(&libc_oact, 0, sizeof(libc_act)); >> + >> + if (act) { >> + libc_act.sa_handler = act->handler; >> + libc_act.sa_flags = act->flags & ~SA_RESTORER; >> + libc_act.sa_restorer = nullptr; >> + memcpy(&libc_act.sa_mask, &act->mask, sizeof(libc_act.sa_mask)); >> + libc_act_p = &libc_act; >> + } >> + >> + int ret = sigaction(sig, libc_act_p, &libc_oact); >> + >> + if (oact) { >> + oact->handler = libc_oact.sa_handler; >> + oact->flags = libc_oact.sa_flags; >> + oact->restorer = nullptr; >> + memcpy(oact->mask, &libc_oact.sa_mask, sizeof(oact->mask)); >> + } >> + >> + return ret; >> +} >> >> long syscall(long number, ...) >> { >> @@ -284,6 +312,7 @@ long syscall(long number, ...) >> SYSCALL3(sched_getaffinity_syscall, pid_t, unsigned, unsigned long >> *); >> SYSCALL6(long_mmap, void *, size_t, int, int, int, off_t); >> SYSCALL2(munmap, void *, size_t); >> + SYSCALL4(rt_sigaction, int, const struct k_sigaction *, struct >> k_sigaction *, size_t); >> } >> >> debug_always("syscall(): unimplemented system call %d\n", number); >> -- >> 2.7.4 >> >> -- >> You received this message because you are subscribed to the Google Groups >> "OSv Development" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
