Align libgloss/arm and libc/sys/arm sources: Fix GetCmdLine semihosting directives

Applied changes from the commit 9b11672:

	When simulating arm code, the target program startup code (crt0) uses
	semihosting invocations to get the command line from the simulator. The
	simulator returns the command line and its size into the area passed in
	parameter. (ARM 32-bit specifications :
	http://infocenter.arm.com/help/topic/com.arm.doc.dui0058d/DUI0058.pdf
	chapter "5.4.19 SYS_GET_CMDLINE").

	The memory area pointed by the semihosting register argument is located
	in .text section (usually not writtable (RX)).

	If we run this code on a simulator that respects this rights properties
	(qemu user-mode for instance), the command line will not be written to
	the .text program memory, in particular the length of the string. The
	program runs with an empty command line. This problem hasn't been seen
	earlier probably because qemu user-mode is not so much used, but this can
	happen with another simulator that refuse to write in a read-only segment.

	With this modification, the command line can be correctly passed to the
	target program.

	Changes:
	- newlib/libc/sys/arm/crt0.S : Arguments passed to the
	AngelSWI_Reason_GetCmdLine semihosting invocation are placed into .data
	section instead of .text
This commit is contained in:
Alexander Fedotov 2019-08-02 07:33:43 -05:00 committed by Richard Earnshaw
parent 362b98b49a
commit 37e80fbb1c
1 changed files with 6 additions and 3 deletions

View File

@ -393,13 +393,14 @@ __change_mode:
movs r1, r0
#else
movs r0, #AngelSWI_Reason_GetCmdLine
adr r1, .LC30 /* Space for command line. */
ldr r1, .LC30 /* Space for command line. */
#ifdef THUMB_VXM
bkpt AngelSWI
#else
AngelSWIAsm AngelSWI
#endif
ldr r1, .LC30
ldr r1, [r1]
#endif
/* Parse string at r1. */
movs r0, #0 /* Count of arguments so far. */
@ -586,8 +587,7 @@ change_back:
#endif
#ifdef ARM_RDI_MONITOR
.LC30:
.word CommandLine
.word 255
.word AngelSWIArgs
.LC31:
.word __end__
@ -600,6 +600,9 @@ HeapLimit: .word 0
__stack_base__: .word 0
StackLimit: .word 0
CommandLine: .space 256,0 /* Maximum length of 255 chars handled. */
AngelSWIArgs:
.word CommandLine
.word 255
#endif
#ifdef __pe__