https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105169

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #10)
> Btw, a good example might be how we handle .vtable_map_vars for VTV which
> uses handle_vtv_comdat_section instead of switch_to_section.  It might have
> more specialities but then it should serve as a recipie how to handle
> non-ELF.

So sth like the following would do the trick for ELF.  But maybe better
abstract a switch_to_comdat_section and re-use that from the vtv handler
and this place to avoid touching in_section directly.

diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc
index e22bc66a6c8..632c9486ccb 100644
--- a/gcc/targhooks.cc
+++ b/gcc/targhooks.cc
@@ -1995,8 +1995,13 @@ default_print_patchable_function_entry_1 (FILE *file,
       patch_area_number++;
       ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);

-      switch_to_section (get_section ("__patchable_function_entries",
-                                     flags, current_function_decl));
+      section *sect = get_section ("__patchable_function_entries",
+                                  flags, current_function_decl);
+      targetm.asm_out.named_section  (sect->named.name,
+                                     sect->named.common.flags
+                                     | SECTION_LINKONCE,
+                                     current_function_decl);
+      in_section = sect;
       assemble_align (POINTER_SIZE);
       fputs (asm_op, file);
       assemble_name_raw (file, buf);

Reply via email to