Hello, I've gone through the suggestions Martin made and implemented the ones I think I can implement for GCC10.
The two functionality changes in this version are: Added the --param's hwasan-instrument-reads, hwasan-instrument-writes, hwasan-instrument-allocas, hwasan-memintrin, options. I.e. Those that asan has and that make sense for hwasan. Avoided HWASAN_STACK_BACKGROUND in hwasan_increment_tag when using a deterministic tagging approach. There are a lot of extra comments and tests. Bootstrapped and regtested on x86_64 and AArch64. Bootstrapped with `--with-build-config=bootstrap-hwasan` on AArch64 and hwasan features tested there. Built the linux kernel using this feature and ran the test_kasan.ko testing to check the this works for the kernel. (NOTE: I actually did all the above testing before a search and replace of `memory_tagging_p` for `hwasan_sanitize_p` and fixing a typo in the `hwasan-instrument-allocas` parameter name, I will run all the tests again before committing but figure I'll send this out now since I fully expect the tests to still pass). I noticed one extra testsuite failure from those mentioned in the previous version emails: g++.dg/cpp2a/ucn2.C. I believe this is HWASAN correctly catching a problem in the compiler. I've logged the issue here https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92919 . I haven't gotten ASAN_MARK to print as HWASAN_MARK when using memory tagging, since I'm not sure the way I found to implement this would be acceptable. The inlined patch below works but it requires a special declaration instead of just an ~#include~. diff --git a/gcc/internal-fn.h b/gcc/internal-fn.h index a1bc081..d81eb12 100644 --- a/gcc/internal-fn.h +++ b/gcc/internal-fn.h @@ -101,10 +101,16 @@ extern void init_internal_fns (); extern const char *const internal_fn_name_array[]; + +extern bool hwasan_sanitize_p (void); static inline const char * internal_fn_name (enum internal_fn fn) { - return internal_fn_name_array[(int) fn]; + const char *ret = internal_fn_name_array[(int) fn]; + if (! strcmp (ret, "ASAN_MARK") + && hwasan_sanitize_p ()) + return "HWASAN_MARK"; + return ret; } extern internal_fn lookup_internal_fn (const char *); Entire patch series attached to cover letter.
all-patches.tar.gz
Description: all-patches.tar.gz