Repository: compiler-explorer/compiler-explorer
Pull request #7264 (2025-01-11 20:53:18)

Add some tools for rust
This adds the tools requested in #6796.

narpfel: Note that `pahole` requires passing `-C debuginfo=2` because CE’s default (`-C debuginfo=1`) does not include type information in the debug information ([ref](https://doc.rust-lang.org/rustc/codegen-options/index.html#debuginfo)).

Maybe CE should default to `-C debuginfo=2` because that’s what cargo does in debug mode?
junlarsen: I think debuginfo=2 seems reasonable.

Patch:
diff --git a/.idea/runConfigurations/Local_instance.xml b/.idea/runConfigurations/Local_instance.xml
index 827015b12..6a74fd3e6 100644
--- a/.idea/runConfigurations/Local_instance.xml
+++ b/.idea/runConfigurations/Local_instance.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="Local instance" type="NodeJSConfigurationType" path-to-node="/opt/compiler-explorer/node/bin/node" node-parameters="--loader ts-node/esm" path-to-js-file="app.ts" working-dir="$PROJECT_DIR$">
+  <configuration default="false" name="Local instance" type="NodeJSConfigurationType" path-to-node="/opt/compiler-explorer/node/bin/node" path-to-js-file="app.ts" typescript-loader="bundled" working-dir="$PROJECT_DIR$">
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/Local_instance_C___only.xml b/.idea/runConfigurations/Local_instance_C___only.xml
index 8f5d5597b..c256ad3b6 100644
--- a/.idea/runConfigurations/Local_instance_C___only.xml
+++ b/.idea/runConfigurations/Local_instance_C___only.xml
@@ -1,5 +1,5 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="Local instance C++ only" type="NodeJSConfigurationType" application-parameters=" --language c++" path-to-node="/opt/compiler-explorer/node/bin/node" node-parameters="--loader ts-node/esm" path-to-js-file="app.ts" working-dir="$PROJECT_DIR$">
+  <configuration default="false" name="Local instance C++ only" type="NodeJSConfigurationType" application-parameters=" --language c++" path-to-node="/opt/compiler-explorer/node/bin/node" path-to-js-file="app.ts" typescript-loader="bundled" working-dir="$PROJECT_DIR$">
     <method v="2" />
   </configuration>
 </component>
\ No newline at end of file
diff --git a/docs/WindowsLocal.properties b/docs/WindowsLocal.properties
index 820f1f82a..8f923d3ea 100644
--- a/docs/WindowsLocal.properties
+++ b/docs/WindowsLocal.properties
@@ -8,6 +8,7 @@ includePath=c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSV
 # replace with the result of `where undname.exe` from a developer command prompt
 
 demangler=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64\undname.exe
+demanglerType=win32
 
 # the compiler you want compiler explorer to start up in
 
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index cb50e0737..5852846af 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -4991,7 +4991,7 @@ libs.mfem.versions.47.packagedheaders=true
 
 libs.mimicpp.name=mimic++
 libs.mimicpp.description=A modern and (mostly) macro free mocking framework.
-libs.mimicpp.versions=trunk:1:2:3
+libs.mimicpp.versions=trunk:1:2:3:4:5:6
 libs.mimicpp.url=https://github.com/DNKpp/mimicpp
 libs.mimicpp.versions.trunk.version=trunk
 libs.mimicpp.versions.trunk.path=/opt/compiler-explorer/libs/mimicpp/trunk/include
@@ -5001,6 +5001,12 @@ libs.mimicpp.versions.2.version=v2
 libs.mimicpp.versions.2.path=/opt/compiler-explorer/libs/mimicpp/v2/include
 libs.mimicpp.versions.3.version=v3
 libs.mimicpp.versions.3.path=/opt/compiler-explorer/libs/mimicpp/v3/include
+libs.mimicpp.versions.4.version=v4
+libs.mimicpp.versions.4.path=/opt/compiler-explorer/libs/mimicpp/v4/include
+libs.mimicpp.versions.5.version=v5
+libs.mimicpp.versions.5.path=/opt/compiler-explorer/libs/mimicpp/v5/include
+libs.mimicpp.versions.6.version=v6
+libs.mimicpp.versions.6.path=/opt/compiler-explorer/libs/mimicpp/v6/include
 
 libs.mlir.name=MLIR
 libs.mlir.description=MLIR
@@ -5184,7 +5190,7 @@ libs.pybind11.versions.2_11_1.path=/opt/compiler-explorer/libs/pybind11/v2.11.1/
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -5193,6 +5199,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.qt.name=Qt
 libs.qt.url=https://www.qt.io
diff --git a/etc/config/c.amazon.properties b/etc/config/c.amazon.properties
index bec57413d..c1bf4e1f2 100644
--- a/etc/config/c.amazon.properties
+++ b/etc/config/c.amazon.properties
@@ -3577,7 +3577,7 @@ libs.openssl.versions.111g.libpath=/opt/compiler-explorer/libs/openssl/openssl_1
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -3586,6 +3586,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.simde.name=SIMDe
 libs.simde.description=Implementations of SIMD instruction sets for systems which don't natively support them.
diff --git a/etc/config/circle.amazon.properties b/etc/config/circle.amazon.properties
index 6d7f48ee7..f6f238cbe 100644
--- a/etc/config/circle.amazon.properties
+++ b/etc/config/circle.amazon.properties
@@ -894,7 +894,7 @@ libs.pugixml.versions.1114.path=/opt/compiler-explorer/libs/pugixml/v1.11.4/src/
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -903,6 +903,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.rangesv3.name=range-v3
 libs.rangesv3.versions=trunk:030:035:036:091:0100:0110
diff --git a/etc/config/elixir.defaults.properties b/etc/config/elixir.defaults.properties
index 6d585862c..5422b97d0 100644
--- a/etc/config/elixir.defaults.properties
+++ b/etc/config/elixir.defaults.properties
@@ -1,15 +1,23 @@
 # Default settings for Elixir
-compilers=&elixir
-compilerType=elixir
+compilers=&elixir:&elixirasm
+
 versionFlag=--short-version
 objdumper=
-instructionSet=beam
 
 group.elixir.compilers=elixirdefault
+group.elixir.compilerType=elixir
+group.elixir.instructionSet=beam
 compiler.elixirdefault.exe=/urs/bin/elixir
 compiler.elixirdefault.runtime=/urs/bin/elixir
 compiler.elixirdefault.name=elixirc default
 
+group.elixirasm.compilers=elixirasmdefault
+group.elixirasm.compilerType=elixirasm
+group.elixirasm.instructionSet=amd64
+compiler.elixirasmdefault.exe=/urs/bin/elixir
+compiler.elixirasmdefault.runtime=/urs/bin/elixir
+compiler.elixirasmdefault.name=elixirc default
+
 defaultCompiler=elixirdefault
 demangler=
 postProcess=
diff --git a/etc/config/gimple.amazon.properties b/etc/config/gimple.amazon.properties
index 90315dcea..60b4410f4 100644
--- a/etc/config/gimple.amazon.properties
+++ b/etc/config/gimple.amazon.properties
@@ -1616,7 +1616,7 @@ libs.openssl.versions.111g.libpath=/opt/compiler-explorer/libs/openssl/openssl_1
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -1625,6 +1625,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.simde.name=SIMDe
 libs.simde.description=Implementations of SIMD instruction sets for systems which don't natively support them.
diff --git a/etc/config/ispc.amazon.properties b/etc/config/ispc.amazon.properties
index 475213481..639085c5a 100644
--- a/etc/config/ispc.amazon.properties
+++ b/etc/config/ispc.amazon.properties
@@ -1,54 +1,77 @@
 compilers=&ispc
 defaultCompiler=ispc1253
+objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 
 group.ispc.compilers=ispc1253:ispc1250:ispc1240:ispc1230:ispc1220:ispc1210:ispc1200:ispc1190:ispc1180:ispc1170:ispc1161:ispc1160:ispc1150:ispc1141:ispc1140:ispc1130:ispc1120:ispc1110:ispc1100:ispc192:ispc191:ispc-trunk
 group.ispc.isSemVer=true
 group.ispc.baseName=ispc
 compiler.ispc1253.exe=/opt/compiler-explorer/ispc-1.25.3/bin/ispc
 compiler.ispc1253.semver=1.25.3
+compiler.ispc1253.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1250.exe=/opt/compiler-explorer/ispc-1.25.0/bin/ispc
 compiler.ispc1250.semver=1.25.0
+compiler.ispc1250.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1240.exe=/opt/compiler-explorer/ispc-1.24.0/bin/ispc
 compiler.ispc1240.semver=1.24.0
+compiler.ispc1240.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1230.exe=/opt/compiler-explorer/ispc-1.23.0/bin/ispc
 compiler.ispc1230.semver=1.23.0
+compiler.ispc1230.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1220.exe=/opt/compiler-explorer/ispc-1.22.0/bin/ispc
 compiler.ispc1220.semver=1.22.0
+compiler.ispc1220.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1210.exe=/opt/compiler-explorer/ispc-1.21.0/bin/ispc
 compiler.ispc1210.semver=1.21.0
+compiler.ispc1210.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1200.exe=/opt/compiler-explorer/ispc-1.20.0/bin/ispc
 compiler.ispc1200.semver=1.20.0
+compiler.ispc1200.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1190.exe=/opt/compiler-explorer/ispc-1.19.0/bin/ispc
 compiler.ispc1190.semver=1.19.0
+compiler.ispc1190.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1180.exe=/opt/compiler-explorer/ispc-1.18.0/bin/ispc
 compiler.ispc1180.semver=1.18.0
+compiler.ispc1180.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1170.exe=/opt/compiler-explorer/ispc-1.17.0/bin/ispc
 compiler.ispc1170.semver=1.17.0
+compiler.ispc1170.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1161.exe=/opt/compiler-explorer/ispc-1.16.1/bin/ispc
 compiler.ispc1161.semver=1.16.1
+compiler.ispc1161.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1160.exe=/opt/compiler-explorer/ispc-1.16.0/bin/ispc
 compiler.ispc1160.semver=1.16.0
+compiler.ispc1160.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1150.exe=/opt/compiler-explorer/ispc-1.15.0/bin/ispc
 compiler.ispc1150.semver=1.15.0
+compiler.ispc1150.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1141.exe=/opt/compiler-explorer/ispc-1.14.1/bin/ispc
 compiler.ispc1141.semver=1.14.1
+compiler.ispc1141.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1140.exe=/opt/compiler-explorer/ispc-1.14.0/bin/ispc
 compiler.ispc1140.semver=1.14.0
+compiler.ispc1140.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1130.exe=/opt/compiler-explorer/ispc-1.13.0/bin/ispc
 compiler.ispc1130.semver=1.13.0
+compiler.ispc1130.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1120.exe=/opt/compiler-explorer/ispc-1.12.0/bin/ispc
 compiler.ispc1120.semver=1.12.0
+compiler.ispc1120.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1110.exe=/opt/compiler-explorer/ispc-1.11.0/bin/ispc
 compiler.ispc1110.semver=1.11.0
+compiler.ispc1110.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc1100.exe=/opt/compiler-explorer/ispc-1.10.0/bin/ispc
 compiler.ispc1100.semver=1.10.0
+compiler.ispc1100.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc192.exe=/opt/compiler-explorer/ispc-1.9.2/ispc
 compiler.ispc192.semver=1.9.2
+compiler.ispc192.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc191.exe=/opt/compiler-explorer/ispc-1.9.1/ispc
 compiler.ispc191.semver=1.9.1
+compiler.ispc191.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 compiler.ispc-trunk.exe=/opt/compiler-explorer/ispc-trunk/bin/ispc
 compiler.ispc-trunk.semver=(trunk)
 compiler.ispc-trunk.isNightly=true
+compiler.ispc-trunk.executableLinker=/opt/compiler-explorer/gcc-14.2.0/bin/gcc
 
 #################################
 #################################
diff --git a/etc/config/ispc.defaults.properties b/etc/config/ispc.defaults.properties
index c8e124747..cc2c9dc29 100644
--- a/etc/config/ispc.defaults.properties
+++ b/etc/config/ispc.defaults.properties
@@ -1,6 +1,10 @@
-supportsBinary=false
+supportsBinary=true
+supportsBinaryObject=true
+supportsExecute=true
 compilerType=ispc
-
+objdumper=objdump
+stubRe=\bmain\b
+stubText=extern "C" uniform int main() { return 0; }
 
 #################################
 #################################
diff --git a/etc/config/llvm.amazon.properties b/etc/config/llvm.amazon.properties
index c75f54cf6..8cec56218 100644
--- a/etc/config/llvm.amazon.properties
+++ b/etc/config/llvm.amazon.properties
@@ -1,4 +1,4 @@
-compilers=&irclang:&llc:&opt
+compilers=&irclang:&irhexagon-clang:&llc:&opt
 defaultCompiler=llctrunk
 
 demangler=/opt/compiler-explorer/gcc-14.2.0/bin/c++filt
@@ -61,6 +61,18 @@ compiler.irclang-assertions-trunk.exe=/opt/compiler-explorer/clang-assertions-tr
 compiler.irclang-assertions-trunk.objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 compiler.irclang-assertions-trunk.semver=(assertions trunk)
 
+group.irhexagon-clang.groupName=Hexagon clang
+group.irhexagon-clang.baseName=hexagon-clang
+group.irhexagon-clang.compilers=irhexagonclang1605
+group.irhexagon-clang.demangler=/opt/compiler-explorer/clang-trunk/bin/llvm-cxxfilt
+group.irhexagon-clang.options=-x ir
+
+compiler.irhexagonclang1605.semver=16.0.5
+compiler.irhexagonclang1605.name=hexagon-clang 16.0.5
+compiler.irhexagonclang1605.exe=/opt/compiler-explorer/clang+llvm-16.0.5-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/clang++
+compiler.irhexagonclang1605.compilerType=clang-hexagon
+compiler.irhexagonclang1605.compilerCategories=clang-hexagon
+
 group.llc.compilers=llc32:llc33:llc391:llc400:llc401:llc500:llc600:llc700:llc800:llc900:llc1000:llc1001:llc1100:llc1101:llc1200:llc1201:llc1300:llc1400:llc1500:llc1600:llc1701:llc1810:llc1910:llctrunk:llc-assertions-trunk
 group.llc.compilerType=llc
 group.llc.supportsExecute=false
diff --git a/etc/config/objc++.amazon.properties b/etc/config/objc++.amazon.properties
index 67a6ac7e9..0f9f115e6 100644
--- a/etc/config/objc++.amazon.properties
+++ b/etc/config/objc++.amazon.properties
@@ -1682,7 +1682,7 @@ libs.pugixml.versions.1114.path=/opt/compiler-explorer/libs/pugixml/v1.11.4/src/
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -1691,6 +1691,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.rangesv3.name=range-v3
 libs.rangesv3.versions=trunk:030:035:036:091:0100:0110:0120
diff --git a/etc/config/objc.amazon.properties b/etc/config/objc.amazon.properties
index 0f52371bf..1256f1182 100644
--- a/etc/config/objc.amazon.properties
+++ b/etc/config/objc.amazon.properties
@@ -1024,7 +1024,7 @@ libs.openssl.versions.111g.libpath=/opt/compiler-explorer/libs/openssl/openssl_1
 
 libs.python.name=Python
 libs.python.url=https://python.org
-libs.python.versions=359:3610:376:381
+libs.python.versions=359:3610:376:381:396:3100:3110:3121:3130
 libs.python.versions.359.version=3.5.9
 libs.python.versions.359.path=/opt/compiler-explorer/python-3.5.9/include/python3.5
 libs.python.versions.3610.version=3.6.10
@@ -1033,6 +1033,16 @@ libs.python.versions.376.version=3.7.6
 libs.python.versions.376.path=/opt/compiler-explorer/python-3.7.6/include/python3.7
 libs.python.versions.381.version=3.8.1
 libs.python.versions.381.path=/opt/compiler-explorer/python-3.8.1/include/python3.8
+libs.python.versions.396.version=3.9.6
+libs.python.versions.396.path=/opt/compiler-explorer/python-3.9.6/include/python3.9
+libs.python.versions.3100.version=3.10.0
+libs.python.versions.3100.path=/opt/compiler-explorer/python-3.10.0/include/python3.10
+libs.python.versions.3110.version=3.11.0
+libs.python.versions.3110.path=/opt/compiler-explorer/python-3.11.0/include/python3.11
+libs.python.versions.3121.version=3.12.1
+libs.python.versions.3121.path=/opt/compiler-explorer/python-3.12.1/include/python3.12
+libs.python.versions.3130.version=3.13.0
+libs.python.versions.3130.path=/opt/compiler-explorer/python-3.13.0/include/python3.13
 
 libs.simde.name=SIMDe
 libs.simde.description=Implementations of SIMD instruction sets for systems which don't natively support them.
diff --git a/etc/config/odin.amazon.properties b/etc/config/odin.amazon.properties
index 81887838f..7dd307d20 100644
--- a/etc/config/odin.amazon.properties
+++ b/etc/config/odin.amazon.properties
@@ -1,15 +1,18 @@
 compilers=&odin
 compilerType=odin
-defaultCompiler=odin202411
+defaultCompiler=odin202501
 supportsBinary=true
 supportsExecute=true
 
 objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 clangPath=/opt/compiler-explorer/clang-19.1.0/bin/clang
 
-group.odin.compilers=odin202411
+group.odin.compilers=odin202411:odin202501
 group.odin.isSemVer=false
 group.odin.baseName=odin
 
 compiler.odin202411.exe=/opt/compiler-explorer/odin-dev-2024-11/odin
 compiler.odin202411.name=Odin (2024-11)
+
+compiler.odin202501.exe=/opt/compiler-explorer/odin-dev-2025-01/odin
+compiler.odin202501.name=Odin (2025-01)
diff --git a/etc/config/rust.amazon.properties b/etc/config/rust.amazon.properties
index 81cd8aea5..e9eaa0dbc 100644
--- a/etc/config/rust.amazon.properties
+++ b/etc/config/rust.amazon.properties
@@ -983,7 +983,13 @@ libs.zerocopy.versions.0732.path=libzerocopy.rlib
 #################################
 # Installed tools
 
-tools=llvm-mcatrunk:llvm-dwarfdumptrunk:osacatrunk:rustfmt1436:bloaty11
+tools=ldd:llvm-mcatrunk:llvm-dwarfdumptrunk:osacatrunk:pahole:readelf:nm:strings:rustfmt1436:bloaty11
+
+tools.ldd.name=ldd
+tools.ldd.exe=/usr/bin/ldd
+tools.ldd.type=postcompilation
+tools.ldd.class=readelf-tool
+tools.ldd.stdinHint=disabled
 
 tools.llvm-mcatrunk.name=llvm-mca (trunk)
 tools.llvm-mcatrunk.exe=/opt/compiler-explorer/clang-trunk/bin/llvm-mca
@@ -1003,6 +1009,31 @@ tools.osacatrunk.type=postcompilation
 tools.osacatrunk.class=osaca-tool
 tools.osacatrunk.stdinHint=disabled
 
+tools.pahole.name=pahole (trunk)
+tools.pahole.exe=/opt/compiler-explorer/pahole-trunk/bin/pahole
+tools.pahole.type=postcompilation
+tools.pahole.class=pahole-tool
+tools.pahole.stdinHint=disabled
+tools.pahole.languageId=cppp
+
+tools.readelf.name=readelf (trunk)
+tools.readelf.exe=/opt/compiler-explorer/gcc-snapshot/bin/readelf
+tools.readelf.type=postcompilation
+tools.readelf.class=readelf-tool
+tools.readelf.stdinHint=disabled
+
+tools.nm.name=nm (trunk)
+tools.nm.exe=/opt/compiler-explorer/gcc-snapshot/bin/nm
+tools.nm.type=postcompilation
+tools.nm.class=nm-tool
+tools.nm.stdinHint=disabled
+
+tools.strings.exe=/opt/compiler-explorer/gcc-snapshot/bin/strings
+tools.strings.name=strings
+tools.strings.type=postcompilation
+tools.strings.class=strings-tool
+tools.strings.stdinHint=disabled
+
 # This tool has the "rustfmmt1436" name for legacy reasons. It was initially introduced when Rustfmt was a separate
 # component, not distributed with the Rust compiler. The tool is still named "rustfmt1436" to avoid breaking existing
 # shortlinks.
diff --git a/etc/config/scala.amazon.properties b/etc/config/scala.amazon.properties
index 4bd9ea5be..848a8ab45 100644
--- a/etc/config/scala.amazon.properties
+++ b/etc/config/scala.amazon.properties
@@ -3,8 +3,7 @@ compilerType=scala
 versionFlag=-version
 objdumper=/opt/compiler-explorer/jdk-19.0.2/bin/javap
 instructionSet=java
-# Scala 3.0 was recently released, so it's a bit early to make it the default
-defaultCompiler=scalac2136
+defaultCompiler=scalac362
 demangler=
 postProcess=
 options=
@@ -19,20 +18,61 @@ group.scala.baseName=scalac
 group.scala.isSemVer=true
 group.scala.licenseName=Apache License 2.0
 
-group.scala2.compilers=scalac2136:scalac21214
+group.scala2.compilers=scalac2136:scalac21214:scalac21315
 group.scala2.licenseLink=https://github.com/scala/scala/blob/2.13.x/LICENSE
 
+compiler.scalac21315.exe=/opt/compiler-explorer/scala-2.13.15/bin/scalac
+compiler.scalac21315.semver=2.13.15
+compiler.scalac21315.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac21315.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
 compiler.scalac2136.exe=/opt/compiler-explorer/scala-2.13.6/bin/scalac
 compiler.scalac2136.semver=2.13.6
 compiler.scalac2136.java_home=/opt/compiler-explorer/jdk-16.0.1
 compiler.scalac2136.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java
+
 compiler.scalac21214.exe=/opt/compiler-explorer/scala-2.12.14/bin/scalac
 compiler.scalac21214.semver=2.12.14
 compiler.scalac21214.java_home=/opt/compiler-explorer/jdk-16.0.1
 compiler.scalac21214.runtime=/opt/compiler-explorer/jdk-16.0.1/bin/java
 
-group.scala3.compilers=scalac300
-group.scala3.licenseLink=https://github.com/lampepfl/dotty/blob/main/LICENSE
+group.scala3.compilers=scalac300:scalac310:scalac320:scalac330:scalac334:scalac340:scalac350:scalac362
+group.scala3.licenseLink=https://github.com/scala/scala3/blob/main/LICENSE
+
+compiler.scalac362.exe=/opt/compiler-explorer/scala3-3.6.2/bin/scalac
+compiler.scalac362.semver=3.6.2
+compiler.scalac362.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac362.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac350.exe=/opt/compiler-explorer/scala3-3.5.0/bin/scalac
+compiler.scalac350.semver=3.5.0
+compiler.scalac350.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac350.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac340.exe=/opt/compiler-explorer/scala3-3.4.0/bin/scalac
+compiler.scalac340.semver=3.4.0
+compiler.scalac340.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac340.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac334.exe=/opt/compiler-explorer/scala3-3.3.4/bin/scalac
+compiler.scalac334.semver=3.3.4
+compiler.scalac334.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac334.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac330.exe=/opt/compiler-explorer/scala3-3.3.0/bin/scalac
+compiler.scalac330.semver=3.3.0
+compiler.scalac330.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac330.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac320.exe=/opt/compiler-explorer/scala3-3.2.0/bin/scalac
+compiler.scalac320.semver=3.2.0
+compiler.scalac320.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac320.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
+
+compiler.scalac310.exe=/opt/compiler-explorer/scala3-3.1.0/bin/scalac
+compiler.scalac310.semver=3.1.0
+compiler.scalac310.java_home=/opt/compiler-explorer/jdk-21.0.0
+compiler.scalac310.runtime=/opt/compiler-explorer/jdk-21.0.0/bin/java
 
 compiler.scalac300.exe=/opt/compiler-explorer/scala3-3.0.0/bin/scalac
 compiler.scalac300.semver=3.0.0
diff --git a/etc/config/spice.amazon.properties b/etc/config/spice.amazon.properties
index 139a4f43b..d4ebad7a6 100644
--- a/etc/config/spice.amazon.properties
+++ b/etc/config/spice.amazon.properties
@@ -1,19 +1,19 @@
 compilers=&spice
-defaultCompiler=spice02006
+defaultCompiler=spice02100
 
-group.spice.compilers=spice01902:spice01903:spice01904:spice01905:spice01906:spice02000:spice02001:spice02002:spice02003:spice02004:spice02005:spice02006
-group.spice.demangler=/opt/compiler-explorer/gcc-14.1.0/bin/c++filt
-group.spice.objdumper=/opt/compiler-explorer/gcc-14.1.0/bin/objdump
+group.spice.compilers=spice01902:spice01903:spice01904:spice01905:spice01906:spice02000:spice02001:spice02002:spice02003:spice02004:spice02005:spice02006:spice02100
+group.spice.demangler=/opt/compiler-explorer/gcc-14.2.0/bin/c++filt
+group.spice.objdumper=/opt/compiler-explorer/gcc-14.2.0/bin/objdump
 group.spice.isSemVer=true
 group.spice.baseName=spice
 group.spice.compilerType=spice
 group.spice.versionFlag=--version
 group.spice.licenseLink=https://github.com/spicelang/spice/blob/main/LICENSE
 group.spice.licenseName=The MIT License
-group.spice.licensePreamble=Copyright (c) 2021-2024 Marc Auberer
+group.spice.licensePreamble=Copyright (c) 2021-2025 Marc Auberer
 
 # spice needs to be able to find clang for linking
-group.spice.extraPath=/opt/compiler-explorer/clang-18.1.0/bin
+group.spice.extraPath=/opt/compiler-explorer/clang-19.1.0/bin
 
 compiler.spice01902.exe=/opt/compiler-explorer/spice-0.19.2/spice
 compiler.spice01902.semver=0.19.2
@@ -39,6 +39,8 @@ compiler.spice02005.exe=/opt/compiler-explorer/spice-0.20.5/spice
 compiler.spice02005.semver=0.20.5
 compiler.spice02006.exe=/opt/compiler-explorer/spice-0.20.6/spice
 compiler.spice02006.semver=0.20.6
+compiler.spice02100.exe=/opt/compiler-explorer/spice-0.21.0/spice
+compiler.spice02100.semver=0.21.0
 
 #################################
 #################################
diff --git a/etc/config/sponsors.yaml b/etc/config/sponsors.yaml
index 677b295df..c68de6d5f 100644
--- a/etc/config/sponsors.yaml
+++ b/etc/config/sponsors.yaml
@@ -45,6 +45,15 @@ levels:
         topIconShowEvery: 3
         displayType: SideBySide
         statsId: jetbrains
+      - name: Cppcon
+        description: Join the CppCon family live &amp; in-person this September in Aurora, Colorado, USA! Pre-register for CppCon 2025 at <a href="https://www.CppCon.org" target="_blank">www.CppCon.org</a>.
+        img: https://static.ce-cdn.net/cppcon/cppcon-white-gold-5.svg
+        icon: https://static.ce-cdn.net/cppcon/cppcon-blue-gold-5.svg
+        icon_dark: https://static.ce-cdn.net/cppcon/cppcon-white-gold-5.svg
+        url: https://cppcon.org/
+        displayType: SideBySide
+        topIconShowEvery: 3
+        statsId: cppcon
   - name: Patreon Legends
     description: 'These amazing people have pledged at the highest level of support. Huge thanks to these fine folks:'
     class: legendary
diff --git a/etc/config/swift.amazon.properties b/etc/config/swift.amazon.properties
index d47d10fdb..33075658d 100644
--- a/etc/config/swift.amazon.properties
+++ b/etc/config/swift.amazon.properties
@@ -1,9 +1,9 @@
 compilers=&swift
-demangler=/opt/compiler-explorer/swift-5.10/usr/bin/swift-demangle
-defaultCompiler=swift510
+demangler=/opt/compiler-explorer/swift-6.0.3/usr/bin/swift-demangle
+defaultCompiler=swift603
 objdumper=/opt/compiler-explorer/gcc-snapshot/bin/objdump
 
-group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swiftnightly
+group.swift.compilers=swift311:swift402:swift403:swift41:swift411:swift412:swift42:swift50:swift51:swift52:swift53:swift54:swift55:swift56:swift57:swift58:swift59:swift510:swift603:swiftnightly
 group.swift.isSemVer=true
 group.swift.baseName=x86-64 swiftc
 compiler.swift311.exe=/opt/compiler-explorer/swift-3.1.1/usr/bin/swiftc
@@ -50,6 +50,8 @@ compiler.swift59.exe=/opt/compiler-explorer/swift-5.9/usr/bin/swiftc
 compiler.swift59.semver=5.9
 compiler.swift510.exe=/opt/compiler-explorer/swift-5.10/usr/bin/swiftc
 compiler.swift510.semver=5.10
+compiler.swift603.exe=/opt/compiler-explorer/swift-6.0.3/usr/bin/swiftc
+compiler.swift603.semver=6.0.3
 compiler.swift510.alias=switf510nightly
 compiler.swiftnightly.exe=/opt/compiler-explorer/swift-nightly/usr/bin/swiftc
 compiler.swiftnightly.semver=nightly
diff --git a/examples/ispc/default.ispc b/examples/ispc/default.ispc
index 0924dc0b6..8d8ec61ac 100644
--- a/examples/ispc/default.ispc
+++ b/examples/ispc/default.ispc
@@ -1,4 +1,18 @@
 // Type your code here, or load an example.
-uniform int square(uniform int num) {
-    return num * num;
+varying int square_even(varying int num) {
+    if (num % 2 == 0) {
+        return num * num;
+    } else {
+        return num;
+    }
 }
+
+// Uncomment this if you would like to execute the code
+/*
+extern "C" uniform int main() {
+    print("Hello, World!\n");
+    print("programCount = %\n", programCount);
+    print("square_even(%) = %\n", programIndex, square_even(programIndex));
+    return 0;
+}
+*/
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index 5b9ac7447..23d814dc0 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -1190,17 +1190,12 @@ export class BaseCompiler {
 
         const libIncludes = this.getIncludeArguments(libraries, dirPath);
         const libOptions = this.getLibraryOptions(libraries);
-        let libLinks: string[] = [];
-        let libPaths: string[] = [];
-        let libPathsAsFlags: string[] = [];
-        let staticLibLinks: string[] = [];
-
-        if (filters.binary) {
-            libLinks = (this.getSharedLibraryLinks(libraries).filter(Boolean) as string[]) || [];
-            libPathsAsFlags = this.getSharedLibraryPathsAsArguments(libraries, undefined, toolchainPath, dirPath);
-            libPaths = this.getSharedLibraryPaths(libraries, dirPath);
-            staticLibLinks = (this.getStaticLibraryLinks(libraries, libPaths).filter(Boolean) as string[]) || [];
-        }
+        const {libLinks, libPathsAsFlags, staticLibLinks} = this.getLibLinkInfo(
+            filters,
+            libraries,
+            toolchainPath,
+            dirPath,
+        );
 
         userOptions = this.filterUserOptions(userOptions) || [];
         [options, overrides] = this.fixIncompatibleOptions(options, userOptions, overrides);
@@ -1218,6 +1213,25 @@ export class BaseCompiler {
         );
     }
 
+    protected getLibLinkInfo(
+        filters: ParseFiltersAndOutputOptions,
+        libraries: SelectedLibraryVersion[],
+        toolchainPath: string,
+        dirPath: string,
+    ) {
+        let libLinks: string[] = [];
+        let libPathsAsFlags: string[] = [];
+        let staticLibLinks: string[] = [];
+
+        if (filters.binary) {
+            libLinks = (this.getSharedLibraryLinks(libraries).filter(Boolean) as string[]) || [];
+            libPathsAsFlags = this.getSharedLibraryPathsAsArguments(libraries, undefined, toolchainPath, dirPath);
+            const libPaths = this.getSharedLibraryPaths(libraries, dirPath);
+            staticLibLinks = (this.getStaticLibraryLinks(libraries, libPaths).filter(Boolean) as string[]) || [];
+        }
+        return {libLinks, libPathsAsFlags, staticLibLinks};
+    }
+
     protected fixIncompatibleOptions(
         options: string[],
         userOptions: string[],
@@ -1651,9 +1665,14 @@ export class BaseCompiler {
         return utils.changeExtension(inputFilename, '.ll');
     }
 
-    getOutputFilename(dirPath: string, outputFilebase: string, key?: any): string {
-        let filename;
-        if (key && key.backendOptions && key.backendOptions.customOutputFilename) {
+    isCacheKey(key: CacheKey | CompilationCacheKey | undefined): key is CacheKey {
+        return key !== undefined && (key as CacheKey).backendOptions !== undefined;
+    }
+
+    getOutputFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey): string {
+        let filename: string;
+
+        if (this.isCacheKey(key) && key.backendOptions.customOutputFilename) {
             filename = key.backendOptions.customOutputFilename;
         } else {
             filename = `${outputFilebase}.s`;
@@ -1803,7 +1822,7 @@ export class BaseCompiler {
 
     buildExecutable(compiler: string, options: string[], inputFilename: string, execOptions: ExecutionOptionsWithEnv) {
         // default implementation, but should be overridden by compilers
-        return this.runCompiler(compiler, options, inputFilename, execOptions);
+        return this.runCompiler(compiler, options, inputFilename, execOptions, {execute: true, binary: true});
     }
 
     protected maskPathsInArgumentsForUser(args: string[]): string[] {
diff --git a/lib/compilers/_all.ts b/lib/compilers/_all.ts
index 5e10b9f3c..75f445722 100644
--- a/lib/compilers/_all.ts
+++ b/lib/compilers/_all.ts
@@ -63,10 +63,11 @@ export {
     DotNetNativeAotCompiler,
 } from './dotnet.js';
 export {EDGCompiler} from './edg.js';
-export {EllccCompiler} from './ellcc.js';
+export {ElixirAsmCompiler} from './elixirasm.js';
 export {ElixirCompiler} from './elixir.js';
-export {ErlangCompiler} from './erlang.js';
+export {EllccCompiler} from './ellcc.js';
 export {ErlangAsmCompiler} from './erlangasm.js';
+export {ErlangCompiler} from './erlang.js';
 export {EWARMCompiler} from './ewarm.js';
 export {EWAVRCompiler} from './ewavr.js';
 export {FakeCompiler} from './fake-for-test.js';
diff --git a/lib/compilers/dex2oat.ts b/lib/compilers/dex2oat.ts
index fbfa80729..6fe875606 100644
--- a/lib/compilers/dex2oat.ts
+++ b/lib/compilers/dex2oat.ts
@@ -145,7 +145,7 @@ export class Dex2OatCompiler extends BaseCompiler {
 
         // Regexes that apply to .smali files (R8/D8 dump output).
         this.smaliLineNumberRegex = /^\s+\.line\s+(\d+).*$/;
-        this.smaliClassRegex = /^\.class\s(.*)$/;
+        this.smaliClassRegex = /^\.class\s.*(L.*;)$/;
         this.smaliDexPcRegex = /^\s+#@(\w+).*$/;
         this.smaliMethodStartRegex = /^\.method\s(.*)$/;
         this.smaliMethodEndRegex = /^\s*\.end\smethod.*$/;
diff --git a/lib/compilers/elixirasm.ts b/lib/compilers/elixirasm.ts
new file mode 100644
index 000000000..ec5a66614
--- /dev/null
+++ b/lib/compilers/elixirasm.ts
@@ -0,0 +1,73 @@
+// Copyright (c) 2025, Compiler Explorer Authors
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+//     * Redistributions of source code must retain the above copyright notice,
+//       this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above copyright
+//       notice, this list of conditions and the following disclaimer in the
+//       documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+import path from 'path';
+
+import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import {BaseCompiler} from '../base-compiler.js';
+
+import {ElixirParser} from './argument-parsers.js';
+
+export class ElixirAsmCompiler extends BaseCompiler {
+    static get key() {
+        return 'elixirasm';
+    }
+
+    override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string): string[] {
+        return [
+            '--eval',
+            '[input] = Code.required_files();' +
+                'code = Code.compile_file(input);' +
+                ':erts_debug.set_internal_state(:available_internal_state, true);' +
+                ':erts_debug.set_internal_state(:jit_asm_dump, true);' +
+                'code = Code.compile_file(input)' +
+                '|> Enum.map(fn {module,_} -> File.read!(:erlang.atom_to_list(module) ++ ".asm") end) ' +
+                '|> Enum.join("\n"); ' +
+                `:ok = File.write("${outputFilename}", code);`,
+        ];
+    }
+
+    override orderArguments(
+        options: string[],
+        inputFilename: string,
+        libIncludes: string[],
+        libOptions: string[],
+        libPaths: string[],
+        libLinks: string[],
+        userOptions: string[],
+        staticLibLinks: string[],
+    ): string[] {
+        return ['-r', inputFilename]
+            .concat(options)
+            .concat(libIncludes, libOptions, libPaths, libLinks, userOptions, staticLibLinks);
+    }
+
+    override getOutputFilename(dirPath: string, outputFilebase: string): string {
+        return path.join(dirPath, `${outputFilebase}.asm`);
+    }
+
+    override getArgumentParserClass() {
+        return ElixirParser;
+    }
+}
diff --git a/lib/compilers/ispc.ts b/lib/compilers/ispc.ts
index 271b527b8..29dbcb2c9 100644
--- a/lib/compilers/ispc.ts
+++ b/lib/compilers/ispc.ts
@@ -22,20 +22,31 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
+import fs from 'fs-extra';
 import Semver from 'semver';
 
+import {
+    CacheKey,
+    CompilationCacheKey,
+    CompilationResult,
+    ExecutionOptionsWithEnv,
+} from '../../types/compilation/compilation.interfaces.js';
 import {LLVMIrBackendOptions} from '../../types/compilation/ir.interfaces.js';
 import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js';
 import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
+import {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js';
 import type {ResultLine} from '../../types/resultline/resultline.interfaces.js';
 import {unwrap} from '../assert.js';
 import {BaseCompiler} from '../base-compiler.js';
 import {CompilationEnvironment} from '../compilation-env.js';
 import {asSafeVer} from '../utils.js';
+import * as utils from '../utils.js';
 
 import {ISPCParser} from './argument-parsers.js';
 
 export class ISPCCompiler extends BaseCompiler {
+    private readonly executableLinker: string;
+
     static get key() {
         return 'ispc';
     }
@@ -44,16 +55,40 @@ export class ISPCCompiler extends BaseCompiler {
         super(info, env);
         this.compiler.supportsIrView = true;
         this.compiler.irArg = ['--emit-llvm-text'];
+        // TODO(#7150) do away with this kind of thing and share the same linker for everything.
+        this.executableLinker = this.compilerProps<string>(`compiler.${this.compiler.id}.executableLinker`);
     }
 
     override couldSupportASTDump(version: string) {
         return Semver.gte(asSafeVer(this.compiler.semver), '1.18.0', true);
     }
 
+    override getOutputFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey): string {
+        const outputFilename = super.getOutputFilename(dirPath, outputFilebase, key);
+        if (this.isCacheKey(key)) {
+            // ispc gets a bit annoyed about the output filename extension. If we're in binary object mode we _have_ to
+            // output a `.o` file, else ispc complains.
+            if (key.filters.binary || key.filters.binaryObject) {
+                return utils.changeExtension(outputFilename, '.o');
+            }
+        }
+        return outputFilename;
+    }
+
+    override getExecutableFilename(dirPath: string, outputFilebase: string, key?: CacheKey | CompilationCacheKey) {
+        // ispc gets a bit annoyed about the output filename extension. If we're in binary object mode we _have_ to
+        // output a `.o` file, else ispc complains. We can't defer this to getOutputFilename, else we'll rename the
+        // output of executed but non-binary, non-binary-object files, which need to remain `.s`.
+        return utils.changeExtension(super.getOutputFilename(dirPath, outputFilebase, key), '.o');
+    }
+
     override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string) {
-        let options = ['--target=avx2-i32x8', '--emit-asm', '-g', '-o', this.filename(outputFilename)];
+        const options = ['--target=avx2-i32x8', '-g', '-o', this.filename(outputFilename)];
+        if (!filters.binary && !filters.binaryObject) {
+            options.push('--emit-asm');
+        }
         if (this.compiler.intelAsm && filters.intel && !filters.binary) {
-            options = options.concat(this.compiler.intelAsm.split(' '));
+            options.push(...this.compiler.intelAsm.split(' '));
         }
         return options;
     }
@@ -91,7 +126,43 @@ export class ISPCCompiler extends BaseCompiler {
         );
     }
 
+    override getLibLinkInfo(
+        filters: ParseFiltersAndOutputOptions,
+        libraries: SelectedLibraryVersion[],
+        toolchainPath: string,
+        dirPath: string,
+    ) {
+        // Prevent any library linking flags from being passed to ispc during compilation.
+        return {libLinks: [], libPathsAsFlags: [], staticLibLinks: []};
+    }
+
     override isCfgCompiler() {
         return true;
     }
+
+    async linkExecutable(options: string[], execOptions: ExecutionOptionsWithEnv) {
+        // Rely on the fact we definitely put a `-o` in the options.
+        const outputFile = options[options.indexOf('-o') + 1];
+        const renamedFile = outputFile + '.tmp';
+        await fs.rename(outputFile, renamedFile);
+        return await this.exec(this.executableLinker, ['-o', outputFile, renamedFile], execOptions);
+    }
+
+    override async runCompiler(
+        compiler: string,
+        options: string[],
+        inputFilename: string,
+        execOptions: ExecutionOptionsWithEnv,
+        filters?: ParseFiltersAndOutputOptions,
+    ): Promise<CompilationResult> {
+        const result = await super.runCompiler(compiler, options, inputFilename, execOptions, filters);
+        if (result.code !== 0) return result;
+        if (filters?.binary) {
+            const linkResult = await this.linkExecutable(options, execOptions);
+            if (linkResult.code !== 0) {
+                return {...result, ...this.transformToCompilationResult(linkResult, inputFilename)};
+            }
+        }
+        return result;
+    }
 }
diff --git a/lib/compilers/rust.ts b/lib/compilers/rust.ts
index 0d70412c1..4e28546ba 100644
--- a/lib/compilers/rust.ts
+++ b/lib/compilers/rust.ts
@@ -247,7 +247,7 @@ export class RustCompiler extends BaseCompiler {
     }
 
     override optionsForFilter(filters: ParseFiltersAndOutputOptions, outputFilename: string, userOptions?: string[]) {
-        let options = ['-C', 'debuginfo=1', '-o', this.filename(outputFilename)];
+        let options = ['-C', 'debuginfo=2', '-o', this.filename(outputFilename)];
 
         const userRequestedEmit = _.any(unwrap(userOptions), opt => opt.includes('--emit'));
         if (filters.binary) {
diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index 70034d264..0b6af58da 100644
--- a/lib/parsers/asm-parser.ts
+++ b/lib/parsers/asm-parser.ts
@@ -99,7 +99,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
         this.labelFindMips = /[$.A-Z_a-z][\w$.]*/g;
         this.mipsLabelDefinition = /^\$[\w$.]+:/;
         this.dataDefn =
-            /^\s*\.(ascii|asciz|[1248]?byte|dc(?:\.[abdlswx])?|dcb(?:\.[bdlswx])?|ds(?:\.[bdlpswx])?|double|dword|fill|float|half|hword|int|long|octa|quad|short|single|skip|space|string(?:8|16|32|64)?|value|word|xword|zero)/;
+            /^\s*\.(ascii|asciz|base64|[1248]?byte|dc(?:\.[abdlswx])?|dcb(?:\.[bdlswx])?|ds(?:\.[bdlpswx])?|double|dword|fill|float|half|hword|int|long|octa|quad|short|single|skip|space|string(?:8|16|32|64)?|value|word|xword|zero)/;
         this.fileFind = /^\s*\.(?:cv_)?file\s+(\d+)\s+"([^"]+)"(\s+"([^"]+)")?.*/;
         // Opcode expression here matches LLVM-style opcodes of the form `%blah = opcode`
         this.hasOpcodeRe = /^\s*(%[$.A-Z_a-z][\w$.]*\s*=\s*)?[A-Za-z]/;
diff --git a/package-lock.json b/package-lock.json
index a94e349e9..2c4c3f965 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15438,10 +15438,11 @@
       "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="
     },
     "node_modules/undici": {
-      "version": "6.20.1",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz",
-      "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==",
+      "version": "6.21.1",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz",
+      "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18.17"
       }
@@ -15614,10 +15615,11 @@
       "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
     },
     "node_modules/vite": {
-      "version": "5.4.10",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
-      "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+      "version": "5.4.14",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
+      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.43",


Test patch:
diff --git a/test/base-compiler-tests.ts b/test/base-compiler-tests.ts
index 6da95af7e..a54c865e8 100644
--- a/test/base-compiler-tests.ts
+++ b/test/base-compiler-tests.ts
@@ -856,7 +856,7 @@ describe('Rust overrides', () => {
         );
         expect(originalOptions).toEqual([
             '-C',
-            'debuginfo=1',
+            'debuginfo=2',
             '-o',
             'output.txt',
             '--crate-type',
@@ -870,6 +870,6 @@ describe('Rust overrides', () => {
                     value: 'aarch64-linux-something',
                 },
             ]),
-        ).toEqual(['-C', 'debuginfo=1', '-o', 'output.txt', '--crate-type', 'bin', '-Clinker=/usr/aarch64/bin/gcc']);
+        ).toEqual(['-C', 'debuginfo=2', '-o', 'output.txt', '--crate-type', 'bin', '-Clinker=/usr/aarch64/bin/gcc']);
     });
 });
diff --git a/test/filters-cases/bug-7280.asm b/test/filters-cases/bug-7280.asm
new file mode 100644
index 000000000..f6e5260cc
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm
@@ -0,0 +1,17 @@
+        .arch armv8-a
+        .file   "example.cpp"
+        .text
+        .global a
+        .section        .rodata
+        .align  3
+.LC0:
+        .string "a"
+        .base64 "AGIA"
+        .data
+        .align  3
+        .type   a, %object
+        .size   a, 8
+a:
+        .xword  .LC0
+        .ident  "GCC: (GNU) 15.0.1 20250115 (experimental)"
+        .section        .note.GNU-stack,"",@progbits
diff --git a/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json b/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json
new file mode 100644
index 000000000..720205208
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.binary.directives.labels.comments.json
@@ -0,0 +1,4 @@
+{
+  "asm": [],
+  "labelDefinitions": {}
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.comments.json b/test/filters-cases/bug-7280.asm.directives.comments.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.comments.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.json b/test/filters-cases/bug-7280.asm.directives.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.dontMaskFilenames.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.comments.library.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.labels.json b/test/filters-cases/bug-7280.asm.directives.labels.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.labels.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.directives.library.json b/test/filters-cases/bug-7280.asm.directives.library.json
new file mode 100644
index 000000000..805e10c8f
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.directives.library.json
@@ -0,0 +1,49 @@
+{
+  "asm": [
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 1,
+    "a": 4
+  }
+}
\ No newline at end of file
diff --git a/test/filters-cases/bug-7280.asm.none.json b/test/filters-cases/bug-7280.asm.none.json
new file mode 100644
index 000000000..d3d3c00b6
--- /dev/null
+++ b/test/filters-cases/bug-7280.asm.none.json
@@ -0,0 +1,141 @@
+{
+  "asm": [
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 22,
+            "startCol": 21
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .arch armv8-a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .file   \"example.cpp\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .text"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .global a"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .section        .rodata"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .align  3"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": ".LC0:"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 19,
+            "startCol": 18
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .string \"a\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .base64 \"AGIA\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .data"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .align  3"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .type   a, %object"
+    },
+    {
+      "labels": [
+        {
+          "name": "a",
+          "range": {
+            "endCol": 18,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .size   a, 8"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "a:"
+    },
+    {
+      "labels": [
+        {
+          "name": ".LC0",
+          "range": {
+            "endCol": 21,
+            "startCol": 17
+          }
+        }
+      ],
+      "source": null,
+      "text": "        .xword  .LC0"
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .ident  \"GCC: (GNU) 15.0.1 20250115 (experimental)\""
+    },
+    {
+      "labels": [],
+      "source": null,
+      "text": "        .section        .note.GNU-stack,\"\",@progbits"
+    }
+  ],
+  "labelDefinitions": {
+    ".LC0": 7,
+    "a": 14
+  }
+}
\ No newline at end of file