[LLD][ELF] - Improve "sh_addralign is not a power of 2" diagnostics.

This patch removes the precompiled binary from inputs,
replacing it with a YAML. And teaches LLD to report a
section name in case of such error.

Differential revision: https://reviews.llvm.org/D58670

llvm-svn: 354959
This commit is contained in:
George Rimar 2019-02-27 10:28:23 +00:00
parent 65706cf715
commit cc19dc75fb
3 changed files with 17 additions and 6 deletions

View File

@ -76,7 +76,7 @@ InputSectionBase::InputSectionBase(InputFile *File, uint64_t Flags,
// no alignment constraits. // no alignment constraits.
uint32_t V = std::max<uint64_t>(Alignment, 1); uint32_t V = std::max<uint64_t>(Alignment, 1);
if (!isPowerOf2_64(V)) if (!isPowerOf2_64(V))
fatal(toString(File) + ": section sh_addralign is not a power of 2"); fatal(toString(this) + ": sh_addralign is not a power of 2");
this->Alignment = V; this->Alignment = V;
// In ELF, each section can be compressed by zlib, and if compressed, // In ELF, each section can be compressed by zlib, and if compressed,

View File

@ -1,5 +1,16 @@
## section-alignment-notpow2.elf has section alignment # RUN: yaml2obj %s -o %t.o
## 0xFFFFFFFF which is not a power of 2. # RUN: not ld.lld %t.o -o %tout 2>&1 | FileCheck %s
# RUN: not ld.lld %p/Inputs/section-alignment-notpow2.elf -o /dev/null 2>&1 | \
# RUN: FileCheck %s # CHECK: error: {{.*}}.o:(.text): sh_addralign is not a power of 2
# CHECK: section sh_addralign is not a power of 2
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x3