Skip to content
  • Zejun Wu's avatar
    Fix rare undefined asm temp end label error in x86 · 3c452d0d
    Zejun Wu authored and Ben Gamari's avatar Ben Gamari committed
    Summary:
    Encountered assembly error due to undefined label `.LcaDcU_info_end` for
    following code generated by `pprFrameProc`:
    
    ```
    .Lsat_sa8fp{v}_info_fde_end:
      .long .Lblock{v caDcU}_info_fde_end-.Lblock{v caDcU}_info_fde
    .Lblock{v caDcU}_info_fde:
      .long _nbHlD-.Lsection_frame
      .quad block{v caDcU}_info-1
      .quad .Lblock{v caDcU}_info_end-block{v caDcU}_info+1
      .byte 1
    ```
    
    This diff fixed the error.
    
    Test Plan:
      ./validate
    
    Also the case where we used to have assembly error is now fixed.
    Unfortunately, I have limited insight here and cannot get a small enough repro
    or test case for this.
    
    Ben says:
    
    > I think I see: Previously we only produced end symbols for the info
    > tables of top-level procedures. However, blocks within a procedure may
    > also have info tables, we will dutifully generate debug information for
    > and consequently we get undefined symbols.
    
    Reviewers: simonmar, scpmw, last_g, bgamari
    
    Reviewed By: bgamari
    
    Subscribers: rwbarton, carter
    
    Differential Revision: https://phabricator.haskell.org/D5246
    3c452d0d