Patchwork [rs6000] Enable ASAN build on powerpc*-linux

login
register
mail settings
Submitter Peter Bergner
Date Dec. 6, 2012, 7:40 p.m.
Message ID <1354822845.4743.37.camel@otta>
Download mbox | patch
Permalink /patch/204307/
State New
Headers show

Comments

Peter Bergner - Dec. 6, 2012, 7:40 p.m.
On Thu, 2012-12-06 at 10:50 -0500, David Edelsohn wrote:
> On Thu, Dec 6, 2012 at 9:46 AM, Peter Bergner <bergner@vnet.ibm.com> wrote:
> 
> >> That macro determines if GCC thinks -fsanitze=address is supported,
> >> which it is not on AIX.  The macro probably should be defined in sysv4.h,
> >> not rs6000.c, and the function should not be defined appropriately.
> >
> > Ok, I can move the macro there.  And by the function being defined
> > appropriately, do you mean wrapping it in a:
> >
> >   #ifdef TARGET_ASAN_SHADOW_OFFSET
> 
> I meant wrapping the code in
> 
> #if TARGET_ELF

Ok, how about the following which bootstrapped and regtested fine?

Peter


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

gcc/
	* config/rs6000/sysv4.h (TARGET_ASAN_SHADOW_OFFSET): Define.
	* config/rs6000/rs6000.c (rs6000_asan_shadow_offset): New function.
	* config/rs6000/rs6000.h (FRAME_GROWS_DOWNWARD): Define to
	flag_stack_protect != 0 || flag_asan != 0.
David Edelsohn - Dec. 6, 2012, 8:29 p.m.
On Thu, Dec 6, 2012 at 2:40 PM, Peter Bergner <bergner@vnet.ibm.com> wrote:

> Ok, how about the following which bootstrapped and regtested fine?
>
> Peter
>
>
> libsanitizer/
>         * configure.tgt: Enable build on powerpc*-linux.
>
> gcc/
>         * config/rs6000/sysv4.h (TARGET_ASAN_SHADOW_OFFSET): Define.
>         * config/rs6000/rs6000.c (rs6000_asan_shadow_offset): New function.
>         * config/rs6000/rs6000.h (FRAME_GROWS_DOWNWARD): Define to
>         flag_stack_protect != 0 || flag_asan != 0.

Please change the FRAME_GROWS_DOWNWARD ChangeLog entry to something
more descriptive, not simply copying the macro line itself.  Maybe:
"Also disable if ASAN used."

Okay with that change.

Thanks, David
Peter Bergner - Dec. 6, 2012, 9:57 p.m.
On Thu, 2012-12-06 at 15:29 -0500, David Edelsohn wrote:
> On Thu, Dec 6, 2012 at 2:40 PM, Peter Bergner <bergner@vnet.ibm.com> wrote:
> >         * config/rs6000/sysv4.h (TARGET_ASAN_SHADOW_OFFSET): Define.
> >         * config/rs6000/rs6000.c (rs6000_asan_shadow_offset): New function.
> >         * config/rs6000/rs6000.h (FRAME_GROWS_DOWNWARD): Define to
> >         flag_stack_protect != 0 || flag_asan != 0.
> 
> Please change the FRAME_GROWS_DOWNWARD ChangeLog entry to something
> more descriptive, not simply copying the macro line itself.  Maybe:
> "Also disable if ASAN used."

Done.  Committed as revision 194273.  Thanks.

Peter

Patch

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/sysv4.h
===================================================================
--- gcc/config/rs6000/sysv4.h	(revision 194226)
+++ gcc/config/rs6000/sysv4.h	(working copy)
@@ -971,6 +971,9 @@  ncrtn.o%s"
 
 #define TARGET_ASM_FILE_END rs6000_elf_file_end
 
+#undef TARGET_ASAN_SHADOW_OFFSET
+#define TARGET_ASAN_SHADOW_OFFSET rs6000_asan_shadow_offset
+
 /* This target uses the sysv4.opt file.  */
 #define TARGET_USES_SYSV4_OPT 1
 
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c	(revision 194226)
+++ gcc/config/rs6000/rs6000.c	(working copy)
@@ -27521,6 +27521,15 @@  rs6000_final_prescan_insn (rtx insn, rtx
     }
 }
 
+/* Implement the TARGET_ASAN_SHADOW_OFFSET hook.  */
+
+#if TARGET_ELF
+static unsigned HOST_WIDE_INT
+rs6000_asan_shadow_offset (void)
+{
+  return (unsigned HOST_WIDE_INT) 1 << (TARGET_64BIT ? 41 : 29);
+}
+#endif
 
 /* 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			\