Difference between revisions of "NaplesPU Tools"

From NaplesPU Documentation
Jump to: navigation, search
(Created page with "A new backend for llvm needs to be added and registered. After registration, llvm tools are able to lookup and use the new target at runtime. In the following, we will show w...")
 
 
(24 intermediate revisions by 2 users not shown)
Line 1: Line 1:
A new backend for llvm needs to be added and registered. After registration, llvm tools are able to lookup and use the new target at runtime.
+
NaplesPU is provided with a set of additional tools in order to fully support the compilation process of an application.  
In the following, we will show which files are involved in the registration phase.
 
  
== CMakeLists.txt ==
+
== elf2hex ==
 +
elf2hex is the tool required for elf code transformation. It works on an input ELF code to produce a hex output file as the memory image to be written on device memory. NaplesPU relies on its own implementation of the elf2hex tool, located in elf2hex.cpp. In our purposes, the tool produces two different outputs:
 +
* MANGO compliant memory image, a 512-bit little-endian aligned image ready to be flashed on the MANGO platform;
 +
* Standalone compliant memory image, a 512-bit little-endian aligned image to be used in a standalone environment.
  
<syntaxhighlight lang="cpp" line='line'>
+
== Disassembler ==
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+
A disassembler attempts to revert back the assembly code from the binary one. In order to be able to support NaplesPU code disassembly, LLVM requires to implement a Disassembler class. The implementation is provided in [[NaplesPUDisassembler.cpp]]. Disassembly methods rely on auto-generated ''decoder tables'' from TableGen files. TableGen also offers a way to force a specific decoder method to be called, specifying the ''DecoderMethod'' field on instructions.
set(CMAKE_INSTALL_PREFIX "/usr/local/llvm-nuplus/" CACHE PATH "NuPlusLLVM install prefix" FORCE)
+
 
endif()
+
<syntaxhighlight>
 +
def V16MEMri : Operand<v16i32> {
 +
  let EncoderMethod = "encodeMemoryOpValue";
 +
  let DecoderMethod = "decodeVectorWMemoryOpValue";
 +
...
 +
}
 +
 
 +
static DecodeStatus decodeVectorWMemoryOpValue(...)  
 +
{
 +
  return decodeMemoryOpValue(Inst, Insn, Address, Decoder,
 +
        NaplesPU::VR512WRegClassID);
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 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.

Latest revision as of 16:22, 21 June 2019

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

elf2hex

elf2hex is the tool required for elf code transformation. It works on an input ELF code to produce a hex output file as the memory image to be written on device memory. NaplesPU relies on its own implementation of the elf2hex tool, located in elf2hex.cpp. In our purposes, the tool produces two different outputs:

  • MANGO compliant memory image, a 512-bit little-endian aligned image ready to be flashed on the MANGO platform;
  • Standalone compliant memory image, a 512-bit little-endian aligned image to be used in a standalone environment.

Disassembler

A disassembler attempts to revert back the assembly code from the binary one. In order to be able to support NaplesPU code disassembly, LLVM requires to implement a Disassembler class. The implementation is provided in NaplesPUDisassembler.cpp. Disassembly methods rely on auto-generated decoder tables from TableGen files. TableGen also offers a way to force a specific decoder method to be called, specifying the DecoderMethod field on instructions.

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

static DecodeStatus decodeVectorWMemoryOpValue(...) 
{
  return decodeMemoryOpValue(Inst, Insn, Address, Decoder,
         NaplesPU::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.