void change_decl_assembler_name (tree decl, tree name) { symtab_node *node = NULL; /* We can have user ASM names on things, like global register variables, that are not in the symbol table. */ if ((TREE_CODE (decl) == VAR_DECL && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) || TREE_CODE (decl) == FUNCTION_DECL) node = symtab_get_node (decl); if (!DECL_ASSEMBLER_NAME_SET_P (decl)) { SET_DECL_ASSEMBLER_NAME (decl, name); if (node) insert_to_assembler_name_hash (node, true); } else { if (name == DECL_ASSEMBLER_NAME (decl)) return; tree alias = (IDENTIFIER_TRANSPARENT_ALIAS (DECL_ASSEMBLER_NAME (decl)) ? TREE_CHAIN (DECL_ASSEMBLER_NAME (decl)) : NULL); if (node) unlink_from_assembler_name_hash (node, true); if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) && DECL_RTL_SET_P (decl)) warning (0, "%D renamed after being referenced in assembly", decl); SET_DECL_ASSEMBLER_NAME (decl, name); if (alias) { IDENTIFIER_TRANSPARENT_ALIAS (name) = 1; TREE_CHAIN (DECL_ASSEMBLER_NAME (name)) = alias; } if (node) insert_to_assembler_name_hash (node, true); } }
void solaris_assemble_visibility (tree decl, int vis ATTRIBUTE_UNUSED) { #ifdef HAVE_GAS_HIDDEN /* Sun as uses .symbolic for STV_PROTECTED. STV_INTERNAL is marked as `currently reserved', but the linker treats it like STV_HIDDEN. Sun Studio 12.1 cc emits .hidden instead. There are 3 Sun extensions GCC doesn't yet know about: STV_EXPORTED, STV_SINGLETON, and STV_ELIMINATE. See Linker and Libraries Guide, Ch. 2, Link-Editor, Defining Additional Symbols, and Ch. 7, Object-File Format, Symbol Table Section. */ static const char * const visibility_types[] = { NULL, "symbolic", "hidden", "hidden" }; const char *name, *type; tree id = DECL_ASSEMBLER_NAME (decl); while (IDENTIFIER_TRANSPARENT_ALIAS (id)) id = TREE_CHAIN (id); name = IDENTIFIER_POINTER (id); type = visibility_types[vis]; fprintf (asm_out_file, "\t.%s\t", type); assemble_name (asm_out_file, name); fprintf (asm_out_file, "\n"); #else if (!DECL_ARTIFICIAL (decl)) warning (OPT_Wattributes, "visibility attribute not supported " "in this configuration; ignored"); #endif }