]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Support ARCH_GET_FS with arch_prctl on amd64.
authorTom Hughes <tom@compton.nu>
Tue, 19 Jul 2005 22:35:58 +0000 (22:35 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 19 Jul 2005 22:35:58 +0000 (22:35 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4197

coregrind/m_syswrap/syswrap-amd64-linux.c

index bcdc4bde385d1ee496a5dda7bb3f1e13a48f28d0..1baa7abf478991e98c23a9492d8ee31a4483a5e5 100644 (file)
@@ -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