libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Blackfin and version scripts


From: Werner Koch
Subject: Blackfin and version scripts
Date: Tue, 22 Jun 2010 11:42:43 +0200
User-agent: Gnus/5.13 (Gnus v5.13)

Hi!

Mike and Robin found a build problem with libgcrypt on Blackfin using
the GNU toolchain: Libgcrypt as most other GnuPG related libraries tries
to keep a well defined ABI and thus use a version script to guarantee
that.  The version script is passed to libtool this way:

  if HAVE_LD_VERSION_SCRIPT
    libgcrypt_version_script_cmd = -Wl,--version-script=$(srcdir)/libgcrypt.vers
  else
    libgcrypt_version_script_cmd = 
  endif
  [...]
  libgcrypt_la_LDFLAGS = $(no_undefined) $(export_symbols) \
        $(libgcrypt_version_script_cmd) -version-info \
        @LIBGCRYPT_LT_CURRENT@:@LIBGCRYPT_LT_REVISION@:@LIBGCRYPT_LT_AGE@

$(no_undefined) $(export_symbols) are only used for W32 and not defined
if we have version script support.

Now, versions scripts are using the symbols verbatim as in the C code:

  GCRYPT_1.2 {
    global:
      gcry_check_version; gcry_control;
  [...]      

Blackfin seems to be the only platform which has version script support
and prefixes symbols with underscores.  That does not work of course.

Ways to fix this are:

(1) Use autoconf to create a foo.vers from foo.vers.in while prefixing
all symbols like

  GCRYPT_1.2 {
    global:
      @address@hidden; @address@hidden;
  [...]      

I think this looks too ugly and has also the drawback that we need to
get libtool's idea of the symbol prefix into autoconf.  For libgcrypt
thsi is easy becuase due to the assembler modules we need to know it
anyway; but other libs don't need to know this.

(2) Another solution would be to sed the file on the fly in the
Makefile.  This is better but requires that we need to maintain this
code in all projects.

(3) Introduce an new option in LD which tells it to use the native
symbol prefix of the platform for all symbols in the versions script.
This may take some time until it is implemneted and widely availabale.

(4) Let libtool do something.  This may be an option to detect
-Wl,--version-script=foo on the command line and hook in a sed to
transform the symbols.  It is pretty common that symols are all prefixed
with something like "foo_" or "_foo_" and thus the option could take a
list of these prefixes and - if a symbol prefix is required - transform
the version script.


Shalom-Salam,

   Werner

-- 
Die Gedanken sind frei.  Ausnahmen regelt ein Bundesgesetz.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]