diff options
| author | Kai Nacke <kai.nacke@redstar.de> | 2013-07-08 04:45:05 +0000 |
|---|---|---|
| committer | Kai Nacke <kai.nacke@redstar.de> | 2013-07-08 04:45:05 +0000 |
| commit | 07bad44e9b09b7a8aeea35a5f0d6c60489deab48 (patch) | |
| tree | 2b713e12c1d3abb92245d7719ab0083b6a9eb3ea /llvm/lib | |
| parent | 0a4e1f586c0e154e29dabff85a71893b0bba64f2 (diff) | |
| download | bcm5719-llvm-07bad44e9b09b7a8aeea35a5f0d6c60489deab48.tar.gz bcm5719-llvm-07bad44e9b09b7a8aeea35a5f0d6c60489deab48.zip | |
Revert: Fix alignment of unwind data.
llvm-svn: 185790
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/MC/MCWin64EH.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/MC/MCWin64EH.cpp b/llvm/lib/MC/MCWin64EH.cpp index b8b07d3a180..c3d568b454c 100644 --- a/llvm/lib/MC/MCWin64EH.cpp +++ b/llvm/lib/MC/MCWin64EH.cpp @@ -159,11 +159,11 @@ static void EmitUnwindInfo(MCStreamer &streamer, MCWin64EHUnwindInfo *info) { MCContext &context = streamer.getContext(); streamer.EmitValueToAlignment(4); + // Upper 3 bits are the version number (currently 1). + uint8_t flags = 0x01; info->Symbol = context.CreateTempSymbol(); streamer.EmitLabel(info->Symbol); - // Upper 3 bits are the version number (currently 1). - uint8_t flags = 0x01; if (info->ChainedParent) flags |= Win64EH::UNW_ChainInfo << 3; else { @@ -199,14 +199,6 @@ static void EmitUnwindInfo(MCStreamer &streamer, MCWin64EHUnwindInfo *info) { EmitUnwindCode(streamer, info->Begin, inst); } - // For alignment purposes, the instruction array will always have an even - // number of entries, with the final entry potentially unused (in which case - // the array will be one longer than indicated by the count of unwind codes - // field). - if (numCodes & 1) { - streamer.EmitIntValue(0, 2); - } - if (flags & (Win64EH::UNW_ChainInfo << 3)) EmitRuntimeFunction(streamer, info->ChainedParent); else if (flags & @@ -214,11 +206,14 @@ static void EmitUnwindInfo(MCStreamer &streamer, MCWin64EHUnwindInfo *info) { streamer.EmitValue(MCSymbolRefExpr::Create(info->ExceptionHandler, MCSymbolRefExpr::VK_COFF_IMGREL32, context), 4); - else if (numCodes == 0) { + else if (numCodes < 2) { // The minimum size of an UNWIND_INFO struct is 8 bytes. If we're not // a chained unwind info, if there is no handler, and if there are fewer // than 2 slots used in the unwind code array, we have to pad to 8 bytes. - streamer.EmitIntValue(0, 4); + if (numCodes == 1) + streamer.EmitIntValue(0, 2); + else + streamer.EmitIntValue(0, 4); } } |

