Author: jhb
Date: Thu May  7 15:59:55 2020
New Revision: 360783
URL: https://svnweb.freebsd.org/changeset/base/360783

Log:
  MFC 355403: Use "far" calls and branches so that lld uses valid relocations.
  
  Conditional branch and jump instructions do not always call via PLT
  stubs and thus will not honor LD_PRELOAD, etc.  lld warns about using
  non-preemptible relocations for preemptible or unknown symbols whereas
  bfd does not (at least for RISC-V).

Modified:
  stable/12/lib/libc/riscv/gen/setjmp.S
  stable/12/lib/libc/riscv/gen/sigsetjmp.S
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/lib/libc/riscv/gen/setjmp.S
==============================================================================
--- stable/12/lib/libc/riscv/gen/setjmp.S       Thu May  7 15:12:56 2020        
(r360782)
+++ stable/12/lib/libc/riscv/gen/setjmp.S       Thu May  7 15:59:55 2020        
(r360783)
@@ -46,7 +46,7 @@ ENTRY(setjmp)
        addi    a2, a0, (_JB_SIGMASK * 8)       /* oset */
        li      a1, 0                           /* set */
        li      a0, 1                           /* SIG_BLOCK */
-       jal     sigprocmask
+       call    _C_LABEL(sigprocmask)
 
        ld      a0, 0(sp)
        ld      ra, 8(sp)
@@ -110,7 +110,7 @@ ENTRY(longjmp)
        li      a2, 0                           /* oset */
        addi    a1, a0, (_JB_SIGMASK * 8)       /* set */
        li      a0, 3                           /* SIG_BLOCK */
-       jal     sigprocmask
+       call    _C_LABEL(sigprocmask)
 
        ld      a1, (2 * 8)(sp)
        ld      ra, (1 * 8)(sp)

Modified: stable/12/lib/libc/riscv/gen/sigsetjmp.S
==============================================================================
--- stable/12/lib/libc/riscv/gen/sigsetjmp.S    Thu May  7 15:12:56 2020        
(r360782)
+++ stable/12/lib/libc/riscv/gen/sigsetjmp.S    Thu May  7 15:59:55 2020        
(r360783)
@@ -38,8 +38,10 @@ __FBSDID("$FreeBSD$");
 #include <machine/setjmp.h>
 
 ENTRY(sigsetjmp)
-       beqz    a1, _C_LABEL(_setjmp)
-       j       _C_LABEL(setjmp)
+       beqz    a1, 1f
+       tail    _C_LABEL(setjmp)
+1:
+       tail    _C_LABEL(_setjmp)
 END(sigsetjmp)
 
 ENTRY(siglongjmp)
@@ -48,8 +50,10 @@ ENTRY(siglongjmp)
        ld      a3, 0(a0)
 
        /* Check the magic */
-       beq     a2, a3, _C_LABEL(_longjmp)
-       j       _C_LABEL(longjmp)
+       beq     a2, a3, 1f
+       tail    _C_LABEL(longjmp)
+1:
+       tail    _C_LABEL(_longjmp)
 
        .align  3
 .Lmagic:
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to