about summary refs log tree commit diff
path: root/library/stdarch/crates/stdarch-test
diff options
context:
space:
mode:
authorHans Kratz <hans@appfour.com>2021-09-07 20:36:30 +0200
committerLuca Barbato <luca.barbato@gmail.com>2021-09-08 19:14:13 +0200
commitf15c8515174f57acae0cb21c50d7eaf8adb9a856 (patch)
tree5d8c7c170839cf8c221524fc66b56be15bf1392a /library/stdarch/crates/stdarch-test
parent9e34c6d4c863016c7a429fb5615ad6690e89daef (diff)
downloadrust-f15c8515174f57acae0cb21c50d7eaf8adb9a856.tar.gz
rust-f15c8515174f57acae0cb21c50d7eaf8adb9a856.zip
Use LLVM objdump on Macos ARM64 because it is not possible to enable TME support with otool
Diffstat (limited to 'library/stdarch/crates/stdarch-test')
-rw-r--r--library/stdarch/crates/stdarch-test/src/disassembly.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/library/stdarch/crates/stdarch-test/src/disassembly.rs b/library/stdarch/crates/stdarch-test/src/disassembly.rs
index 38ebce75f77..dd80b4ad831 100644
--- a/library/stdarch/crates/stdarch-test/src/disassembly.rs
+++ b/library/stdarch/crates/stdarch-test/src/disassembly.rs
@@ -67,6 +67,24 @@ pub(crate) fn disassemble_myself() -> HashSet<Function> {
         String::from_utf8_lossy(Vec::leak(output.stdout))
     } else if cfg!(target_os = "windows") {
         panic!("disassembly unimplemented")
+    } else if cfg!(target_os = "macos") && cfg!(target_arch = "aarch64") {
+        // use LLVM objdump because it is not possible to enable TME support with otool
+        let objdump = env::var("OBJDUMP").unwrap_or_else(|_| "objdump".to_string());
+        let output = Command::new(objdump.clone())
+            .arg("--disassemble")
+            .arg("--no-show-raw-insn")
+            .arg("--mattr=+crc,+crypto,+tme")
+            .arg(&me)
+            .output()
+            .unwrap_or_else(|_| panic!("failed to execute objdump. OBJDUMP={}", objdump));
+        println!(
+            "{}\n{}",
+            output.status,
+            String::from_utf8_lossy(&output.stderr)
+        );
+        assert!(output.status.success());
+
+        String::from_utf8_lossy(Vec::leak(output.stdout))
     } else if cfg!(target_os = "macos") {
         let output = Command::new("otool")
             .arg("-vt")