Fix --gc-sections crash.

We would crash when a non-alloca section pointed to a gced part of a
merge section.

That can happen when a C/c++ constant in put in a merge section and
debug info is present.

llvm-svn: 282845
This commit is contained in:
Rafael Espindola 2016-09-30 06:37:29 +00:00
parent acac3ab779
commit c1eff79f61
2 changed files with 24 additions and 1 deletions

View File

@ -623,7 +623,9 @@ typename ELFT::uint MergeInputSection<ELFT>::getOffset(uintX_t Offset) const {
// If Offset is not at beginning of a section piece, it is not in the map.
// In that case we need to search from the original section piece vector.
const SectionPiece &Piece = *this->getSectionPiece(Offset);
assert(Piece.Live);
if (!Piece.Live)
return 0;
uintX_t Addend = Offset - Piece.InputOff;
return Piece.OutputOff + Addend;
}

View File

@ -0,0 +1,21 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t --gc-sections
# RUN: llvm-readobj -s --elf-output-style=GNU %t | FileCheck %s
# CHECK: .merge1 PROGBITS {{[0-9a-z]*}} {{[0-9a-z]*}} 000004
.global _start
_start:
.quad .Lfoo
.section .merge1,"aM",@progbits,4
.p2align 2
.Lfoo:
.long 1
.Lbar:
.long 2
.section bar
.quad .Lbar