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:
parent
acac3ab779
commit
c1eff79f61
|
@ -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.
|
// 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.
|
// In that case we need to search from the original section piece vector.
|
||||||
const SectionPiece &Piece = *this->getSectionPiece(Offset);
|
const SectionPiece &Piece = *this->getSectionPiece(Offset);
|
||||||
assert(Piece.Live);
|
if (!Piece.Live)
|
||||||
|
return 0;
|
||||||
|
|
||||||
uintX_t Addend = Offset - Piece.InputOff;
|
uintX_t Addend = Offset - Piece.InputOff;
|
||||||
return Piece.OutputOff + Addend;
|
return Piece.OutputOff + Addend;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue