Skip to content

[Arch Linux] Failed to load mm-exhelper.so: cannot enable executable stack - glibc 2.41+ compatibility issue #105

@RgerColdline

Description

@RgerColdline

Please confirm the following

  • I am using the latest stable/beta version of Fuji
  • I have confirmed that this issue is not caused by a faulty mod
  • I have searched and confirmed that this issue is not a duplicate

What were you doing?

Environment

  • OS: Arch Linux (x86_64)
  • Fuji Version: v0.7.2
  • Celeste 64: v1.1.1
  • .NET Framework: 8.0.25
  • glibc: 2.41+ (latest Arch)
  • Graphics: AMD Radeon Graphics (Mesa 26.0.3)

Issue Description

Cannot launch Celeste 64 with Fuji mod loader. The application crashes immediately on startup with a System.DllNotFoundException when trying to load /tmp/mm-exhelper.so.*.

Error Details

/tmp/mm-exhelper.so.*: cannot enable executable stack as shared object requires: Invalid argument

This appears to be a compatibility issue with:

  1. glibc 2.41+ changes in dlopen/dlmopen behavior
  2. /tmp directory mounted with noexec or kernel security restrictions
  3. MonoMod.Core's native exception helper requiring executable stack

Steps to Reproduce

  1. Install Fuji stable on Arch Linux and attempt to launch Celeste 64, application crashes immediately
  2. Install Fuji dev and situation is the same

haven't try beta yet

Your logs

Celeste 64 v.1.1.1
Fuji: v.0.7.2
Error Log (03/24/2026 18:48:57)
Call Stack:
System.DllNotFoundException: Unable to load shared library '/tmp/mm-exhelper.so.V9f9Os' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable: 
/opt/fuji//tmp/mm-exhelper.so.V9f9Os: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.25//tmp/mm-exhelper.so.V9f9Os: cannot open shared object file: No such file or directory
/tmp/mm-exhelper.so.V9f9Os: cannot enable executable stack as shared object requires: Invalid argument

   at System.Runtime.InteropServices.NativeLibrary.LoadLibraryByName(String libraryName, Assembly assembly, Nullable`1 searchPath, Boolean throwOnError)
   at MonoMod.Utils.DynDll.NativeLibraryBackend.OpenLibrary(String name, Assembly assembly)
   at MonoMod.Utils.DynDll.OpenLibrary(String name)
   at MonoMod.Core.Platforms.Systems.PosixExceptionHelper.CreateHelper(IArchitecture arch, String filename)
   at MonoMod.Core.Platforms.Systems.LinuxSystem.CreateNativeExceptionHelper()
   at MonoMod.Core.Platforms.Systems.LinuxSystem.get_NativeExceptionHelper()
   at MonoMod.Core.Platforms.Runtimes.CoreBaseRuntime.get_NativeExceptionHelper()
   at MonoMod.Core.Platforms.Runtimes.CoreBaseRuntime.EHManagedToNative(IntPtr target, IDisposable& handle)
   at MonoMod.Core.Platforms.Runtimes.Core21Runtime.InstallJitHook(IntPtr jit)
   at MonoMod.Core.Platforms.Runtimes.CoreBaseRuntime.MonoMod.Core.Utils.IInitialize.Initialize()
   at MonoMod.Core.Platforms.PlatformTriple.InitIfNeeded(Object obj)
   at MonoMod.Core.Platforms.PlatformTriple..ctor(IArchitecture architecture, ISystem system, IRuntime runtime)
   at MonoMod.Core.Platforms.PlatformTriple.CreateCurrent()
   at MonoMod.Utils.Helpers.InitializeValueWithLock[T,TParam](T& location, Object lock,  init, TParam obj)
   at MonoMod.Core.Platforms.PlatformTriple.get_Current()
   at MonoMod.Core.DetourFactory.CreateDefaultFactory()
   at MonoMod.Utils.Helpers.InitializeValue[T,TParam](T& location,  init, TParam obj)
   at MonoMod.RuntimeDetour.DetourContext.GetDefaultFactory()
   at MonoMod.RuntimeDetour.ILHook..ctor(MethodBase source, Manipulator manip, DetourConfig config, Boolean applyByDefault)
   at MonoMod.RuntimeDetour.ILHook..ctor(MethodBase source, Manipulator manip, DetourConfig config)
   at MonoMod.RuntimeDetour.ILHook..ctor(MethodBase source, Manipulator manip)
   at Celeste64.Mod.Patches.Keyboard.<>c.<Load>b__3_1(MethodInfo m) in /home/rger/.cache/paru/clone/celeste64-fuji-git/src/celeste64-fuji/Source/Mod/Patches/Keyboard.cs:line 25
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection)
   at Celeste64.Mod.Patches.Keyboard.Load() in /home/rger/.cache/paru/clone/celeste64-fuji-git/src/celeste64-fuji/Source/Mod/Patches/Keyboard.cs:line 22
   at Celeste64.Mod.Patches.Patches.Load() in /home/rger/.cache/paru/clone/celeste64-fuji-git/src/celeste64-fuji/Source/Mod/Patches/Patches.cs:line 7
   at Celeste64.Game.Startup() in /home/rger/.cache/paru/clone/celeste64-fuji-git/src/celeste64-fuji/Source/Game.cs:line 287
   at Foster.Framework.App.Run(String applicationName, Int32 width, Int32 height, Boolean fullscreen, Renderers renderer)
   at Foster.Framework.App.Run[T](String applicationName, Int32 width, Int32 height, Boolean fullscreen, Renderers renderer)
   at Celeste64.Launcher.Program.Main(String[] args) in /home/rger/.cache/paru/clone/celeste64-fuji-git/src/celeste64-fuji/Celeste64.Launcher/Program.cs:line 52
Game Output:
Celeste 64 v.1.1.1
Fuji: v.0.7.2
Foster: v0.1.18
Platform: Arch Linux (X64)
Framework: .NET 8.0.25
SDL: v2.30.0
OpenGL: v4.6 (Core Profile) Mesa 26.0.3-arch1.1, AMD Radeon Graphics (radeonsi, renoir, ACO, DRM 3.64, 6.19.8-arch1-1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions