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.
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 <benoit.can...@gmail.com > <javascript:>> 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 <pen...@scylladb.com <javascript:>> >> Signed-off-by: Benoît Canet <ben...@scylladb.com <javascript:>> >> --- >> 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 osv-dev+u...@googlegroups.com <javascript:>. >> 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 osv-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.