• herman ten brugge's avatar
    lazy binding · 50b4f320
    herman ten brugge 创作于
    Currently tcc does not use lazy binding. It puts all relocations in the RELX
    section and solve them all at startup.
    This was not working on bsd.
    
    tcc.h:
    - New RELPLT_SECTION_FMT for plt relocations
    - New entry relocplt in struct Section
    
    tccelf.c:
    - put_elf_reloca: put R_JMP_SLOT in relocplt section
    - build_got_entries*: Use two passes because R_JMP_SLOT and R_GLOB_DAT
                          can not be intermixed on some targets (arm, arm64)
    - layout_sections: Calculate correct size relocplt section for DT_ values.
                       Make sure relocplt is last
    - fill_dynamic: Add DT_ values when got is filled
                    move DT_VERSYM because dynamic linker cannot handle it standone
    - Add note section for NetBSD
    
    arm-link.c/arm64-link.c/i386-link.c/riscv64-link.c/x86_64-link.c:
    - fill got table with pointer to plt section or symbol value in case
      of TCC_OUTPUT_MEMORY
    
    arm-link.c/arm64-link.c:
    - fix offset first plt entry
    
    i386-link.c/x86_64-link.c:
    - use correct reloc entry
    - use relofs - sizeof (ElfW_Rel) because the reloc is already done
    
    lib/bcheck.c:
    - no __libc_freeres on FreeBSD and NetBSD
    
    tests/Makefile:
    - Add -fno-stack-protector for OpenBSD
    
    tests/tests2/Makefile:
    - disable 106_pthread/114_bound_signal
    50b4f320