Skip to content
  • Clemens Fruhwirth's avatar
    Fix -split-obj on Mac OS via -fasm · ee40dd6b
    Clemens Fruhwirth authored
    The problem of the splitter was that it re-emitted section directives
    for every dynamic label found. The following was torn apart
    
    .symbol_stubs
    .indirect <symbol>
    L_<symbol>$stub: 
    	jmp *...
    L_<symbol>$stub_binder:
    	..somebinding code..
    
    into
    
    .symbol_stubs
    .indirect_symbol <symbol>
    L_<symbol>$stub: 
    	jmp *...
    .symbol_stubs <--- NEW
    L_<symbol>$stub_binder:
    	..somebinding code..
    
    This is incorrect as the Mac OS assembler enforces that every new code
    section that goes into .symbol_stubs is associated with the linker
    directive .indirect_symbol. This sanity check is obviously violated
    when we reemit .symbol_stub in the splitter. The solution is to ignore
    everything that ends with $stub_binder as new label, and chuck it into
    a single label for $stub.
    
    Also the splitter has to recognize .section __DATA... for the lazy_ptr
    indirection symbol. Adds a reminder to PositionIndependentCode.hs to
    take care of the splitter when the code generation is changed.
    
    This should not affect -fvia-c as the code generated by the C compiler
    is entirely different.
    ee40dd6b