Skip to content
  • Duncan Sands's avatar
    Split the init.trampoline intrinsic, which currently combines GCC's · a098436b
    Duncan Sands authored
    init.trampoline and adjust.trampoline intrinsics, into two intrinsics
    like in GCC.  While having one combined intrinsic is tempting, it is
    not natural because typically the trampoline initialization needs to
    be done in one function, and the result of adjust trampoline is needed
    in a different (nested) function.  To get around this llvm-gcc hacks the
    nested function lowering code to insert an additional parent variable
    holding the adjust.trampoline result that can be accessed from the child
    function.  Dragonegg doesn't have the luxury of tweaking GCC code, so it
    stored the result of adjust.trampoline in the memory GCC set aside for
    the trampoline itself (this is always available in the child function),
    and set up some new memory (using an alloca) to hold the trampoline.
    Unfortunately this breaks Go which allocates trampoline memory on the
    heap and wants to use it even after the parent has exited (!).  Rather
    than doing even more hacks to get Go working, it seemed best to just use
    two intrinsics like in GCC.  Patch mostly by Sanjoy Das.
    
    llvm-svn: 139140
    a098436b
Loading