Home | History | Annotate | Line # | Download | only in InterfaceStub
      1 //===- ELFObjHandler.h ------------------------------------------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===-----------------------------------------------------------------------===/
      8 /// \file
      9 /// This supports reading and writing of elf dynamic shared objects.
     10 ///
     11 //===-----------------------------------------------------------------------===/
     12 
     13 #ifndef LLVM_INTERFACESTUB_ELFOBJHANDLER_H
     14 #define LLVM_INTERFACESTUB_ELFOBJHANDLER_H
     15 
     16 #include "llvm/InterfaceStub/ELFStub.h"
     17 #include "llvm/Object/ELFObjectFile.h"
     18 #include "llvm/Object/ELFTypes.h"
     19 #include "llvm/Support/FileSystem.h"
     20 
     21 namespace llvm {
     22 
     23 class MemoryBuffer;
     24 
     25 namespace elfabi {
     26 
     27 enum class ELFTarget { ELF32LE, ELF32BE, ELF64LE, ELF64BE };
     28 
     29 /// Attempt to read a binary ELF file from a MemoryBuffer.
     30 Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf);
     31 
     32 /// Attempt to write a binary ELF stub.
     33 /// This function determines appropriate ELFType using the passed ELFTarget and
     34 /// then writes a binary ELF stub to a specified file path.
     35 ///
     36 /// @param FilePath File path for writing the ELF binary.
     37 /// @param Stub Source ELFStub to generate a binary ELF stub from.
     38 /// @param OutputFormat Target ELFType to write binary as.
     39 /// @param WriteIfChanged Whether or not to preserve timestamp if
     40 ///        the output stays the same.
     41 Error writeBinaryStub(StringRef FilePath, const ELFStub &Stub,
     42                       ELFTarget OutputFormat, bool WriteIfChanged = false);
     43 
     44 } // end namespace elfabi
     45 } // end namespace llvm
     46 
     47 #endif // LLVM_INTERFACESTUB_ELFOBJHANDLER_H
     48