glibc/elf/Versions
H.J. Lu 57292f5741 Add GLIBC_ABI_DT_RELR for DT_RELR support
The EI_ABIVERSION field of the ELF header in executables and shared
libraries can be bumped to indicate the minimum ABI requirement on the
dynamic linker.  However, EI_ABIVERSION in executables isn't checked by
the Linux kernel ELF loader nor the existing dynamic linker.  Executables
will crash mysteriously if the dynamic linker doesn't support the ABI
features required by the EI_ABIVERSION field.  The dynamic linker should
be changed to check EI_ABIVERSION in executables.

Add a glibc version, GLIBC_ABI_DT_RELR, to indicate DT_RELR support so
that the existing dynamic linkers will issue an error on executables with
GLIBC_ABI_DT_RELR dependency.  When there is a DT_VERNEED entry with
libc.so on DT_NEEDED, issue an error if there is a DT_RELR entry without
GLIBC_ABI_DT_RELR dependency.

Support __placeholder_only_for_empty_version_map as the placeholder symbol
used only for empty version map to generate GLIBC_ABI_DT_RELR without any
symbols.
2022-04-26 10:16:11 -07:00

89 lines
2.1 KiB
Plaintext

libc {
GLIBC_2.0 {
%ifdef EXPORT_UNWIND_FIND_FDE
__deregister_frame_info; __register_frame_info;
%endif
}
GLIBC_2.1 {
# functions used in other libraries
_dl_mcount_wrapper; _dl_mcount_wrapper_check;
}
GLIBC_2.2.4 {
dl_iterate_phdr;
}
%ifdef EXPORT_UNWIND_FIND_FDE
# Needed for SHLIB_COMPAT calls using this version.
GLIBC_2.2.5 {
}
GCC_3.0 {
__deregister_frame_info_bases; __register_frame_info_bases;
__register_frame_info_table_bases; _Unwind_Find_FDE;
}
%endif
GLIBC_2.35 {
_dl_find_object;
}
GLIBC_ABI_DT_RELR {
# This symbol is used only for empty version map and will be removed
# by scripts/versions.awk.
__placeholder_only_for_empty_version_map;
}
GLIBC_PRIVATE {
# functions used in other libraries
__libc_early_init;
# Internal error handling support. Interposes the functions in ld.so.
_dl_signal_exception; _dl_catch_exception;
_dl_signal_error; _dl_catch_error;
}
}
ld {
GLIBC_2.0 {
_r_debug;
}
GLIBC_2.1 {
# functions used in other libraries
_dl_mcount;
# historically used by Garbage Collectors
__libc_stack_end;
}
GLIBC_2.3 {
# runtime interface to TLS
__tls_get_addr;
}
GLIBC_2.4 {
# stack canary
__stack_chk_guard;
}
GLIBC_2.34 {
__rtld_version_placeholder;
}
GLIBC_PRIVATE {
# Those are in the dynamic linker, but used by libc.so.
__libc_enable_secure;
_dl_allocate_tls; _dl_allocate_tls_init;
_dl_argv; _dl_find_dso_for_object; _dl_get_tls_static_info;
_dl_deallocate_tls; _dl_make_stack_executable;
_dl_rtld_di_serinfo; _dl_starting_up; _dl_fatal_printf;
_dl_audit_symbind_alt; _dl_audit_preinit;
_rtld_global; _rtld_global_ro;
# Only here for gdb while a better method is developed.
_dl_debug_state;
# Pointer protection.
__pointer_chk_guard;
# Internal error handling support.
_dl_exception_create; _dl_exception_create_format; _dl_exception_free;
# Internal error handling support. Interposed by libc.so.
_dl_signal_exception; _dl_catch_exception;
_dl_signal_error; _dl_catch_error;
# Set value of a tunable.
__tunable_get_val;
}
}