The DWARF unwind info was incorrect. While compiling with
authorBill Wendling <isanbard@gmail.com>
Thu, 4 Jun 2009 22:52:30 +0000 (22:52 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 4 Jun 2009 22:52:30 +0000 (22:52 +0000)
commite075a6274600f987e040caf9134d8429cb52dbb6
tree281d54feb5ca566333585c12a7e11ad10accb25f
parentae3a0be92e33bc716722aa600983fc1535acb122
The DWARF unwind info was incorrect. While compiling with
`-fomit-frame-pointer', we would lack the DW_CFA_advance_loc information for a
lot of function, and then they would be `0'. The linker (at least on Darwin)
needs to encode the stack size. In some cases, the stack size is too large to
directly encode. So the linker checks to see if there is a "subl $xxx,%esp"
instruction at the point where the `DW_CFA_def_cfa_offset' says the pc was. If
so, the compact encoding records the offset in the function to where the stack
size is embedded. But because the `DW_CFA_advance_loc' instructions are missing,
it looks before the function and dies.

So, instead of emitting the EH debug label before the stack adjustment
operations, emit it afterwards, right before the frame move stuff.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72898 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86RegisterInfo.cpp