Skip to content

Commit 9618dac

Browse files
authored
Merge pull request #169 from K900/rust-1.88
Fix build with Rust 1.88
2 parents 78bcf7a + fbbd850 commit 9618dac

File tree

9 files changed

+82
-90
lines changed

9 files changed

+82
-90
lines changed

build.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@ fn main() {
3333
let target = env::var("TARGET").unwrap();
3434

3535
// For Cargo integration tests
36-
println!("cargo:rustc-env=NIX_LD_TEST_TARGET={}", target);
36+
println!("cargo:rustc-env=NIX_LD_TEST_TARGET={target}");
3737

3838
// For cross-compiling in the devShell *only*
3939
let target_suffix = target.replace('-', "_");
40-
if let Ok(target_default_nix_ld) = env::var(format!("DEFAULT_NIX_LD_{}", target_suffix)) {
41-
println!("cargo:rustc-env=DEFAULT_NIX_LD={}", target_default_nix_ld);
40+
if let Ok(target_default_nix_ld) = env::var(format!("DEFAULT_NIX_LD_{target_suffix}")) {
41+
println!("cargo:rustc-env=DEFAULT_NIX_LD={target_default_nix_ld}");
4242
}
4343

4444
if let Ok(nix_system) = env::var("NIX_SYSTEM") {
4545
let underscored = nix_system.replace('-', "_");
46-
println!("cargo:rustc-env=NIX_SYSTEM={}", underscored);
46+
println!("cargo:rustc-env=NIX_SYSTEM={underscored}");
4747
}
4848

4949
//let out_dir = std::env::var("OUT_DIR").unwrap();

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
pkgs.cargo-watch
6969
pkgs.cargo-bloat
7070
pkgs.cargo-nextest
71+
pkgs.clippy
7172
pkgs.just
7273

7374
];

src/arch.rs

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -145,67 +145,61 @@ pub const ENTRY_TRAMPOLINE: Option<unsafe extern "C" fn() -> !> = Some(entry_tra
145145
pub const ENTRY_TRAMPOLINE: Option<unsafe extern "C" fn() -> !> = Some(entry_trampoline);
146146

147147
#[cfg(target_arch = "x86_64")]
148-
#[naked]
148+
#[unsafe(naked)]
149149
unsafe extern "C" fn entry_trampoline() -> ! {
150-
unsafe {
151-
core::arch::naked_asm!(
152-
"lea r10, [rip + {context}]",
153-
"mov r11, [r10 + {size} * 1]", // .env_entry
154-
"test r11, r11",
155-
"jz 2f",
156-
"mov r10, [r10 + {size} * 2]", // .env_string
157-
"mov [r11], r10",
158-
"2:",
159-
"jmp [rip + {context}]",
160-
context = sym TRAMPOLINE_CONTEXT,
161-
size = const core::mem::size_of::<*const u8>(),
162-
)
163-
}
150+
core::arch::naked_asm!(
151+
"lea r10, [rip + {context}]",
152+
"mov r11, [r10 + {size} * 1]", // .env_entry
153+
"test r11, r11",
154+
"jz 2f",
155+
"mov r10, [r10 + {size} * 2]", // .env_string
156+
"mov [r11], r10",
157+
"2:",
158+
"jmp [rip + {context}]",
159+
context = sym TRAMPOLINE_CONTEXT,
160+
size = const core::mem::size_of::<*const u8>(),
161+
)
164162
}
165163

166164
#[cfg(target_arch = "aarch64")]
167165
pub const ENTRY_TRAMPOLINE: Option<unsafe extern "C" fn() -> !> = Some(entry_trampoline);
168166

169167
#[cfg(target_arch = "aarch64")]
170-
#[naked]
168+
#[unsafe(naked)]
171169
unsafe extern "C" fn entry_trampoline() -> ! {
172-
unsafe {
173-
core::arch::naked_asm!(
174-
"adrp x8, {context}",
175-
"ldr x9, [x8, {env_entry_off}]", // .env_entry
176-
"cbz x9, 2f",
177-
"ldr x10, [x8, {env_string_off}]", // .env_string
178-
"str x10, [x9]",
179-
"2:",
180-
"ldr x8, [x8]",
181-
"br x8",
182-
context = sym TRAMPOLINE_CONTEXT,
183-
env_entry_off = const TrampolineContext::ENV_ENTRY_OFFSET,
184-
env_string_off = const TrampolineContext::ENV_STRING_OFFSET,
185-
)
186-
}
170+
core::arch::naked_asm!(
171+
"adrp x8, {context}",
172+
"ldr x9, [x8, {env_entry_off}]", // .env_entry
173+
"cbz x9, 2f",
174+
"ldr x10, [x8, {env_string_off}]", // .env_string
175+
"str x10, [x9]",
176+
"2:",
177+
"ldr x8, [x8]",
178+
"br x8",
179+
context = sym TRAMPOLINE_CONTEXT,
180+
env_entry_off = const TrampolineContext::ENV_ENTRY_OFFSET,
181+
env_string_off = const TrampolineContext::ENV_STRING_OFFSET,
182+
)
187183
}
188184

189185
#[cfg(target_arch = "riscv64")]
190-
#[naked]
186+
#[unsafe(naked)]
191187
unsafe extern "C" fn entry_trampoline() -> ! {
192-
unsafe {
193-
core::arch::naked_asm!(
194-
"1:",
195-
"auipc t0, %pcrel_hi({context})",
196-
"addi t0, t0, %pcrel_lo(1b)",
197-
"ld t1, {env_entry_off}(t0)", // .env_entry
198-
"beqz t1, 2f",
199-
"ld t2, {env_string_off}(t0)", // .env_string
200-
"sd t2, 0(t1)",
201-
"2:",
202-
"ld t0, 0(t0)",
203-
"jr t0",
204-
context = sym TRAMPOLINE_CONTEXT,
205-
env_entry_off = const TrampolineContext::ENV_ENTRY_OFFSET,
206-
env_string_off = const TrampolineContext::ENV_STRING_OFFSET,
207-
)
208-
}
188+
core::arch::naked_asm!(
189+
"1:",
190+
"auipc t0, %pcrel_hi({context})",
191+
"addi t0, t0, %pcrel_lo(1b)",
192+
"ld t1, {env_entry_off}(t0)", // .env_entry
193+
"beqz t1, 2f",
194+
"ld t2, {env_string_off}(t0)", // .env_string
195+
"sd t2, 0(t1)",
196+
"2:",
197+
"ld t0, 0(t0)",
198+
"jr t0",
199+
context = sym TRAMPOLINE_CONTEXT,
200+
env_entry_off = const TrampolineContext::ENV_ENTRY_OFFSET,
201+
env_string_off = const TrampolineContext::ENV_STRING_OFFSET,
202+
)
209203
}
210204

211205
// !!!!

src/elf.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ impl ElfHandle {
7676

7777
let header = Header::from_bytes(&buf);
7878
if &header.e_ident[..4] != b"\x7fELF".as_slice() {
79-
log::error!("{:?} is not an ELF", path);
79+
log::error!("{path:?} is not an ELF");
8080
return Err(IoError::Unknown);
8181
}
8282

@@ -91,13 +91,13 @@ impl ElfHandle {
9191
}
9292

9393
if header.e_type != ET_DYN {
94-
log::error!("{:?} is not a dynamic library", path);
94+
log::error!("{path:?} is not a dynamic library");
9595
return Err(IoError::Unknown);
9696
}
9797

9898
let phsize = header.e_phentsize as usize * header.e_phnum as usize;
9999
if phsize == 0 || phsize > 65536 {
100-
log::error!("{:?} has incorrect program header size {}", path, phsize);
100+
log::error!("{path:?} has incorrect program header size {phsize}");
101101
return Err(IoError::Unknown);
102102
}
103103

@@ -168,15 +168,14 @@ impl ElfHandle {
168168
let entry_point = (load_bias + self.entry_point_v) as *const c_void;
169169

170170
log::debug!(" Total Size: 0x{:x}", summary.total_mapping_size);
171-
log::debug!(" Load Addr: {:x?}", load_addr);
171+
log::debug!(" Load Addr: {load_addr:x?}");
172172
log::debug!(" First Vaddr: 0x{:x?}", summary.first_vaddr);
173-
log::debug!(" Load Bias: 0x{:x?}", load_bias);
174-
log::debug!(" Entry Point: 0x{:x?}", entry_point);
173+
log::debug!(" Load Bias: 0x{load_bias:x?}");
174+
log::debug!(" Entry Point: 0x{entry_point:x?}");
175175
log::debug!(" Page Size: {}", self.page_size);
176176

177177
log::debug!(
178-
"GDB: add-symbol-file /path/to/ld.so.symbols 0x{:x}",
179-
load_bias
178+
"GDB: add-symbol-file /path/to/ld.so.symbols 0x{load_bias:x}"
180179
);
181180

182181
for ph in self.phs.iter() {
@@ -263,7 +262,7 @@ impl ElfHandle {
263262
};
264263

265264
if mapping == MAP_FAILED {
266-
log::error!("Failed to map anonymous portion for segment 0x{:x}", vaddr);
265+
log::error!("Failed to map anonymous portion for segment 0x{vaddr:x}");
267266
return Err(());
268267
}
269268
}
@@ -393,7 +392,7 @@ impl fmt::Display for DisplayPFlags<'_> {
393392
let p_flags = &self.0.p_flags;
394393
let mut write_prot = |mask, s| {
395394
if p_flags & mask != 0 {
396-
write!(f, "{}", s)
395+
write!(f, "{s}")
397396
} else {
398397
write!(f, " ")
399398
}

src/main.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![feature(naked_functions)]
21
#![feature(lang_items)]
32
#![no_std]
43
#![no_main]
@@ -77,7 +76,7 @@ extern "C" fn real_main() -> ! {
7776
if let Ok(level) = log_level.parse::<log::LevelFilter>() {
7877
log::set_max_level(level);
7978
} else {
80-
log::warn!("Unknown log level {}", log_level);
79+
log::warn!("Unknown log level {log_level}");
8180
}
8281
}
8382
}
@@ -117,7 +116,7 @@ extern "C" fn real_main() -> ! {
117116
}
118117
Some(nix_ld) => {
119118
let cstr = nix_ld.value_cstr();
120-
log::info!("NIX_LD is set to {:?}", cstr);
119+
log::info!("NIX_LD is set to {cstr:?}");
121120
cstr
122121
}
123122
};
@@ -184,7 +183,7 @@ extern "C" fn real_main() -> ! {
184183
.expect("AT_PAGESZ must exist")
185184
.value();
186185

187-
log::info!("Loading {:?}", nix_ld);
186+
log::info!("Loading {nix_ld:?}");
188187
let loader = elf::ElfHandle::open(nix_ld, pagesz).unwrap();
189188
let loader_map = loader.map().unwrap();
190189

@@ -201,14 +200,14 @@ extern "C" fn real_main() -> ! {
201200
// We were executed directly - execve the actual loader
202201
if args.argc() <= 1 {
203202
log::warn!("Environment honored by nix-ld:");
204-
log::warn!("- NIX_LD, {}", NIX_LD_SYSTEM_ENV);
205-
log::warn!("- NIX_LD_LIBRARY_PATH, {}", NIX_LD_LIBRARY_PATH_SYSTEM_ENV);
203+
log::warn!("- NIX_LD, {NIX_LD_SYSTEM_ENV}");
204+
log::warn!("- NIX_LD_LIBRARY_PATH, {NIX_LD_LIBRARY_PATH_SYSTEM_ENV}");
206205
log::warn!("- NIX_LD_LOG (error, warn, info, debug, trace)");
207-
log::warn!("Default ld.so: {:?}", DEFAULT_NIX_LD);
206+
log::warn!("Default ld.so: {DEFAULT_NIX_LD:?}");
208207
}
209208

210209
args.handoff(|start| unsafe {
211-
log::debug!("Start context: {:#?}", start);
210+
log::debug!("Start context: {start:#?}");
212211
sys::execve(nix_ld.as_ptr(), start.argv, start.envp);
213212
sys::abort();
214213
});
@@ -237,7 +236,7 @@ extern "C" fn real_main() -> ! {
237236
}
238237

239238
args.handoff(|start| unsafe {
240-
log::debug!("Start context: {:#?}", start);
239+
log::debug!("Start context: {start:#?}");
241240

242241
if arch::ENTRY_TRAMPOLINE.is_some() {
243242
if let Some(extra_env) = start.extra_env {

src/support.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ pub fn explode(s: &str) -> ! {
5555
#[panic_handler]
5656
fn panic_handler(info: &core::panic::PanicInfo) -> ! {
5757
let mut stderr = sys::stderr();
58-
writeln!(stderr, "[nix-ld] FATAL: {}", info).unwrap();
58+
writeln!(stderr, "[nix-ld] FATAL: {info}").unwrap();
5959

6060
unsafe {
6161
sys::abort();

src/sys.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,5 +181,4 @@ pub fn new_slice_leak(size: usize) -> Option<&'static mut [u8]> {
181181

182182
#[cfg(not(test))]
183183
#[lang = "eh_personality"]
184-
#[unsafe(no_mangle)]
185184
pub extern "C" fn rust_eh_personality() {}

tests/tests.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use tempfile::TempDir;
99
#[fixture]
1010
#[once]
1111
fn libtest() -> &'static str {
12-
eprintln!("Testing {} on {}", EXE, TARGET);
12+
eprintln!("Testing {EXE} on {TARGET}");
1313

1414
eprintln!("Building libtest");
1515
compile_test_lib("test");
@@ -60,7 +60,7 @@ fn test_dt_needed(libtest: &str, dt_needed_bin: &Path) {
6060
#[rstest]
6161
fn test_dlopen(libtest: &str) {
6262
let bin = compile_test_bin("dlopen", &[]);
63-
eprintln!("test_dlopen: {}", libtest);
63+
eprintln!("test_dlopen: {libtest}");
6464

6565
// First make sure it doesn't run without the library
6666
{
@@ -94,7 +94,7 @@ fn test_dlopen(libtest: &str) {
9494
fn test_ld_path_restore(libtest: &str, _dt_needed_bin: &Path) {
9595
let bin = compile_test_bin("ld-path-restore", &["test"]);
9696

97-
let nix_ld_path = format!("{}:POISON", libtest);
97+
let nix_ld_path = format!("{libtest}:POISON");
9898

9999
// First try without LD_LIBRARY_PATH
100100
{
@@ -132,7 +132,7 @@ fn get_tmpdir() -> &'static TempDir {
132132

133133
fn find_cc() -> String {
134134
let target_suffix = TARGET.replace('-', "_");
135-
env::var(format!("CC_{}", target_suffix))
135+
env::var(format!("CC_{target_suffix}"))
136136
.or_else(|_| env::var("CC"))
137137
.unwrap_or_else(|_| "cc".to_string())
138138
}
@@ -146,8 +146,8 @@ fn get_source_file(file: &str) -> PathBuf {
146146

147147
fn compile_test_lib(name: &str) {
148148
let cc = find_cc();
149-
let source_path = get_source_file(&format!("tests/lib{}.c", name));
150-
let out_path = get_tmpdir().path().join(format!("lib{}.so", name));
149+
let source_path = get_source_file(&format!("tests/lib{name}.c"));
150+
let out_path = get_tmpdir().path().join(format!("lib{name}.so"));
151151

152152
let status = Command::new(cc)
153153
.arg("-fPIC")
@@ -158,16 +158,16 @@ fn compile_test_lib(name: &str) {
158158
.status()
159159
.expect("Failed to spawn compiler");
160160

161-
assert!(status.success(), "Failed to build test library {}", name);
161+
assert!(status.success(), "Failed to build test library {name}");
162162
}
163163

164164
fn compile_test_bin(name: &str, libs: &[&str]) -> PathBuf {
165165
let cc = find_cc();
166-
let source_path = get_source_file(&format!("tests/{}.c", name));
166+
let source_path = get_source_file(&format!("tests/{name}.c"));
167167
let out_path = get_tmpdir().path().join(name);
168168

169169
let out_dir_arg = format!("-DOUT_DIR=\"{}\"", get_tmpdir().path().to_str().unwrap());
170-
let dynamic_linker_arg = format!("-Wl,--dynamic-linker,{}", EXE);
170+
let dynamic_linker_arg = format!("-Wl,--dynamic-linker,{EXE}");
171171

172172
let status = Command::new(cc)
173173
.arg("-o")
@@ -176,12 +176,12 @@ fn compile_test_bin(name: &str, libs: &[&str]) -> PathBuf {
176176
.arg(dynamic_linker_arg)
177177
.arg("-L")
178178
.arg(get_tmpdir().path())
179-
.args(libs.iter().map(|l| format!("-l{}", l)))
179+
.args(libs.iter().map(|l| format!("-l{l}")))
180180
.arg(source_path)
181181
.status()
182182
.expect("Failed to spawn compiler");
183183

184-
assert!(status.success(), "Failed to build test binary {}", name);
184+
assert!(status.success(), "Failed to build test binary {name}");
185185

186186
out_path
187187
}
@@ -200,8 +200,8 @@ impl CommandExt for Command {
200200
let stdout = String::from_utf8(output.stdout).expect("stdout contains non-UTF-8");
201201
let stderr = String::from_utf8(output.stderr).expect("stderr contains non-UTF-8");
202202

203-
print!("{}", stdout);
204-
eprint!("{}", stderr);
203+
print!("{stdout}");
204+
eprint!("{stderr}");
205205

206206
if want_success {
207207
assert!(

0 commit comments

Comments
 (0)