diff options
-rw-r--r-- | libc-abis | 44 | ||||
-rw-r--r-- | scripts/gen-libc-abis | 26 |
2 files changed, 70 insertions, 0 deletions
diff --git a/libc-abis b/libc-abis new file mode 100644 index 0000000..6e9cce8 --- /dev/null +++ b/libc-abis @@ -0,0 +1,44 @@ +# 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* diff --git a/scripts/gen-libc-abis b/scripts/gen-libc-abis new file mode 100644 index 0000000..ce9ac5e --- /dev/null +++ b/scripts/gen-libc-abis @@ -0,0 +1,26 @@ +#! /bin/sh +triple="$1" + +printf "#ifndef _LIBC_ABIS_H\n#define _LIBC_ABIS_H 1\n\n" +printf "enum\n{\n LIBC_ABI_DEFAULT = 0,\n" + +while read s t; do + if test "$s" = "#" || test -z "$s"; then continue; fi + if test -z "$t"; then + printf " LIBC_ABI_%s,\n" "$s" + features="$features $s" + else + case "$triple" in + $t) printf " LIBC_ABI_%s,\n" "$s" + features="$features $s" ;; + *) ;; + esac + fi +done + +printf " LIBC_ABI_MAX\n};\n" +printf "\n#endif\n" + +if test -n "$features"; then + printf "#define LIBC_ABIS_STRING \"libc ABIs:%s\\\\n\"\n" "$features" +fi |