diff --git a/src/tools/run-make-support/src/llvm.rs b/src/tools/run-make-support/src/llvm.rs
index fe4131819ba..99bce08fc23 100644
--- a/src/tools/run-make-support/src/llvm.rs
+++ b/src/tools/run-make-support/src/llvm.rs
@@ -2,8 +2,8 @@ use std::path::{Path, PathBuf};
 
 use crate::{env_var, Command};
 
-/// Construct a new `llvm-readobj` invocation. This assumes that `llvm-readobj` is available
-/// at `$LLVM_BIN_DIR/llvm-readobj`.
+/// Construct a new `llvm-readobj` invocation with the `GNU` output style.
+/// This assumes that `llvm-readobj` is available at `$LLVM_BIN_DIR/llvm-readobj`.
 #[track_caller]
 pub fn llvm_readobj() -> LlvmReadobj {
     LlvmReadobj::new()
@@ -70,13 +70,24 @@ pub fn llvm_bin_dir() -> PathBuf {
 }
 
 impl LlvmReadobj {
-    /// Construct a new `llvm-readobj` invocation. This assumes that `llvm-readobj` is available
-    /// at `$LLVM_BIN_DIR/llvm-readobj`.
+    /// Construct a new `llvm-readobj` invocation with the `GNU` output style.
+    /// This assumes that `llvm-readobj` is available at `$LLVM_BIN_DIR/llvm-readobj`.
     #[track_caller]
     pub fn new() -> Self {
         let llvm_readobj = llvm_bin_dir().join("llvm-readobj");
         let cmd = Command::new(llvm_readobj);
-        Self { cmd }
+        let mut readobj = Self { cmd };
+        readobj.elf_output_style("GNU");
+        readobj
+    }
+
+    /// Specify the format of the ELF information.
+    ///
+    /// Valid options are `LLVM` (default), `GNU`, and `JSON`.
+    pub fn elf_output_style(&mut self, style: &str) -> &mut Self {
+        self.cmd.arg("--elf-output-style");
+        self.cmd.arg(style);
+        self
     }
 
     /// Provide an input file.
@@ -90,6 +101,13 @@ impl LlvmReadobj {
         self.cmd.arg("--file-header");
         self
     }
+
+    /// Specify the section to display.
+    pub fn section(&mut self, section: &str) -> &mut Self {
+        self.cmd.arg("--string-dump");
+        self.cmd.arg(section);
+        self
+    }
 }
 
 impl LlvmProfdata {
diff --git a/src/tools/run-make-support/src/nm/mod.rs b/src/tools/run-make-support/src/nm/mod.rs
deleted file mode 100644
index 1f41792921d..00000000000
--- a/src/tools/run-make-support/src/nm/mod.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-use crate::{fs_wrapper, object};
-use object::{Object, ObjectSection};
-use std::path::Path;
-
-#[derive(Debug)]
-pub struct Nm<'a> {
-    file: Option<object::File<'a>>,
-}
-
-pub fn nm() -> Nm {
-    Nm::new()
-}
-
-impl Nm {
-    /// Construct a bare `nm` invocation.
-    pub fn new() -> Self {
-        Self { file: None }
-    }
-
-    /// Specify the file to analyze the symbols of.
-    pub fn input<P: AsRef<Path>>(&mut self, path: P) -> &mut Self {
-        &mut Self {
-            file: Some(
-                object::File::parse(fs_wrapper::read(path))
-                    .expect(format!("Failed to parse ELF file at {:?}", path.as_ref().display())),
-            ),
-        }
-    }
-
-    /// Collect all symbols of an object file into a String.
-    pub fn collect_symbols(&self) -> String {
-        let object_file = self.file;
-        let mut symbols_str = String::new();
-        for section in object_file.sections() {
-            if let Ok(object::read::elf::SymbolTable(st)) =
-                section.parse::<object::read::elf::SymbolTable<'_, '_>>()
-            {
-                for symbol in st.symbols() {
-                    symbols_str.push_str(&format!(
-                        "{:016x} {:?} {}\n",
-                        symbol.address(),
-                        symbol.kind(),
-                        symbol.name()
-                    ));
-                }
-            }
-        }
-        symbols_str
-    }
-}
diff --git a/tests/run-make/bin-emit-no-symbols/rmake.rs b/tests/run-make/bin-emit-no-symbols/rmake.rs
index 6d6d6b32967..5586e53c050 100644
--- a/tests/run-make/bin-emit-no-symbols/rmake.rs
+++ b/tests/run-make/bin-emit-no-symbols/rmake.rs
@@ -5,15 +5,12 @@
 // emitted inside the object files.
 // See https://github.com/rust-lang/rust/issues/51671
 
-use run_make_support::{nm, rustc, tmp_dir};
+use run_make_support::{llvm_readobj, rustc};
 
 fn main() {
     rustc().emit("obj").input("app.rs").run();
-    //FIXME(Oneirical): This should eventually be rmake_out_path
-    let nm = nm(tmp_dir().join("app.o"));
-    assert!(
-        nm.contains("rust_begin_unwind")
-            && nm.contains("rust_eh_personality")
-            && nm.contains("__rg_oom")
-    );
+    let out = llvm_readobj().input("app.o").arg("--symbols").run();
+    out.assert_stdout_contains("rust_begin_unwind");
+    out.assert_stdout_contains("rust_eh_personality");
+    out.assert_stdout_contains("__rg_oom");
 }