+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.