forked from OSchip/llvm-project
When emitting the PC range in an FDE, use the same data encoding for both ends
of the range. Fixes PR13581! llvm-svn: 161739
This commit is contained in:
parent
3d2b271362
commit
333449cd65
|
@ -1294,20 +1294,17 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer,
|
|||
streamer.EmitSymbolValue(&cieStart, 4);
|
||||
}
|
||||
|
||||
unsigned fdeEncoding = MOFI->getFDEEncoding(UsingCFI);
|
||||
unsigned size = getSizeForEncoding(streamer, fdeEncoding);
|
||||
|
||||
// PC Begin
|
||||
unsigned PCBeginEncoding = IsEH ? fdeEncoding :
|
||||
(unsigned)dwarf::DW_EH_PE_absptr;
|
||||
unsigned PCBeginSize = getSizeForEncoding(streamer, PCBeginEncoding);
|
||||
EmitSymbol(streamer, *frame.Begin, PCBeginEncoding, "FDE initial location");
|
||||
unsigned PCEncoding = IsEH ? MOFI->getFDEEncoding(UsingCFI)
|
||||
: (unsigned)dwarf::DW_EH_PE_absptr;
|
||||
unsigned PCSize = getSizeForEncoding(streamer, PCEncoding);
|
||||
EmitSymbol(streamer, *frame.Begin, PCEncoding, "FDE initial location");
|
||||
|
||||
// PC Range
|
||||
const MCExpr *Range = MakeStartMinusEndExpr(streamer, *frame.Begin,
|
||||
*frame.End, 0);
|
||||
if (verboseAsm) streamer.AddComment("FDE address range");
|
||||
streamer.EmitAbsValue(Range, size);
|
||||
streamer.EmitAbsValue(Range, PCSize);
|
||||
|
||||
if (IsEH) {
|
||||
// Augmentation Data Length
|
||||
|
@ -1330,7 +1327,7 @@ MCSymbol *FrameEmitterImpl::EmitFDE(MCStreamer &streamer,
|
|||
EmitCFIInstructions(streamer, frame.Instructions, frame.Begin);
|
||||
|
||||
// Padding
|
||||
streamer.EmitValueToAlignment(PCBeginSize);
|
||||
streamer.EmitValueToAlignment(PCSize);
|
||||
|
||||
return fdeEnd;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# RUN: llvm-mc -filetype=obj %s -o %t.o && llvm-objdump -s %t.o
|
||||
# PR13581
|
||||
|
||||
# CHECK: Contents of section .debug_frame:
|
||||
# CHECK-NEXT: 0000 14000000 ffffffff 01000178 100c0708 ...........x....
|
||||
# CHECK-NEXT: 0010 90010000 00000000 1c000000 00000000 ................
|
||||
# CHECK-NEXT: 0020 00000000 00000000 11000000 00000000 ................
|
||||
# CHECK-NEXT: 0030 410e1086 02430d06 A....C..
|
||||
|
||||
__cxx_global_var_init: # @__cxx_global_var_init
|
||||
.cfi_startproc
|
||||
.Lfunc_begin0:
|
||||
# BB#0: # %entry
|
||||
pushq %rbp
|
||||
.Ltmp2:
|
||||
.cfi_def_cfa_offset 16
|
||||
.Ltmp3:
|
||||
.cfi_offset %rbp, -16
|
||||
movq %rsp, %rbp
|
||||
.Ltmp4:
|
||||
.cfi_def_cfa_register %rbp
|
||||
.Ltmp5:
|
||||
callq _Z2rsv@PLT
|
||||
movl %eax, _ZL1i(%rip)
|
||||
popq %rbp
|
||||
ret
|
||||
.cfi_endproc
|
||||
.cfi_sections .debug_frame
|
Loading…
Reference in New Issue