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.

Reply via email to