Sfoglia il codice sorgente

make all ld printlns happen in case of verbose = true and apply cargo fmt

It seams that stdout of ld.so is not that much of an issue but actually
it unfortunately is. The major problem here is that sometimes programs
generate header files in stdout (./getmy_custom_headers > header.h) and
we need to keep that cleen. and this is very very popular in gcc.
oddcoder 4 anni fa
parent
commit
ab92ff9d41

+ 0 - 1
src/header/stdio/printf.rs

@@ -690,7 +690,6 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, mut ap: VaList) ->
             _ => None,
         };
 
-
         let index = arg.index.map(|i| i - 1).unwrap_or_else(|| {
             if fmtkind == FmtKind::Percent {
                 0

+ 1 - 1
src/ld_so/callbacks.rs

@@ -1,4 +1,4 @@
-use super::linker::{DSO, Linker, Symbol};
+use super::linker::{Linker, Symbol, DSO};
 use alloc::boxed::Box;
 use goblin::error::Result;
 

+ 1 - 1
src/ld_so/library.rs

@@ -1,10 +1,10 @@
+use super::linker::Symbol;
 use alloc::{
     boxed::Box,
     collections::{BTreeMap, BTreeSet},
     string::String,
     vec::Vec,
 };
-use super::linker::Symbol;
 
 #[derive(Default, Debug)]
 pub struct DepTree {

+ 6 - 4
src/ld_so/linker.rs

@@ -466,7 +466,9 @@ impl Linker {
                     let mut start = addr;
                     for (vaddr, vsize) in ranges.iter() {
                         if start < addr + vaddr {
-                            println!("mmap({:#x}, {})", start, addr + vaddr - start);
+                            if self.verbose {
+                                println!("mmap({:#x}, {})", start, addr + vaddr - start);
+                            }
                             let mut flags = sys_mman::MAP_ANONYMOUS | sys_mman::MAP_PRIVATE;
                             if start != 0 {
                                 flags |= sys_mman::MAP_FIXED_NOREPLACE;
@@ -510,7 +512,9 @@ impl Linker {
                 } else {
                     let (start, end) = bounds;
                     let size = end - start;
-                    println!("mmap({:#x}, {})", start, size);
+                    if self.verbose {
+                        println!("mmap({:#x}, {})", start, size);
+                    }
                     let mut flags = sys_mman::MAP_ANONYMOUS | sys_mman::MAP_PRIVATE;
                     if start != 0 {
                         flags |= sys_mman::MAP_FIXED_NOREPLACE;
@@ -716,7 +720,6 @@ impl Linker {
                 //     reloc::r_to_str(rel.r_type, elf.header.e_machine),
                 //     rel
                 // );
-
                 let symbol = if rel.r_sym > 0 {
                     let sym = elf.dynsyms.get(rel.r_sym).ok_or(Error::Malformed(format!(
                         "missing symbol for relocation {:?}",
@@ -760,7 +763,6 @@ impl Linker {
                 } else {
                     rel.r_offset as *mut u8
                 };
-
                 let set_u64 = |value| {
                     // println!("    set_u64 {:#x}", value);
                     unsafe {

+ 1 - 2
src/ld_so/mod.rs

@@ -1,9 +1,8 @@
 use core::{mem, ptr};
 use goblin::elf::program_header::{self, program_header32, program_header64, ProgramHeader};
 
-use crate::header::sys_auxv::AT_NULL;
-use crate::start::Stack;
 use self::tcb::{Master, Tcb};
+use crate::{header::sys_auxv::AT_NULL, start::Stack};
 
 pub const PAGE_SIZE: usize = 4096;
 

+ 2 - 2
src/ld_so/start.rs

@@ -4,11 +4,11 @@ use alloc::{borrow::ToOwned, boxed::Box, collections::BTreeMap, string::String,
 
 use crate::{
     c_str::CStr,
-    header::{unistd, sys_auxv::AT_NULL},
+    header::{sys_auxv::AT_NULL, unistd},
     platform::{new_mspace, types::c_char},
     start::Stack,
     sync::mutex::Mutex,
-    ALLOCATOR
+    ALLOCATOR,
 };
 
 use super::{