@@ -21357,6 +21357,7 @@ rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl)
ASM_DECLARE_RESULT (file, DECL_RESULT (decl));
rs6000_output_function_entry (file, name);
fputs (":\n", file);
+ assemble_function_label_final ();
return;
}
@@ -182,6 +182,10 @@ extern const char *get_fnname_from_decl (tree);
code or data is output after the label. */
extern void assemble_function_label_raw (FILE *, const char *);
+/* Finish outputting function label. Needs to be called when outputting
+ function label without using assemble_function_label_raw (). */
+extern void assemble_function_label_final (void);
+
/* 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
@@ -1843,6 +1843,15 @@ void
assemble_function_label_raw (FILE *file, const char *name)
{
ASM_OUTPUT_LABEL (file, name);
+ assemble_function_label_final ();
+}
+
+/* Finish outputting function label. Needs to be called when outputting
+ function label without using assemble_function_label_raw (). */
+
+void
+assemble_function_label_final (void)
+{
if ((flag_sanitize & SANITIZE_ADDRESS)
/* Notify ASAN only about the first function label. */
&& (in_cold_section_p == first_function_block_is_cold)
v1: https://inbox.sourceware.org/gcc-patches/20240109105253.332676-1-iii@linux.ibm.com/ v1 -> v2: Move the .LASANPC label to the .text section (Jakub). Jakub okay-ed this version in the GCC Bugzilla. Bootstrap and regtest running on ppc64le-redhat-linux and powerpc64-linux-gnu. Ok for trunk when successful? rs6000_elf_declare_function_name () outputs Power ELF V1 ABI function entry labels without using ASM_OUTPUT_FUNCTION_LABEL (). As a result, .LASANPC labels are not emitted, causing linker errors. In theory, it is possible to reuse ASM_OUTPUT_FUNCTION_LABEL () by changing rs6000_output_function_entry () to generate label names without outputting them, but this would be quite a large change. Instead, factor out the .LASANPC emitting code from ASM_OUTPUT_FUNCTION_LABEL () and call it manually. Fixes: c659dd8bfb55 ("Implement ASM_DECLARE_FUNCTION_NAME using ASM_OUTPUT_FUNCTION_LABEL") Suggested-by: Jakub Jelinek <jakub@redhat.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> gcc/ChangeLog: PR sanitizer/113284 * config/rs6000/rs6000.cc (rs6000_elf_declare_function_name): Use assemble_function_label_final () for Power ELF V1 ABI. * output.h (assemble_function_label_final): New function. * varasm.cc (assemble_function_label_raw): Use assemble_function_label_final (). (assemble_function_label_final): New function. --- gcc/config/rs6000/rs6000.cc | 1 + gcc/output.h | 4 ++++ gcc/varasm.cc | 9 +++++++++ 3 files changed, 14 insertions(+)