Allows wine64 to run in valgrind! Apply with -Np0. :D
Yes I know that %gs is still zero on linux amd64. Details details..
Signed-off-by: Maarten Lankhorst maarten.lankhorst@ubuntu.com
---
Index: coregrind/m_translate.c =================================================================== --- coregrind/m_translate.c (revision 13279) +++ coregrind/m_translate.c (working copy) @@ -1486,7 +1486,7 @@ # if defined(VGP_amd64_linux) vex_abiinfo.guest_amd64_assume_fs_is_zero = True; # endif -# if defined(VGP_amd64_darwin) +# if defined(VGP_amd64_darwin) || defined(VGP_amd64_linux) vex_abiinfo.guest_amd64_assume_gs_is_0x60 = True; # endif # if defined(VGP_ppc32_linux) Index: coregrind/m_syswrap/syswrap-amd64-linux.c =================================================================== --- coregrind/m_syswrap/syswrap-amd64-linux.c (revision 13279) +++ coregrind/m_syswrap/syswrap-amd64-linux.c (working copy) @@ -564,6 +564,16 @@ *(unsigned long *)ARG2 = tst->arch.vex.guest_FS_ZERO; POST_MEM_WRITE(ARG2, sizeof(unsigned long)); } + else if (ARG1 == VKI_ARCH_SET_GS) { + tst = VG_(get_ThreadState)(tid); + tst->arch.vex.guest_GS_0x60 = ARG2; + } + else if (ARG1 == VKI_ARCH_GET_GS) { + PRE_MEM_WRITE("arch_prctl(addr)", ARG2, sizeof(unsigned long)); + tst = VG_(get_ThreadState)(tid); + *(unsigned long *)ARG2 = tst->arch.vex.guest_GS_0x60; + POST_MEM_WRITE(ARG2, sizeof(unsigned long)); + } else { VG_(core_panic)("Unsupported arch_prtctl option"); }