Below are the port changes to enable building ASAN on powerpc*-linux.
The libsanitizer changes required for powerpc*-linux have already been
committed.  This passes bootstrap and regtesting with no regressions
and we also pass the two ASAN test suite test cases.

Ok for mainline?

Peter


libsanitizer/
        * configure.tgt: Enable build on powerpc*-linux.

gcc/
        * config/rs6000/rs6000.c (TARGET_ASAN_SHADOW_OFFSET): Define.
        (rs6000_asan_shadow_offset): New function.
        * config/rs6000/rs6000.h (FRAME_GROWS_DOWNWARD): Define to
        flag_stack_protect != 0 || flag_asan != 0.

Index: libsanitizer/configure.tgt
===================================================================
--- libsanitizer/configure.tgt  (revision 194226)
+++ libsanitizer/configure.tgt  (working copy)
@@ -25,6 +25,8 @@ case "${target}" in
                TSAN_SUPPORTED=yes
        fi
        ;;
+  powerpc*-*-linux*)
+       ;;
   sparc*-*-linux*)
        ;;
   x86_64-*-darwin* | i?86-*-darwin*)
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 194226)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -1187,6 +1187,9 @@ static const struct attribute_spec rs600
 #undef TARGET_DELEGITIMIZE_ADDRESS
 #define TARGET_DELEGITIMIZE_ADDRESS rs6000_delegitimize_address
 
+#undef TARGET_ASAN_SHADOW_OFFSET
+#define TARGET_ASAN_SHADOW_OFFSET rs6000_asan_shadow_offset
+
 #undef TARGET_CONST_NOT_OK_FOR_DEBUG_P
 #define TARGET_CONST_NOT_OK_FOR_DEBUG_P rs6000_const_not_ok_for_debug_p
 
@@ -27521,6 +27524,13 @@ rs6000_final_prescan_insn (rtx insn, rtx
     }
 }
 
+/* Implement the TARGET_ASAN_SHADOW_OFFSET hook.  */
+
+static unsigned HOST_WIDE_INT
+rs6000_asan_shadow_offset (void)
+{
+  return (unsigned HOST_WIDE_INT) 1 << (TARGET_64BIT ? 41 : 29);
+}
 
 /* Mask options that we want to support inside of attribute((target)) and
    #pragma GCC target operations.  Note, we do not include things like
Index: gcc/config/rs6000/rs6000.h
===================================================================
--- gcc/config/rs6000/rs6000.h  (revision 194226)
+++ gcc/config/rs6000/rs6000.h  (working copy)
@@ -1406,7 +1406,7 @@ extern enum reg_class rs6000_constraints
 
    On the RS/6000, we grow upwards, from the area after the outgoing
    arguments.  */
-#define FRAME_GROWS_DOWNWARD (flag_stack_protect != 0)
+#define FRAME_GROWS_DOWNWARD (flag_stack_protect != 0 || flag_asan != 0)
 
 /* Size of the outgoing register save area */
 #define RS6000_REG_SAVE ((DEFAULT_ABI == ABI_AIX                       \


Reply via email to