NaplesPU Tools

From NaplesPU Documentation
Revision as of 12:05, 31 March 2019 by Francesco (talk | contribs) (Object File Dumper)
Jump to: navigation, search

nu+ is provided with a set of additional tools in order to fully support the compilation process of an application.

elf2hex

As the name said, elf2hex is the tool that provides the transformation of the elf file, the output of the compilation passes illustrated in the previous sections, in hex file, in order to be compliant with the required format that has to be written in the memory. The elf2hex source code is implemented in the elf2hex.cpp file. It is developed to print the memory image in various formats, such as the MANGO format, that is 512-bit aligned in a little-endian fashion, MANGO architecture compliant, and the standalone format, that is compliant with the standalone implementation of the device.

Disassembler

A disassembler attempts to revert the assembly code from the binary machine code. LLVM provides its own tool, that is llvm-is. In order to provide to LLVM the support for the target-platform machine code disassembly, it is necessary to register a custom implementation of the NuPlusDisassembler.cpp file. It relies on the decoder table located in the NuPlusGenDisassemblerTables.inc file, that is an autogenerated file, result of the compilation of the target-specific TableGen files. For this reason, most of Disassembler code in the NuPlusDisassembler.cpp file is retrieved from the .td description. It is also possible to specify the DecoderMethod flag on an instruction in the TableGen file. Consequently, it is necessary to provide the implementation of the specified method in the NuPlusDisassembler.cpp file.

def V16MEMri : Operand<v16i32> {
  let EncoderMethod = "encodeMemoryOpValue";
  let DecoderMethod = "decodeVectorWMemoryOpValue";
...
}

static DecodeStatus decodeVectorWMemoryOpValue(...) 
{
  return decodeMemoryOpValue(Inst, Insn, Address, Decoder,
         NuPlus::VR512WRegClassID);
}

Object File Dumper

LLVM provides a custom tool to work as an object file dumper, that is a utility that prints the contents of object files and of the final linked image. For this reason, it is primarily used to debug the generated machine code. In the LLVM implementation, the llvm-objdump binary relies on the Disassembler classes, in order to revert the binary code into the assembly back.