fix formatting

master
Ales Katona 4 years ago
parent f9706bd558
commit 74b05cef35
Signed by: almindor
GPG Key ID: 2F773149BF38B48F

@ -5,7 +5,7 @@ use crate::error::Error;
pub trait Output<R> pub trait Output<R>
where where
R: Relocatable R: Relocatable,
{ {
fn process_section(&mut self, section: Section<R::Index>) -> Result<(), Error>; fn process_section(&mut self, section: Section<R::Index>) -> Result<(), Error>;
@ -16,7 +16,7 @@ pub struct DummyOutput;
impl<R> Output<R> for DummyOutput impl<R> Output<R> for DummyOutput
where where
R: Relocatable R: Relocatable,
{ {
fn process_section(&mut self, section: Section<R::Index>) -> Result<(), Error> { fn process_section(&mut self, section: Section<R::Index>) -> Result<(), Error> {
eprintln!("Appending section: {}", section); eprintln!("Appending section: {}", section);

@ -1,4 +1,8 @@
use std::{convert::TryFrom, fmt::Display, path::{Path, PathBuf}}; use std::{
convert::TryFrom,
fmt::Display,
path::{Path, PathBuf},
};
use crate::common::{Relocatable, Section, SectionInfo}; use crate::common::{Relocatable, Section, SectionInfo};
use crate::{common::BSI, error::Error}; use crate::{common::BSI, error::Error};
@ -41,46 +45,46 @@ impl Relocatable for ElfObject {
fn sections<'iter>(self: &'iter Self) -> BSI<'iter, (usize, usize)> { fn sections<'iter>(self: &'iter Self) -> BSI<'iter, (usize, usize)> {
use elf_utilities::section::{Contents64, Type}; use elf_utilities::section::{Contents64, Type};
let iter = self let iter =
.elf self.elf
.sections .sections
.iter() .iter()
.enumerate() .enumerate()
.filter_map(|(i, s)| match s.header.get_type() { .filter_map(|(i, s)| match s.header.get_type() {
Type::ProgBits => { Type::ProgBits => {
if s.header.sh_size > 0 { if s.header.sh_size > 0 {
if let Some(di) = match &s.contents { if let Some(di) = match &s.contents {
Contents64::Raw(v) => Some(v), Contents64::Raw(v) => Some(v),
_ => None, _ => None,
} { } {
let si = SectionInfo { let si = SectionInfo {
file_size: s.header.sh_size, file_size: s.header.sh_size,
data_size: s.header.sh_size, data_size: s.header.sh_size,
data_index: Some((0, i)), // TODO data_index: Some((0, i)), // TODO
offset: s.header.sh_offset, offset: s.header.sh_offset,
}; };
let s_name: &str = &s.name; let s_name: &str = &s.name;
match Section::try_from((s_name, si)) { match Section::try_from((s_name, si)) {
Ok(s) => Some(Ok(s)), Ok(s) => Some(Ok(s)),
Err(Error::InvalidSectionName) => None, // skip Err(Error::InvalidSectionName) => None, // skip
Err(err) => Some(Err(err)), Err(err) => Some(Err(err)),
}
} else {
Some(Err(Error::InvalidSectionData))
} }
} else { } else {
Some(Err(Error::InvalidSectionData)) None
} }
} else {
None
} }
} Type::NoBits => Some(Ok(Section::Bss(SectionInfo {
Type::NoBits => Some(Ok(Section::Bss(SectionInfo { file_size: 0,
file_size: 0, data_size: s.header.sh_size,
data_size: s.header.sh_size, data_index: None,
data_index: None, offset: s.header.sh_offset,
offset: s.header.sh_offset, }))),
}))), _ => None,
_ => None, });
});
Box::new(iter) Box::new(iter)
} }
@ -91,7 +95,7 @@ impl Relocatable for ElfObject {
match &section.contents { match &section.contents {
Contents64::Raw(v) => Ok(&v), Contents64::Raw(v) => Ok(&v),
_ => Err(Error::InvalidSectionData) _ => Err(Error::InvalidSectionData),
} }
} }
} }

@ -1,5 +1,5 @@
use crate::common::{Relocatable, Section};
use crate::common::SectionInfo; use crate::common::SectionInfo;
use crate::common::{Relocatable, Section};
use crate::error::Error; use crate::error::Error;
use super::ElfObject; use super::ElfObject;
@ -44,7 +44,10 @@ impl<'data> OutputData {
.map(|(i, s)| (SEGMENT_NAMES[i], s)) .map(|(i, s)| (SEGMENT_NAMES[i], s))
} }
pub fn program_bytes<'l>(&'l self, objects: &'l Vec<ElfObject>) -> impl Iterator<Item = Result<&'l [u8], Error>> { pub fn program_bytes<'l>(
&'l self,
objects: &'l Vec<ElfObject>,
) -> impl Iterator<Item = Result<&'l [u8], Error>> {
let text_iter = self.0[SI_TEXT].iter(); let text_iter = self.0[SI_TEXT].iter();
let rodata_iter = self.0[SI_RODATA].iter(); let rodata_iter = self.0[SI_RODATA].iter();
@ -62,11 +65,16 @@ impl<'data> OutputData {
iter iter
} }
pub fn data_bytes<'l>(&'l self, objects: &'l Vec<ElfObject>) -> impl Iterator<Item = Result<&'l [u8], Error>> { pub fn data_bytes<'l>(
let iter = self.0[SI_DATA].iter().filter_map(move |si| match si.data_index { &'l self,
None => None, objects: &'l Vec<ElfObject>,
Some(di) => Some(objects[di.0].section_data(di)), ) -> impl Iterator<Item = Result<&'l [u8], Error>> {
}); let iter = self.0[SI_DATA]
.iter()
.filter_map(move |si| match si.data_index {
None => None,
Some(di) => Some(objects[di.0].section_data(di)),
});
iter iter
} }

@ -1,4 +1,8 @@
use std::{fmt::Display, io::ErrorKind, path::{Path, PathBuf}}; use std::{
fmt::Display,
io::ErrorKind,
path::{Path, PathBuf},
};
use crate::{ use crate::{
common::{Output, Relocatable}, common::{Output, Relocatable},

Loading…
Cancel
Save