This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: [PATCH, i686] Fix for asan test failures with -m32 happened after EBX enabling in PIC mode
- From: "Zamyatin, Igor" <igor dot zamyatin at intel dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: "H.J. Lu" <hjl dot tools at gmail dot com>, Jeff Law <law at redhat dot com>, "GCC Patches (gcc-patches at gcc dot gnu dot org)" <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 14 Nov 2014 17:29:19 +0000
- Subject: RE: [PATCH, i686] Fix for asan test failures with -m32 happened after EBX enabling in PIC mode
- Authentication-results: sourceware.org; auth=none
- References: <0EFAB2BDD0F67E4FB6CCC8B9F87D756969C18BCF at IRSMSX101 dot ger dot corp dot intel dot com> <5453D872 dot 3070402 at redhat dot com> <0EFAB2BDD0F67E4FB6CCC8B9F87D756969C25D63 at IRSMSX101 dot ger dot corp dot intel dot com> <CAMe9rOqpMiQ_=4QfyFGkhgr6S8JEj4midmDgEoWss=Nj4wNnjw at mail dot gmail dot com> <0EFAB2BDD0F67E4FB6CCC8B9F87D756969C5240E at IRSMSX101 dot ger dot corp dot intel dot com> <CAMe9rOr4_qFMaH8hPW401Z+S73rpGsr=58hUferw2Sr6iVtoGg at mail dot gmail dot com> <0EFAB2BDD0F67E4FB6CCC8B9F87D756969C5252B at IRSMSX101 dot ger dot corp dot intel dot com> <20141114171018 dot GW5026 at tucnak dot redhat dot com>
> 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