From 32ca315312628dfce2f0e1c74eab1db33a5f0061 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Wed, 9 Aug 2017 15:37:57 +0100 Subject: [PATCH] Don't fetch command line options without semi-hosting Nowadays, the code fetching command line options via semi-hosting are unconditionally pulled in, so that the semi-hosting code is still there even I compile with option --specs=nosys.specs. gdb ./aarch64-none-elf/libgloss/aarch64/crt0.o (gdb) disassemble _start 0x0000000000000050 <+80>: ldr x1, 0x128 <_cpu_init_hook+48> 0x0000000000000054 <+84>: mov w0, #0x15 0x0000000000000058 <+88>: hlt #0xf000 This patch fixes this problem by wrapping the code by ARM_RDI_MONITOR. When semi-hosting is not used, set command line options to NULL. --- libgloss/aarch64/crt0.S | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S index cbff11a49..3bf027874 100644 --- a/libgloss/aarch64/crt0.S +++ b/libgloss/aarch64/crt0.S @@ -157,6 +157,7 @@ bl FUNCTION (_init) +#ifdef ARM_RDI_MONITOR /* Fetch and parse the command line. */ ldr x1, .Lcmdline /* Command line descriptor. */ mov w0, #AngelSVC_Reason_GetCmdLine @@ -219,6 +220,11 @@ and x4, x1, ~15 mov sp, x4 +#else + mov x0, #0 /* argc = 0 */ + mov x1, #0 /* argv = NULL */ +#endif + bl FUNCTION (main) b FUNCTION (exit) /* Cannot return. */