LuaLS / LuaLS/lua-language-server
[Build] Windows ARM64 build failure: undefined symbol __longjmp_wrapper in fast_setjmp_arm64.s
Nobody has claimed this yet.
- Dominant language
- Lua
- Stars
- 4.4k
- Forks
- 442
- PR merge metrics
- No merged PRs in 30d
Description
Description:
When attempting to compile lua-language-server on Windows on Arm using the MSVC toolchain (armasm64), the build fails during the assembly phase of the bee.lua dependency.
The assembler throws an error because the file 3rd/bee.lua/3rd/lua-patch/fast_setjmp_arm64.s attempts to export a symbol that is never defined in the text area, while also failing to export fast_longjmp.
Environment:
OS: Windows 11 (Arm64)
Compiler: MSVC (Host: ARM64, Target: ARM64)
Tool: armasm64.exe
Error Logs:
[1/125] Compile ASM build/obj/source_lua/fast_setjmp_arm64.obj
FAILED: build/obj/source_lua/fast_setjmp_arm64.obj
armasm64 -nologo -o build/obj/source_lua/fast_setjmp_arm64.obj 3rd/bee.lua/3rd/lua-patch/fast_setjmp_arm64.s
C:\Code\Tools\lua-language-server\3rd\bee.lua\3rd\lua-patch\fast_setjmp_arm64.s(40) : error A2023: undefined symbol: __longjmp_wrapper
END
[6/125] Compile C build/obj/source_lua/onelua.obj
C:\Code\Tools\lua-language-server\3rd\bee.lua\3rd\lua55\ldo.c(131): warning C4013: 'fast_longjmp' undefined; assuming extern returning int
C:\Code\Tools\lua-language-server\3rd\bee.lua\3rd\lua55\ldo.c(169): warning C4013: 'fast_setjmp' undefined; assuming extern returning int
[14/125] Compile C++ build/obj/source_bee/error.obj
ninja: build stopped: subcommand failed.
Proposed Workaround / Fix:
I was able to successfully generate the executable by modifying fast_setjmp_arm64.s as follows:
- Removing the EXPORT __longjmp_wrapper line (as it has no corresponding label).
- Adding EXPORT fast_longjmp to ensure the symbol is visible to the C code in ldo.c
Modified Assembly Header:
EXPORT fast_setjmp
EXPORT fast_longjmp ; Added this
; EXPORT __longjmp_wrapper ; Removed this as it caused error A2023: undefined symbol: __longjmp_wrapper
Questions/Concerns:
While this allows the build to complete and the server to run, I am not 100% sure if:
__longjmp_wrapperwas intended to be an alias forfast_longjmpfor compatibility with specific Windows exception handling.- There is a specific reason
fast_longjmpwas omitted from the exports in the original ARM64 patch.
Could the maintainers verify if this is the correct way to align the ARM64 assembly with the Windows MSVC requirements?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Inspect 3rd/bee.lua/3rd/lua-patch/fast_setjmp_arm64.s alongside 3rd/bee.lua/3rd/lua55/ldo.c, focusing on the exported symbols and their Windows ARM64 references. Run the MSVC armasm64 build, then verify that the assembly phase completes and the resulting executable links and runs without changing the expected fast_setjmp or fast_longjmp behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, lua
- Domain
- build-system, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100