Add a directive to asm files to manually inject a .note.GNU-stack section when using clang 22#125471
Open
jtschuster wants to merge 3 commits intodotnet:mainfrom
Open
Add a directive to asm files to manually inject a .note.GNU-stack section when using clang 22#125471jtschuster wants to merge 3 commits intodotnet:mainfrom
jtschuster wants to merge 3 commits intodotnet:mainfrom
Conversation
…tion when using clang 22
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds a workaround for clang 22 ELF assembly outputs by explicitly emitting a .note.GNU-stack section (via a shared NO_EXEC_STACK_DIRECTIVE macro) so resulting objects don’t request an executable stack.
Changes:
- Define
NO_EXEC_STACK_DIRECTIVEin CoreCLR PAL and NativeAOTunixasmmacros.incwhen building ELF with clang 22+. - Append
NO_EXEC_STACK_DIRECTIVEto many.Ssources across CoreCLR VM/Runtime/PAL/Debug and NativeAOT Runtime assembly files. - Add a missing
unixasmmacros.incinclude to one PAL asm source so the directive macro is available there.
Reviewed changes
Copilot reviewed 162 out of 162 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/coreclr/vm/riscv64/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/riscv64/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/riscv64/calldescrworkerriscv64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/riscv64/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/riscv64/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/loongarch64/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/loongarch64/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/loongarch64/calldescrworkerloongarch64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/loongarch64/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/loongarch64/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/umthunkstub.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/jithelp.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/ehhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/i386/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/patchedcode.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/calldescrworkerarm64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/StubPrecodeDynamicHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/CachedInterfaceDispatchCoreCLR.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm64/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/patchedcode.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/ehhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/arm/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/virtualcallstubamd64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/unixasmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/umthunkstub.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/thunktemplates.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/theprestubamd64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/redirectedhandledjitcase.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/pinvokestubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/patchedcode.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/jithelpers_slow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/jithelpers_singleappdomain.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/jithelpers_fastwritebarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/jithelpers_fast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/getstate.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/externalmethodfixupthunk.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/calldescrworkeramd64.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/asmhelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/StubPrecodeDynamicHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/Context.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/CachedInterfaceDispatchCoreCLR.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/vm/amd64/AllocSlow.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/riscv64/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/riscv64/StubDispatch.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/riscv64/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/loongarch64/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/loongarch64/StubDispatch.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/loongarch64/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/i386/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/i386/StubDispatch.S | Add NO_EXEC_STACK_DIRECTIVE (but currently missing required include). |
| src/coreclr/runtime/i386/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm64/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm64/StubDispatch.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm64/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm/StubDispatch.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/arm/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/amd64/WriteBarriers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/amd64/StubDispatch.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/runtime/amd64/AllocFast.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/s390x/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/s390x/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/s390x/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/s390x/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/riscv64/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/riscv64/dispatchexceptionwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/riscv64/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/riscv64/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/riscv64/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/ppc64le/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/ppc64le/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/ppc64le/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/ppc64le/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/dispatchexceptionwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/loongarch64/activationhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/i386/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/i386/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/i386/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/i386/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/dispatchexceptionwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/context.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm64/activationhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/arm/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/exceptionhelper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/dispatchexceptionwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/debugbreak.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/context2.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/context.S | Include unixasmmacros.inc and append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/callsignalhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/src/arch/amd64/activationhandlerwrapper.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/pal/inc/unixasmmacros.inc | Define NO_EXEC_STACK_DIRECTIVE for ELF+clang (22+). |
| src/coreclr/nativeaot/Runtime/unix/unixasmmacros.inc | Define NO_EXEC_STACK_DIRECTIVE for ELF+clang (22+). |
| src/coreclr/nativeaot/Runtime/riscv64/UniversalTransition.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/riscv64/PInvoke.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/riscv64/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/riscv64/InteropThunksHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/riscv64/GcProbe.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/riscv64/ExceptionHandling.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/UniversalTransition.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/PInvoke.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/InteropThunksHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/GcProbe.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/loongarch64/ExceptionHandling.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/i386/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/UniversalTransition.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/ThunkPoolThunks.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/PInvoke.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/InteropThunksHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/GcProbe.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/ExceptionHandling.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm64/CachedInterfaceDispatchAot.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/UniversalTransition.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/PInvoke.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/InteropThunksHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/GcProbe.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/arm/ExceptionHandling.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/UniversalTransition.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/ThunkPoolThunks.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/PInvoke.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/MiscStubs.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/InteropThunksHelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/GcProbe.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/ExceptionHandling.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/nativeaot/Runtime/amd64/CachedInterfaceDispatchAot.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/dlls/mscordac/palredefines.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/dlls/mscordac/libredefines.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/s390x/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/riscv64/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/ppc64le/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/loongarch64/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/i386/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/arm64/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/arm/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/ee/amd64/dbghelpers.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/di/riscv64/floatconversion.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/di/loongarch64/floatconversion.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/di/arm64/floatconversion.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/di/arm/floatconversion.S | Append NO_EXEC_STACK_DIRECTIVE. |
| src/coreclr/debug/di/amd64/floatconversion.S | Append NO_EXEC_STACK_DIRECTIVE. |
jkotas
reviewed
Mar 12, 2026
This was referenced Mar 12, 2026
Open
am11
reviewed
Mar 12, 2026
… directive Instead of defining a NO_EXEC_STACK_DIRECTIVE macro and requiring every .S file to invoke it, emit the .note.GNU-stack section directly in the two unixasmmacros.inc files using .pushsection/.popsection. This removes the boilerplate from ~160 .S files and ensures any new .S file that includes unixasmmacros.inc automatically gets the section. Also adds a missing #include "unixasmmacros.inc" to context.S which was the only .S file that didn't already include it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Include unixasmmacros.inc (or AsmMacros_Shared.h) in the 5 empty i386 stub .S files that previously had no includes. Without this, these files would produce .o files missing .note.GNU-stack when compiled with clang 22+. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is only needed for ELF output files compiled with clang-22, so the directive is limited to those conditions.
Fixes #125435