From f1860ba97c381a17281e33a895bbad4f5006d43b Mon Sep 17 00:00:00 2001 From: Maxim Ostapenko Date: Mon, 30 Jan 2017 16:06:15 +0000 Subject: [PATCH] re PR lto/79061 ([LTO][ASAN] LTO plus ASAN fails with "AddressSanitizer: initialization-order-fiasco") PR lto/79061 * asan.c (get_translation_unit_decl): Remove function. (asan_add_global): Force has_dynamic_init to zero in LTO mode. From-SVN: r245033 --- gcc/ChangeLog | 6 ++++++ gcc/asan.c | 31 ++++++------------------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 206b8a59c41..00b8a99ad47 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-01-30 Maxim Ostapenko + + PR lto/79061 + * asan.c (get_translation_unit_decl): Remove function. + (asan_add_global): Force has_dynamic_init to zero in LTO mode. + 2017-01-30 Martin Liska PR gcov-profile/79259 diff --git a/gcc/asan.c b/gcc/asan.c index 9098121be8b..6cdd59b7ea7 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -2373,22 +2373,6 @@ asan_needs_odr_indicator_p (tree decl) && TREE_PUBLIC (decl)); } -/* For given DECL return its corresponding TRANSLATION_UNIT_DECL. */ - -static const_tree -get_translation_unit_decl (tree decl) -{ - const_tree context = decl; - while (context && TREE_CODE (context) != TRANSLATION_UNIT_DECL) - { - if (TREE_CODE (context) == BLOCK) - context = BLOCK_SUPERCONTEXT (context); - else - context = get_containing_scope (context); - } - return context; -} - /* Append description of a single global DECL into vector V. TYPE is __asan_global struct type as returned by asan_global_struct. */ @@ -2408,14 +2392,7 @@ asan_add_global (tree decl, tree type, vec *v) pp_string (&asan_pp, ""); str_cst = asan_pp_string (&asan_pp); - const char *filename = main_input_filename; - if (in_lto_p) - { - const_tree translation_unit_decl = get_translation_unit_decl (decl); - if (translation_unit_decl && DECL_NAME (translation_unit_decl) != NULL) - filename = IDENTIFIER_POINTER (DECL_NAME (translation_unit_decl)); - } - pp_string (&module_name_pp, filename); + pp_string (&module_name_pp, main_input_filename); module_name_cst = asan_pp_string (&module_name_pp); if (asan_needs_local_alias (decl)) @@ -2451,7 +2428,11 @@ asan_add_global (tree decl, tree type, vec *v) CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, fold_convert (const_ptr_type_node, module_name_cst)); varpool_node *vnode = varpool_node::get (decl); - int has_dynamic_init = vnode ? vnode->dynamically_initialized : 0; + int has_dynamic_init = 0; + /* FIXME: Enable initialization order fiasco detection in LTO mode once + proper fix for PR 79061 will be applied. */ + if (!in_lto_p) + has_dynamic_init = vnode ? vnode->dynamically_initialized : 0; CONSTRUCTOR_APPEND_ELT (vinner, NULL_TREE, build_int_cst (uptr, has_dynamic_init)); tree locptr = NULL_TREE;