Skip to content
  • George Rimar's avatar
    [ELF] - Stop producing broken output for R_386_GOT32[X] relocations. · e7bf9688
    George Rimar authored
    Previously we silently produced broken output for R_386_GOT32X/R_386_GOT32 
    relocations if they were used to compute the address of the symbol’s global
    offset table entry without base register when position-independent code is disabled.
    
    Situation happened because of recent ABI changes. Released ABI mentions that
    R_386_GOT32X can be calculated in a two different ways (so we did not follow ABI here 
    before this patch), but draft ABI also mentions R_386_GOT32 relocation here. 
    We should use the same calculations for both relocations.
    
    Problem is that we always calculated them as G + A - GOT (offset from end of GOT),
    but for case when PIC is disabled, according to i386 ABI calculation should be G + A,
    what should produce just an address in GOT finally.
    
    ABI: https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-draft.pdf (p36, p60).
    llvm-svn: 299812
    e7bf9688
Loading