Skip to content

Commit

Permalink
Merge pull request #68 from m4b/pch/decl_attributes
Browse files Browse the repository at this point in the history
Expand declaration attributes
  • Loading branch information
pchickey authored Feb 23, 2019
2 parents a004ee7 + 4bf9650 commit cbdf764
Show file tree
Hide file tree
Showing 8 changed files with 572 additions and 229 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "faerie"
version = "0.7.1"
version = "0.8.0"
authors = ["m4b <m4b.github.io@gmail.com>", "Dan Gohman <sunfish@mozilla.com>", "Pat Hickey <pat@moreproductive.org>", "Philip Craig <philipjcraig@gmail.com>"]
readme = "README.md"
keywords = ["elf", "mach-o", "binary", "object", "compiler"]
Expand All @@ -17,7 +17,7 @@ name = "prototype"
path = "src/bin/main.rs"

[dependencies]
goblin = "0.0.19"
goblin = "0.0.21"
scroll = "0.9"
log = "0.4"
env_logger = "0.5"
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ let mut obj = ArtifactBuilder::new(triple!("x86_64-unknown-unknown-unknown-elf")
// it is a runtime error to define a symbol _without_ declaring it first
obj.declarations(
[
("deadbeef", Decl::Function { global: false }),
("main", Decl::Function { global: true }),
("str.1", Decl::CString { global: false }),
("DEADBEEF", Decl::DataImport),
("printf", Decl::FunctionImport),
("deadbeef", Decl::function().into()),
("main", Decl::function().global().into()),
("str.1", Decl::cstring().into()),
("DEADBEEF", Decl::data_import()),
("printf", Decl::function_import()),
].into_iter().cloned()
)?;

Expand Down Expand Up @@ -89,7 +89,7 @@ e_phoff: <font color="#C4A000">0x0</font> e_shoff: <font color="#C4A000">0x2a2</
<span style="background-color:#D3D7CF"><font color="#2E3436">0 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436"> </font></span> SHT_NULL <font color="#C4A000">0x0 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x0 </b></font> 0x0 0x0
<span style="background-color:#2E3436"><font color="#D3D7CF">1 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.strtab </font></span> SHT_STRTAB <font color="#C4A000">0x8c </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0xc6 </b></font> 0x0 0x1
<span style="background-color:#D3D7CF"><font color="#2E3436">2 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.symtab </font></span> SHT_SYMTAB <font color="#C4A000">0x152 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0xf0 </b></font> .strtab(1) 0x18 0x8
<span style="background-color:#2E3436"><font color="#D3D7CF">3 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.data.str.1 </font></span> SHT_PROGBITS <b>ALLOC MERGE STRINGS </b> <font color="#C4A000">0x40 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x10 </b></font> 0x1 0x1
<span style="background-color:#2E3436"><font color="#D3D7CF">3 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.rodata.str.1 </font></span> SHT_PROGBITS <b>ALLOC MERGE STRINGS </b> <font color="#C4A000">0x40 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x10 </b></font> 0x1 0x1
<span style="background-color:#D3D7CF"><font color="#2E3436">4 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.text.deadbeef </font></span> SHT_PROGBITS <b>ALLOC EXECINSTR </b> <font color="#C4A000">0x50 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x14 </b></font> 0x0 0x10
<span style="background-color:#2E3436"><font color="#D3D7CF">5 </font></span> <span style="background-color:#2E3436"><font color="#D3D7CF">.text.main </font></span> SHT_PROGBITS <b>ALLOC EXECINSTR </b> <font color="#C4A000">0x64 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x28 </b></font> 0x0 0x10
<span style="background-color:#D3D7CF"><font color="#2E3436">6 </font></span> <span style="background-color:#D3D7CF"><font color="#2E3436">.reloc.main </font></span> SHT_RELA <font color="#C4A000">0x242 </font> <font color="#CC0000"><b>0x0 </b></font> <font color="#4E9A06"><b>0x48 </b></font> .symtab(2) 0x18 0x8
Expand All @@ -100,18 +100,18 @@ e_phoff: <font color="#C4A000">0x0</font> e_shoff: <font color="#C4A000">0x2a2</
<b> Addr</b> <b>Bind </b> <b>Type </b> <b>Symbol </b> <b>Size </b> <b>Section </b> <b>Other</b>
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> NOTYPE <font color="#4E9A06">0x0 </font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> FILE <font color="#FCE94F"><b>test.o </b></font> <font color="#4E9A06">0x0 </font> <font color="#D3D7CF"><i>ABS </i></font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .data.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .rodata.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .text.deadbeef(4) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> SECTION <font color="#4E9A06">0x0 </font> .text.main(5) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#FCE94F"><b>OBJECT </b></font> <font color="#FCE94F"><b>str.1 </b></font> <font color="#4E9A06">0x10 </font> .data.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#FCE94F"><b>OBJECT </b></font> <font color="#FCE94F"><b>str.1 </b></font> <font color="#4E9A06">0x10 </font> .rodata.str.1(3) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#34E2E2"><font color="#555753"><b>LOCAL </b></font></span> <font color="#EF2929"><b>FUNC </b></font> <font color="#FCE94F"><b>deadbeef</b></font> <font color="#4E9A06">0x14 </font> .text.deadbeef(4) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> <font color="#EF2929"><b>FUNC </b></font> <font color="#FCE94F"><b>main </b></font> <font color="#4E9A06">0x28 </font> .text.main(5) 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> NOTYPE <font color="#FCE94F"><b>DEADBEEF</b></font> <font color="#4E9A06">0x0 </font> 0x0
<font color="#CC0000"> 0 </font> <span style="background-color:#EF2929"><font color="#555753"><b>GLOBAL </b></font></span> NOTYPE <font color="#FCE94F"><b>printf </b></font> <font color="#4E9A06">0x0 </font> 0x0

<font color="#D3D7CF">Shdr Relocations(4)</font>:
<font color="#D3D7CF"><b> .text.main</b></font>(3)
<font color="#CC0000"> 13</font> X86_64_PC32 <font color="#C4A000"><b>.data.str.1</b></font>
<font color="#CC0000"> 13</font> X86_64_PC32 <font color="#C4A000"><b>.rodata.str.1</b></font>
<font color="#CC0000"> 1d</font> X86_64_PLT32 <font color="#C4A000"><b>printf</b></font>+<font color="#CC0000">-4</font>
<font color="#CC0000"> a</font> X86_64_PLT32 <font color="#C4A000"><b>.text.deadbeef</b></font>+<font color="#CC0000">-4</font>

Expand Down
8 changes: 6 additions & 2 deletions src/artifact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use std::io::Write;
use crate::{elf, mach};

pub(crate) mod decl;
pub use decl::{Decl, DefinedDecl, ImportKind};
pub use crate::artifact::decl::{DataType, Decl, DefinedDecl, ImportKind, Scope, Visibility};

/// A blob of binary bytes, representing a function body, or data object
pub type Data = Vec<u8>;
Expand Down Expand Up @@ -282,7 +282,11 @@ impl Artifact {
}
/// Declare a new symbolic reference, with the given `decl`.
/// **Note**: All declarations _must_ precede their definitions.
pub fn declare<T: AsRef<str>, D: Into<Decl>>(&mut self, name: T, decl: D) -> Result<(), Error> {
pub fn declare<T: AsRef<str>, D: Into<Decl>>(
&mut self,
name: T,
decl: D,
) -> Result<(), ArtifactError> {
let decl = decl.into();
let decl_name = self.strings.get_or_intern(name.as_ref());
let previous_was_import;
Expand Down
Loading

0 comments on commit cbdf764

Please sign in to comment.