This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH v6 01/16] sysdeps/init_array: Add PREINIT_FUNCTION to crti.S
- From: Palmer Dabbelt <palmer at dabbelt dot com>
- To: libc-alpha at sourceware dot org, joseph at codesourcery dot com
- Cc: patches at groups dot riscv dot org, Andrew Waterman <andrew at sifive dot com>, dj at redhat dot com, Darius Rad <darius at bluespec dot com>, Palmer Dabbelt <palmer at dabbelt dot com>
- Date: Thu, 25 Jan 2018 21:44:28 -0800
- Subject: [PATCH v6 01/16] sysdeps/init_array: Add PREINIT_FUNCTION to crti.S
- Authentication-results: sourceware.org; auth=none
- References: <20180126054443.22702-1-palmer@dabbelt.com>
The RISC-V port contains a crti.S that simply contains a link to
PREINIT_FUNCTION (when defined). As this should be entirely generic,
Joseph Myers suggested that we update the generic init_array version to
contain this. Since RISC-V is the only user of init_array this won't
break any existing ports.
This uses '.section .init_array,"aw"', while pt-crti.S contains
'.section .init_array,"a",%init_array'. I think we should include the
'%init_array' section type as well. Additionally, I'm not sure about
the % vs @ distinction -- the gas documentation suggests that only ARM
uses '%', so maybe this generic directory should use '@' instead? FWIW,
the RISC-V assembler appears to accept '%init_array' and '@init_array'.
2018-01-25 Palmer Dabbelt <palmer@sifive.com>
* sysdeps/init_array/crti.S (.section .init_array): Add
PREINIT_FUNCTION when defined.
---
sysdeps/init_array/crti.S | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/sysdeps/init_array/crti.S b/sysdeps/init_array/crti.S
index 0a6e9fd95338..60ba071c1c6e 100644
--- a/sysdeps/init_array/crti.S
+++ b/sysdeps/init_array/crti.S
@@ -11,3 +11,19 @@
But new configurations without compatibility concerns for
toolchains without .init_array support can use this to avoid the
superfluous .init and .fini boilerplate code. */
+
+#include <sys/asm.h>
+
+#ifdef PREINIT_FUNCTION
+
+#if PREINIT_FUNCTION_WEAK
+# error PREINIT_FUNCTION_WEAK is unsupported
+#endif
+
+/* This arranges for PREINIT_FUNCTION to be called upon loading a library that
+ contains crti.o. */
+
+ .section .init_array, "aw"
+ .dc.a PREINIT_FUNCTION
+
+#endif
--
2.13.6