mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Florian Weimer <fweimer@redhat.com>
To: musl@lists.openwall.com
Subject: Symbol versioning approximation trips on compat symbols
Date: Mon, 21 Jan 2019 18:57:53 +0100	[thread overview]
Message-ID: <87r2d5evvi.fsf@oldenburg2.str.redhat.com> (raw)

On what appears to be current Alpine Linux (musl-1.1.19-r10), the
following reproducer

######################################################################
cat > symver.c <<EOF
void
compat_function (void)
{
}
__asm__ (".symver compat_function,compat_function@SYMVER");

void
call_compat_function (void)
{
  return compat_function ();
}
EOF

echo "SYMVER { };" > symver.map

cat > main.c <<EOF
extern void call_compat_function (void);

int
main (void)
{
  call_compat_function ();
}
EOF

gcc -fpic -shared -o symver.so -Wl,--version-script=symver.map symver.c
gcc -Wl,--rpath=. -o main main.c symver.so
######################################################################

fails with:

$ ./main
Error relocating ./symver.so: compat_function: symbol not found

The problem is the compatibility symbol (one @ instead of @@).  The
dynamic linker is supposed to ignore the difference between the two, the
default vs non-default version only matters to the link editor when
processing an undefined symbol without a symbol version.

In my case, I do not need symbol interposition and therefore can work
around this, but I wonder if there is some sort of approved compile-time
or link-time check to detect this issue.  Unfortunately, the Alpine
Linux toolchain (and part of the system) is built *with* symbol
versioning support, so this does not appear to be straightforward.

The actual application does not need to make the symbol interposable, so
I can use a hidden alias within the DSO for PLT avoidance (and more
configure checks to disable all this on targets which do not support
*that*).

Thanks,
Florian


             reply	other threads:[~2019-01-21 17:57 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21 17:57 Florian Weimer [this message]
2019-01-24  1:43 ` Rich Felker
2019-01-24  9:28   ` u-uy74
2019-01-24 10:11     ` Florian Weimer
2019-01-24 11:09   ` Szabolcs Nagy
2019-01-24 11:18     ` Florian Weimer
2019-01-27  4:04       ` Rich Felker
2019-01-27  9:36         ` u-uy74
2019-01-28  6:34           ` Florian Weimer
2019-01-28  9:17             ` Timo Teras
2019-01-28 11:33               ` Szabolcs Nagy
2019-01-28 12:40             ` Szabolcs Nagy
2019-01-28 13:08             ` (OT?) Re: [musl] " u-uy74
2019-01-28 15:22               ` Markus Wichmann
2019-01-28 15:34                 ` Rich Felker
2019-01-28 15:29               ` Rich Felker
2019-01-29 17:13                 ` u-uy74
2019-01-30 14:57                   ` Rich Felker
2019-01-28 21:57             ` A. Wilcox
2019-01-28 22:52               ` Matias Fonzo
2019-01-28 23:12                 ` Zach van Rijn
2019-01-28 23:41                   ` A. Wilcox
2019-01-28 23:47                     ` Rich Felker
2019-01-29  3:22                       ` A. Wilcox
2019-01-29 19:40                         ` Matias Fonzo
2019-01-29 19:31                   ` Matias Fonzo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r2d5evvi.fsf@oldenburg2.str.redhat.com \
    --to=fweimer@redhat.com \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).