[PATCH, i686] Fix for asan test failures with -m32 happened after EBX enabling in PIC mode

Zamyatin, Igor igor.zamyatin@intel.com
Fri Nov 14 17:31:00 GMT 2014


> On Fri, Nov 14, 2014 at 05:05:57PM +0000, Zamyatin, Igor wrote:
> 
> It is not that easy, -fsanitize=address is not supported everywhere.
> Better if you stick it into testsuite/gcc.dg/asan/ No point adding effective-
> target ia32/fpic, there is nothing i?86 specific, not even ix86/x86_64 specific,
> nor pic specific in the test, just use
> /* { dg-additional-options "-fPIC" { target fpic } } */

Thanks, updated.


gcc/Changelog

2014-11-14  Igor Zamyatin  <igor.zamyatin@intel.com>

	PR sanitizer/63845
	* function.c (assign_parms): Move init of pic_offset_table_rtx
	from here to...
	* cfgexpand.c (expand_used_vars): ...here.

gcc/testsuite/Changelog

2014-11-14  Igor Zamyatin  <igor.zamyatin@intel.com>

	PR sanitizer/63845
	* gcc.dg/asan/pr63845.c: New test.


diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 15d7638..bcd3b35 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -1722,6 +1722,9 @@ expand_used_vars (void)
 
   init_vars_expansion ();
 
+  if (targetm.use_pseudo_pic_reg ())
+    pic_offset_table_rtx = gen_reg_rtx (Pmode);
+
   hash_map<tree, tree> ssa_name_decls;
   for (i = 0; i < SA.map->num_partitions; i++)
     {
diff --git a/gcc/function.c b/gcc/function.c
index ef98091..97e0b79 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -3679,11 +3679,6 @@ assign_parms (tree fndecl)
 
   fnargs.release ();
 
-  /* Initialize pic_offset_table_rtx with a pseudo register
-     if required.  */
-  if (targetm.use_pseudo_pic_reg ())
-    pic_offset_table_rtx = gen_reg_rtx (Pmode);
-
   /* Output all parameter conversion instructions (possibly including calls)
      now that all parameters have been copied out of hard registers.  */
   emit_insn (all.first_conversion_insn);
diff --git a/gcc/testsuite/gcc.dg/asan/pr63845.c b/gcc/testsuite/gcc.dg/asan/pr63845.c
new file mode 100644
index 0000000..a3fbe06
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr63845.c
@@ -0,0 +1,17 @@
+/* PR sanitizer/63845 */
+/* { dg-do compile } */
+/* { dg-options "-fPIC" { target fpic }  } */
+
+int __attribute__ ((noinline, noclone))
+foo (void *p)
+{
+  return *(int*)p;
+}
+
+int main ()
+{
+  char a = 0;
+  foo (&a);
+  return 0;
+}

Igor

> 
> 	Jakub



More information about the Gcc-patches mailing list