public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
From: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
To: "Victor L. Do Nascimento" <victor.donascimento@arm.com>,
	newlib@sourceware.org
Cc: Richard.Earnshaw@arm.com
Subject: Re: [PATCH v4 6/8] newlib: libc: setjmp/longjmp M-profile PACBTI-enablement
Date: Tue, 22 Nov 2022 16:17:24 +0000	[thread overview]
Message-ID: <8cb69ba4-63dc-b490-a34d-576c2aaf94fa@foss.arm.com> (raw)
In-Reply-To: <yw8jlep2kdks.fsf@arm.com>



On 26/10/2022 12:51, Victor L. Do Nascimento wrote:
> Add function prologue/epilogue to conditionally add BTI landing pads
> and/or PAC code generation & authentication instructions depending on
> compilation flags.
> ---
>   newlib/libc/machine/arm/setjmp.S | 33 ++++++++++++++++++++++++++++++--
>   1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S
> index 21d6ff9e7..4fe53cdf2 100644
> --- a/newlib/libc/machine/arm/setjmp.S
> +++ b/newlib/libc/machine/arm/setjmp.S
> @@ -157,11 +157,15 @@ SYM (.arm_start_of.\name):
>   	.globl SYM (\name)
>   	TYPE (\name)
>   SYM (\name):
> +	.fnstart
> +	.cfi_startproc
>   	PROLOGUE \name
>   .endm
>   
>   .macro FUNC_END name
>   	RET
> +	.cfi_endproc
> +	.fnend
>   	SIZE (\name)
>   .endm
>   	
> @@ -173,11 +177,26 @@ SYM (\name):
>   
>   	/* Save all the callee-preserved registers into the jump buffer.  */
>   #ifdef __thumb2__
> +#if __ARM_FEATURE_PAC_DEFAULT
> +#if __ARM_FEATURE_BTI_DEFAULT
> +	pacbti		ip, lr, sp
> +#else
> +	pac		ip, lr, sp
> +#endif /* __ARM_FEATURE_BTI_DEFAULT */
> +	.cfi_register 	143, 12
> +	mov		a4, ip
> +	mov		ip, sp
> +	stmea		a1!, { a4, v1-v7, fp, ip, lr }

So this stores an extra value in the jump buf (and also changes the 
offsets of the stored values).  Have you checked that there's enough 
space for that?

This might be considered an ABI break, though that's perhaps not too 
important in a bare-metal environment.

R.

> +#else
> +#if __ARM_FEATURE_BTI_DEFAULT
> +	bti
> +#endif /* __ARM_FEATURE_BTI_DEFAULT */
>   	mov		ip, sp
>   	stmea		a1!, { v1-v7, fp, ip, lr }
> +#endif /* __ARM_FEATURE_PAC_DEFAULT */
>   #else
>   	stmea		a1!, { v1-v7, fp, ip, sp, lr }
> -#endif
> +#endif /* __thumb2__ */
>   	
>   #if 0	/* Simulator does not cope with FP instructions yet.  */
>   #ifndef __SOFTFP__
> @@ -200,11 +219,17 @@ SYM (\name):
>   	
>   	/* Restore the registers, retrieving the state when setjmp() was called.  */
>   #ifdef __thumb2__
> +#if __ARM_FEATURE_PAC_DEFAULT
> +	ldmfd		a1!, { a4, v1-v7, fp, ip, lr }
> +	mov		sp, ip
> +	mov         	ip, a4
> +#else
>   	ldmfd		a1!, { v1-v7, fp, ip, lr }
>   	mov		sp, ip
> +#endif /* __ARM_FEATURE_PAC_DEFAULT */
>   #else
>   	ldmfd		a1!, { v1-v7, fp, ip, sp, lr }
> -#endif
> +#endif /* __thumb2__ */
>   	
>   #if 0	/* Simulator does not cope with FP instructions yet.  */
>   #ifndef __SOFTFP__
> @@ -220,5 +245,9 @@ SYM (\name):
>   #endif
>   	moveq		a1, #1
>   
> +#if __ARM_FEATURE_PAC_DEFAULT
> +	aut		ip, lr, sp
> +#endif
> +
>   	FUNC_END longjmp
>   #endif

  reply	other threads:[~2022-11-22 16:17 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-26 11:37 [PATCH v4 0/8] Implement assembly cortex-M PACBTI functionality Victor L. Do Nascimento
2022-10-26 11:45 ` [PATCH v4 1/8] newlib: libc: define M-profile PACBTI-enablement macros Victor L. Do Nascimento
2022-11-22 15:04   ` Richard Earnshaw
2022-10-26 11:46 ` [PATCH v4 2/8] newlib: libc: strcmp M-profile PACBTI-enablement Victor L. Do Nascimento
2022-11-22 15:04   ` Richard Earnshaw
2022-10-26 11:47 ` [PATCH v4 3/8] newlib: libc: strlen " Victor L. Do Nascimento
2022-11-22 15:20   ` Richard Earnshaw
2022-10-26 11:49 ` [PATCH v4 4/8] newlib: libc: memchr " Victor L. Do Nascimento
2022-11-22 15:33   ` Richard Earnshaw
2022-10-26 11:50 ` [PATCH v4 5/8] newlib: libc: memcpy " Victor L. Do Nascimento
2022-11-22 16:03   ` Richard Earnshaw
2022-10-26 11:51 ` [PATCH v4 6/8] newlib: libc: setjmp/longjmp " Victor L. Do Nascimento
2022-11-22 16:17   ` Richard Earnshaw [this message]
2022-10-26 11:52 ` [PATCH v4 7/8] newlib: libc: aeabi_memmove " Victor L. Do Nascimento
2022-11-22 16:18   ` Richard Earnshaw
2022-10-26 11:53 ` [PATCH v4 8/8] newlib: libc: aeabi_memset " Victor L. Do Nascimento
2022-11-22 16:19   ` 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=8cb69ba4-63dc-b490-a34d-576c2aaf94fa@foss.arm.com \
    --to=richard.earnshaw@foss.arm.com \
    --cc=Richard.Earnshaw@arm.com \
    --cc=newlib@sourceware.org \
    --cc=victor.donascimento@arm.com \
    /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).