llvm/lld/ELF/InputFiles.h

//===- InputFiles.h ---------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLD_ELF_INPUT_FILES_H
#define LLD_ELF_INPUT_FILES_H

#include "Config.h"
#include "Symbols.h"
#include "lld/Common/ErrorHandler.h"
#include "lld/Common/LLVM.h"
#include "lld/Common/Reproduce.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/BinaryFormat/Magic.h"
#include "llvm/Object/ELF.h"
#include "llvm/Support/MemoryBufferRef.h"
#include "llvm/Support/Threading.h"

namespace llvm {
struct DILineInfo;
class TarWriter;
namespace lto {
class InputFile;
}
} // namespace llvm

namespace lld {
class DWARFCache;

// Returns "<internal>", "foo.a(bar.o)" or "baz.o".
std::string toString(const elf::InputFile *f);

namespace elf {

class InputSection;
class Symbol;

// Opens a given file.
std::optional<MemoryBufferRef> readFile(Ctx &, StringRef path);

// Add symbols in File to the symbol table.
void parseFile(Ctx &, InputFile *file);
void parseFiles(Ctx &, const std::vector<InputFile *> &files);

// The root class of input files.
class InputFile {};

class ELFFileBase : public InputFile {};

// .o file.
template <class ELFT> class ObjFile : public ELFFileBase {};

class BitcodeFile : public InputFile {};

// .so file.
class SharedFile : public ELFFileBase {};

class BinaryFile : public InputFile {};

InputFile *createInternalFile(Ctx &, StringRef name);
ELFFileBase *createObjFile(Ctx &, MemoryBufferRef mb,
                           StringRef archiveName = "", bool lazy = false);

std::string replaceThinLTOSuffix(Ctx &, StringRef path);

} // namespace elf
} // namespace lld

#endif