mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
It turns out that putting an 8-byte symbol in a 4-byte section makes Solaris ld sulk. GNU ld is perfectly happy with it, which is worrying for a whole other set of reasons...
Thanks to Anton, Duncan and Rafael for helping me track this down. Pointy hat to Rafael for introducing the bug in the first place. llvm-svn: 150811
This commit is contained in:
parent
a37a7e5a0f
commit
86b0f069d6
@ -77,14 +77,14 @@ void TargetLoweringObjectFileELF::emitPersonalityValue(MCStreamer &Streamer,
|
||||
Flags,
|
||||
SectionKind::getDataRel(),
|
||||
0, Label->getName());
|
||||
unsigned Size = TM.getTargetData()->getPointerSize();
|
||||
Streamer.SwitchSection(Sec);
|
||||
Streamer.EmitValueToAlignment(8);
|
||||
Streamer.EmitValueToAlignment(Size);
|
||||
Streamer.EmitSymbolAttribute(Label, MCSA_ELF_TypeObject);
|
||||
const MCExpr *E = MCConstantExpr::Create(8, getContext());
|
||||
const MCExpr *E = MCConstantExpr::Create(Size, getContext());
|
||||
Streamer.EmitELFSize(Label, E);
|
||||
Streamer.EmitLabel(Label);
|
||||
|
||||
unsigned Size = TM.getTargetData()->getPointerSize();
|
||||
Streamer.EmitSymbolValue(Sym, Size);
|
||||
}
|
||||
|
||||
|
28
test/CodeGen/X86/personality_size.ll
Normal file
28
test/CodeGen/X86/personality_size.ll
Normal file
@ -0,0 +1,28 @@
|
||||
; RUN: llc < %s -relocation-model=pic -disable-cfi -mtriple=x86_64-pc-solaris2.11 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X64
|
||||
; RUN: llc < %s -relocation-model=pic -disable-cfi -mtriple=i386-pc-solaris2.11 -disable-cgp-branch-opts | FileCheck %s -check-prefix=X32
|
||||
; PR1632
|
||||
|
||||
define void @_Z1fv() {
|
||||
entry:
|
||||
invoke void @_Z1gv()
|
||||
to label %return unwind label %unwind
|
||||
|
||||
unwind: ; preds = %entry
|
||||
%exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0
|
||||
cleanup
|
||||
ret void
|
||||
|
||||
return: ; preds = %eh_then, %entry
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @_Z1gv()
|
||||
|
||||
declare i32 @__gxx_personality_v0(...)
|
||||
|
||||
; X64: .size DW.ref.__gxx_personality_v0, 8
|
||||
; X64: .quad __gxx_personality_v0
|
||||
|
||||
; X32: .size DW.ref.__gxx_personality_v0, 4
|
||||
; X32: .long __gxx_personality_v0
|
||||
|
Loading…
Reference in New Issue
Block a user