Skip to content

Commit 3b1b7e9

Browse files
committed
refactor(xtask): extract retained symbols
1 parent 2035428 commit 3b1b7e9

2 files changed

Lines changed: 34 additions & 22 deletions

File tree

xtask/src/archive.rs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,37 @@ impl AsRef<Path> for Archive {
2222
}
2323

2424
impl Archive {
25-
pub fn syscall_symbols(&self) -> Result<Vec<String>> {
25+
pub fn retain_kernel_symbols(&self) -> Result<()> {
26+
eprintln!("Retaining kernel symbols");
27+
28+
let explicit_symbols = self.explicit_symbols().iter().copied();
29+
let syscall_symbols = self.syscall_symbols()?;
30+
let syscall_symbols = syscall_symbols.iter().map(String::as_str);
31+
32+
let symbols = explicit_symbols.chain(syscall_symbols).collect();
33+
self.retain_symbols(symbols)?;
34+
35+
Ok(())
36+
}
37+
38+
pub fn retain_builtin_symbols(&self) -> Result<()> {
39+
eprintln!("Retaining hermit-builtins symbols");
40+
let sh = crate::sh()?;
41+
42+
let builtin_symbols = sh.read_file("hermit-builtins/exports")?;
43+
let builtin_symbols = builtin_symbols.lines();
44+
45+
let symbols = builtin_symbols.collect();
46+
self.retain_symbols(symbols)?;
47+
48+
Ok(())
49+
}
50+
51+
fn explicit_symbols(&self) -> &[&str] {
52+
&["_start", "__bss_start", "mcount", "runtime_entry"]
53+
}
54+
55+
fn syscall_symbols(&self) -> Result<Vec<String>> {
2656
let sh = crate::sh()?;
2757
let archive = self.as_ref();
2858

@@ -40,7 +70,7 @@ impl Archive {
4070
Ok(symbols)
4171
}
4272

43-
pub fn retain_symbols(&self, mut exported_symbols: HashSet<&str>) -> Result<()> {
73+
fn retain_symbols(&self, mut exported_symbols: HashSet<&str>) -> Result<()> {
4474
let sh = crate::sh()?;
4575
let archive = self.as_ref();
4676
let prefix = {

xtask/src/build.rs

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::collections::HashSet;
21
use std::env::{self, VarError};
32

43
use anyhow::Result;
@@ -68,8 +67,7 @@ impl Build {
6867
sh.create_dir(dist_archive.as_ref().parent().unwrap())?;
6968
sh.copy_file(&build_archive, &dist_archive)?;
7069

71-
eprintln!("Exporting symbols");
72-
self.export_syms()?;
70+
self.cargo_build.artifact.dist_archive().retain_kernel_symbols()?;
7371

7472
eprintln!("Building hermit-builtins");
7573
let mut cargo = crate::cargo();
@@ -85,11 +83,8 @@ impl Build {
8583
let status = cargo.status()?;
8684
assert!(status.success());
8785

88-
eprintln!("Exporting hermit-builtins symbols");
8986
let builtins = self.cargo_build.artifact.builtins_archive();
90-
let builtin_symbols = sh.read_file("hermit-builtins/exports")?;
91-
builtins.retain_symbols(builtin_symbols.lines().collect::<HashSet<_>>())?;
92-
87+
builtins.retain_builtin_symbols()?;
9388
dist_archive.append(&builtins)?;
9489

9590
eprintln!("Setting OSABI");
@@ -131,17 +126,4 @@ impl Build {
131126

132127
Ok(rustflags.join("\x1f"))
133128
}
134-
135-
fn export_syms(&self) -> Result<()> {
136-
let archive = self.cargo_build.artifact.dist_archive();
137-
138-
let syscall_symbols = archive.syscall_symbols()?;
139-
let explicit_exports = ["_start", "__bss_start", "mcount", "runtime_entry"].into_iter();
140-
141-
let symbols = explicit_exports.chain(syscall_symbols.iter().map(String::as_str));
142-
143-
archive.retain_symbols(symbols.collect::<HashSet<_>>())?;
144-
145-
Ok(())
146-
}
147129
}

0 commit comments

Comments
 (0)