aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2014-11-10 16:12:21 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2014-11-10 16:12:21 +0000
commit0d4b5b86f2020986ca74c4c79d425764b563f83f (patch)
tree9c8ca24ffe36df06c483d82a49f4e61dcb15c17e /gcc/varasm.c
parent42fd12b1e7fc50183bcf62861aae81301a9efbcf (diff)
downloadgcc-0d4b5b86f2020986ca74c4c79d425764b563f83f.zip
gcc-0d4b5b86f2020986ca74c4c79d425764b563f83f.tar.gz
gcc-0d4b5b86f2020986ca74c4c79d425764b563f83f.tar.bz2
Add a target hook for assembling undeclared decls.
* target.def (assemble_undefined_decl): New hooks. * hooks.c (hook_void_FILEptr_constcharptr_const_tree): New function. * hooks.h (hook_void_FILEptr_constcharptr_const_tree): Declare. * doc/tm.texi.in (TARGET_ASM_ASSEMBLE_UNDEFINED_DECL): Add. * doc/tm.texi: Regenerate. * output.h (assemble_undefined_decl): Declare. (get_fnname_from_decl): Declare. * varasm.c (assemble_undefined_decl): New function. (get_fnname_from_decl): New function. * final.c (rest_of_handle_final): Use it. * varpool.c (varpool_output_variables): Call assemble_undefined_decl for nodes without a definition. From-SVN: r217293
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 8d857a4..54611f8 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1673,6 +1673,18 @@ decide_function_section (tree decl)
in_cold_section_p = first_function_block_is_cold;
}
+/* Get the function's name, as described by its RTL. This may be
+ different from the DECL_NAME name used in the source file. */
+const char *
+get_fnname_from_decl (tree decl)
+{
+ rtx x = DECL_RTL (decl);
+ gcc_assert (MEM_P (x));
+ x = XEXP (x, 0);
+ gcc_assert (GET_CODE (x) == SYMBOL_REF);
+ return XSTR (x, 0);
+}
+
/* Output assembler code for the constant pool of a function and associated
with defining the name of the function. DECL describes the function.
NAME is the function's name. For the constant pool, we use the current
@@ -2045,6 +2057,15 @@ assemble_variable_contents (tree decl, const char *name,
}
}
+/* Write out assembly for the variable DECL, which is not defined in
+ the current translation unit. */
+void
+assemble_undefined_decl (tree decl)
+{
+ const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+ targetm.asm_out.assemble_undefined_decl (asm_out_file, name, decl);
+}
+
/* Assemble everything that is needed for a variable or function declaration.
Not used for automatic variables, and not used for function definitions.
Should not be called for variables of incomplete structure type.