-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* shlib-versions [USE_IN_LIBIO] (.*-.*-gnu-gnu*): Set earliest
supported version for libc 0.2.90.libio to GLIBC_2.2. * Makeconfig (soversions.mk): Grok new third column in shlib-versions, and use it to emit new variable `map-firstversions'. * scripts/firstversions.awk: New file. * Makerules (Versions.all): Use scripts/firstversions.awk and the $(map-firstversions) value to generate a modified versions list that includes renames in "A = B" syntax for each version set earlier than the "earliest symbol version" named in shlib-versions. * scripts/versions.awk: Recognize "A = B" lines in the input to mean rename version set A to B in the output to the intermediate file. * scripts/abi-versions.awk: New file. * Makerules (abi-versions.h): New target, generated by that script. [$(versioning) = yes] (before-compile): Prepend abi-versions.h. * include/shlib-compat.h: New file, uses that generated header.
- Loading branch information
Roland McGrath
committed
Mar 19, 2000
1 parent
8826885
commit 361742e
Showing
8 changed files
with
198 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
/* Macros for managing ABI-compatibility definitions using ELF symbol versions. | ||
Copyright (C) 2000 Free Software Foundation, Inc. | ||
This file is part of the GNU C Library. | ||
The GNU C Library is free software; you can redistribute it and/or | ||
modify it under the terms of the GNU Library General Public License as | ||
published by the Free Software Foundation; either version 2 of the | ||
License, or (at your option) any later version. | ||
The GNU C Library is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
Library General Public License for more details. | ||
You should have received a copy of the GNU Library General Public | ||
License along with the GNU C Library; see the file COPYING.LIB. If not, | ||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
Boston, MA 02111-1307, USA. */ | ||
|
||
#ifndef _SHLIB_COMPAT_H | ||
#define _SHLIB_COMPAT_H 1 | ||
|
||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING | ||
|
||
#include <abi-versions.h> /* header generated by abi-versions.awk */ | ||
|
||
/* The file abi-versions.h (generated by scripts/abi-versions.awk) defines | ||
symbols like `ABI_libm_GLIBC_2_0' to either 1 or 0 indicating whether or | ||
not we want to build binary compatibility for e.g. the GLIBC_2.0 version | ||
set into the libm shared object. If this evaluates to zero, then there | ||
is no need to compile in extra code to support this version set where it | ||
has been superseded by a newer version. The compatibility code should | ||
be conditionalized with `#if SHLIB_COMPAT (libm, GLIBC_2_0)'. */ | ||
|
||
#define SHLIB_COMPAT(lib, version) ABI_##lib##_##version | ||
|
||
/* That header also defines symbols like `VERSION_libm_GLIBC_2_1' to | ||
the version set name to use for e.g. symbols first introduced into | ||
libm in the GLIBC_2.1 version. Definitions of symbols with explicit | ||
versions should look like: | ||
versioned_symbol (libm, new_foo, foo, GLIBC_2_1); | ||
This will define the symbol `foo' with the appropriate default version, | ||
i.e. either GLIBC_2.1 or the "earliest version" specified in | ||
shlib-versions if that is newer. */ | ||
|
||
#define versioned_symbol(lib, local, symbol, version) \ | ||
default_symbol_version (local, symbol, VERSION_##lib##_##version) | ||
|
||
#else | ||
|
||
/* Not compiling ELF shared libraries at all, so never any old versions. */ | ||
#define SHLIB_COMPAT(lib, version) 0 | ||
|
||
/* No versions to worry about, just make this the global definition. */ | ||
#define versioned_symbol(lib, local, symbol, version) \ | ||
weak_alias (local, symbol) | ||
|
||
#endif | ||
|
||
|
||
#endif /* shlib-compat.h */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# Script to generate <abi-versions.h> header file from Versions.all list. | ||
# See include/shlib-compat.h comments for explanation. | ||
|
||
BEGIN { | ||
print "/* This file is automatically generated by abi-versions.awk."; | ||
print " It defines symbols used by shlib-compat.h, which see. */"; | ||
print "\n#ifndef _ABI_VERSIONS_H\n#define _ABI_VERSIONS_H"; | ||
} | ||
|
||
NF == 2 && $2 == "{" { | ||
thislib = $1; | ||
gsub(/[^A-Za-z0-9_ ]/, "_"); libid = $1; | ||
printf "\n/* start %s */\n", thislib; | ||
next; | ||
} | ||
$1 == "}" { | ||
printf "/* end %s */\n", thislib; | ||
next; | ||
} | ||
|
||
$2 == "=" { | ||
new = $3; | ||
gsub(/[^A-Za-z0-9_ ]/, "_"); id = $1; | ||
printf "#define ABI_%s_%s\t0\t/* earliest supported %s */\n", libid, id, new; | ||
printf "#define VERSION_%s_%s\t%s\n", libid, id, new; | ||
next; | ||
} | ||
|
||
{ | ||
vers = $1; | ||
gsub(/[^A-Za-z0-9_ ]/, "_"); id = $1; | ||
printf "#define ABI_%s_%s\t1\t/* support %s */\n", libid, id, vers; | ||
printf "#define VERSION_%s_%s\t%s\n", libid, id, vers; | ||
next; | ||
} | ||
|
||
END { | ||
print "\n#endif /* abi-versions.h */"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Script to preprocess Versions.all lists based on "earliest version" | ||
# specifications in the shlib-versions file. | ||
|
||
NF == 3 && $2 == ":" { firstversion[$1] = $3; next } | ||
|
||
NF == 2 && $2 == "{" { thislib = $1; print; next } | ||
|
||
$1 == "}" { | ||
if (firstversion[thislib]) { | ||
# We haven't seen the stated version, but have produced | ||
# others pointing to it, so we synthesize it now. | ||
printf " %s\n", firstversion[thislib]; | ||
} | ||
print; | ||
next; | ||
} | ||
|
||
{ | ||
if (! firstversion[thislib]) | ||
print; | ||
else if ($1 == firstversion[thislib]) { | ||
print; | ||
firstversion[thislib] = 0; | ||
} | ||
else | ||
print $1, "=", firstversion[thislib]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters