> Date: Tue, 24 Jun 2025 12:01:45 +0200
> From: Mark Kettenis <[email protected]>
> 
> > Date: Tue, 24 Jun 2025 10:04:24 +1000
> > From: Jonathan Gray <[email protected]>
> > 
> > On Tue, Jun 24, 2025 at 08:53:03AM +1000, Jonathan Gray wrote:
> > > On Mon, Jun 23, 2025 at 08:31:45PM +0200, Mark Kettenis wrote:
> > > > > Date: Mon, 23 Jun 2025 18:25:17 +0200
> > > > > From: Moritz Buhl <[email protected]>
> > > > > 
> > > > > Dear bugs@,
> > > > > 
> > > > > for about two weeks I am having trouble running x11/alacritty on
> > > > > my Apple MacBook Air M2 from 2022.
> > > > > I suspect there is a missing BTI instruction in libmesas jit.
> > > > 
> > > > Yup!
> > > > 
> > > > So the big question is whether it is the Mesa update or the LLVM
> > > > update that broke it.  The LLVM update was committed 12 days ago, so
> > > > "about two weeks" could mean it is or it isn't :(.
> > > 
> > > Mesa still has the local change to add and call
> > > 
> > > extern "C" void
> > > lp_set_module_branch_protection(LLVMModuleRef MRef)
> > > {
> > >    /* Enable standard (bti+pac-ret) branch protection */
> > >    llvm::Module *M = llvm::unwrap(MRef);
> > >    M->addModuleFlag(llvm::Module::Override, "branch-target-enforcement", 
> > > 1);
> > >    M->addModuleFlag(llvm::Module::Override, "sign-return-address", 1);
> > > }
> > 
> > It seems LLVM 19 needs it set for function attributes after
> > https://github.com/llvm/llvm-project/commit/e15d67cfc2e5775cc79281aa860f3ad3be628f39
> 
> Yes, I came to the same conclusion.  I think I found a suitable place
> to add the function attributes, but I need to do some testing.  Stay
> tuned.

This seems to fix the issue.

ok?


Index: lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_init.c
===================================================================
RCS file: /cvs/xenocara/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_init.c,v
diff -u -p -r1.20 lp_bld_init.c
--- lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_init.c        5 Jun 2025 
14:19:08 -0000       1.20
+++ lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_init.c        24 Jun 2025 
13:13:09 -0000
@@ -234,10 +234,6 @@ init_gallivm_state(struct gallivm_state 
    lp_set_module_stack_alignment_override(gallivm->module, 4);
 #endif
 
-#if DETECT_ARCH_AARCH64
-   lp_set_module_branch_protection(gallivm->module);
-#endif
-
    gallivm->builder = LLVMCreateBuilderInContext(gallivm->context);
    if (!gallivm->builder)
       goto fail;
@@ -404,6 +400,16 @@ gallivm_compile_module(struct gallivm_st
                    "[-mcpu=<-mcpu option>] ",
                    "[-mattr=<-mattr option(s)>]");
    }
+
+#if DETECT_ARCH_AARCH64
+   LLVMValueRef func = LLVMGetFirstFunction(gallivm->module);
+
+   while (func) {
+      LLVMAddTargetDependentFunctionAttr(func, "branch-target-enforcement", 
"true");
+      LLVMAddTargetDependentFunctionAttr(func, "sign-return-address", 
"non-leaf");
+      func = LLVMGetNextFunction(func);
+   }
+#endif
 
    lp_passmgr_run(gallivm->passmgr,
                   gallivm->module,
Index: lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
===================================================================
RCS file: /cvs/xenocara/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp,v
diff -u -p -r1.22 lp_bld_misc.cpp
--- lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp      5 Jun 2025 
14:19:08 -0000       1.22
+++ lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp      24 Jun 2025 
13:13:09 -0000
@@ -675,15 +675,6 @@ lp_set_module_stack_alignment_override(L
 #endif
 }
 
-extern "C" void
-lp_set_module_branch_protection(LLVMModuleRef MRef)
-{
-   /* Enable standard (bti+pac-ret) branch protection */
-   llvm::Module *M = llvm::unwrap(MRef);
-   M->addModuleFlag(llvm::Module::Override, "branch-target-enforcement", 1);
-   M->addModuleFlag(llvm::Module::Override, "sign-return-address", 1);
-}
-
 using namespace llvm;
 
 class GallivmRunAtExitForStaticDestructors : public SDNode
Index: lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.h
===================================================================
RCS file: /cvs/xenocara/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.h,v
diff -u -p -r1.13 lp_bld_misc.h
--- lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.h        5 Jun 2025 
14:19:08 -0000       1.13
+++ lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_misc.h        24 Jun 2025 
13:13:09 -0000
@@ -96,10 +96,6 @@ lp_free_objcache(void *objcache);
 
 void
 lp_set_module_stack_alignment_override(LLVMModuleRef M, unsigned align);
-
-void
-lp_set_module_branch_protection(LLVMModuleRef M);
-
 #ifdef __cplusplus
 
 void

Reply via email to