Page MenuHomeFreeBSD

D40623.diff
No OneTemporary

D40623.diff

diff --git a/lib/csu/aarch64/Makefile b/lib/csu/aarch64/Makefile
--- a/lib/csu/aarch64/Makefile
+++ b/lib/csu/aarch64/Makefile
@@ -4,6 +4,7 @@
CFLAGS+= -I${.CURDIR}
-CRT1OBJS+= crt1_s.o
+CRT1SRC= crt1_s.S
+CRT1OBJ= crt1_c.o
.include <bsd.lib.mk>
diff --git a/lib/csu/aarch64/crt1_c.c b/lib/csu/aarch64/crt1_c.c
--- a/lib/csu/aarch64/crt1_c.c
+++ b/lib/csu/aarch64/crt1_c.c
@@ -32,19 +32,4 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include "libc_private.h"
#include "csu_common.h"
-
-void __start(int, char **, char **, void (*)(void)) __dead2;
-
-/* The entry function. */
-void
-__start(int argc, char *argv[], char *env[], void (*cleanup)(void))
-{
-#ifdef GCRT
- __libc_start1_gcrt(argc, argv, env, cleanup, main, &eprol, &etext);
-__asm__("eprol:");
-#else
- __libc_start1(argc, argv, env, cleanup, main);
-#endif
-}
diff --git a/lib/csu/aarch64/crt1_s.S b/lib/csu/aarch64/crt1_s.S
--- a/lib/csu/aarch64/crt1_s.S
+++ b/lib/csu/aarch64/crt1_s.S
@@ -32,13 +32,35 @@
#include <machine/asm.h>
__FBSDID("$FreeBSD$");
+ /*
+ * The program entry point
+ * void _start(char **ap, void (*cleanup)(void)) __dead2
+ */
ENTRY(_start)
+ .cfi_undefined x30
mov x3, x2 /* cleanup */
add x1, x0, #8 /* load argv */
ldr x0, [x0] /* load argc */
add x2, x1, x0, lsl #3 /* env is after argv */
add x2, x2, #8 /* argv is null terminated */
- b __start
+#ifdef PIC
+ adrp x4, main
+ add x4, x4, :lo12:main
+#else
+ ldr x4, =main
+#endif
+#ifdef GCRT
+ ldr x5, =eprol
+ ldr x6, =etext
+ /*
+ * __libc_start1_gcrt(argc, argv, env, cleanup, main, &eprol, &etext)
+ */
+ bl __libc_start1_gcrt
+eprol:
+#else
+ /* __libc_start1(argc, argv, env, cleanup, main) */
+ bl __libc_start1
+#endif
END(_start)
.section .note.GNU-stack,"",@progbits

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 4, 1:21 PM (7 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15024738
Default Alt Text
D40623.diff (1 KB)

Event Timeline