[PATCH v2][lld] ELF: Handle sh_addralign being set to zero
Will Newton
will.newton at linaro.org
Tue Jan 20 02:39:56 PST 2015
On 13 January 2015 at 16:57, Will Newton <will.newton at linaro.org> wrote:
> sh_addralign of zero is equivalent to sh_addralign of one, meaning
> no alignment specified. Avoid calculating Log2 or modulus when
> sh_addralign is zero as the results will not be useful.
> ---
> lib/ReaderWriter/ELF/Atoms.h | 3 +++
> test/elf/sh_addralign.test | 38 ++++++++++++++++++++++++++++++++++++++
> 2 files changed, 41 insertions(+)
> create mode 100644 test/elf/sh_addralign.test
>
> Changes in v2:
> - Added a test
Ping - is the test ok?
> diff --git a/lib/ReaderWriter/ELF/Atoms.h b/lib/ReaderWriter/ELF/Atoms.h
> index 23fa3f8..1aed346 100644
> --- a/lib/ReaderWriter/ELF/Atoms.h
> +++ b/lib/ReaderWriter/ELF/Atoms.h
> @@ -286,6 +286,9 @@ public:
> if ((_symbol->getType() == llvm::ELF::STT_COMMON) ||
> _symbol->st_shndx == llvm::ELF::SHN_COMMON) {
> return Alignment(llvm::Log2_64(_symbol->st_value));
> + } else if (_section->sh_addralign == 0) {
> + // sh_addralign of 0 means no alignment
> + return Alignment(0, _symbol->st_value);
> }
> return Alignment(llvm::Log2_64(_section->sh_addralign),
> _symbol->st_value % _section->sh_addralign);
> diff --git a/test/elf/sh_addralign.test b/test/elf/sh_addralign.test
> new file mode 100644
> index 0000000..404c676
> --- /dev/null
> +++ b/test/elf/sh_addralign.test
> @@ -0,0 +1,38 @@
> +# Check handling of section alignment.
> +# RUN: yaml2obj -format=elf %s > %t-obj
> +# RUN: lld -flavor gnu -target arm64 -o %t-exe %t-obj
> +# RUN: llvm-objdump -h %t-exe | FileCheck %s
> +
> +# CHECK: 8 .data 00000000 0000000000402000 DATA
> +
> +!ELF
> +FileHeader: !FileHeader
> + Class: ELFCLASS64
> + Data: ELFDATA2LSB
> + Type: ET_REL
> + Machine: EM_AARCH64
> +
> +Sections:
> +- Name: .text
> + Type: SHT_PROGBITS
> + Content: ''
> + AddressAlign: 0
> + Flags: [SHF_ALLOC, SHF_EXECINSTR]
> +- Name: .bss
> + Type: SHT_NOBITS
> + Flags: [ SHF_WRITE, SHF_ALLOC ]
> + AddressAlign: 1
> + Content: ''
> + Size: 0x80000000
> +- Name: .data
> + Type: SHT_PROGBITS
> + Content: ''
> + AddressAlign: 4096
> + Flags: [SHF_ALLOC, SHF_WRITE]
> +
> +Symbols:
> + Global:
> + - Name: _start
> + Section: .text
> + Value: 0x0
> + Size: 4
> --
> 2.1.0
>
--
Will Newton
Toolchain Working Group, Linaro
More information about the llvm-commits
mailing list