[PATCH v3 7/7] aarch64: Emit pdata/xdata SEH records from md_finish

Evgeny Karpov evgeny@kmaps.co
Thu Aug 14 08:17:16 GMT 2025


Initially, obj_coff_generate_pdata was declared in write_object_file.
Before the change, obj_coff_generate_pdata was used only to validate
syntax, which was sufficient for that purpose. However, that location
seems incorrect, as it is too late to emit .pdata/.xdata records
in the AArch64 case.

md_finish has been declared for AArch64 and extended with
obj_coff_generate_pdata to emit .pdata/.xdata records after all
assembly has been completed.

gas/ChangeLog:

	* config/tc-aarch64.c (defined): Add OBJ_COFF guard.
	(aarch64_md_finish): Add.
	* config/tc-aarch64.h (defined): Add OBJ_COFF guard.
	(md_finish): Add.
	(aarch64_md_finish): Add.
---
 gas/config/tc-aarch64.c | 12 ++++++++++++
 gas/config/tc-aarch64.h |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 96bfe74e4d3..e0ea87b1448 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10260,6 +10260,18 @@ aarch64_cleanup (void)
     }
 }

+#if defined (OBJ_COFF)
+/* Called after all assembly has been done.  */
+
+void
+aarch64_md_finish (void)
+{
+#ifdef obj_coff_generate_pdata
+  obj_coff_generate_pdata ();
+#endif
+}
+#endif /* OBJ_COFF.  */
+
 #ifdef OBJ_ELF
 /* Remove any excess mapping symbols generated for alignment frags in
    SEC.  We may have created a mapping symbol before a zero byte
diff --git a/gas/config/tc-aarch64.h b/gas/config/tc-aarch64.h
index fce34ed48d1..451abd6663e 100644
--- a/gas/config/tc-aarch64.h
+++ b/gas/config/tc-aarch64.h
@@ -82,6 +82,11 @@ struct aarch64_fix

 #define tc_frob_section(S) aarch64_frob_section (S)

+#if defined (OBJ_COFF)
+#define md_finish aarch64_md_finish
+extern void aarch64_md_finish (void);
+#endif
+
 /* The key used to sign a function's return address.  */
 enum pointer_auth_key {
   AARCH64_PAUTH_KEY_A,
-- 
2.39.5


More information about the Binutils mailing list