diff options
author | znley <shanjiantao@loongson.cn> | 2024-05-07 13:05:32 +0000 |
---|---|---|
committer | Patrycja Rosa <alpine@ptrcnull.me> | 2024-05-10 07:32:26 +0000 |
commit | f2d77e8277c2f77ee5236e9aaf53579631ef8a12 (patch) | |
tree | 0e16dde1759f5829cbafcbd61faa69a6f490f3de | |
parent | 000b38ea9089254c6fa2520b15e2e1ecad22a105 (diff) |
main/cargo-auditable: add loongarch64 support
Patch from:
https://github.com/rust-secure-code/cargo-auditable/commit/9e6376fe4a21ed16abb1be12def9c361bd2ef2f2
-rw-r--r-- | main/cargo-auditable/APKBUILD | 4 | ||||
-rw-r--r-- | main/cargo-auditable/add-loongarch64-support.patch | 90 | ||||
-rw-r--r-- | main/cargo-auditable/upgrade-rust-libc.patch | 16 |
3 files changed, 110 insertions, 0 deletions
diff --git a/main/cargo-auditable/APKBUILD b/main/cargo-auditable/APKBUILD index 9d6d8f6b251..ff4950fece2 100644 --- a/main/cargo-auditable/APKBUILD +++ b/main/cargo-auditable/APKBUILD @@ -10,6 +10,8 @@ depends="cmd:cargo" subpackages="$pkgname-doc" source="$pkgname-$pkgver.tar.gz::https://github.com/rust-secure-code/cargo-auditable/archive/refs/tags/v$pkgver.tar.gz 0001-Fix-tests-on-Rust-1.77.patch + add-loongarch64-support.patch + upgrade-rust-libc.patch " options="net" @@ -39,4 +41,6 @@ package() { sha512sums=" 3656f124d8e43fbb4518d9aa3ad9e40a7cae61c56fa4718e9ff886934b2fcb5b2f116551c63ca17712c203ac93daf2b28a22efe41e556013189dec0ad9248f1f cargo-auditable-0.6.2.tar.gz b5a871ea32bbfba1c6cda46c97ed5793f5dafeb237fc7da2462408d7125ac75519cad9ba6af159a4ce8abe6285b19c65048ba37c3e4a3c05f81625482d575235 0001-Fix-tests-on-Rust-1.77.patch +27dc8f73fa981e7d04a37def2355a2f1466162a727e20e2a346c05d33c0e0eb97b7e9e03a6ccadd20a356ad78598c3a93f44bf9c0293cd2b7dc8779e05399fb3 add-loongarch64-support.patch +0721760a8d747e0ee4a34153bcc056503b07e812b2b74475492d6eacb5afc5c86c80e571c6c92ab07bd737969e19149e21c677a5fd65665183bbf62feb549ac5 upgrade-rust-libc.patch " diff --git a/main/cargo-auditable/add-loongarch64-support.patch b/main/cargo-auditable/add-loongarch64-support.patch new file mode 100644 index 00000000000..e6058da1a35 --- /dev/null +++ b/main/cargo-auditable/add-loongarch64-support.patch @@ -0,0 +1,90 @@ +From 39f83fa298e7174362195adac9dcbd64c26223e4 Mon Sep 17 00:00:00 2001 +From: WANG Rui <wangrui@loongson.cn> +Date: Tue, 7 May 2024 20:42:39 +0800 +Subject: [PATCH] Add LoongArch support + +--- + cargo-auditable/src/object_file.rs | 46 ++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +diff --git a/cargo-auditable/src/object_file.rs b/cargo-auditable/src/object_file.rs +index 347f0c0..6dcb9bc 100644 +--- a/cargo-auditable/src/object_file.rs ++++ b/cargo-auditable/src/object_file.rs +@@ -84,6 +84,7 @@ fn create_object_file( + "riscv32" => Architecture::Riscv32, + "riscv64" => Architecture::Riscv64, + "sparc64" => Architecture::Sparc64, ++ "loongarch64" => Architecture::LoongArch64, + // Unsupported architecture. + _ => return None, + }; +@@ -150,6 +151,21 @@ fn create_object_file( + } + e_flags + } ++ Architecture::LoongArch64 => { ++ // Source: https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc#e_flags-identifies-abi-type-and-version ++ let mut e_flags: u32 = elf::EF_LARCH_OBJABI_V1; ++ let features = loongarch_features(target_triple); ++ ++ // Select the appropriate floating-point ABI ++ if features.contains('d') { ++ e_flags |= elf::EF_LARCH_ABI_DOUBLE_FLOAT; ++ } else if features.contains('f') { ++ e_flags |= elf::EF_LARCH_ABI_SINGLE_FLOAT; ++ } else { ++ e_flags |= elf::EF_LARCH_ABI_SOFT_FLOAT; ++ } ++ e_flags ++ } + _ => 0, + }; + // adapted from LLVM's `MCELFObjectTargetWriter::getOSABI` +@@ -181,6 +197,16 @@ fn riscv_features(target_triple: &str) -> String { + extensions + } + ++// This function was not present in the original rustc code, which simply used ++// `sess.target.options.features` ++// We do not have access to compiler internals, so we have to reimplement this function. ++fn loongarch_features(target_triple: &str) -> String { ++ match target_triple { ++ "loongarch64-unknown-none-softfloat" => "".to_string(), ++ _ => "f,d".to_string(), ++ } ++} ++ + #[cfg(test)] + mod tests { + use super::*; +@@ -210,6 +236,26 @@ mod tests { + assert!(features.contains('f')); + } + ++ #[test] ++ fn test_loongarch_abi_detection() { ++ // real-world target with double floats ++ let features = loongarch_features("loongarch64-unknown-linux-gnu"); ++ assert!(features.contains('d')); ++ assert!(features.contains('f')); ++ // real-world target with double floats ++ let features = loongarch_features("loongarch64-unknown-linux-musl"); ++ assert!(features.contains('d')); ++ assert!(features.contains('f')); ++ // real-world target with double floats ++ let features = loongarch_features("loongarch64-unknown-none"); ++ assert!(features.contains('d')); ++ assert!(features.contains('f')); ++ // real-world target with soft floats ++ let features = loongarch_features("loongarch64-unknown-none-softfloat"); ++ assert!(!features.contains('d')); ++ assert!(!features.contains('f')); ++ } ++ + #[test] + fn test_create_object_file_linux() { + let rustc_output = br#"debug_assertions +-- +2.44.0 + diff --git a/main/cargo-auditable/upgrade-rust-libc.patch b/main/cargo-auditable/upgrade-rust-libc.patch new file mode 100644 index 00000000000..44c440240c3 --- /dev/null +++ b/main/cargo-auditable/upgrade-rust-libc.patch @@ -0,0 +1,16 @@ +diff --git a/Cargo.lock b/Cargo.lock +index d039aae..0d3b00f 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -198,9 +198,9 @@ checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" + + [[package]] + name = "libc" +-version = "0.2.132" ++version = "0.2.154" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" ++checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" + + [[package]] + name = "memchr" |