Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: lang/luajit add support of IBT for amd64
To:
Yuichiro NAITO <naito.yuichiro@gmail.com>
Cc:
ports@openbsd.org
Date:
Wed, 15 Oct 2025 07:31:01 +0100

Download raw body.

Thread
On 2025/10/15 08:52, Yuichiro NAITO wrote:
> Thanks for the diff. It works for me on amd64. I don't have IBT featured
> test environment on i386 but checked building successfully. While the build,
> I saw the following warning message.

The endbr* instructions decode as a "long nop" on 64-bit capable CPUs
but on some older 32-bit CPUs they result in an illegal instruction.

OpenBSD doesn't enable IBT on i386 anyway so adding endbr32 doesn't
make sense. It restrict the CPUs the code can run on but there's no
benefit.

> ./lj_emit_x86.h:73:13: warning: unused function 'emit_endbr' [-Wunused-function]
>    73 | static void emit_endbr(ASMState *as)
>       |             ^~~~~~~~~~
> 1 warning generated.
> ```
> 
> I would like to update your patch as the following to suppress the warning.

better to do this instead, I think.

--- patches/patch-src_lj_emit_x86_h.orig	Wed Oct 15 07:24:44 2025
+++ patches/patch-src_lj_emit_x86_h	Wed Oct 15 07:25:17 2025
@@ -3,18 +3,16 @@ amd64 bti fixes
 Index: src/lj_emit_x86.h
 --- src/lj_emit_x86.h.orig
 +++ src/lj_emit_x86.h
-@@ -70,6 +70,15 @@ static LJ_AINLINE MCode *emit_op(x86Op xo, Reg rr, Reg
+@@ -70,6 +70,13 @@ static LJ_AINLINE MCode *emit_op(x86Op xo, Reg rr, Reg
    return p;
  }
  
++#if LJ_64
 +static void emit_endbr(ASMState *as)
 +{
-+#if LJ_64
 +  emit_u32(as, 0xfa1e0ff3);      // endbr64
-+#else
-+  emit_u32(as, 0xfb1e0ff3);      // endbr32
-+#endif
 +}
++#endif
 +
  /* op + modrm */
  #define emit_opm(xo, mode, rr, rb, p, delta) \