mirror of
https://github.com/mirror/tinycc.git
synced 2026-08-22 11:23:27 +08:00
lazy binding
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
This commit is contained in:
@@ -1153,7 +1153,8 @@ void __attribute__((destructor)) __bound_exit(void)
|
||||
dprintf(stderr, "%s, %s():\n", __FILE__, __FUNCTION__);
|
||||
|
||||
if (inited) {
|
||||
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined TCC_MUSL
|
||||
#if !defined(_WIN32) && !defined(__APPLE__) && !defined TCC_MUSL && \
|
||||
!defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
|
||||
if (print_heap) {
|
||||
extern void __libc_freeres (void);
|
||||
__libc_freeres ();
|
||||
|
||||
Reference in New Issue
Block a user