From: Tom Hughes Date: Tue, 19 Jul 2005 22:35:58 +0000 (+0000) Subject: Support ARCH_GET_FS with arch_prctl on amd64. X-Git-Tag: svn/VALGRIND_3_0_0~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a658d8c40f90e806bdf9bc0c2f1f7745a273de98;p=thirdparty%2Fvalgrind.git Support ARCH_GET_FS with arch_prctl on amd64. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4197 --- diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index bcdc4bde38..1baa7abf47 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -717,9 +717,19 @@ PRE(sys_arch_prctl) // PRE_MEM_READs/PRE_MEM_WRITEs as necessary... /* "do" the syscall ourselves; the kernel never sees it */ - vg_assert(ARG1 == VKI_ARCH_SET_FS); - tst = VG_(get_ThreadState)(tid); - tst->arch.vex.guest_FS_ZERO = ARG2; + if (ARG1 == VKI_ARCH_SET_FS) { + tst = VG_(get_ThreadState)(tid); + tst->arch.vex.guest_FS_ZERO = ARG2; + } + else if (ARG1 == VKI_ARCH_GET_FS) { + PRE_MEM_WRITE("arch_prctl(addr)", ARG2, sizeof(unsigned long)); + tst = VG_(get_ThreadState)(tid); + *(unsigned long *)ARG2 = tst->arch.vex.guest_FS_ZERO; + POST_MEM_WRITE(ARG2, sizeof(unsigned long)); + } + else { + VG_(core_panic)("Unsupported arch_prtctl option"); + } /* Note; the Status writeback to guest state that happens after this wrapper returns does not change guest_FS_ZERO; hence that