aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2014-12-09 08:00:52 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2014-12-09 08:00:52 +0000
commit6c77972738e8a6abac2b716a1b14c459b4c51240 (patch)
treeaaafbd6893bb320d7e43d58e992f19015ce6cb24 /gcc
parent6a73516d838ce30e52f576df0dee882e410038b3 (diff)
downloadgcc-6c77972738e8a6abac2b716a1b14c459b4c51240.zip
gcc-6c77972738e8a6abac2b716a1b14c459b4c51240.tar.gz
gcc-6c77972738e8a6abac2b716a1b14c459b4c51240.tar.bz2
lto-partition.c (privatize_symbol_name): Correctly privatize instrumentation clones.
gcc/ * lto/lto-partition.c (privatize_symbol_name): Correctly privatize instrumentation clones. gcc/testsuite/ * gcc.dg/lto/lto.exp: Load mpx-dg.exp. * gcc.dg/lto/chkp-privatize_0.c: New. * gcc.dg/lto/chkp-privatize_1.c: New. From-SVN: r218508
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lto/lto-partition.c33
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/lto/chkp-privatize_0.c18
-rw-r--r--gcc/testsuite/gcc.dg/lto/chkp-privatize_1.c8
-rw-r--r--gcc/testsuite/gcc.dg/lto/lto.exp1
6 files changed, 61 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eba4f99..5ca9424 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
+ * lto/lto-partition.c (privatize_symbol_name): Correctly
+ privatize instrumentation clones.
+
+2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
+
* lto-cgraph.c (input_cgraph_1): Don't break existing
instrumentation clone references.
* lto/lto-symtab.c (lto_cgraph_replace_node): Redirect
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 65f0582..809a493 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -787,8 +787,16 @@ static bool
privatize_symbol_name (symtab_node *node)
{
tree decl = node->decl;
- const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
- cgraph_node *cnode;
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
+ const char *name;
+
+ /* If we want to privatize instrumentation clone
+ then we need to change original function name
+ which is used via transparent alias chain. */
+ if (cnode && cnode->instrumentation_clone)
+ decl = cnode->orig_decl;
+
+ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
/* Our renaming machinery do not handle more than one change of assembler name.
We should not need more than one anyway. */
@@ -821,15 +829,20 @@ privatize_symbol_name (symtab_node *node)
(DECL_ASSEMBLER_NAME (decl)));
/* We could change name which is a target of transparent alias
chain of instrumented function name. Fix alias chain if so .*/
- if ((cnode = dyn_cast <cgraph_node *> (node))
- && !cnode->instrumentation_clone
- && cnode->instrumented_version
- && cnode->instrumented_version->orig_decl == decl)
+ if (cnode)
{
- tree iname = DECL_ASSEMBLER_NAME (cnode->instrumented_version->decl);
-
- gcc_assert (IDENTIFIER_TRANSPARENT_ALIAS (iname));
- TREE_CHAIN (iname) = DECL_ASSEMBLER_NAME (decl);
+ tree iname = NULL_TREE;
+ if (cnode->instrumentation_clone)
+ iname = DECL_ASSEMBLER_NAME (cnode->decl);
+ else if (cnode->instrumented_version
+ && cnode->instrumented_version->orig_decl == decl)
+ iname = DECL_ASSEMBLER_NAME (cnode->instrumented_version->decl);
+
+ if (iname)
+ {
+ gcc_assert (IDENTIFIER_TRANSPARENT_ALIAS (iname));
+ TREE_CHAIN (iname) = DECL_ASSEMBLER_NAME (decl);
+ }
}
if (symtab->dump_file)
fprintf (symtab->dump_file,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1b1e7d5..31f740d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,11 @@
2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
+ * gcc.dg/lto/lto.exp: Load mpx-dg.exp.
+ * gcc.dg/lto/chkp-privatize_0.c: New.
+ * gcc.dg/lto/chkp-privatize_1.c: New.
+
+2014-12-09 Ilya Enkovich <ilya.enkovich@intel.com>
+
PR bootstrap/63995
* g++.dg/dg.exp: Add mpx-dg.exp.
* g++.dg/pr63995-1.C: New.
diff --git a/gcc/testsuite/gcc.dg/lto/chkp-privatize_0.c b/gcc/testsuite/gcc.dg/lto/chkp-privatize_0.c
new file mode 100644
index 0000000..4c899e8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/chkp-privatize_0.c
@@ -0,0 +1,18 @@
+/* { dg-lto-do link } */
+/* { dg-require-effective-target mpx { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-lto-options { { -fPIC -flto -flto-partition=max -fcheck-pointer-bounds -mmpx } } } */
+
+static int
+__attribute__ ((noinline))
+func1 (int i)
+{
+ return i + 2;
+}
+
+extern int func2 (int i);
+
+int
+main (int argc, char **argv)
+{
+ return func1 (argc) + func2 (argc) + 1;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/chkp-privatize_1.c b/gcc/testsuite/gcc.dg/lto/chkp-privatize_1.c
new file mode 100644
index 0000000..db39e7f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/chkp-privatize_1.c
@@ -0,0 +1,8 @@
+int func1 = 10;
+
+int
+func2 (int i)
+{
+ func1++;
+ return i + func1;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/lto.exp b/gcc/testsuite/gcc.dg/lto/lto.exp
index 2586297..797c02f 100644
--- a/gcc/testsuite/gcc.dg/lto/lto.exp
+++ b/gcc/testsuite/gcc.dg/lto/lto.exp
@@ -30,6 +30,7 @@ if $tracelevel then {
# Load procedures from common libraries.
load_lib standard.exp
load_lib gcc.exp
+load_lib mpx-dg.exp
# Load the language-independent compabibility support procedures.
load_lib lto.exp