public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
From: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
To: <newlib@sourceware.org>
Cc: Richard Earnshaw <Richard.Earnshaw@arm.com>
Subject: [PATCH][Newlib] arm: Fix the SP used in setting stack limit for standalone application.
Date: Fri, 3 Mar 2023 12:45:40 +0000	[thread overview]
Message-ID: <41d4f38f-d108-7913-97a2-c60acd11e421@arm.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 831 bytes --]

Hi,

When the processor by default starts in USER mode, in __stack_init
function of crt0.s the stack limit register is not getting set
correctly for standalone application. This is because the register r3
used to set this stack limit register is not updated with correct stack
pointer value. This patch fixes this issue and updates r3 with correct
stack pointer value.

Regression tested on arm-none-eabi target for newlib and newlib-nano and found
no regressions.

Ok for newlib master?

Regards,
Srinath.

libgloss/ChangeLog:

2023-03-03  Srinath Parvathaneni<srinath.parvathaneni@arm.com>

	* arm/crt0.S (__stack_init): Update r3 value before mode checking.

newlib/ChangeLog:

2023-03-03  Srinath Parvathaneni<srinath.parvathaneni@arm.com>

	* libc/sys/arm/crt0.S (__stack_init): Update r3 value before mode
         checking.

[-- Attachment #2: stack_limit.patch --]
[-- Type: text/plain, Size: 1384 bytes --]

diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S
index 78515180bf06f1da37669e4c7e6608c76e1b096d..79ae1e2511783d6b834bd1ac278316ae04ea2ec8 100644
--- a/libgloss/arm/crt0.S
+++ b/libgloss/arm/crt0.S
@@ -149,13 +149,12 @@
 #if (__ARM_ARCH_PROFILE != 'M')
 	/* Following code is compatible for both ARM and Thumb ISA.  */
 	mrs	r4, CPSR
+	mov	r3, sp /* Save input SP value.  */
 	/* Test mode bits - in User of all are 0.  */
 	tst	r4, #(CPSR_M_MASK)
 	/* "eq" means r4 AND #0x0F is 0.  */
 	beq	.Lskip_cpu_modes
 
-	mov	r3, sp /* Save input SP value.  */
-
 	/* FIQ mode, interrupts disabled.  */
 	mov	r1, #(CPSR_M_FIQ|CPSR_M_32BIT|CPSR_I_MASK|CPSR_F_MASK)
 	msr	CPSR_c, r1
diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S
index 6b01d8a88b77f44b1ba495aa1f69156f12749527..121246cfaf1ea197c271e434fe0c05a3aba8fb6a 100644
--- a/newlib/libc/sys/arm/crt0.S
+++ b/newlib/libc/sys/arm/crt0.S
@@ -149,13 +149,12 @@
 #if (__ARM_ARCH_PROFILE != 'M')
 	/* Following code is compatible for both ARM and Thumb ISA.  */
 	mrs	r4, CPSR
+	mov	r3, sp /* Save input SP value.  */
 	/* Test mode bits - in User of all are 0.  */
 	tst	r4, #(CPSR_M_MASK)
 	/* "eq" means r4 AND #0x0F is 0.  */
 	beq	.Lskip_cpu_modes
 
-	mov	r3, sp /* Save input SP value.  */
-
 	/* FIQ mode, interrupts disabled.  */
 	mov	r1, #(CPSR_M_FIQ|CPSR_M_32BIT|CPSR_I_MASK|CPSR_F_MASK)
 	msr	CPSR_c, r1

             reply	other threads:[~2023-03-03 12:45 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-03 12:45 Srinath Parvathaneni [this message]
2023-03-03 13:34 ` Richard Earnshaw

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41d4f38f-d108-7913-97a2-c60acd11e421@arm.com \
    --to=srinath.parvathaneni@arm.com \
    --cc=Richard.Earnshaw@arm.com \
    --cc=newlib@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).