diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 0f2ad8c51..407af7f76 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -249,6 +249,7 @@ PRE(sys_rt_sigreturn) PRE(sys_arch_prctl) { ThreadState* tst; + Bool known_option = True; PRINT( "arch_prctl ( %ld, %lx )", SARG1, ARG2 ); vg_assert(VG_(is_valid_tid)(tid)); @@ -283,13 +284,16 @@ PRE(sys_arch_prctl) POST_MEM_WRITE(ARG2, sizeof(unsigned long)); } else { - VG_(core_panic)("Unsupported arch_prctl option"); + known_option = False; } /* Note; the Status writeback to guest state that happens after this wrapper returns does not change guest_FS_CONST or guest_GS_CONST; hence that direct assignment to the guest state is safe here. */ - SET_STATUS_Success( 0 ); + if (known_option) + SET_STATUS_Success( 0 ); + else + SET_STATUS_Failure( VKI_EINVAL ); } // Parts of this are amd64-specific, but the *PEEK* cases are generic.