<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Thanks Eric!<div><br><div apple-content-edited="true">
<div style="color: rgb(0, 0, 0); font-family: Helvetica;  font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">-Quentin</div>

</div>
<br><div style=""><div>On Apr 14, 2014, at 10:24 AM, Eric Christopher <<a href="mailto:echristo@gmail.com">echristo@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Still coming out from under Euro backlog. It's on my list :)<br><br>-eric<br><br>On Mon, Apr 14, 2014 at 10:23 AM, Quentin Colombet <<a href="mailto:qcolombet@apple.com">qcolombet@apple.com</a>> wrote:<br><blockquote type="cite">Ping?<br><br>Thanks,<br>-Quentin<br><br>On Apr 9, 2014, at 4:06 PM, Quentin Colombet <<a href="mailto:qcolombet@apple.com">qcolombet@apple.com</a>> wrote:<br><br>Hi Eric and Jim,<br><br>@Eric, I do not know if you are the right person to review this, but compact<br>frame information looks related enough to dwarf emission that I assume you<br>know :).<br><br>The attached patch fixes an assertion failure[1] in the assembler when a<br>.cfi_startproc is used before a function (or more generally a symbol) is<br>defined.<br><br>Thanks for your reviews/feedbacks.<br><br>** Context **<br><br>Currently the assembler crashes when emitting the compact unwind information<br>if the input assembly file starts with a .cfi_startproc directive before any<br>symbol has been defined.<br><br>I am not a CFI expert, but that does not look right to me to use a<br>.cfi_startproc directive without having started the related function!<br><br><br>** Proposed Solution **<br><br>Issue a backend fatal error if a frame is started whereas no symbol is<br>defined. Although this diagnostic method is not pretty, this is how all cfi<br>related errors are handled (e.g., looks for No open frame).<br><br>The patch also modifies a few test cases to define a function before<br>.cfi_startproc is used.<br>I.e., test cases like this:<br>.cfi_startproc<br><br>Looks like this now:<br>_proc:<br>.cfi_startproc<br><br>If that does not make sense, please let me know!<br><br><<a href="rdar://problem/15939159">rdar://problem/15939159</a>><br><br>[1]<br>Assertion failed: (Symbol), function MCSymbolRefExpr, file<br>include/llvm/MC/MCExpr.h, line 273.<br>0  llvm-mc                  0x0000000109d85e3e<br>llvm::sys::PrintStackTrace(__sFILE*) + 46<br>1  llvm-mc                  0x0000000109d8614b<br>PrintStackTraceSignalHandler(void*) + 27<br>2  llvm-mc                  0x0000000109d864c8 SignalHandler(int) + 408<br>3  libsystem_platform.dylib 0x00007fff8f8895aa _sigtramp + 26<br>4  libsystem_platform.dylib 0x00007f9452c05338 _sigtramp + 3275210152<br>5  llvm-mc                  0x0000000109d8617b raise + 27<br>6  llvm-mc                  0x0000000109d86232 abort + 18<br>7  llvm-mc                  0x0000000109d86211 __assert_rtn + 129<br>8  llvm-mc                  0x0000000109d019bf<br>llvm::MCSymbolRefExpr::MCSymbolRefExpr(llvm::MCSymbol const*,<br>llvm::MCSymbolRefExpr::VariantKind, llvm::MCAsmInfo const*) + 143<br>9  llvm-mc                  0x0000000109d0081b<br>llvm::MCSymbolRefExpr::MCSymbolRefExpr(llvm::MCSymbol const*,<br>llvm::MCSymbolRefExpr::VariantKind, llvm::MCAsmInfo const*) + 43<br>10 llvm-mc                  0x0000000109cfda56<br>llvm::MCSymbolRefExpr::Create(llvm::MCSymbol const*,<br>llvm::MCSymbolRefExpr::VariantKind, llvm::MCContext&) + 134<br>11 llvm-mc                  0x0000000109b79df4<br>llvm::MCSymbolRefExpr::Create(llvm::MCSymbol const*, llvm::MCContext&) + 36<br>12 llvm-mc                  0x0000000109d16f85<br>llvm::MCStreamer::EmitSymbolValue(llvm::MCSymbol const*, unsigned int) + 69<br>13 llvm-mc                  0x0000000109ceb7ca (anonymous<br>namespace)::FrameEmitterImpl::EmitCompactUnwind(llvm::MCStreamer&,<br>llvm::MCDwarfFrameInfo const&) + 314<br>14 llvm-mc                  0x0000000109ceb2d6<br>llvm::MCDwarfFrameEmitter::Emit(llvm::MCStreamer&, llvm::MCAsmBackend*,<br>bool, bool) + 470<br>15 llvm-mc                  0x0000000109d1b1cf<br>llvm::MCStreamer::EmitFrames(llvm::MCAsmBackend*, bool) + 95<br>16 llvm-mc                  0x0000000109d04152 (anonymous<br>namespace)::MCMachOStreamer::FinishImpl() + 66<br>17 llvm-mc                  0x0000000109d1b2df llvm::MCStreamer::Finish() +<br>159<br>18 llvm-mc                  0x0000000109c30582 (anonymous<br>namespace)::AsmParser::Run(bool, bool) + 2546<br>19 llvm-mc                  0x000000010995457c AssembleInput(char const*,<br>llvm::Target const*, llvm::SourceMgr&, llvm::MCContext&, llvm::MCStreamer&,<br>llvm::MCAsmInfo&, llvm::MCSubtargetInfo&, llvm::MCInstrInfo&) + 940<br>20 llvm-mc                  0x0000000109952461 main + 9457<br>21 libdyld.dylib            0x00007fff959e65fd start + 1<br><br>Cheers,<br>-Quentin<br><cfi_startproc.patch><br>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits<br><br><br></blockquote></blockquote></div><br></div></body></html>