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 | 9c411e649e86c1734bc087d0e87208569ae1cb5c (patch) | |
tree | 9130e3330e80c0009a000ef7c09db8fc808224ec /lib/MC | |
parent | 113d32cea868bd1749b4cdc8d1e52d9dccb8b5a2 (diff) | |
download | external_llvm-9c411e649e86c1734bc087d0e87208569ae1cb5c.zip external_llvm-9c411e649e86c1734bc087d0e87208569ae1cb5c.tar.gz external_llvm-9c411e649e86c1734bc087d0e87208569ae1cb5c.tar.bz2 |
Revert: Fix alignment of unwind data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185790 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCWin64EH.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/MC/MCWin64EH.cpp b/lib/MC/MCWin64EH.cpp index b8b07d3..c3d568b 100644 --- a/lib/MC/MCWin64EH.cpp +++ b/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); } } |