aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-05-29 08:14:52 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2014-05-29 06:14:52 +0000
commit726f0774e0e29b81529deac415a98af1d833a0a2 (patch)
tree3e35fe1c36521e516fb070698c1784783b10db4e /gcc/varasm.c
parent886508277f349ef7973f9ec8239a7d52aad32f4e (diff)
downloadgcc-726f0774e0e29b81529deac415a98af1d833a0a2.zip
gcc-726f0774e0e29b81529deac415a98af1d833a0a2.tar.gz
gcc-726f0774e0e29b81529deac415a98af1d833a0a2.tar.bz2
varasm.c (get_variable_section): Walk aliases.
* varasm.c (get_variable_section): Walk aliases. (place_block_symbol): Walk aliases. From-SVN: r211045
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index d72d11e..7755717 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1083,6 +1083,9 @@ get_variable_section (tree decl, bool prefer_noswitch_p)
{
addr_space_t as = ADDR_SPACE_GENERIC;
int reloc;
+ symtab_node *snode = symtab_get_node (decl);
+ if (snode)
+ decl = symtab_alias_ultimate_target (snode)->decl;
if (TREE_TYPE (decl) != error_mark_node)
as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
@@ -7084,7 +7087,16 @@ place_block_symbol (rtx symbol)
}
else
{
+ struct symtab_node *snode;
decl = SYMBOL_REF_DECL (symbol);
+
+ snode = symtab_get_node (decl);
+ if (snode->alias)
+ {
+ rtx target = DECL_RTL (symtab_alias_ultimate_target (snode)->decl);
+ SYMBOL_REF_BLOCK_OFFSET (symbol) = SYMBOL_REF_BLOCK_OFFSET (target);
+ return;
+ }
alignment = get_variable_align (decl);
size = tree_to_uhwi (DECL_SIZE_UNIT (decl));
if ((flag_sanitize & SANITIZE_ADDRESS)