brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · f9e19ed Raw
167 lines · cpp
1//===-- ModuleSpecTest.cpp ------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "TestingSupport/SubsystemRAII.h"10#include "TestingSupport/TestUtilities.h"11 12#include "lldb/Core/Module.h"13#include "lldb/Core/ModuleSpec.h"14#include "lldb/Utility/DataBuffer.h"15 16#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"17#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"18#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"19 20#include "gtest/gtest.h"21 22using namespace lldb;23using namespace lldb_private;24 25extern const char *TestMainArgv0;26 27// This test file intentionally doesn't initialize the FileSystem.28// Everything in this file should be able to run without requiring29// any interaction with the FileSystem class; by keeping it30// uninitialized, it will assert if anything tries to interact with31// it.32 33TEST(ModuleSpecTest, InvalidInMemoryBuffer) {34  uint8_t Invalid[] = "This is not a binary file.";35  DataBufferSP InvalidBufferSP =36      std::make_shared<DataBufferUnowned>(Invalid, sizeof(Invalid));37  ModuleSpec Spec(FileSpec(), UUID(), InvalidBufferSP);38 39  auto InvalidModuleSP = std::make_shared<Module>(Spec);40  ASSERT_EQ(InvalidModuleSP->GetObjectFile(), nullptr);41}42 43TEST(ModuleSpecTest, InvalidInMemoryBufferValidFile) {44  uint8_t Invalid[] = "This is not a binary file.";45  DataBufferSP InvalidBufferSP =46      std::make_shared<DataBufferUnowned>(Invalid, sizeof(Invalid));47  ModuleSpec Spec(FileSpec(TestMainArgv0), UUID(), InvalidBufferSP);48 49  auto InvalidModuleSP = std::make_shared<Module>(Spec);50  ASSERT_EQ(InvalidModuleSP->GetObjectFile(), nullptr);51}52 53TEST(ModuleSpecTest, TestELFFile) {54  SubsystemRAII<ObjectFileELF> subsystems;55 56  auto ExpectedFile = TestFile::fromYaml(R"(57--- !ELF58FileHeader:59  Class:           ELFCLASS6460  Data:            ELFDATA2LSB61  Type:            ET_REL62  Machine:         EM_X86_6463Sections:64  - Name:            .text65    Type:            SHT_PROGBITS66    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]67    AddressAlign:    0x000000000000001068...69)");70  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());71 72  auto M = std::make_shared<Module>(ExpectedFile->moduleSpec());73  ObjectFile *OF = M->GetObjectFile();74 75  ASSERT_EQ(llvm::isa<ObjectFileELF>(OF), true);76}77 78TEST(ModuleSpecTest, TestCOFFFile) {79  SubsystemRAII<ObjectFilePECOFF> subsystems;80 81  auto ExpectedFile = TestFile::fromYaml(R"(82--- !COFF83OptionalHeader:84  AddressOfEntryPoint: 085  ImageBase:       1677721686  SectionAlignment: 409687  FileAlignment:   51288  MajorOperatingSystemVersion: 689  MinorOperatingSystemVersion: 090  MajorImageVersion: 091  MinorImageVersion: 092  MajorSubsystemVersion: 693  MinorSubsystemVersion: 094  Subsystem:       IMAGE_SUBSYSTEM_WINDOWS_CUI95  DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA, IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE, IMAGE_DLL_CHARACTERISTICS_NX_COMPAT ]96  SizeOfStackReserve: 104857697  SizeOfStackCommit: 409698  SizeOfHeapReserve: 104857699  SizeOfHeapCommit: 4096100header:101  Machine:         IMAGE_FILE_MACHINE_AMD64102  Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE ]103sections:104  - Name:            .text105    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]106    VirtualAddress:  4096107    VirtualSize:     4096108symbols:         []109...110)");111  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());112 113  auto M = std::make_shared<Module>(ExpectedFile->moduleSpec());114  ObjectFile *OF = M->GetObjectFile();115 116  ASSERT_EQ(llvm::isa<ObjectFilePECOFF>(OF), true);117}118 119TEST(ModuleSpecTest, TestMachOFile) {120  SubsystemRAII<ObjectFileMachO> subsystems;121 122  auto ExpectedFile = TestFile::fromYaml(R"(123--- !mach-o124FileHeader:125  magic:           0xFEEDFACF126  cputype:         0x0100000C127  cpusubtype:      0x00000000128  filetype:        0x00000001129  ncmds:           1130  sizeofcmds:      232131  flags:           0x00002000132  reserved:        0x00000000133LoadCommands:134  - cmd:             LC_SEGMENT_64135    cmdsize:         232136    segname:         ''137    vmaddr:          0138    vmsize:          56139    fileoff:         392140    filesize:        56141    maxprot:         7142    initprot:        7143    nsects:          1144    flags:           0145    Sections:146      - sectname:        __text147        segname:         __TEXT148        addr:            0x0000000000000000149        size:            24150        offset:          0x00000188151        align:           2152        reloff:          0x00000000153        nreloc:          0154        flags:           0x80000400155        reserved1:       0x00000000156        reserved2:       0x00000000157        reserved3:       0x00000000158...159)");160  ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded());161 162  auto M = std::make_shared<Module>(ExpectedFile->moduleSpec());163  ObjectFile *OF = M->GetObjectFile();164 165  ASSERT_EQ(llvm::isa<ObjectFileMachO>(OF), true);166}167