[lld] r361747 - Remove elf::createSharedFile and move its code to SharedFile's ctor. NFC.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Mon May 27 00:26:14 PDT 2019
Author: ruiu
Date: Mon May 27 00:26:13 2019
New Revision: 361747
URL: http://llvm.org/viewvc/llvm-project?rev=361747&view=rev
Log:
Remove elf::createSharedFile and move its code to SharedFile's ctor. NFC.
Modified:
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/InputFiles.cpp
lld/trunk/ELF/InputFiles.h
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=361747&r1=361746&r2=361747&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Mon May 27 00:26:13 2019
@@ -250,7 +250,7 @@ void LinkerDriver::addFile(StringRef Pat
// significant, as a user did not specify it. This behavior is
// compatible with GNU.
Files.push_back(
- createSharedFile(MBRef, WithLOption ? path::filename(Path) : Path));
+ make<SharedFile>(MBRef, WithLOption ? path::filename(Path) : Path));
return;
case file_magic::bitcode:
case file_magic::elf_relocatable:
Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=361747&r1=361746&r2=361747&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Mon May 27 00:26:13 2019
@@ -48,6 +48,36 @@ std::vector<SharedFile *> elf::SharedFil
std::unique_ptr<TarWriter> elf::Tar;
+static ELFKind getELFKind(MemoryBufferRef MB, StringRef ArchiveName) {
+ unsigned char Size;
+ unsigned char Endian;
+ std::tie(Size, Endian) = getElfArchType(MB.getBuffer());
+
+ auto Fatal = [&](StringRef Msg) {
+ StringRef Filename = MB.getBufferIdentifier();
+ if (ArchiveName.empty())
+ fatal(Filename + ": " + Msg);
+ else
+ fatal(ArchiveName + "(" + Filename + "): " + Msg);
+ };
+
+ if (!MB.getBuffer().startswith(ElfMagic))
+ Fatal("not an ELF file");
+ if (Endian != ELFDATA2LSB && Endian != ELFDATA2MSB)
+ Fatal("corrupted ELF file: invalid data encoding");
+ if (Size != ELFCLASS32 && Size != ELFCLASS64)
+ Fatal("corrupted ELF file: invalid file class");
+
+ size_t BufSize = MB.getBuffer().size();
+ if ((Size == ELFCLASS32 && BufSize < sizeof(Elf32_Ehdr)) ||
+ (Size == ELFCLASS64 && BufSize < sizeof(Elf64_Ehdr)))
+ Fatal("corrupted ELF file: file is too short");
+
+ if (Size == ELFCLASS32)
+ return (Endian == ELFDATA2LSB) ? ELF32LEKind : ELF32BEKind;
+ return (Endian == ELFDATA2LSB) ? ELF64LEKind : ELF64BEKind;
+}
+
InputFile::InputFile(Kind K, MemoryBufferRef M)
: MB(M), GroupId(NextGroupId), FileKind(K) {
// All files within the same --{start,end}-group get the same group ID.
@@ -1038,7 +1068,24 @@ unsigned SharedFile::VernauxNum;
SharedFile::SharedFile(MemoryBufferRef M, StringRef DefaultSoName)
: ELFFileBase(SharedKind, M), SoName(DefaultSoName),
- IsNeeded(!Config->AsNeeded) {}
+ IsNeeded(!Config->AsNeeded) {
+ switch (getELFKind(MB, "")) {
+ case ELF32LEKind:
+ parseHeader<ELF32LE>();
+ break;
+ case ELF32BEKind:
+ parseHeader<ELF32BE>();
+ break;
+ case ELF64LEKind:
+ parseHeader<ELF64LE>();
+ break;
+ case ELF64BEKind:
+ parseHeader<ELF64BE>();
+ break;
+ default:
+ llvm_unreachable("getELFKind");
+ }
+}
// Parse the version definitions in the object file if present, and return a
// vector whose nth element contains a pointer to the Elf_Verdef for version
@@ -1376,36 +1423,6 @@ void BitcodeFile::parse(
addDependentLibrary(L, this);
}
-static ELFKind getELFKind(MemoryBufferRef MB, StringRef ArchiveName) {
- unsigned char Size;
- unsigned char Endian;
- std::tie(Size, Endian) = getElfArchType(MB.getBuffer());
-
- auto Fatal = [&](StringRef Msg) {
- StringRef Filename = MB.getBufferIdentifier();
- if (ArchiveName.empty())
- fatal(Filename + ": " + Msg);
- else
- fatal(ArchiveName + "(" + Filename + "): " + Msg);
- };
-
- if (!MB.getBuffer().startswith(ElfMagic))
- Fatal("not an ELF file");
- if (Endian != ELFDATA2LSB && Endian != ELFDATA2MSB)
- Fatal("corrupted ELF file: invalid data encoding");
- if (Size != ELFCLASS32 && Size != ELFCLASS64)
- Fatal("corrupted ELF file: invalid file class");
-
- size_t BufSize = MB.getBuffer().size();
- if ((Size == ELFCLASS32 && BufSize < sizeof(Elf32_Ehdr)) ||
- (Size == ELFCLASS64 && BufSize < sizeof(Elf64_Ehdr)))
- Fatal("corrupted ELF file: file is too short");
-
- if (Size == ELFCLASS32)
- return (Endian == ELFDATA2LSB) ? ELF32LEKind : ELF32BEKind;
- return (Endian == ELFDATA2LSB) ? ELF64LEKind : ELF64BEKind;
-}
-
void BinaryFile::parse() {
ArrayRef<uint8_t> Data = arrayRefFromStringRef(MB.getBuffer());
auto *Section = make<InputSection>(this, SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
@@ -1448,27 +1465,6 @@ InputFile *elf::createObjectFile(MemoryB
}
}
-InputFile *elf::createSharedFile(MemoryBufferRef MB, StringRef DefaultSoName) {
- auto *F = make<SharedFile>(MB, DefaultSoName);
- switch (getELFKind(MB, "")) {
- case ELF32LEKind:
- F->parseHeader<ELF32LE>();
- break;
- case ELF32BEKind:
- F->parseHeader<ELF32BE>();
- break;
- case ELF64LEKind:
- F->parseHeader<ELF64LE>();
- break;
- case ELF64BEKind:
- F->parseHeader<ELF64BE>();
- break;
- default:
- llvm_unreachable("getELFKind");
- }
- return F;
-}
-
void LazyObjFile::fetch() {
if (MB.getBuffer().empty())
return;
Modified: lld/trunk/ELF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=361747&r1=361746&r2=361747&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.h (original)
+++ lld/trunk/ELF/InputFiles.h Mon May 27 00:26:13 2019
@@ -380,7 +380,6 @@ public:
InputFile *createObjectFile(MemoryBufferRef MB, StringRef ArchiveName = "",
uint64_t OffsetInArchive = 0);
-InputFile *createSharedFile(MemoryBufferRef MB, StringRef DefaultSoName);
inline bool isBitcode(MemoryBufferRef MB) {
return identify_magic(MB.getBuffer()) == llvm::file_magic::bitcode;
More information about the llvm-commits
mailing list