From ab92ff9d41498b86427237edfcbefa8baffae1e0 Mon Sep 17 00:00:00 2001 From: oddcoder <ahmedsoliman@oddcoder.com> Date: Wed, 12 Aug 2020 14:54:07 +0200 Subject: [PATCH] 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. --- src/header/stdio/printf.rs | 1 - src/ld_so/callbacks.rs | 2 +- src/ld_so/library.rs | 2 +- src/ld_so/linker.rs | 10 ++++++---- src/ld_so/mod.rs | 3 +-- src/ld_so/start.rs | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/header/stdio/printf.rs b/src/header/stdio/printf.rs index f6f6f183..d06570fa 100644 --- a/src/header/stdio/printf.rs +++ b/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 diff --git a/src/ld_so/callbacks.rs b/src/ld_so/callbacks.rs index 031ecb47..d53f2156 100644 --- a/src/ld_so/callbacks.rs +++ b/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; diff --git a/src/ld_so/library.rs b/src/ld_so/library.rs index 156234b9..88958e01 100644 --- a/src/ld_so/library.rs +++ b/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 { diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index 5f7644bd..e9cbc145 100644 --- a/src/ld_so/linker.rs +++ b/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 { diff --git a/src/ld_so/mod.rs b/src/ld_so/mod.rs index 1321c33c..19dfe05f 100644 --- a/src/ld_so/mod.rs +++ b/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; diff --git a/src/ld_so/start.rs b/src/ld_so/start.rs index b6eb7a3b..c5261a28 100644 --- a/src/ld_so/start.rs +++ b/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::{ -- GitLab