diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-17 00:28:02 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-17 00:28:02 +0000 |
commit | 32c74ea3abde866a9b0b103a60278dc2f1d3e937 (patch) | |
tree | ac1ebb0ed6a621ef9e9e3f22fa290416401d87e0 /llvm/lib/MC/MCDwarf.cpp | |
parent | 654cc4a81cb93c5342709968d853dc94dcd408b6 (diff) | |
download | bcm5719-llvm-32c74ea3abde866a9b0b103a60278dc2f1d3e937.tar.gz bcm5719-llvm-32c74ea3abde866a9b0b103a60278dc2f1d3e937.zip |
"Fix" FDE alignment to match what gas does.
llvm-svn: 122006
Diffstat (limited to 'llvm/lib/MC/MCDwarf.cpp')
-rw-r--r-- | llvm/lib/MC/MCDwarf.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index c1de31bf069..24ddc825638 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -569,11 +569,9 @@ static const MCSymbol &EmitCIE(MCStreamer &streamer) { return *sectionStart; } -static void EmitFDE(MCStreamer &streamer, - const MCSymbol &cieStart, - const MCDwarfFrameInfo &frame) { - MCContext &context = streamer.getContext(); - const TargetAsmInfo &asmInfo = context.getTargetAsmInfo(); +static MCSymbol *EmitFDE(MCStreamer &streamer, + const MCSymbol &cieStart, + const MCDwarfFrameInfo &frame) { MCSymbol *fdeStart = streamer.getContext().CreateTempSymbol(); MCSymbol *fdeEnd = streamer.getContext().CreateTempSymbol(); @@ -602,12 +600,22 @@ static void EmitFDE(MCStreamer &streamer, // Call Frame Instructions // Padding - streamer.EmitValueToAlignment(asmInfo.getPointerSize()); - streamer.EmitLabel(fdeEnd); + streamer.EmitValueToAlignment(4); + + return fdeEnd; } void MCDwarfFrameEmitter::Emit(MCStreamer &streamer) { + const MCContext &context = streamer.getContext(); + const TargetAsmInfo &asmInfo = context.getTargetAsmInfo(); const MCSymbol &cieStart = EmitCIE(streamer); - for (unsigned i = 0, n = streamer.getNumFrameInfos(); i < n; ++i) - EmitFDE(streamer, cieStart, streamer.getFrameInfo(i)); + MCSymbol *fdeEnd = NULL; + for (unsigned i = 0, n = streamer.getNumFrameInfos(); i < n; ++i) { + fdeEnd = EmitFDE(streamer, cieStart, streamer.getFrameInfo(i)); + if (i != n - 1) + streamer.EmitLabel(fdeEnd); + } + streamer.EmitValueToAlignment(asmInfo.getPointerSize()); + if (fdeEnd) + streamer.EmitLabel(fdeEnd); } |