Skip to content
Snippets Groups Projects
Commit c1eff79f authored by Rafael Espindola's avatar Rafael Espindola
Browse files

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
parent acac3ab7
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
# 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment