On Mon, Jan 15, 2018 at 11:20 PM, Waldek Kozaczuk <[email protected]>
wrote:

> Anybody has an idea if this patch is still relevant? None of the golang
> tests I have conducted exposed any issues possibly related to lack of
> arch_prctl SYSCALL.
>

I'm not sure it was ever relevant. Perhaps it was relevant to one Go
version or one runtime mode (e.g., static compilation but not c-shared),
but no longer is relevant to current Go and c-shared.
If you don't see any messages about this system call being missing, we can
drop it.


>
> On Wednesday, August 31, 2016 at 11:22:37 AM UTC-4, Nadav Har'El wrote:
>>
>>
>> On Wed, Aug 31, 2016 at 4:04 PM, Benoit Canet <[email protected]>
>> wrote:
>>
>>> Needed by libraries produced by the Go compiler.
>>>
>>> With this patch and the golang app the runtime
>>> init crash later because of a vdso issue.
>>>
>>> It can be examinated by insertion an abort()
>>> before osv send SIGSEGV to the program.
>>>
>>> (gdb) bt
>>>     at /usr/lib/golang/src/runtime/mheap.go:503
>>>     argc=<error reading variable: Cannot access memory at address
>>> 0xffffffffffffffcc>, argv=<optimized out>) at core/app.cc:338
>>> Backtrace stopped: previous frame inner to this frame (corrupt stack?)
>>> (gdb) frame 9
>>> 188             CALL    AX
>>> (gdb) lsit
>>> Undefined command: "lsit".  Try "help".
>>> (gdb) list
>>> 183             RET
>>> 184     fallback:
>>> 185             LEAQ    0(SP), DI
>>> 186             MOVQ    $0, SI
>>> 187             MOVQ    runtime·__vdso_gettimeofday_sym(SB), AX
>>> 188             CALL    AX
>>> 189             MOVQ    0(SP), AX       // sec
>>> 190             MOVL    8(SP), DX       // usec
>>> 191             IMULQ   $1000, DX
>>> 192             // sec is in AX, nsec in DX
>>> (gdb) p $ax
>>> $1 = 0
>>> (gdb)
>>>
>>> Signed-off-by: Pekka Enberg <[email protected]>
>>> Signed-off-by: Benoît Canet <[email protected]>
>>>
>>> ---
>>>  Makefile          |  1 +
>>>  arch/x64/msr.hh   |  1 +
>>>  arch/x64/prctl.cc | 39 +++++++++++++++++++++++++++++++++++++++
>>>  linux.cc          |  3 +++
>>>  4 files changed, 44 insertions(+)
>>>  create mode 100644 arch/x64/prctl.cc
>>>
>>> diff --git a/Makefile b/Makefile
>>> index e294a03..4518da8 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -882,6 +882,7 @@ objects += arch/x64/ioapic.o
>>>  objects += arch/x64/apic.o
>>>  objects += arch/x64/apic-clock.o
>>>  objects += arch/x64/entry-xen.o
>>> +objects += arch/x64/prctl.o
>>>  objects += arch/x64/xen.o
>>>  objects += arch/x64/xen_intr.o
>>>  objects += core/sampler.o
>>> diff --git a/arch/x64/msr.hh b/arch/x64/msr.hh
>>> index d77c75c..9aa8314 100644
>>> --- a/arch/x64/msr.hh
>>> +++ b/arch/x64/msr.hh
>>> @@ -62,6 +62,7 @@ enum class msr : uint32_t {
>>>      IA32_LSTAR = 0xc0000082,
>>>      IA32_FMASK = 0xc0000084,
>>>      IA32_FS_BASE = 0xc0000100,
>>> +    IA32_GS_BASE = 0xc0000101,
>>>
>>>      KVM_WALL_CLOCK = 0x11,
>>>      KVM_SYSTEM_TIME = 0x12,
>>> diff --git a/arch/x64/prctl.cc b/arch/x64/prctl.cc
>>> new file mode 100644
>>> index 0000000..73ba7c7
>>> --- /dev/null
>>> +++ b/arch/x64/prctl.cc
>>> @@ -0,0 +1,39 @@
>>> +/*
>>> + * Copyright (C) 2014 Cloudius Systems, Ltd.
>>> + *
>>> + * This work is open source software, licensed under the terms of the
>>> + * BSD license as described in the LICENSE file in the top-level
>>> directory.
>>> + */
>>> +
>>> +#include "arch.hh"
>>> +#include "msr.hh"
>>> +#include "libc/libc.hh"
>>> +
>>> +#include <assert.h>
>>> +#include <stdio.h>
>>> +
>>> +enum {
>>> +    ARCH_SET_GS = 0x1001,
>>> +    ARCH_SET_FS = 0x1002,
>>> +    ARCH_GET_FS = 0x1003,
>>> +    ARCH_GET_GS = 0x1004,
>>> +};
>>> +
>>> +long arch_prctl(int code, unsigned long addr)
>>> +{
>>> +    switch (code) {
>>> +    case ARCH_SET_GS:
>>> +        processor::wrmsr(msr::IA32_GS_BASE, addr);
>>> +        asm volatile ("movq %0, %%gs" :: "r"(addr));
>>>
>>
>> By the way, I think these "movq" things are wrong - I don't know what
>> they are supposed to be doing?
>>
>>
>>
>>> +        break;
>>> +    case ARCH_SET_FS:
>>> +        processor::wrmsr(msr::IA32_FS_BASE, addr);
>>> +        asm volatile ("movq %0, %%fs" :: "r"(addr));
>>> +        break;
>>> +    case ARCH_GET_FS:
>>> +        return processor::rdmsr(msr::IA32_FS_BASE);
>>> +    case ARCH_GET_GS:
>>> +        return processor::rdmsr(msr::IA32_GS_BASE);
>>> +    }
>>> +    return libc_error(EINVAL);
>>> +}
>>> diff --git a/linux.cc b/linux.cc
>>> index e78bb0c..03be002 100644
>>> --- a/linux.cc
>>> +++ b/linux.cc
>>> @@ -297,6 +297,8 @@ int rt_sigprocmask(int how, sigset_t * nset,
>>> sigset_t * oset, size_t sigsetsize)
>>>      return sigprocmask(how, nset, oset);
>>>  }
>>>
>>> +extern long arch_prctl(int code, unsigned long addr);
>>> +
>>>  long syscall(long number, ...)
>>>  {
>>>      switch (number) {
>>> @@ -319,6 +321,7 @@ long syscall(long number, ...)
>>>      SYSCALL2(munmap, void *, size_t);
>>>      SYSCALL4(rt_sigaction, int, const struct k_sigaction *, struct
>>> k_sigaction *, size_t);
>>>      SYSCALL4(rt_sigprocmask, int, sigset_t *, sigset_t *, size_t);
>>> +    SYSCALL2(arch_prctl, int, unsigned long);
>>>      }
>>>
>>>      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.
>

-- 
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