Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package cargo-auditable for openSUSE:Factory
checked in at 2026-04-23 17:04:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cargo-auditable (Old)
and /work/SRC/openSUSE:Factory/.cargo-auditable.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cargo-auditable"
Thu Apr 23 17:04:18 2026 rev:9 rq:1348661 version:0.7.4~0
Changes:
--------
--- /work/SRC/openSUSE:Factory/cargo-auditable/cargo-auditable.changes
2026-02-12 17:24:59.737254425 +0100
+++
/work/SRC/openSUSE:Factory/.cargo-auditable.new.11940/cargo-auditable.changes
2026-04-23 17:04:25.048264904 +0200
@@ -1,0 +2,29 @@
+Tue Mar 10 03:15:43 UTC 2026 - [email protected]
+
+- Update to version 0.7.4~0:
+ * Bump version
+ * Update changelog
+ * Update comment
+ * Add bare linker tests for Windows
+ * re-add the lost wasm target
+ * Clearer job naming
+ * Fix linking on i686 MSVC when using bare linkers
+ * Split Windows job into three
+ * Drop bare linker tests from Windows for now
+ * Enable bare linker for all Windows targets
+ * Make bare linker test also configure a bare linker on i686-pc-windows-msvc
+ * Fix i686 MSVC linking by handling name mangling
+ * Also run tests for the i686-pc-windows-msvc target
+ * Upgrade cargo-dist to hopefully work around macos 13 deprecation
+ * Update changelog
+ * Revert "Deliberately inject faults to verify CI tests these paths"
+ * Make Cargo actually load the config file; it doesn't load the associated
config when just passing Cargo.toml path
+ * Deliberately inject faults to verify CI tests these paths
+ * Bump time crate to get rid of vuln reports
+ * Add a test for bare linker configuration
+ * Fix bare linker argument passing on Apple platforms
+ * Bump version
+ * Update changelog
+ * Use POSIX `-u` instead of GNU `--undefined` for zig linker support
+
+-------------------------------------------------------------------
Old:
----
cargo-auditable-0.7.2~0.tar.zst
New:
----
cargo-auditable-0.7.4~0.tar.zst
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cargo-auditable.spec ++++++
--- /var/tmp/diff_new_pack.KSGn5e/_old 2026-04-23 17:04:25.948301983 +0200
+++ /var/tmp/diff_new_pack.KSGn5e/_new 2026-04-23 17:04:25.948301983 +0200
@@ -22,7 +22,7 @@
%define __cargo_common_opts %{?_smp_mflags}
Name: cargo-auditable
-Version: 0.7.2~0
+Version: 0.7.4~0
Release: 0
Summary: A tool to embed auditing information in ELF sections of rust
binaries
# If you know the license, put it's SPDX string here.
++++++ _service ++++++
--- /var/tmp/diff_new_pack.KSGn5e/_old 2026-04-23 17:04:25.992303795 +0200
+++ /var/tmp/diff_new_pack.KSGn5e/_new 2026-04-23 17:04:25.996303960 +0200
@@ -3,7 +3,7 @@
<param
name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
<param name="versionformat">@PARENT_TAG@~@TAG_OFFSET@</param>
<param name="scm">git</param>
- <param name="revision">v0.7.2</param>
+ <param name="revision">v0.7.4</param>
<param name="match-tag">v*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="versionrewrite-replacement">\1</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.KSGn5e/_old 2026-04-23 17:04:26.028305279 +0200
+++ /var/tmp/diff_new_pack.KSGn5e/_new 2026-04-23 17:04:26.032305443 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param
name="url">https://github.com/rust-secure-code/cargo-auditable.git</param>
- <param
name="changesrevision">0c4c6591a355c0fec883f70a4e9280974f15e02c</param></service></servicedata>
+ <param
name="changesrevision">1d50810095d1a40d02c4f5c38152cdb9d0ea06bd</param></service></servicedata>
(No newline at EOF)
++++++ cargo-auditable-0.7.2~0.tar.zst -> cargo-auditable-0.7.4~0.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/.github/workflows/release.yml
new/cargo-auditable-0.7.4~0/.github/workflows/release.yml
--- old/cargo-auditable-0.7.2~0/.github/workflows/release.yml 2025-11-09
11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/.github/workflows/release.yml 2026-03-04
20:15:52.000000000 +0100
@@ -56,7 +56,7 @@
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
persist-credentials: false
submodules: recursive
@@ -64,9 +64,9 @@
# we specify bash to get pipefail; it guards against the `curl` command
# failing. otherwise `sh` won't catch that `curl` returned non-0
shell: bash
- run: "curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/axodotdev/cargo-dist/releases/download/v0.30.0/cargo-dist-installer.sh
| sh"
+ run: "curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh
| sh"
- name: Cache dist
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: cargo-dist-cache
path: ~/.cargo/bin/dist
@@ -82,7 +82,7 @@
cat plan-dist-manifest.json
echo "manifest=$(jq -c "." plan-dist-manifest.json)" >>
"$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: artifacts-plan-dist-manifest
path: plan-dist-manifest.json
@@ -116,7 +116,7 @@
- name: enable windows longpaths
run: |
git config --global core.longpaths true
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
persist-credentials: false
submodules: recursive
@@ -131,7 +131,7 @@
run: ${{ matrix.install_dist.run }}
# Get the dist-manifest
- name: Fetch local artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: artifacts-*
path: target/distrib/
@@ -158,7 +158,7 @@
cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: artifacts-build-local-${{ join(matrix.targets, '_') }}
path: |
@@ -175,19 +175,19 @@
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
persist-credentials: false
submodules: recursive
- name: Install cached dist
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Get all the local artifacts for the global tasks to use (for e.g.
checksums)
- name: Fetch local artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: artifacts-*
path: target/distrib/
@@ -205,7 +205,7 @@
cp dist-manifest.json "$BUILD_MANIFEST_NAME"
- name: "Upload artifacts"
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: artifacts-build-global
path: |
@@ -217,27 +217,27 @@
- plan
- build-local-artifacts
- build-global-artifacts
- # Only run if we're "publishing", and only if local and global didn't fail
(skipped is fine)
- if: ${{ always() && needs.plan.outputs.publishing == 'true' &&
(needs.build-global-artifacts.result == 'skipped' ||
needs.build-global-artifacts.result == 'success') &&
(needs.build-local-artifacts.result == 'skipped' ||
needs.build-local-artifacts.result == 'success') }}
+ # Only run if we're "publishing", and only if plan, local and global
didn't fail (skipped is fine)
+ if: ${{ always() && needs.plan.result == 'success' &&
needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result
== 'skipped' || needs.build-global-artifacts.result == 'success') &&
(needs.build-local-artifacts.result == 'skipped' ||
needs.build-local-artifacts.result == 'success') }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
runs-on: "ubuntu-22.04"
outputs:
val: ${{ steps.host.outputs.manifest }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
persist-credentials: false
submodules: recursive
- name: Install cached dist
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: cargo-dist-cache
path: ~/.cargo/bin/
- run: chmod +x ~/.cargo/bin/dist
# Fetch artifacts from scratch-storage
- name: Fetch artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: artifacts-*
path: target/distrib/
@@ -250,14 +250,14 @@
cat dist-manifest.json
echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
- name: "Upload dist-manifest.json"
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
# Overwrite the previous copy
name: artifacts-dist-manifest
path: dist-manifest.json
# Create a GitHub Release while uploading all files to it
- name: "Download GitHub Artifacts"
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
pattern: artifacts-*
path: artifacts
@@ -290,7 +290,7 @@
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
persist-credentials: false
submodules: recursive
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/.github/workflows/windows.yml
new/cargo-auditable-0.7.4~0/.github/workflows/windows.yml
--- old/cargo-auditable-0.7.2~0/.github/workflows/windows.yml 2025-11-09
11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/.github/workflows/windows.yml 2026-03-04
20:15:52.000000000 +0100
@@ -6,26 +6,48 @@
branches: master
jobs:
- test:
- strategy:
- matrix:
- platform:
- - windows-latest
- toolchain:
- - stable
- runs-on: ${{ matrix.platform }}
+ test-x86_64-pc-windows-msvc:
+ runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: swatinem/rust-cache@v2
- uses: dtolnay/rust-toolchain@stable
with:
- toolchain: ${{ matrix.toolchain }}
+ toolchain: stable
profile: minimal
override: true
targets: "wasm32-unknown-unknown"
- - name: "Test on the native x86_64-pc-windows-mscv"
+ - name: "Test on the native x86_64-pc-windows-msvc"
run: cargo test --all-features --workspace
+
+ test-x86_64-pc-windows-gnu:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: swatinem/rust-cache@v2
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+ targets: "wasm32-unknown-unknown"
- name: "Test when cross-compiling to x86_64-pc-windows-gnu"
env:
AUDITABLE_TEST_TARGET: "x86_64-pc-windows-gnu"
run: cargo test --all-features --workspace
+
+ test-i686-pc-windows-msvc:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: swatinem/rust-cache@v2
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+ targets: "wasm32-unknown-unknown,i686-pc-windows-msvc"
+ - name: "Test when cross-compiling to i686-pc-windows-msvc"
+ env:
+ AUDITABLE_TEST_TARGET: "i686-pc-windows-msvc"
+ run: cargo test --all-features --workspace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cargo-auditable-0.7.2~0/Cargo.lock
new/cargo-auditable-0.7.4~0/Cargo.lock
--- old/cargo-auditable-0.7.2~0/Cargo.lock 2025-11-09 11:06:58.000000000
+0100
+++ new/cargo-auditable-0.7.4~0/Cargo.lock 2026-03-04 20:15:52.000000000
+0100
@@ -116,7 +116,7 @@
[[package]]
name = "cargo-auditable"
-version = "0.7.2"
+version = "0.7.4"
dependencies = [
"auditable-info",
"auditable-serde",
@@ -355,9 +355,9 @@
[[package]]
name = "num-conv"
-version = "0.1.0"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050"
[[package]]
name = "num-traits"
@@ -699,30 +699,30 @@
[[package]]
name = "time"
-version = "0.3.44"
+version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
+checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c"
dependencies = [
"deranged",
"itoa",
"num-conv",
"powerfmt",
- "serde",
+ "serde_core",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
-version = "0.1.6"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
+checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca"
[[package]]
name = "time-macros"
-version = "0.2.24"
+version = "0.2.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
+checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215"
dependencies = [
"num-conv",
"time-core",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cargo-auditable-0.7.2~0/Cargo.toml
new/cargo-auditable-0.7.4~0/Cargo.toml
--- old/cargo-auditable-0.7.2~0/Cargo.toml 2025-11-09 11:06:58.000000000
+0100
+++ new/cargo-auditable-0.7.4~0/Cargo.toml 2026-03-04 20:15:52.000000000
+0100
@@ -13,7 +13,7 @@
# Config for 'dist'
[workspace.metadata.dist]
# The preferred dist version to use in CI (Cargo.toml SemVer syntax)
-cargo-dist-version = "0.30.0"
+cargo-dist-version = "0.31.0"
# CI backends to support
ci = "github"
# The installers to generate for each app
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cargo-auditable-0.7.2~0/cargo-auditable/CHANGELOG.md
new/cargo-auditable-0.7.4~0/cargo-auditable/CHANGELOG.md
--- old/cargo-auditable-0.7.2~0/cargo-auditable/CHANGELOG.md 2025-11-09
11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/CHANGELOG.md 2026-03-04
20:15:52.000000000 +0100
@@ -5,6 +5,22 @@
The format is based on [Keep a
Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic
Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.7.4] - 2026-03-04
+
+### Fixed
+
+ - Fixed build failures when targeting i686-pc-windows-msvc. Added tests to
test this target on CI, including the bare linker configuration.
+
+## [0.7.3] - 2026-03-03
+
+### Changed
+
+ - On Unix, use `-u` linker flag instead of `--undefined` for broader
compatibility. Most notably fixes compatibility with the Zig toolchain linker,
making `cargo zigbuild` work with `cargo auditable`.
+
+### Fixed
+
+ - Fixed build failures for bare linker configurations on Apple platforms, and
added test for bare linker configurations for Apple and linux-musl.
+
## [0.7.2] - 2025-11-09
### Changed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cargo-auditable-0.7.2~0/cargo-auditable/Cargo.toml
new/cargo-auditable-0.7.4~0/cargo-auditable/Cargo.toml
--- old/cargo-auditable-0.7.2~0/cargo-auditable/Cargo.toml 2025-11-09
11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/Cargo.toml 2026-03-04
20:15:52.000000000 +0100
@@ -1,6 +1,6 @@
[package]
name = "cargo-auditable"
-version = "0.7.2"
+version = "0.7.4"
edition = "2021"
authors = ["Sergey \"Shnatsel\" Davidoff <[email protected]>"]
license = "MIT OR Apache-2.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/src/object_file.rs
new/cargo-auditable-0.7.4~0/cargo-auditable/src/object_file.rs
--- old/cargo-auditable-0.7.2~0/cargo-auditable/src/object_file.rs
2025-11-09 11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/src/object_file.rs
2026-03-04 20:15:52.000000000 +0100
@@ -181,6 +181,44 @@
abi_version,
e_flags,
};
+
+ // Add the COFF `@feat.00` symbol used to communicate linker feature flags.
+ //
+ // When linking with /SAFESEH on x86, lld requires that all linker inputs
be marked as safe
+ // exception handling compatible. Our metadata objects masquerade as
regular COFF objects and
+ // are treated as linker inputs, so they need the flag too.
+ //
+ // This implementation mirrors the rustc's metadata object generation:
+ //
<https://github.com/rust-lang/rust/blob/b90dc1e597db0bbc0cab0eccb39747b1a9d7e607/compiler/rustc_codegen_ssa/src/back/metadata.rs#L224-L252>
+ //
+ // See also:
+ //
+ // - <https://github.com/rust-lang/rust/issues/96498>
+ // - <https://learn.microsoft.com/en-us/windows/win32/debug/pe-format>
+ if binary_format == BinaryFormat::Coff {
+ // Disable mangling so the "@feat.00" symbol name is written verbatim.
+ // CoffI386 mangling adds a `_` prefix which would break this special
symbol.
+ let original_mangling = file.mangling();
+ file.set_mangling(write::Mangling::None);
+
+ let mut feature: u64 = 0;
+ if architecture == Architecture::I386 {
+ feature |= 1; // IMAGE_FILE_SAFE_EXCEPTION_HANDLER
+ }
+ file.add_symbol(Symbol {
+ name: b"@feat.00".to_vec(),
+ value: feature,
+ size: 0,
+ kind: SymbolKind::Data,
+ scope: SymbolScope::Compilation,
+ weak: false,
+ section: SymbolSection::Absolute,
+ flags: SymbolFlags::None,
+ });
+
+ file.set_mangling(original_mangling);
+ }
+
Some(file)
}
@@ -323,6 +361,87 @@
}
#[test]
+ fn test_create_object_file_windows_msvc_i686() {
+ let rustc_output = br#"debug_assertions
+target_arch="x86"
+target_endian="little"
+target_env="msvc"
+target_family="windows"
+target_feature="fxsr"
+target_feature="sse"
+target_feature="sse2"
+target_os="windows"
+target_pointer_width="32"
+target_vendor="pc"
+windows
+"#;
+ let target_triple = "i686-pc-windows-msvc";
+ let target_info = parse_rustc_target_info(rustc_output);
+ let result = create_object_file(&target_info, target_triple).unwrap();
+ assert_eq!(result.format(), BinaryFormat::Coff);
+ assert_eq!(result.architecture(), Architecture::I386);
+ }
+
+ /// Verify that i686 COFF metadata objects contain an absolute `@feat.00`
symbol with
+ /// `IMAGE_FILE_SAFE_EXCEPTION_HANDLER` (bit 0) set.
+ ///
+ /// See <https://github.com/rust-lang/rust/issues/96498>
+ #[test]
+ fn test_create_metadata_file_windows_msvc_i686_has_feat00() {
+ let rustc_output = br#"debug_assertions
+target_arch="x86"
+target_endian="little"
+target_env="msvc"
+target_family="windows"
+target_feature="fxsr"
+target_feature="sse"
+target_feature="sse2"
+target_os="windows"
+target_pointer_width="32"
+target_vendor="pc"
+windows
+"#;
+ let target_triple = "i686-pc-windows-msvc";
+ let target_info = parse_rustc_target_info(rustc_output);
+ let contents = b"test audit data";
+ let result = create_metadata_file(
+ &target_info,
+ target_triple,
+ contents,
+ "AUDITABLE_VERSION_INFO",
+ )
+ .expect("should produce an object file for i686-pc-windows-msvc");
+
+ // Parse the COFF symbol table and verify `@feat.00` has value bit0=1
and absolute section.
+ let symtab_ptr = u32::from_le_bytes(result[8..12].try_into().unwrap())
as usize;
+ let sym_count = u32::from_le_bytes(result[12..16].try_into().unwrap())
as usize;
+ let symbol_size = 18;
+
+ let feat = (0..sym_count).find_map(|i| {
+ let start = symtab_ptr + i * symbol_size;
+ let end = start + symbol_size;
+ let entry = result.get(start..end)?;
+ if &entry[0..8] != b"@feat.00" {
+ return None;
+ }
+ let value = u32::from_le_bytes(entry[8..12].try_into().unwrap());
+ let section_number =
i16::from_le_bytes(entry[12..14].try_into().unwrap());
+ Some((value, section_number))
+ });
+
+ let (value, section_number) = feat.expect("COFF object for i686 must
contain @feat.00");
+ assert_eq!(
+ value & 1,
+ 1,
+ "@feat.00 must set IMAGE_FILE_SAFE_EXCEPTION_HANDLER on i686"
+ );
+ assert_eq!(
+ section_number, -1,
+ "@feat.00 must be an absolute COFF symbol (section number -1)"
+ );
+ }
+
+ #[test]
fn test_create_object_file_windows_gnu() {
let rustc_output = br#"debug_assertions
target_arch="x86_64"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/src/platform_detection.rs
new/cargo-auditable-0.7.4~0/cargo-auditable/src/platform_detection.rs
--- old/cargo-auditable-0.7.2~0/cargo-auditable/src/platform_detection.rs
2025-11-09 11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/src/platform_detection.rs
2026-03-04 20:15:52.000000000 +0100
@@ -22,6 +22,10 @@
key_equals(target_info, "target_pointer_width", "32")
}
+pub fn is_32bit_x86(target_info: &RustcTargetInfo) -> bool {
+ key_equals(target_info, "target_arch", "x86")
+}
+
fn key_equals(target_info: &RustcTargetInfo, key: &str, value: &str) -> bool {
target_info.get(key).map(|s| s.as_str()) == Some(value)
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/src/rustc_wrapper.rs
new/cargo-auditable-0.7.4~0/cargo-auditable/src/rustc_wrapper.rs
--- old/cargo-auditable-0.7.2~0/cargo-auditable/src/rustc_wrapper.rs
2025-11-09 11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/src/rustc_wrapper.rs
2026-03-04 20:15:52.000000000 +0100
@@ -6,7 +6,7 @@
use crate::{
binary_file, collect_audit_data,
- platform_detection::{is_apple, is_msvc, is_wasm},
+ platform_detection::{is_32bit_x86, is_apple, is_msvc, is_wasm},
rustc_arguments::{self, should_embed_audit_data},
target_info,
};
@@ -128,21 +128,31 @@
// Prevent the symbol from being removed as unused by the linker
if is_apple(&target_info) {
if args.bare_linker() {
- command.arg("-Clink-arg=-u,_AUDITABLE_VERSION_INFO");
+ command.arg("-Clink-arg=-u");
+ command.arg("-Clink-arg=_AUDITABLE_VERSION_INFO");
} else {
command.arg("-Clink-arg=-Wl,-u,_AUDITABLE_VERSION_INFO");
}
} else if is_msvc(&target_info) {
- command.arg("-Clink-arg=/INCLUDE:AUDITABLE_VERSION_INFO");
+ // On x86 MSVC, the `object` crate's CoffI386 mangling adds a `_`
+ // prefix to global symbols, so the linker must reference the
+ // decorated name.
+ if is_32bit_x86(&target_info) {
+ command.arg("-Clink-arg=/INCLUDE:_AUDITABLE_VERSION_INFO");
+ } else {
+ command.arg("-Clink-arg=/INCLUDE:AUDITABLE_VERSION_INFO");
+ }
} else if is_wasm(&target_info) {
// We don't emit the symbol name in WASM, so nothing to do
} else {
- // Unrecognized platform, assume it to be unix-like
- #[allow(clippy::collapsible_else_if)]
+ // Unrecognized platform, assume it to be unix-like.
+ // Use POSIX `-u` instead of GNU `--undefined=` for broad
compatibility
+ // (e.g. zig rejects the GNU form).
if args.bare_linker() {
- command.arg("-Clink-arg=--undefined=AUDITABLE_VERSION_INFO");
+ command.arg("-Clink-arg=-u");
+ command.arg("-Clink-arg=AUDITABLE_VERSION_INFO");
} else {
-
command.arg("-Clink-arg=-Wl,--undefined=AUDITABLE_VERSION_INFO");
+ command.arg("-Clink-arg=-Wl,-u,AUDITABLE_VERSION_INFO");
}
}
Some(command)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/.cargo/config.toml
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/.cargo/config.toml
---
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/.cargo/config.toml
1970-01-01 01:00:00.000000000 +0100
+++
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/.cargo/config.toml
2026-03-04 20:15:52.000000000 +0100
@@ -0,0 +1,46 @@
+# copied from
https://github.com/EFForg/rayhunter/blob/adeeb751667d3b44ba6ad215a1bc0ac73d90ae72/.cargo/config.toml#L1
+# as a motivating example for bare linker support
+
+[target.aarch64-apple-darwin]
+linker = "rust-lld"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+[target.aarch64-unknown-linux-musl]
+linker = "rust-lld"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+# apt install build-essential libc6-armhf-cross libc6-dev-armhf-cross
gcc-arm-linux-gnueabihf
+[target.armv7-unknown-linux-gnueabihf]
+linker = "arm-linux-gnueabihf-gcc"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+[target.armv7-unknown-linux-musleabihf]
+linker = "rust-lld"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+[target.armv7-unknown-linux-musleabi]
+linker = "rust-lld"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+# Disable rust-lld for x86 macOS because the linker crashers when compiling
+# the installer in release mode with debug info on.
+# [target.x86_64-apple-darwin]
+# linker = "rust-lld"
+# rustflags = ["-C", "target-feature=+crt-static"]
+
+[target.x86_64-unknown-linux-musl]
+linker = "rust-lld"
+rustflags = ["-C", "target-feature=+crt-static"]
+
+# === Not included in the original Rayhunter example ===
+
+# this tests for https://github.com/rust-lang/rust/issues/96498
+[target.i686-pc-windows-msvc]
+linker = "rust-lld"
+
+# this Just Works so we might as well see if it keeps working
+[target.x86_64-pc-windows-msvc]
+linker = "rust-lld"
+
+# GNU targets generally don't work with bare linkers; not even rayhunter uses
it there.
+# So we're not testing windows-gnu or linux-gnu
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/Cargo.toml
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/Cargo.toml
---
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/Cargo.toml
1970-01-01 01:00:00.000000000 +0100
+++
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/Cargo.toml
2026-03-04 20:15:52.000000000 +0100
@@ -0,0 +1,8 @@
+[package]
+name = "bare_linker"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
+
+[workspace]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/src/main.rs
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/src/main.rs
---
old/cargo-auditable-0.7.2~0/cargo-auditable/tests/fixtures/bare_linker/src/main.rs
1970-01-01 01:00:00.000000000 +0100
+++
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/fixtures/bare_linker/src/main.rs
2026-03-04 20:15:52.000000000 +0100
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, world!");
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/cargo-auditable-0.7.2~0/cargo-auditable/tests/it.rs
new/cargo-auditable-0.7.4~0/cargo-auditable/tests/it.rs
--- old/cargo-auditable-0.7.2~0/cargo-auditable/tests/it.rs 2025-11-09
11:06:58.000000000 +0100
+++ new/cargo-auditable-0.7.4~0/cargo-auditable/tests/it.rs 2026-03-04
20:15:52.000000000 +0100
@@ -585,3 +585,37 @@
.expect("Could not find 'syn' in the embedded dependency list!");
assert_eq!(syn_info.kind, DependencyKind::Build);
}
+
+#[test]
+fn test_bare_linker() {
+ test_bare_linker_inner(false);
+ test_bare_linker_inner(true);
+}
+fn test_bare_linker_inner(sbom: bool) {
+ // Path to workspace fixture Cargo.toml
+ let cargo_toml =
+
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/bare_linker/Cargo.toml");
+ // The motivating example is
https://github.com/EFForg/rayhunter/blob/main/.cargo/config.toml
+ // and the config file fixture is based on that, with some additions.
+ //
+ // The config file doesn't specify a bare linker for all targets;
+ // e.g. GNU doesn't seem to support using a bare linker at all.
+ // See the config file for the exact list of targets where this is tested.
+ let config_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("tests/fixtures/bare_linker/.cargo/config.toml");
+
+ let bins = run_cargo_auditable(
+ cargo_toml,
+ &["--config", config_path.to_str().unwrap()],
+ &[],
+ sbom,
+ );
+ eprintln!("Test fixture binary map: {bins:?}");
+
+ // bare_linker should only depend on itself
+ let bare_linker_bin = &bins.get("bare_linker").unwrap()[0];
+ let dep_info = get_dependency_info(bare_linker_bin);
+ eprintln!("{bare_linker_bin} dependency info: {dep_info:?}");
+ assert!(dep_info.packages.len() == 1);
+ assert!(dep_info.packages.iter().any(|p| p.name == "bare_linker"));
+}
++++++ cargo-auditable.obsinfo ++++++
--- /var/tmp/diff_new_pack.KSGn5e/_old 2026-04-23 17:04:26.332317803 +0200
+++ /var/tmp/diff_new_pack.KSGn5e/_new 2026-04-23 17:04:26.336317968 +0200
@@ -1,5 +1,5 @@
name: cargo-auditable
-version: 0.7.2~0
-mtime: 1762682818
-commit: 0c4c6591a355c0fec883f70a4e9280974f15e02c
+version: 0.7.4~0
+mtime: 1772651752
+commit: 1d50810095d1a40d02c4f5c38152cdb9d0ea06bd
++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/cargo-auditable/vendor.tar.zst
/work/SRC/openSUSE:Factory/.cargo-auditable.new.11940/vendor.tar.zst differ:
char 7, line 1