mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-17 05:24:49 +00:00
Do not handle zero-sized mergeable section as mergeable.
Mergeable sections with size zero are useless because they don't actually contain data, and therefore there's no merit ot merge them. However, in reality, there are object files in the wild containing such sections. Currently, LLD can't handle them proerply. This patch makes LLD to handle such sections as if they are non- mergeable to fix the issue. Fixes bug 28822. llvm-svn: 277568
This commit is contained in:
parent
2bb23bfc73
commit
3ebc71eb91
@ -162,6 +162,13 @@ bool elf::ObjectFile<ELFT>::shouldMerge(const Elf_Shdr &Sec) {
|
||||
if (Config->Optimize == 0)
|
||||
return false;
|
||||
|
||||
// A mergeable section with size 0 is useless because they don't have
|
||||
// any data to merge. A mergeable string section with size 0 can be
|
||||
// argued as invalid because it doesn't end with a null character.
|
||||
// We'll avoid a mess by handling them as if they were non-mergeable.
|
||||
if (Sec.sh_size == 0)
|
||||
return false;
|
||||
|
||||
uintX_t Flags = Sec.sh_flags;
|
||||
if (!(Flags & SHF_MERGE))
|
||||
return false;
|
||||
|
12
lld/test/ELF/merge-string-empty.s
Normal file
12
lld/test/ELF/merge-string-empty.s
Normal file
@ -0,0 +1,12 @@
|
||||
// Ensure that a mergeable string with size 0 does not cause any issue.
|
||||
|
||||
// REQUIRES: x86
|
||||
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
||||
// RUN: ld.lld %t.o -o %t
|
||||
|
||||
.globl _start, s
|
||||
.section .rodata.str1.1,"aMS",@progbits,1
|
||||
s:
|
||||
.text
|
||||
_start:
|
||||
.quad s
|
@ -3,6 +3,7 @@
|
||||
// RUN: not ld.lld %t.o -o %t.so -shared 2>&1 | FileCheck %s
|
||||
// CHECK: relocation-past-merge-end.s.tmp.o(.foo): entry is past the end of the section
|
||||
|
||||
.data
|
||||
.long .foo + 1
|
||||
.section .foo,"aM",@progbits,4
|
||||
.data
|
||||
.long .foo + 10
|
||||
.section .foo,"aM",@progbits,4
|
||||
.quad 0
|
||||
|
@ -4,3 +4,4 @@
|
||||
// CHECK: writable SHF_MERGE section is not supported
|
||||
|
||||
.section .foo,"awM",@progbits,4
|
||||
.quad 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user