fix names and requires to get some elf out again (still crashes though)
This commit is contained in:
parent
a89bc3d628
commit
091a93f368
@ -3,7 +3,7 @@ Assembler in Ruby
|
|||||||
|
|
||||||
Supporting arm, but aimed quite specifically at raspberry pi, arm v7, floating point included
|
Supporting arm, but aimed quite specifically at raspberry pi, arm v7, floating point included
|
||||||
|
|
||||||
Outputs ELF object files, with relocation support.
|
Outputs Elf object files, with relocation support.
|
||||||
|
|
||||||
Constant table support exists but isn't very good. Some addressing modes
|
Constant table support exists but isn't very good. Some addressing modes
|
||||||
are not supported or only partially supported.
|
are not supported or only partially supported.
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
require_relative "relocation"
|
||||||
|
|
||||||
module Asm
|
module Asm
|
||||||
ERRSTR_NUMERIC_TOO_LARGE = 'cannot fit numeric literal argument in operand'
|
ERRSTR_NUMERIC_TOO_LARGE = 'cannot fit numeric literal argument in operand'
|
||||||
ERRSTR_INVALID_ARG = 'invalid operand argument'
|
ERRSTR_INVALID_ARG = 'invalid operand argument'
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
require_relative 'elfobject'
|
require 'elf/object_file'
|
||||||
|
require 'elf/symbol_table_section'
|
||||||
|
require 'elf/text_section'
|
||||||
|
require 'elf/string_table_section'
|
||||||
|
require 'elf/relocation_table_section'
|
||||||
|
|
||||||
module Asm
|
module Asm
|
||||||
|
|
||||||
class ObjectWriter
|
class ObjectWriter
|
||||||
def initialize(target)
|
def initialize(target)
|
||||||
@object = ELF::ObjectFile.new(target)
|
@object = Elf::ObjectFile.new(target)
|
||||||
|
|
||||||
sym_strtab = ELF::StringTableSection.new(".strtab")
|
sym_strtab = Elf::StringTableSection.new(".strtab")
|
||||||
@object.add_section sym_strtab
|
@object.add_section sym_strtab
|
||||||
@symbol_table = ELF::SymbolTableSection.new(".symtab", sym_strtab)
|
@symbol_table = Elf::SymbolTableSection.new(".symtab", sym_strtab)
|
||||||
@object.add_section @symbol_table
|
@object.add_section @symbol_table
|
||||||
|
|
||||||
@text = ELF::TextSection.new(".text")
|
@text = Elf::TextSection.new(".text")
|
||||||
@object.add_section @text
|
@object.add_section @text
|
||||||
|
|
||||||
@reloc_table = ELF::RelocationTableSection.new(".text.rel", @symbol_table, @text)
|
@reloc_table = Elf::RelocationTableSection.new(".text.rel", @symbol_table, @text)
|
||||||
@object.add_section @reloc_table
|
@object.add_section @reloc_table
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
class Numeric
|
|
||||||
def fits_u8?
|
|
||||||
self >= 0 and self <= 255
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,4 +1,4 @@
|
|||||||
module ELF
|
module Elf
|
||||||
module Constants
|
module Constants
|
||||||
ET_NONE = 0
|
ET_NONE = 0
|
||||||
ET_REL = 1
|
ET_REL = 1
|
||||||
@ -23,9 +23,9 @@ module ELF
|
|||||||
ELFCLASS32 = 1
|
ELFCLASS32 = 1
|
||||||
ELFCLASS64 = 2
|
ELFCLASS64 = 2
|
||||||
|
|
||||||
ELFDATANONE = 0
|
Elf::DATANONE = 0
|
||||||
ELFDATA2LSB = 1
|
Elf::DATA2LSB = 1
|
||||||
ELFDATA2MSB = 2
|
Elf::DATA2MSB = 2
|
||||||
|
|
||||||
SHT_NULL = 0
|
SHT_NULL = 0
|
||||||
SHT_PROGBITS = 1
|
SHT_PROGBITS = 1
|
||||||
@ -53,7 +53,7 @@ module ELF
|
|||||||
|
|
||||||
ARM_INFLOOP = "\x08\xf0\x4f\xe2"
|
ARM_INFLOOP = "\x08\xf0\x4f\xe2"
|
||||||
|
|
||||||
TARGET_ARM = [ELFCLASS32, ELFDATA2LSB, ABI_ARM, EM_ARM]
|
TARGET_ARM = [ELFCLASS32, Elf::DATA2LSB, ABI_ARM, EM_ARM]
|
||||||
TARGET_X86 = [ELFCLASS32, ELFDATA2LSB, ABI_SYSTEMV, EM_386]
|
TARGET_X86 = [ELFCLASS32, Elf::DATA2LSB, ABI_SYSTEMV, EM_386]
|
||||||
end
|
end
|
||||||
end
|
end
|
@ -1,3 +1,5 @@
|
|||||||
|
require_relative "section"
|
||||||
|
|
||||||
module Elf
|
module Elf
|
||||||
class NullSection < Section
|
class NullSection < Section
|
||||||
def initialize
|
def initialize
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
|
require_relative "constants"
|
||||||
|
require_relative "null_section"
|
||||||
|
|
||||||
module Elf
|
module Elf
|
||||||
class ObjectFile
|
class ObjectFile
|
||||||
include ELF
|
include Constants
|
||||||
|
|
||||||
def initialize(target)
|
def initialize(target)
|
||||||
@target = target
|
@target = target
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
class Numeric
|
||||||
|
def fits_u8?
|
||||||
|
self >= 0 and self <= 255
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module StreamReader
|
module StreamReader
|
||||||
def read_binary(size, count, type)
|
def read_binary(size, count, type)
|
||||||
d = __sr_read(size*count)
|
d = __sr_read(size*count)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
require "asm/arm/code_generator"
|
||||||
|
|
||||||
if (__FILE__ == $0)
|
if (__FILE__ == $0)
|
||||||
gen = Asm::ArmCodeGenerator.new
|
gen = Asm::Arm::CodeGenerator.new
|
||||||
|
|
||||||
gen.instance_eval {
|
gen.instance_eval {
|
||||||
mov r0, 5
|
mov r0, 5
|
||||||
@ -11,8 +12,7 @@ if (__FILE__ == $0)
|
|||||||
bx lr
|
bx lr
|
||||||
}
|
}
|
||||||
|
|
||||||
require 'objectwriter'
|
require 'asm/object_writer'
|
||||||
require 'tempfile'
|
|
||||||
writer = Asm::ObjectWriter.new(Elf::Constants::TARGET_ARM)
|
writer = Asm::ObjectWriter.new(Elf::Constants::TARGET_ARM)
|
||||||
writer.set_text gen.assemble
|
writer.set_text gen.assemble
|
||||||
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
if (__FILE__ == $0)
|
if (__FILE__ == $0)
|
||||||
obj = ELF::ObjectFile.new ELF::TARGET_ARM
|
obj = Elf::ObjectFile.new Elf::TARGET_ARM
|
||||||
|
|
||||||
sym_strtab = ELF::StringTableSection.new(".strtab")
|
sym_strtab = Elf::StringTableSection.new(".strtab")
|
||||||
obj.add_section sym_strtab
|
obj.add_section sym_strtab
|
||||||
symtab = ELF::SymbolTableSection.new(".symtab", sym_strtab)
|
symtab = Elf::SymbolTableSection.new(".symtab", sym_strtab)
|
||||||
obj.add_section symtab
|
obj.add_section symtab
|
||||||
|
|
||||||
text_section = ELF::TextSection.new(".text")
|
text_section = Elf::TextSection.new(".text")
|
||||||
obj.add_section text_section
|
obj.add_section text_section
|
||||||
|
|
||||||
symtab.add_func_symbol "_start", 0, text_section, ELF::STB_GLOBAL
|
symtab.add_func_symbol "_start", 0, text_section, Elf::STB_GLOBAL
|
||||||
|
|
||||||
fp = File.open("test.o", "wb")
|
fp = File.open("test.o", "wb")
|
||||||
obj.write fp
|
obj.write fp
|
||||||
|
Loading…
Reference in New Issue
Block a user