diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-05-29 08:14:52 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-05-29 06:14:52 +0000 |
commit | 726f0774e0e29b81529deac415a98af1d833a0a2 (patch) | |
tree | 3e35fe1c36521e516fb070698c1784783b10db4e /gcc/varasm.c | |
parent | 886508277f349ef7973f9ec8239a7d52aad32f4e (diff) | |
download | gcc-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.c | 12 |
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) |