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/IFSStub.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 ifs { 26 27 /// Attempt to read a binary ELF file from a MemoryBuffer. 28 Expected<std::unique_ptr<IFSStub>> readELFFile(MemoryBufferRef Buf); 29 30 /// Attempt to write a binary ELF stub. 31 /// This function determines appropriate ELFType using the passed ELFTarget and 32 /// then writes a binary ELF stub to a specified file path. 33 /// 34 /// @param FilePath File path for writing the ELF binary. 35 /// @param Stub Source ELFStub to generate a binary ELF stub from. 36 /// @param WriteIfChanged Whether or not to preserve timestamp if 37 /// the output stays the same. 38 Error writeBinaryStub(StringRef FilePath, const IFSStub &Stub, 39 bool WriteIfChanged = false); 40 41 } // end namespace ifs 42 } // end namespace llvm 43 44 #endif // LLVM_INTERFACESTUB_ELFOBJHANDLER_H 45