Merge branch 'master' into 'master'

fix(redox-rt): ET_EXEC

See merge request redox-os/relibc!1022
This commit is contained in:
Jeremy Soller
2026-02-20 05:43:33 -07:00
2 changed files with 12 additions and 4 deletions
+12 -3
View File
@@ -135,13 +135,22 @@ pub fn fexec_impl(
});
}
let span = span.expect("ELF executables must contain at least one `PT_LOAD` segment");
let span_size = (span.end - span.start).next_multiple_of(PAGE_SIZE);
let base_addr = if header.e_type == ET_DYN {
// PIE
let span_size = (span.end - span.start).next_multiple_of(PAGE_SIZE);
let addr = mmap_anon_remote(&grants_fd, 0, 0, span_size, MapFlags::PROT_NONE)?;
update_min_mmap_addr(addr, span_size);
addr
} else {
mmap_anon_remote(
&grants_fd,
0,
span.start,
span_size,
MapFlags::MAP_FIXED_NOREPLACE,
)?;
update_min_mmap_addr(span.start, span_size);
0
};
@@ -227,7 +236,7 @@ pub fn fexec_impl(
return Ok(FexecResult::Interp {
path: interpreter_path,
interp_override: InterpOverride {
at_entry: header.e_entry as usize,
at_entry: base_addr + header.e_entry as usize,
at_phnum: phnum,
at_phent: phentsize,
phdrs_vaddr,
@@ -297,7 +306,7 @@ pub fn fexec_impl(
push(r#override.phdrs_vaddr)?;
push(AT_PHDR)?;
} else {
push(header.e_entry as usize)?;
push(base_addr + header.e_entry as usize)?;
push(AT_ENTRY)?;
push(phdrs_vaddr)?;
push(AT_PHDR)?;
-1
View File
@@ -558,7 +558,6 @@ impl DSO {
);
}
log::trace!(" = {:p}", ptr);
ptr::write_bytes(ptr.cast::<u8>(), 0, size);
_r_debug
.lock()
.insert(ptr as usize, path, ptr as usize + l_ld as usize);