From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 41424 invoked by alias); 18 May 2017 14:14:29 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Received: (qmail 41400 invoked by uid 89); 18 May 2017 14:14:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:4450, 2560, H*r:15.0.1178.4, H*RU:15.0.1178.4 X-HELO: mx07-00178001.pphosted.com Received: from mx07-00178001.pphosted.com (HELO mx07-00178001.pphosted.com) (62.209.51.94) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 18 May 2017 14:14:24 +0000 Received: from pps.filterd (m0046037.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v4IE4NPQ019335; Thu, 18 May 2017 16:14:21 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-.pphosted.com with ESMTP id 2ahd2281m8-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 18 May 2017 16:14:21 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id DBA6631; Thu, 18 May 2017 14:14:20 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag5node3.st.com [10.75.127.15]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id C456B23FA; Thu, 18 May 2017 14:14:20 +0000 (GMT) Received: from [164.129.122.187] (10.75.127.44) by SFHDAG5NODE3.st.com (10.75.127.15) with Microsoft SMTP Server (TLS) id 15.0.1178.4; Thu, 18 May 2017 16:14:20 +0200 Message-ID: <591DAC3C.9060405@st.com> Date: Thu, 18 May 2017 14:14:00 -0000 From: Laurent Alfonsi User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:14.0) Gecko/20120713 Thunderbird/14.0 MIME-Version: 1.0 To: Jeff Johnston CC: Newlib Subject: Re: [PATCH] ARM / AArch64: Fix GetCmdLine semihosting directives References: <59087FC3.3050605@st.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------020305090309050104080105" X-ClientProxiedBy: SFHDAG5NODE3.st.com (10.75.127.15) To SFHDAG5NODE3.st.com (10.75.127.15) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-05-18_04:,, signatures=0 X-IsSubscribed: yes X-SW-Source: 2017/txt/msg00334.txt.bz2 --------------020305090309050104080105 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1123 Hi Jeff, I regenerated the patch on top of master branch. I can now apply using git am. Sorry about that. I re-validated again on newlib master + gcc 5.4, binutils 2.26, qemu-arm / qemu-aarch64 2.5.0 / afm. Regards, Laurent On 05/17/17 22:18, Jeff Johnston wrote: > Hi Laurent, > > I have no issues. I would have expected someone from the group of arm > maintainers here to > have commented. That said, I cannot apply the patch using git am nor > patch -u -p1. Could you try recreating the patch? > There is mention of trailing white-space in the errors in addition to > mentioning that the patch will not apply. > > Regards, > > -- Jeff J. > > > On Tue, May 2, 2017 at 8:46 AM, Laurent Alfonsi > > wrote: > > All, > > There's currently a problem in ARM & AArch64 crt0 on the > GetCommandLine semihosting invocation. > I am proposing this patch to fix the issue. > > Tested with versions : gcc 5.4, binutils 2.26, qemu-arm / > qemu-aarch64 2.5.0. > > Would it be ok to commit ? > > Regards, > Laurent Alfonsi > > > --------------020305090309050104080105 Content-Type: text/x-patch; name="0001-ARM-AArch64-Fix-GetCmdLine-semihosting-directives.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-ARM-AArch64-Fix-GetCmdLine-semihosting-directives.patch" Content-length: 3396 >From 4b06ee8a7d5b3e0b134dd7e5f5d11ead2f223b26 Mon Sep 17 00:00:00 2001 From: Laurent ALFONSI Date: Tue, 18 Apr 2017 17:50:16 +0200 Subject: [PATCH] ARM/AArch64: Fix GetCmdLine semihosting directives 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: - libgloss/arm/crt0.S : Arguments passed to the AngelSWI_Reason_GetCmdLine semihosting invocation are placed into .data section instead of .text - libgloss/aarch64/crt0.S : Idem for aarch64 AngelSVC_Reason_GetCmdLine semihosting. --- libgloss/aarch64/crt0.S | 10 ++++++---- libgloss/arm/crt0.S | 9 ++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libgloss/aarch64/crt0.S b/libgloss/aarch64/crt0.S index ae6264d..ed4dafc 100644 --- a/libgloss/aarch64/crt0.S +++ b/libgloss/aarch64/crt0.S @@ -156,10 +156,11 @@ bl FUNCTION (_init) /* Fetch and parse the command line. */ - adr x1, .Lcmdline /* Command line descriptor. */ + ldr x1, .Lcmdline /* Command line descriptor. */ mov w0, #AngelSVC_Reason_GetCmdLine AngelSVCAsm AngelSVC ldr x8, .Lcmdline + ldr x8, [x8] mov x0, #0 /* argc */ mov x1, sp /* argv */ @@ -239,9 +240,7 @@ FUNCTION (_cpu_init_hook): .Lenvp: GEN_DWORD env .Lcmdline: - GEN_DWORD CommandLine - .dword 255 - + GEN_DWORD AngelSVCArgs /* Workspace for Angel calls. */ .data .align 3 @@ -258,3 +257,6 @@ StackBase: .dword 0 StackLimit: .dword 0 env: .dword 0 /* Dummy environment array */ CommandLine: .space 256,0 /* Maximum length of 255 chars handled. */ +AngelSVCArgs: + GEN_DWORD CommandLine + .dword 255 diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 35c306b..48f3d6b 100644 --- a/libgloss/arm/crt0.S +++ b/libgloss/arm/crt0.S @@ -296,9 +296,10 @@ __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 */ AngelSWIAsm AngelSWI ldr r1, .LC30 + ldr r1, [r1] #endif /* Parse string at r1 */ movs r0, #0 /* count of arguments so far */ @@ -505,8 +506,7 @@ change_back: #endif #ifdef ARM_RDI_MONITOR .LC30: - .word CommandLine - .word 255 + .word AngelSWIArgs .LC31: .word __end__ @@ -519,6 +519,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__ -- 1.9.1 --------------020305090309050104080105--