On Mon, Feb 16, 2015 at 5:30 PM, Richard Henderson <r...@redhat.com> wrote:
>>>> 2015-02-12 H.J. Lu <hongjiu...@intel.com> >>>> Richard Henderson <r...@redhat.com> >>>> >>>> PR rtl/32219 >>>> * cgraphunit.c (cgraph_node::finalize_function): Set definition >>>> before notice_global_symbol. >>>> (varpool_node::finalize_decl): Likewise. >>>> * varasm.c (default_binds_local_p_2): Rename from >>>> default_binds_local_p_1, add weak_dominate argument. Use direct >>>> returns instead of assigning to local variable. Unify varpool and >>>> cgraph paths via symtab_node. Reject undef weak variables before >>>> testing visibility. Reorder tests for simplicity. >>>> (default_binds_local_p): Use default_binds_local_p_2. >>>> (default_binds_local_p_1): Likewise. >>>> (decl_binds_to_current_def_p): Unify varpool and cgraph paths >>>> via symtab_node. >>>> (default_elf_asm_output_external): Emit visibility when specified. >>> >>> It looks like this patch broke alphaev68-linux-gnu [1]. There are many >>> failures of the type: >>> >>> /tmp/cck7V7MR.o: In function >>> `__static_initialization_and_destruction_0(int, int)':^M >>> (.text+0x3ac): relocation truncated to fit: GPRELHIGH against symbol >>> `std::__cxx11::basic_string<char, std::char_traits<char>, >>> std::allocator<char> >::~basic_string()@@GLIBCXX_3.4.21' defined in >>> .text section in >>> /space/uros/gcc-build/alphaev68-unknown-linux-gnu/./libstdc++-v3/src/.libs/libstdc++.so^M >>> /space/homedirs/uros/local/bin/ld: /tmp/cck7V7MR.o: gp-relative >>> relocation against dynamic symbol >> >> It could be related to: >> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65064 >> >> Before this bug fix, all common symbols don't bind locally, >> which is one of PR 32219 bugs. After this fix, common >> symbols bind locally. It may cause problems on targets with >> small data sections and common symbols aren't in small >> data section: > > This is a destructor, and so obviously not a common symbol. > > I'll have a look. The attached patch fixes all alpha-linux-gnu failures. 2015-02-19 Uros Bizjak <ubiz...@gmail.com> * config/alpha/alpha.c (alpha_in_small_data_p): Reject common symbols. Patch was bootstrapped and regression tested on alphaev68-linux-gnu. OK for mainline? Uros. Index: config/alpha/alpha.c =================================================================== --- config/alpha/alpha.c (revision 220806) +++ config/alpha/alpha.c (working copy) @@ -835,6 +835,10 @@ alpha_in_small_data_p (const_tree exp) if (TREE_CODE (exp) == FUNCTION_DECL) return false; + /* COMMON symbols are never small data. */ + if (TREE_CODE (exp) == VAR_DECL && DECL_COMMON (exp)) + return false; + if (TREE_CODE (exp) == VAR_DECL && DECL_SECTION_NAME (exp)) { const char *section = DECL_SECTION_NAME (exp);