On February 9, 2018 6:23:37 PM GMT+01:00, Paolo Bonzini <bonz...@gnu.org> wrote: >On 09/02/2018 17:40, Richard Biener wrote: >> On February 9, 2018 5:08:24 PM GMT+01:00, Paolo Bonzini ><bonz...@gnu.org> wrote: >>> Another possibility which I considered but did not implement is to >mark >>> the UNPOISON calls so that they do not cause the parameter to >escape. >> >> I'd do this, thus assign proper fnspec attributes to the asan >functions. > >Hmm, actually that might be as simple as fixing a typo: > >diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def >index 5970d0e..15d6151 100644 >--- a/gcc/internal-fn.def >+++ b/gcc/internal-fn.def >@@ -255,8 +255,8 @@ DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, >".R.") > DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL) > DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL) >DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, >NULL) >-DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, >".R...") >-DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, ".R..") >+DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, >"..R..") >+DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, "..W.") >DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, >NULL) >DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, >NULL) >DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, >NULL) > >which indeed fixes the testcase and seems not to break asan.exp.
Huh. Need to double check why that makes sense ;) >'W' is needed to avoid breaking the pr78541.c testcase, and I think it >makes sense since ASAN_MARK is "writing" the state of the object >(in the test case FRE moves a dereference across a poisoning). > >I'll look at it next week. Someone maybe should take a look at ubsan >fnspecs too. > >Paolo