glibc/libc-abis
Maciej W. Rozycki 9449a295ad libc-abis: Define ABSOLUTE ABI [BZ #19818][BZ #23307]
Define a new ABSOLUTE ABI for static linker's use with EI_ABIVERSION
where correct absolute (SHN_ABS) symbol run-time load semantics is
required.  This way it can be ensured at static link time that a program
or DSO will not suffer from previous semantics where absolute symbols
were relocated by the base address, or symbols whose `st_value' is zero
silently ignored leading to a confusing "undefined symbol" error message
at load time, and instead "ELF file ABI version invalid" is printed with
old dynamic loaders, making it clear that there is an ABI version
incompatibility.

	[BZ #19818]
	[BZ #23307]
	* libc-abis (ABSOLUTE): New ABI.
	* sysdeps/unix/sysv/linux/mips/libc-abis (ABSOLUTE): New ABI.
	* NEWS: Mention the new ABI.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2018-07-05 18:06:43 +01:00

51 lines
2 KiB
Plaintext

# Definition of features which introduce new libc ABI versions. This
# file is used to create a header file with definitions for the various
# versions. The static linker will encode in the EI_ABIVERSION field in
# the e_ident array in the ELF program header the required ABI version.
# This is not a bitmask. The maximum ABI version required must be
# encoded.
#
# Adding new features should always happen by appending new lines. Never
# add entries in the middle or where they seem "logical". Once a version
# is assigned to a feature it must not change again. Since some features
# are conditionally added this can only ever be done securely without much
# risk is by adding at the end.
#
# The following lines have one of two formats:
#
# SYMBOL
# With just a symbol on the line this is the name of a feature which
# is architecture independent.
#
# SYMBOL PLATFORM
# Using this form architecture (and platform) dependent features can be
# specified. The PLATFORM name can use the wildcards available in
# the Bourne shell's case expression.
#
# Note that the same symbol can be used using different platform triples.
# They don't have to be in the same order relative to other entries. This
# can happen if the feature is implemented for different architectures
# at different times.
#
# This file is parsed by a script which produces a header file containing
# a single enum definition. An extra symbol is added as entry zero to
# specify the default ABI with number 0 and an artificial last entry is
# added to allow computing the maximum ABI version for the platform.
#
# Feature Name Configuration
# ------------ -------------
#
# Unique symbol definitions for C++.
# Architecture independent, all ELF targets (== all targets)
UNIQUE
#
# Indirect PLT relocations. Architecture dependent.
IFUNC x86_64-*-linux*
IFUNC i?86-*-linux*
IFUNC powerpc64-*-linux*
IFUNC powerpc-*-linux*
IFUNC sparc64-*-linux*
IFUNC sparc-*-linux*
# Absolute (SHN_ABS) symbols working correctly.
ABSOLUTE