forked from OSchip/llvm-project
Create a PT_LOAD program header for the start of the file.
With this a trivial dynamic program works with the musl dynamic linker: LD_LIBRARY_PATH=. ~/musl/lib/libc.so ./t llvm-svn: 247290
This commit is contained in:
parent
b68cffb5df
commit
0a2e211ace
|
|
@ -29,6 +29,13 @@ using namespace lld::elf2;
|
||||||
|
|
||||||
static const int PageSize = 4096;
|
static const int PageSize = 4096;
|
||||||
|
|
||||||
|
// On linux x86_64 mmap of the first 15 pages fails, so the smallest value
|
||||||
|
// that can be used in here is 0x10000.
|
||||||
|
// If using 2MB pages, the smallest page aligned address that works is
|
||||||
|
// 0x200000, but it looks like every OS uses 4k pages for executables.
|
||||||
|
// FIXME: This is architecture and OS dependent.
|
||||||
|
static const int VAStart = 0x10000;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
// OutputSection represents a section in an output file. It's a
|
// OutputSection represents a section in an output file. It's a
|
||||||
// container of chunks. OutputSection and Chunk are 1:N relationship.
|
// container of chunks. OutputSection and Chunk are 1:N relationship.
|
||||||
|
|
@ -587,20 +594,22 @@ static bool outputSectionHasPHDR(OutputSectionBase<ELFT::Is64Bits> *Sec) {
|
||||||
// Visits all sections to assign incremental, non-overlapping RVAs and
|
// Visits all sections to assign incremental, non-overlapping RVAs and
|
||||||
// file offsets.
|
// file offsets.
|
||||||
template <class ELFT> void Writer<ELFT>::assignAddresses() {
|
template <class ELFT> void Writer<ELFT>::assignAddresses() {
|
||||||
// On linux x86_64 mmap of the first 15 pages fails, so the smallest value
|
uintX_t VA = VAStart;
|
||||||
// that can be used in here is 0x10000.
|
uintX_t FileOff = 0;
|
||||||
// If using 2MB pages, the smallest page aligned address that works is
|
|
||||||
// 0x200000, but it looks like every OS uses 4k pages for executables.
|
|
||||||
// FIXME: This is architecture and OS dependent.
|
|
||||||
uintX_t VA = 0x10000;
|
|
||||||
|
|
||||||
uintX_t FileOff = sizeof(Elf_Ehdr);
|
FileOff += sizeof(Elf_Ehdr);
|
||||||
|
VA += sizeof(Elf_Ehdr);
|
||||||
|
|
||||||
// Reserve space for PHDRs.
|
// Reserve space for PHDRs.
|
||||||
ProgramHeaderOff = FileOff;
|
ProgramHeaderOff = FileOff;
|
||||||
FileOff = RoundUpToAlignment(FileOff, PageSize);
|
FileOff = RoundUpToAlignment(FileOff, PageSize);
|
||||||
|
VA = RoundUpToAlignment(VA, PageSize);
|
||||||
|
|
||||||
NumPhdrs = 0;
|
NumPhdrs = 0;
|
||||||
|
// Add a PHDR for the elf header and program headers. Some dynamic linkers
|
||||||
|
// (musl at least) require them to be covered by a PT_LOAD.
|
||||||
|
++NumPhdrs;
|
||||||
|
|
||||||
for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) {
|
for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) {
|
||||||
StrTabSec.add(Sec->getName());
|
StrTabSec.add(Sec->getName());
|
||||||
Sec->finalize();
|
Sec->finalize();
|
||||||
|
|
@ -681,6 +690,16 @@ template <class ELFT> void Writer<ELFT>::writeHeader() {
|
||||||
EHdr->e_shstrndx = StrTabSec.getSectionIndex();
|
EHdr->e_shstrndx = StrTabSec.getSectionIndex();
|
||||||
|
|
||||||
auto PHdrs = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff);
|
auto PHdrs = reinterpret_cast<Elf_Phdr *>(Buf + EHdr->e_phoff);
|
||||||
|
PHdrs->p_type = PT_LOAD;
|
||||||
|
PHdrs->p_flags = PF_R;
|
||||||
|
PHdrs->p_offset = 0;
|
||||||
|
PHdrs->p_vaddr = VAStart;
|
||||||
|
PHdrs->p_paddr = PHdrs->p_vaddr;
|
||||||
|
PHdrs->p_filesz = ProgramHeaderOff + NumPhdrs * sizeof(Elf_Phdr);
|
||||||
|
PHdrs->p_memsz = PHdrs->p_filesz;
|
||||||
|
PHdrs->p_align = PageSize;
|
||||||
|
++PHdrs;
|
||||||
|
|
||||||
for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) {
|
for (OutputSectionBase<ELFT::Is64Bits> *Sec : OutputSections) {
|
||||||
if (!outputSectionHasPHDR<ELFT>(Sec))
|
if (!outputSectionHasPHDR<ELFT>(Sec))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ _start:
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: HeaderSize: 64
|
# CHECK-NEXT: HeaderSize: 64
|
||||||
# CHECK-NEXT: ProgramHeaderEntrySize: 56
|
# CHECK-NEXT: ProgramHeaderEntrySize: 56
|
||||||
# CHECK-NEXT: ProgramHeaderCount: 1
|
# CHECK-NEXT: ProgramHeaderCount: 2
|
||||||
# CHECK-NEXT: SectionHeaderEntrySize: 64
|
# CHECK-NEXT: SectionHeaderEntrySize: 64
|
||||||
# CHECK-NEXT: SectionHeaderCount: 6
|
# CHECK-NEXT: SectionHeaderCount: 6
|
||||||
# CHECK-NEXT: StringTableSectionIndex: 5
|
# CHECK-NEXT: StringTableSectionIndex: 5
|
||||||
|
|
@ -59,7 +59,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10000
|
# CHECK-NEXT: Address: 0x11000
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
# CHECK-NEXT: Size: 16
|
# CHECK-NEXT: Size: 16
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -75,7 +75,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10010
|
# CHECK-NEXT: Address: 0x11010
|
||||||
# CHECK-NEXT: Offset: 0x1010
|
# CHECK-NEXT: Offset: 0x1010
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -91,7 +91,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10010
|
# CHECK-NEXT: Address: 0x11010
|
||||||
# CHECK-NEXT: Offset: 0x1010
|
# CHECK-NEXT: Offset: 0x1010
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -151,9 +151,21 @@ _start:
|
||||||
# CHECK-NEXT: ProgramHeaders [
|
# CHECK-NEXT: ProgramHeaders [
|
||||||
# CHECK-NEXT: ProgramHeader {
|
# CHECK-NEXT: ProgramHeader {
|
||||||
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x0
|
||||||
# CHECK-NEXT: VirtualAddress: 0x10000
|
# CHECK-NEXT: VirtualAddress: 0x10000
|
||||||
# CHECK-NEXT: PhysicalAddress: 0x10000
|
# CHECK-NEXT: PhysicalAddress: 0x10000
|
||||||
|
# CHECK-NEXT: FileSize: 176
|
||||||
|
# CHECK-NEXT: MemSize: 176
|
||||||
|
# CHECK-NEXT: Flags [
|
||||||
|
# CHECK-NEXT: PF_R
|
||||||
|
# CHECK-NEXT: ]
|
||||||
|
# CHECK-NEXT: Alignment: 4096
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
# CHECK-NEXT: ProgramHeader {
|
||||||
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
|
# CHECK-NEXT: VirtualAddress: 0x11000
|
||||||
|
# CHECK-NEXT: PhysicalAddress: 0x11000
|
||||||
# CHECK-NEXT: FileSize: 16
|
# CHECK-NEXT: FileSize: 16
|
||||||
# CHECK-NEXT: MemSize: 16
|
# CHECK-NEXT: MemSize: 16
|
||||||
# CHECK-NEXT: Flags [ (0x5)
|
# CHECK-NEXT: Flags [ (0x5)
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,14 @@ _start:
|
||||||
# CHECK-NEXT: Type: Executable (0x2)
|
# CHECK-NEXT: Type: Executable (0x2)
|
||||||
# CHECK-NEXT: Machine: EM_386 (0x3)
|
# CHECK-NEXT: Machine: EM_386 (0x3)
|
||||||
# CHECK-NEXT: Version: 1
|
# CHECK-NEXT: Version: 1
|
||||||
# CHECK-NEXT: Entry: 0x10000
|
# CHECK-NEXT: Entry: 0x11000
|
||||||
# CHECK-NEXT: ProgramHeaderOffset: 0x34
|
# CHECK-NEXT: ProgramHeaderOffset: 0x34
|
||||||
# CHECK-NEXT: SectionHeaderOffset: 0x1058
|
# CHECK-NEXT: SectionHeaderOffset: 0x1058
|
||||||
# CHECK-NEXT: Flags [ (0x0)
|
# CHECK-NEXT: Flags [ (0x0)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: HeaderSize: 52
|
# CHECK-NEXT: HeaderSize: 52
|
||||||
# CHECK-NEXT: ProgramHeaderEntrySize: 32
|
# CHECK-NEXT: ProgramHeaderEntrySize: 32
|
||||||
# CHECK-NEXT: ProgramHeaderCount: 1
|
# CHECK-NEXT: ProgramHeaderCount: 2
|
||||||
# CHECK-NEXT: SectionHeaderEntrySize: 40
|
# CHECK-NEXT: SectionHeaderEntrySize: 40
|
||||||
# CHECK-NEXT: SectionHeaderCount: 6
|
# CHECK-NEXT: SectionHeaderCount: 6
|
||||||
# CHECK-NEXT: StringTableSectionIndex: 5
|
# CHECK-NEXT: StringTableSectionIndex: 5
|
||||||
|
|
@ -58,7 +58,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10000
|
# CHECK-NEXT: Address: 0x11000
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
# CHECK-NEXT: Size: 12
|
# CHECK-NEXT: Size: 12
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -74,7 +74,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -90,7 +90,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -130,9 +130,21 @@ _start:
|
||||||
# CHECK-NEXT: ProgramHeaders [
|
# CHECK-NEXT: ProgramHeaders [
|
||||||
# CHECK-NEXT: ProgramHeader {
|
# CHECK-NEXT: ProgramHeader {
|
||||||
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x0
|
||||||
# CHECK-NEXT: VirtualAddress: 0x10000
|
# CHECK-NEXT: VirtualAddress: 0x10000
|
||||||
# CHECK-NEXT: PhysicalAddress: 0x10000
|
# CHECK-NEXT: PhysicalAddress: 0x10000
|
||||||
|
# CHECK-NEXT: FileSize: 116
|
||||||
|
# CHECK-NEXT: MemSize: 116
|
||||||
|
# CHECK-NEXT: Flags [
|
||||||
|
# CHECK-NEXT: PF_R
|
||||||
|
# CHECK-NEXT: ]
|
||||||
|
# CHECK-NEXT: Alignment: 4096
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
# CHECK-NEXT: ProgramHeader {
|
||||||
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
|
# CHECK-NEXT: VirtualAddress: 0x11000
|
||||||
|
# CHECK-NEXT: PhysicalAddress: 0x11000
|
||||||
# CHECK-NEXT: FileSize: 12
|
# CHECK-NEXT: FileSize: 12
|
||||||
# CHECK-NEXT: MemSize: 12
|
# CHECK-NEXT: MemSize: 12
|
||||||
# CHECK-NEXT: Flags [ (0x5)
|
# CHECK-NEXT: Flags [ (0x5)
|
||||||
|
|
|
||||||
|
|
@ -23,14 +23,14 @@ _start:
|
||||||
# CHECK-NEXT: Type: Executable (0x2)
|
# CHECK-NEXT: Type: Executable (0x2)
|
||||||
# CHECK-NEXT: Machine: EM_PPC (0x14)
|
# CHECK-NEXT: Machine: EM_PPC (0x14)
|
||||||
# CHECK-NEXT: Version: 1
|
# CHECK-NEXT: Version: 1
|
||||||
# CHECK-NEXT: Entry: 0x10000
|
# CHECK-NEXT: Entry: 0x11000
|
||||||
# CHECK-NEXT: ProgramHeaderOffset: 0x34
|
# CHECK-NEXT: ProgramHeaderOffset: 0x34
|
||||||
# CHECK-NEXT: SectionHeaderOffset: 0x1058
|
# CHECK-NEXT: SectionHeaderOffset: 0x1058
|
||||||
# CHECK-NEXT: Flags [ (0x0)
|
# CHECK-NEXT: Flags [ (0x0)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: HeaderSize: 52
|
# CHECK-NEXT: HeaderSize: 52
|
||||||
# CHECK-NEXT: ProgramHeaderEntrySize: 32
|
# CHECK-NEXT: ProgramHeaderEntrySize: 32
|
||||||
# CHECK-NEXT: ProgramHeaderCount: 1
|
# CHECK-NEXT: ProgramHeaderCount: 2
|
||||||
# CHECK-NEXT: SectionHeaderEntrySize: 40
|
# CHECK-NEXT: SectionHeaderEntrySize: 40
|
||||||
# CHECK-NEXT: SectionHeaderCount: 6
|
# CHECK-NEXT: SectionHeaderCount: 6
|
||||||
# CHECK-NEXT: StringTableSectionIndex: 5
|
# CHECK-NEXT: StringTableSectionIndex: 5
|
||||||
|
|
@ -58,7 +58,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10000
|
# CHECK-NEXT: Address: 0x11000
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
# CHECK-NEXT: Size: 12
|
# CHECK-NEXT: Size: 12
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -74,7 +74,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -90,7 +90,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -130,9 +130,21 @@ _start:
|
||||||
# CHECK-NEXT: ProgramHeaders [
|
# CHECK-NEXT: ProgramHeaders [
|
||||||
# CHECK-NEXT: ProgramHeader {
|
# CHECK-NEXT: ProgramHeader {
|
||||||
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x0
|
||||||
# CHECK-NEXT: VirtualAddress: 0x10000
|
# CHECK-NEXT: VirtualAddress: 0x10000
|
||||||
# CHECK-NEXT: PhysicalAddress: 0x10000
|
# CHECK-NEXT: PhysicalAddress: 0x10000
|
||||||
|
# CHECK-NEXT: FileSize: 116
|
||||||
|
# CHECK-NEXT: MemSize: 116
|
||||||
|
# CHECK-NEXT: Flags [
|
||||||
|
# CHECK-NEXT: PF_R
|
||||||
|
# CHECK-NEXT: ]
|
||||||
|
# CHECK-NEXT: Alignment: 4096
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
# CHECK-NEXT: ProgramHeader {
|
||||||
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
|
# CHECK-NEXT: VirtualAddress: 0x11000
|
||||||
|
# CHECK-NEXT: PhysicalAddress: 0x11000
|
||||||
# CHECK-NEXT: FileSize: 12
|
# CHECK-NEXT: FileSize: 12
|
||||||
# CHECK-NEXT: MemSize: 12
|
# CHECK-NEXT: MemSize: 12
|
||||||
# CHECK-NEXT: Flags [ (0x5)
|
# CHECK-NEXT: Flags [ (0x5)
|
||||||
|
|
|
||||||
|
|
@ -28,14 +28,14 @@ _start:
|
||||||
# CHECK-NEXT: Type: Executable (0x2)
|
# CHECK-NEXT: Type: Executable (0x2)
|
||||||
# CHECK-NEXT: Machine: EM_PPC64 (0x15)
|
# CHECK-NEXT: Machine: EM_PPC64 (0x15)
|
||||||
# CHECK-NEXT: Version: 1
|
# CHECK-NEXT: Version: 1
|
||||||
# CHECK-NEXT: Entry: 0x11000
|
# CHECK-NEXT: Entry: 0x12000
|
||||||
# CHECK-NEXT: ProgramHeaderOffset: 0x40
|
# CHECK-NEXT: ProgramHeaderOffset: 0x40
|
||||||
# CHECK-NEXT: SectionHeaderOffset: 0x2078
|
# CHECK-NEXT: SectionHeaderOffset: 0x2078
|
||||||
# CHECK-NEXT: Flags [ (0x0)
|
# CHECK-NEXT: Flags [ (0x0)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: HeaderSize: 64
|
# CHECK-NEXT: HeaderSize: 64
|
||||||
# CHECK-NEXT: ProgramHeaderEntrySize: 56
|
# CHECK-NEXT: ProgramHeaderEntrySize: 56
|
||||||
# CHECK-NEXT: ProgramHeaderCount: 2
|
# CHECK-NEXT: ProgramHeaderCount: 3
|
||||||
# CHECK-NEXT: SectionHeaderEntrySize: 64
|
# CHECK-NEXT: SectionHeaderEntrySize: 64
|
||||||
# CHECK-NEXT: SectionHeaderCount: 7
|
# CHECK-NEXT: SectionHeaderCount: 7
|
||||||
# CHECK-NEXT: StringTableSectionIndex: 6
|
# CHECK-NEXT: StringTableSectionIndex: 6
|
||||||
|
|
@ -63,7 +63,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
# CHECK-NEXT: SHF_EXECINSTR (0x4)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x10000
|
# CHECK-NEXT: Address: 0x11000
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
# CHECK-NEXT: Size: 12
|
# CHECK-NEXT: Size: 12
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -79,7 +79,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -95,7 +95,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x1000C
|
# CHECK-NEXT: Address: 0x1100C
|
||||||
# CHECK-NEXT: Offset: 0x100C
|
# CHECK-NEXT: Offset: 0x100C
|
||||||
# CHECK-NEXT: Size: 0
|
# CHECK-NEXT: Size: 0
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -111,7 +111,7 @@ _start:
|
||||||
# CHECK-NEXT: SHF_ALLOC (0x2)
|
# CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
# CHECK-NEXT: SHF_WRITE (0x1)
|
# CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
# CHECK-NEXT: ]
|
# CHECK-NEXT: ]
|
||||||
# CHECK-NEXT: Address: 0x11000
|
# CHECK-NEXT: Address: 0x12000
|
||||||
# CHECK-NEXT: Offset: 0x2000
|
# CHECK-NEXT: Offset: 0x2000
|
||||||
# CHECK-NEXT: Size: 24
|
# CHECK-NEXT: Size: 24
|
||||||
# CHECK-NEXT: Link: 0
|
# CHECK-NEXT: Link: 0
|
||||||
|
|
@ -151,9 +151,21 @@ _start:
|
||||||
# CHECK-NEXT: ProgramHeaders [
|
# CHECK-NEXT: ProgramHeaders [
|
||||||
# CHECK-NEXT: ProgramHeader {
|
# CHECK-NEXT: ProgramHeader {
|
||||||
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
# CHECK-NEXT: Offset: 0x1000
|
# CHECK-NEXT: Offset: 0x0
|
||||||
# CHECK-NEXT: VirtualAddress: 0x10000
|
# CHECK-NEXT: VirtualAddress: 0x10000
|
||||||
# CHECK-NEXT: PhysicalAddress: 0x10000
|
# CHECK-NEXT: PhysicalAddress: 0x10000
|
||||||
|
# CHECK-NEXT: FileSize: 232
|
||||||
|
# CHECK-NEXT: MemSize: 232
|
||||||
|
# CHECK-NEXT: Flags [
|
||||||
|
# CHECK-NEXT: PF_R
|
||||||
|
# CHECK-NEXT: ]
|
||||||
|
# CHECK-NEXT: Alignment: 4096
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
# CHECK-NEXT: ProgramHeader {
|
||||||
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
|
# CHECK-NEXT: VirtualAddress: 0x11000
|
||||||
|
# CHECK-NEXT: PhysicalAddress: 0x11000
|
||||||
# CHECK-NEXT: FileSize: 12
|
# CHECK-NEXT: FileSize: 12
|
||||||
# CHECK-NEXT: MemSize: 12
|
# CHECK-NEXT: MemSize: 12
|
||||||
# CHECK-NEXT: Flags [ (0x5)
|
# CHECK-NEXT: Flags [ (0x5)
|
||||||
|
|
@ -165,8 +177,8 @@ _start:
|
||||||
# CHECK-NEXT: ProgramHeader {
|
# CHECK-NEXT: ProgramHeader {
|
||||||
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
# CHECK-NEXT: Type: PT_LOAD (0x1)
|
||||||
# CHECK-NEXT: Offset: 0x2000
|
# CHECK-NEXT: Offset: 0x2000
|
||||||
# CHECK-NEXT: VirtualAddress: 0x11000
|
# CHECK-NEXT: VirtualAddress: 0x12000
|
||||||
# CHECK-NEXT: PhysicalAddress: 0x11000
|
# CHECK-NEXT: PhysicalAddress: 0x12000
|
||||||
# CHECK-NEXT: FileSize: 24
|
# CHECK-NEXT: FileSize: 24
|
||||||
# CHECK-NEXT: MemSize: 24
|
# CHECK-NEXT: MemSize: 24
|
||||||
# CHECK-NEXT: Flags [ (0x6)
|
# CHECK-NEXT: Flags [ (0x6)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
// CHECK-NEXT: SHF_ALLOC
|
// CHECK-NEXT: SHF_ALLOC
|
||||||
// CHECK-NEXT: SHF_WRITE
|
// CHECK-NEXT: SHF_WRITE
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x10000
|
// CHECK-NEXT: Address: 0x11000
|
||||||
// CHECK-NEXT: Offset: 0x1000
|
// CHECK-NEXT: Offset: 0x1000
|
||||||
// CHECK-NEXT: Size: 4
|
// CHECK-NEXT: Size: 4
|
||||||
// CHECK-NEXT: Link: 0
|
// CHECK-NEXT: Link: 0
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,13 @@
|
||||||
// CHECK-NEXT: SHF_ALLOC
|
// CHECK-NEXT: SHF_ALLOC
|
||||||
// CHECK-NEXT: SHF_WRITE
|
// CHECK-NEXT: SHF_WRITE
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x10000
|
// CHECK-NEXT: Address: 0x11000
|
||||||
// CHECK-NEXT: Offset:
|
// CHECK-NEXT: Offset:
|
||||||
// CHECK-NEXT: Size: 22
|
// CHECK-NEXT: Size: 22
|
||||||
|
|
||||||
|
|
||||||
// CHECK: Name: sym4
|
// CHECK: Name: sym4
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 4
|
// CHECK-NEXT: Size: 4
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: Object
|
// CHECK-NEXT: Type: Object
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
// CHECK-NEXT: Section: .bss
|
// CHECK-NEXT: Section: .bss
|
||||||
|
|
||||||
// CHECK: Name: sym3
|
// CHECK: Name: sym3
|
||||||
// CHECK-NEXT: Value: 0x10014
|
// CHECK-NEXT: Value: 0x11014
|
||||||
// CHECK-NEXT: Size: 2
|
// CHECK-NEXT: Size: 2
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: Object
|
// CHECK-NEXT: Type: Object
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
// CHECK-NEXT: Section: .bss
|
// CHECK-NEXT: Section: .bss
|
||||||
|
|
||||||
// CHECK: Name: sym2
|
// CHECK: Name: sym2
|
||||||
// CHECK-NEXT: Value: 0x1000C
|
// CHECK-NEXT: Value: 0x1100C
|
||||||
// CHECK-NEXT: Size: 8
|
// CHECK-NEXT: Size: 8
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: Object
|
// CHECK-NEXT: Type: Object
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
// CHECK-NEXT: Section: .bss
|
// CHECK-NEXT: Section: .bss
|
||||||
|
|
||||||
// CHECK: Name: sym1
|
// CHECK: Name: sym1
|
||||||
// CHECK-NEXT: Value: 0x10004
|
// CHECK-NEXT: Value: 0x11004
|
||||||
// CHECK-NEXT: Size: 8
|
// CHECK-NEXT: Size: 8
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: Object
|
// CHECK-NEXT: Type: Object
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,9 @@ bar:
|
||||||
|
|
||||||
// R_X86_64_32
|
// R_X86_64_32
|
||||||
// CHECK: bar:
|
// CHECK: bar:
|
||||||
// CHECK: 10000: ba 00 00 01 00 movl $65536, %edx
|
// CHECK: 11000: ba 00 10 01 00 movl $69632, %edx
|
||||||
|
|
||||||
// CHECK: e8 04 00 00 00 callq 4
|
// CHECK: e8 04 00 00 00 callq 4
|
||||||
|
|
||||||
// Also check that symbols match.
|
// Also check that symbols match.
|
||||||
// CHECK: 0000000000010000 .text 00000000 bar
|
// CHECK: 0000000000011000 .text 00000000 bar
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: _start
|
// CHECK-NEXT: Name: _start
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ hidden:
|
||||||
// CHECK-NEXT: Flags [
|
// CHECK-NEXT: Flags [
|
||||||
// CHECK-NEXT: SHF_ALLOC
|
// CHECK-NEXT: SHF_ALLOC
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x10000
|
// CHECK-NEXT: Address: 0x11000
|
||||||
|
|
||||||
// CHECK: Name: foobar
|
// CHECK: Name: foobar
|
||||||
// CHECK-NEXT: Type: SHT_PROGBITS
|
// CHECK-NEXT: Type: SHT_PROGBITS
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ internal:
|
||||||
// CHECK-NEXT: SHF_ALLOC
|
// CHECK-NEXT: SHF_ALLOC
|
||||||
// CHECK-NEXT: SHF_EXECINSTR
|
// CHECK-NEXT: SHF_EXECINSTR
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x10000
|
// CHECK-NEXT: Address: 0x11000
|
||||||
|
|
||||||
// CHECK: Name: .bss (14)
|
// CHECK: Name: .bss (14)
|
||||||
// CHECK-NEXT: Type: SHT_NOBITS (0x8)
|
// CHECK-NEXT: Type: SHT_NOBITS (0x8)
|
||||||
|
|
@ -59,7 +59,7 @@ internal:
|
||||||
// CHECK-NEXT: SHF_ALLOC (0x2)
|
// CHECK-NEXT: SHF_ALLOC (0x2)
|
||||||
// CHECK-NEXT: SHF_WRITE (0x1)
|
// CHECK-NEXT: SHF_WRITE (0x1)
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x11000
|
// CHECK-NEXT: Address: 0x12000
|
||||||
// CHECK-NEXT: Offset: 0x2000
|
// CHECK-NEXT: Offset: 0x2000
|
||||||
// CHECK-NEXT: Size: 4
|
// CHECK-NEXT: Size: 4
|
||||||
|
|
||||||
|
|
@ -68,7 +68,7 @@ internal:
|
||||||
// CHECK-NEXT: Flags [
|
// CHECK-NEXT: Flags [
|
||||||
// CHECK-NEXT: SHF_ALLOC
|
// CHECK-NEXT: SHF_ALLOC
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x12000
|
// CHECK-NEXT: Address: 0x13000
|
||||||
|
|
||||||
// CHECK: Symbols [
|
// CHECK: Symbols [
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
|
|
@ -82,7 +82,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: _start
|
// CHECK-NEXT: Name: _start
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global (0x1)
|
// CHECK-NEXT: Binding: Global (0x1)
|
||||||
// CHECK-NEXT: Type: Function
|
// CHECK-NEXT: Type: Function
|
||||||
|
|
@ -109,7 +109,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: foo
|
// CHECK-NEXT: Name: foo
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Weak (0x2)
|
// CHECK-NEXT: Binding: Weak (0x2)
|
||||||
// CHECK-NEXT: Type: Object
|
// CHECK-NEXT: Type: Object
|
||||||
|
|
@ -118,7 +118,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: common (34)
|
// CHECK-NEXT: Name: common (34)
|
||||||
// CHECK-NEXT: Value: 0x11000
|
// CHECK-NEXT: Value: 0x12000
|
||||||
// CHECK-NEXT: Size: 4
|
// CHECK-NEXT: Size: 4
|
||||||
// CHECK-NEXT: Binding: Global (0x1)
|
// CHECK-NEXT: Binding: Global (0x1)
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
// CHECK-NEXT: Type: Object (0x1)
|
||||||
|
|
@ -127,7 +127,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: zed
|
// CHECK-NEXT: Name: zed
|
||||||
// CHECK-NEXT: Value: 0x12000
|
// CHECK-NEXT: Value: 0x13000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global (0x1)
|
// CHECK-NEXT: Binding: Global (0x1)
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
@ -136,7 +136,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: protected
|
// CHECK-NEXT: Name: protected
|
||||||
// CHECK-NEXT: Value: 0x12008
|
// CHECK-NEXT: Value: 0x13008
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
@ -145,7 +145,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: zed3
|
// CHECK-NEXT: Name: zed3
|
||||||
// CHECK-NEXT: Value: 0x12008
|
// CHECK-NEXT: Value: 0x13008
|
||||||
// CHECK-NEXT: Size: 4
|
// CHECK-NEXT: Size: 4
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
@ -154,7 +154,7 @@ internal:
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: zed2
|
// CHECK-NEXT: Name: zed2
|
||||||
// CHECK-NEXT: Value: 0x12004
|
// CHECK-NEXT: Value: 0x13004
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: _start
|
// CHECK-NEXT: Name: _start
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: default
|
// CHECK-NEXT: Name: default
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: protected
|
// CHECK-NEXT: Name: protected
|
||||||
// CHECK-NEXT: Value: 0x10000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
// CHECK-NEXT: Binding: Global
|
// CHECK-NEXT: Binding: Global
|
||||||
// CHECK-NEXT: Type: None
|
// CHECK-NEXT: Type: None
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue