Parent

Included Modules

Voodoo::GasELFGenerator

Class that generates ELF object files by invoking the GNU assembler on the output of a code generator that generates GNU assembly.

Public Class Methods

new(asmgenerator, extra_args = "") click to toggle source
# File voodoo/generators/gas_elf_generator.rb, line 8
def initialize asmgenerator, extra_args = ""
  @asmgenerator = asmgenerator
  @extra_args = extra_args
  @output_file_suffix = '.o'
end

Public Instance Methods

output_file_name(input_name) click to toggle source
# File voodoo/generators/gas_elf_generator.rb, line 16
def output_file_name input_name
  input_name.sub(/\.voo$/, '') + @output_file_suffix
end
output_file_suffix() click to toggle source
# File voodoo/generators/gas_elf_generator.rb, line 20
def output_file_suffix
  @output_file_suffix
end
write(io) click to toggle source

Writes the generated code to the given IO handle

# File voodoo/generators/gas_elf_generator.rb, line 25
def write io
  # Create temporary file to write assembly code to
  if io.respond_to? :path
    base = File.basename(io.path).sub(/([^.]*).*/, "\\1")
  else
    base = self.class.name
  end
  
  Tempfile.open(base + '.s') do |asmfile|
    Tempfile.open(base + '.o') do |elffile|
      elffile.close
      # Write assembly code to asmfile
      @asmgenerator.write asmfile
      asmfile.close
      # Find out the name of the GNU assembler
      gas = Voodoo::Config.gas_command
      # Invoke gas on asmfile
      command = "#{gas} #{@extra_args}" +
        " -o #{shell_encode elffile.path}" +
        " #{shell_encode asmfile.path}"
      if system(command)
        write_file_to_io elffile.path, io
      end
      elffile.unlink
    end
    asmfile.unlink
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.