aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorznley <shanjiantao@loongson.cn>2024-05-07 13:05:32 +0000
committerPatrycja Rosa <alpine@ptrcnull.me>2024-05-10 07:32:26 +0000
commitf2d77e8277c2f77ee5236e9aaf53579631ef8a12 (patch)
tree0e16dde1759f5829cbafcbd61faa69a6f490f3de
parent000b38ea9089254c6fa2520b15e2e1ecad22a105 (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/APKBUILD4
-rw-r--r--main/cargo-auditable/add-loongarch64-support.patch90
-rw-r--r--main/cargo-auditable/upgrade-rust-libc.patch16
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"