From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 65934 invoked by alias); 5 Aug 2019 12:02:05 -0000 Mailing-List: contact newlib-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-cvs-owner@sourceware.org Received: (qmail 65875 invoked by uid 9007); 5 Aug 2019 12:02:05 -0000 Date: Mon, 05 Aug 2019 12:02:00 -0000 Message-ID: <20190805120205.65873.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Richard Earnshaw To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] Align libgloss/arm and libc/sys/arm sources: Fix GetCmdLine semihosting directives X-Act-Checkin: newlib-cygwin X-Git-Author: Alexander Fedotov X-Git-Refname: refs/heads/master X-Git-Oldrev: 362b98b49af53496f07c36a8b946a3be584a370e X-Git-Newrev: 37e80fbb1c329ab39d154a78fa6d99f28d220dfe X-SW-Source: 2019-q3/txt/msg00013.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=37e80fbb1c329ab39d154a78fa6d99f28d220dfe commit 37e80fbb1c329ab39d154a78fa6d99f28d220dfe Author: Alexander Fedotov Date: Fri Aug 2 07:33:43 2019 -0500 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 Diff: --- newlib/libc/sys/arm/crt0.S | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S index 9c26242..40bbc3d 100644 --- a/newlib/libc/sys/arm/crt0.S +++ b/newlib/libc/sys/arm/crt0.S @@ -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__