mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
18bbb959e4
The ELF specification says that all ELF data structures are aligned to their natural alignments both in memory and file. That means when we access mmap'ed ELF files, we could assume that all data structures are aligned properly. However, in reality, we assume that the data structures are aligned only to two bytes because .a files only guarantee that their member files are aligned to two bytes in archive files. So the data access is already unaligned. This patch relaxes the alignment requirement even more, so that we accept unaligned access to all ELF data structures. This patch in particular makes lld bug-compatible with icc. Intel C compiler doesn't seem to care about data alignment and generates unaligned relocation sections (https://bugs.llvm.org/show_bug.cgi?id=35854). I also saw another instance of compatibility issues with our internal tool which creates unaligned section headers. Because GNU linkers are not picky about alignment, looks like it is not uncommon that ELF-generating tools create unaligned files. There is a performance penalty with this patch on host machines on which unaligned access is expensive. x86 and AArch64 are fine. ARMv6 is a problem, but I don't think using ARMv6 machines as hosts is common, so I believe it's not a real problem. Differential Revision: https://reviews.llvm.org/D41978 llvm-svn: 322407
88 lines
3.8 KiB
Plaintext
88 lines
3.8 KiB
Plaintext
RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-type.elf 2>&1 | FileCheck %s
|
|
RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 | FileCheck %s
|
|
RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-zero-size.elf 2>&1 | FileCheck %s
|
|
CHECK: Invalid data was encountered while parsing the file
|
|
|
|
RUN: not llvm-dwarfdump %p/Inputs/invalid-bad-rel-type.elf 2>&1 | FileCheck --check-prefix=RELA %s
|
|
RELA: Section is not SHT_RELA
|
|
|
|
RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-non-null.elf 2>&1 | FileCheck --check-prefix=NON-NULL %s
|
|
NON-NULL: Invalid data was encountered while parsing the file
|
|
|
|
Test the sh_entsize are invalid
|
|
RUN: llvm-readobj -s %p/Inputs/invalid-sh_entsize.elf | FileCheck --check-prefix=SECTION %s
|
|
|
|
SECTION: Name: .dynsym
|
|
SECTION-NEXT: Type: SHT_DYNSYM
|
|
SECTION-NEXT: Flags [
|
|
SECTION-NEXT: SHF_ALLOC
|
|
SECTION-NEXT: ]
|
|
SECTION-NEXT: Address:
|
|
SECTION-NEXT: Offset:
|
|
SECTION-NEXT: Size:
|
|
SECTION-NEXT: Link:
|
|
SECTION-NEXT: Info:
|
|
SECTION-NEXT: AddressAlignment:
|
|
SECTION-NEXT: EntrySize: 32
|
|
|
|
SECTION: Name: .symtab
|
|
SECTION-NEXT: Type: SHT_SYMTAB
|
|
SECTION-NEXT: Flags [
|
|
SECTION-NEXT: ]
|
|
SECTION-NEXT: Address:
|
|
SECTION-NEXT: Offset:
|
|
SECTION-NEXT: Size:
|
|
SECTION-NEXT: Link:
|
|
SECTION-NEXT: Info:
|
|
SECTION-NEXT: AddressAlignment:
|
|
SECTION-NEXT: EntrySize: 32
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-sh_entsize.elf 2>&1 | FileCheck --check-prefix=INVALID-SYM-SIZE %s
|
|
INVALID-SYM-SIZE: invalid sh_entsize
|
|
|
|
RUN: not llvm-readobj --dyn-symbols %p/Inputs/invalid-sh_entsize.elf 2>&1 | FileCheck --check-prefix=INVALID-DYNSYM-SIZE %s
|
|
INVALID-DYNSYM-SIZE: Invalid entity size
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-section-index.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-INDEX %s
|
|
INVALID-SECTION-INDEX: invalid section index
|
|
|
|
RUN: not llvm-readobj -s %p/Inputs/invalid-section-size.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-SIZE %s
|
|
INVALID-SECTION-SIZE: invalid section header entry size (e_shentsize) in ELF header
|
|
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-symbol-table-size.elf 2>&1 | FileCheck --check-prefix=INVALID-SYMTAB-SIZE %s
|
|
INVALID-SYMTAB-SIZE: size is not a multiple of sh_entsize
|
|
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-xindex-size.elf 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s
|
|
INVALID-XINDEX-SIZE: invalid section contents size
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-e_shnum.elf 2>&1 | FileCheck --check-prefix=INVALID-SH-NUM %s
|
|
INVALID-SH-NUM: invalid e_phentsize
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \
|
|
RUN: FileCheck --check-prefix=INVALID-EXT-SYMTAB-INDEX %s
|
|
INVALID-EXT-SYMTAB-INDEX: index past the end of the symbol table
|
|
|
|
RUN: not llvm-readobj -r %p/Inputs/invalid-relocation-sec-sh_offset.elf-i386 2>&1 | \
|
|
RUN: FileCheck --check-prefix=INVALID-RELOC-SH-OFFSET %s
|
|
RUN: not llvm-readobj -r %p/Inputs/invalid-relocation-sec-sh_offset.elf-x86-64 2>&1 | \
|
|
RUN: FileCheck --check-prefix=INVALID-RELOC-SH-OFFSET %s
|
|
INVALID-RELOC-SH-OFFSET: invalid section offset
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-section-size2.elf 2>&1 | \
|
|
RUN: FileCheck --check-prefix=INVALID-SECTION-SIZE2 %s
|
|
INVALID-SECTION-SIZE2: invalid section offset
|
|
|
|
RUN: not llvm-readobj -t %p/Inputs/invalid-sections-num.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-NUM %s
|
|
INVALID-SECTION-NUM: section table goes past the end of file
|
|
|
|
RUN: not llvm-readobj -r %p/Inputs/invalid-rel-sym.elf 2>&1 | FileCheck --check-prefix=INVALID-REL-SYM %s
|
|
INVALID-REL-SYM: invalid section offset
|
|
|
|
RUN: not llvm-readobj -r %p/Inputs/invalid-buffer.elf 2>&1 | FileCheck --check-prefix=INVALID-BUFFER %s
|
|
INVALID-BUFFER: Invalid buffer
|
|
|
|
RUN: not llvm-readobj %p/Inputs/invalid-coff-header-too-small 2>&1 | FileCheck --check-prefix=COFF-HEADER %s
|
|
COFF-HEADER: The file was not recognized as a valid object file
|