Don't use a literal pool in .text to load the setjmp magic value as this is
authorkettenis <kettenis@openbsd.org>
Sat, 24 Dec 2022 10:49:19 +0000 (10:49 +0000)
committerkettenis <kettenis@openbsd.org>
Sat, 24 Dec 2022 10:49:19 +0000 (10:49 +0000)
incompatible with executable-only code.

ok deraadt@, guenther@

lib/libc/arch/aarch64/gen/_setjmp.S
lib/libc/arch/aarch64/gen/setjmp.S
lib/libc/arch/aarch64/gen/sigsetjmp.S

index c646f80..91c8c2d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: _setjmp.S,v 1.5 2022/05/24 22:35:27 guenther Exp $    */
+/*     $OpenBSD: _setjmp.S,v 1.6 2022/12/24 10:49:19 kettenis Exp $    */
 /*-
  * Copyright (c) 2014 Andrew Turner
  * Copyright (c) 2014 The FreeBSD Foundation
@@ -36,7 +36,8 @@
 ENTRY(_setjmp)
        RETGUARD_SETUP(_setjmp, x15)
        /* Store the magic value and stack pointer */
-       ldr     x8, .Lmagic
+       movz    x8, #(_JB_MAGIC__SETJMP & 0xffff)
+       movk    x8, #(_JB_MAGIC__SETJMP >> 16), lsl #16
        mov     x9, sp
        stp     x8, x9, [x0], #16
 
@@ -62,9 +63,6 @@ ENTRY(_setjmp)
        mov     x0, #0
        RETGUARD_CHECK(_setjmp, x15)
        ret
-       .align  3
-.Lmagic:
-       .quad   _JB_MAGIC__SETJMP
 END_STRONG(_setjmp)
 
 ENTRY(_longjmp)
@@ -72,7 +70,8 @@ ENTRY(_longjmp)
        RETGUARD_LOAD_RANDOM(_longjmp, x15)
        /* Check the magic value */
        ldr     x8, [x0], #8
-       ldr     x9, .Lmagic
+       movz    x9, #(_JB_MAGIC__SETJMP & 0xffff)
+       movk    x9, #(_JB_MAGIC__SETJMP >> 16), lsl #16
        cmp     x8, x9
        b.ne    .Lbotch
 
index 3fa2282..23dd54f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: setjmp.S,v 1.5 2022/05/24 22:35:27 guenther Exp $     */
+/*     $OpenBSD: setjmp.S,v 1.6 2022/12/24 10:49:19 kettenis Exp $     */
 /*-
  * Copyright (c) 2014 Andrew Turner
  * Copyright (c) 2014 The FreeBSD Foundation
@@ -45,7 +45,8 @@ ENTRY(setjmp)
 
        mov     x0, x2
        /* Store the magic value and stack pointer */
-       ldr     x8, .Lmagic
+       movz    x8, #(_JB_MAGIC_SETJMP & 0xffff)
+       movk    x8, #(_JB_MAGIC_SETJMP >> 16), lsl #16
        mov     x9, sp
        stp     x8, x9, [x0], #16
 
@@ -69,10 +70,6 @@ ENTRY(setjmp)
        mov     x0, #0
        RETGUARD_CHECK(setjmp, x15)
        ret
-
-       .align  3
-.Lmagic:
-       .quad   _JB_MAGIC_SETJMP
 END_STRONG(setjmp)
 
 ENTRY(longjmp)
@@ -89,7 +86,8 @@ ENTRY(longjmp)
        mov     x0, x2
        /* Check the magic value */
        ldr     x8, [x0], #8
-       ldr     x9, .Lmagic
+       movz    x9, #(_JB_MAGIC_SETJMP & 0xffff)
+       movk    x9, #(_JB_MAGIC_SETJMP >> 16), lsl #16
        cmp     x8, x9
        b.ne    .Lbotch
 
index 5599854..7342997 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sigsetjmp.S,v 1.2 2017/03/22 07:31:35 guenther Exp $  */
+/*     $OpenBSD: sigsetjmp.S,v 1.3 2022/12/24 10:49:19 kettenis Exp $  */
 /*-
  * Copyright (c) 2014 The FreeBSD Foundation
  * All rights reserved.
@@ -39,14 +39,12 @@ END(sigsetjmp)
 
 ENTRY(siglongjmp)
        /* Load the _setjmp magic */
-       ldr     x2, .Lmagic
+       movz    x2, #(_JB_MAGIC__SETJMP & 0xffff)
+       movk    x2, #(_JB_MAGIC__SETJMP >> 16), lsl #16
        ldr     x3, [x0]
 
        /* Check the magic */
        cmp     x2, x3
        b.eq    _HIDDEN(_longjmp)
        b       _HIDDEN(longjmp)
-.Lmagic:
-       .align  3
-       .quad   _JB_MAGIC__SETJMP
 END(siglongjmp)