Browse Source

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 năm trước cách đây
mục cha
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,
             _ => None,
         };
         };
 
 
-
         let index = arg.index.map(|i| i - 1).unwrap_or_else(|| {
         let index = arg.index.map(|i| i - 1).unwrap_or_else(|| {
             if fmtkind == FmtKind::Percent {
             if fmtkind == FmtKind::Percent {
                 0
                 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 alloc::boxed::Box;
 use goblin::error::Result;
 use goblin::error::Result;
 
 

+ 1 - 1
src/ld_so/library.rs

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

+ 6 - 4
src/ld_so/linker.rs

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

+ 1 - 2
src/ld_so/mod.rs

@@ -1,9 +1,8 @@
 use core::{mem, ptr};
 use core::{mem, ptr};
 use goblin::elf::program_header::{self, program_header32, program_header64, ProgramHeader};
 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 self::tcb::{Master, Tcb};
+use crate::{header::sys_auxv::AT_NULL, start::Stack};
 
 
 pub const PAGE_SIZE: usize = 4096;
 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::{
 use crate::{
     c_str::CStr,
     c_str::CStr,
-    header::{unistd, sys_auxv::AT_NULL},
+    header::{sys_auxv::AT_NULL, unistd},
     platform::{new_mspace, types::c_char},
     platform::{new_mspace, types::c_char},
     start::Stack,
     start::Stack,
     sync::mutex::Mutex,
     sync::mutex::Mutex,
-    ALLOCATOR
+    ALLOCATOR,
 };
 };
 
 
 use super::{
 use super::{