or1k: Correct longjmp return value

Message ID 20190626154454.26762-1-martin.werner@aacmicrotec.com
State Accepted
Commit 8b080534cadd8b9e920c8b023e341937a2e274bc
Headers show
Series
  • or1k: Correct longjmp return value
Related show

Commit Message

Martin Erik Werner June 26, 2019, 3:44 p.m.
Invert equality check instruction to correct the return value handling
in longjmp.

The return value should be the value of the second argument to longjmp,
unless the argument value was 0 in which case it should be 1.

Previously, longjmp would set return value 1 if the second argument was
non-zero, and 0 if it was 0, which was incorrect.
---
 newlib/libc/machine/or1k/setjmp.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.11.0

Comments

Corinna Vinschen June 27, 2019, 7:10 a.m. | #1
On Jun 26 17:44, Martin Erik Werner wrote:
> Invert equality check instruction to correct the return value handling

> in longjmp.

> 

> The return value should be the value of the second argument to longjmp,

> unless the argument value was 0 in which case it should be 1.

> 

> Previously, longjmp would set return value 1 if the second argument was

> non-zero, and 0 if it was 0, which was incorrect.

> ---

>  newlib/libc/machine/or1k/setjmp.S | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/newlib/libc/machine/or1k/setjmp.S b/newlib/libc/machine/or1k/setjmp.S

> index 5c023278d..0b93a0342 100644

> --- a/newlib/libc/machine/or1k/setjmp.S

> +++ b/newlib/libc/machine/or1k/setjmp.S

> @@ -70,7 +70,7 @@ longjmp:

>    /* If the second argument to longjmp is zero, set return address to 1,

>    otherwise set it to the value of the second argument */

>  	l.addi	r11, r0, 1

> -	l.sfne	r4, r0

> +	l.sfeq	r4, r0

>  	l.bf	1f

>  	l.nop

>  	l.addi	r11, r4, 0

> -- 

> 2.11.0


Pushed.

Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

Patch

diff --git a/newlib/libc/machine/or1k/setjmp.S b/newlib/libc/machine/or1k/setjmp.S
index 5c023278d..0b93a0342 100644
--- a/newlib/libc/machine/or1k/setjmp.S
+++ b/newlib/libc/machine/or1k/setjmp.S
@@ -70,7 +70,7 @@  longjmp:
   /* If the second argument to longjmp is zero, set return address to 1,
   otherwise set it to the value of the second argument */
 	l.addi	r11, r0, 1
-	l.sfne	r4, r0
+	l.sfeq	r4, r0
 	l.bf	1f
 	l.nop
 	l.addi	r11, r4, 0