diff options
author | Martin Schlemmer <azarah@gentoo.org> | 2005-12-01 01:00:40 +0000 |
---|---|---|
committer | Martin Schlemmer <azarah@gentoo.org> | 2005-12-01 01:00:40 +0000 |
commit | dd7fcf79c15562adeb22e4b08f326d4d40970082 (patch) | |
tree | 994302094f13e939cffe3b6ecf69df236e9003d7 | |
parent | Rename configure.in to configure.ac. (diff) | |
download | sandbox-dd7fcf79c15562adeb22e4b08f326d4d40970082.tar.gz sandbox-dd7fcf79c15562adeb22e4b08f326d4d40970082.tar.bz2 sandbox-dd7fcf79c15562adeb22e4b08f326d4d40970082.zip |
Fix non-versioned libc's to also prepend '__' to internal symbols by using
strong aliases.
Signed-off-by: Martin Schlemmer <azarah@gentoo.org>
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | localdecls.h | 17 | ||||
-rw-r--r-- | scripts/gen_symbol_header.awk | 6 |
3 files changed, 19 insertions, 7 deletions
@@ -14,6 +14,9 @@ Rename configure.in to configure.ac. + Fix non-versioned libc's to also prepend '__' to internal symbols by using + strong aliases. + 28 Nov 2005; Martin Schlemmer <azarah@gentoo.org> configure.in, sandbox.c, sandbox_fdutils.c: diff --git a/localdecls.h b/localdecls.h index 22d5d2a..512030c 100644 --- a/localdecls.h +++ b/localdecls.h @@ -47,15 +47,20 @@ #endif #if !HAVE_DLVSYM -# define dlvsym(lib, sym, ver) dlsym(lib, sym) +# define dlvsym(_lib, _sym, _ver) dlsym(_lib, _sym) #endif -/* from glibc */ #if HAVE_DLVSYM -# define symbol_version(real, name, version) \ - __asm__ (".symver " #real "," #name "@" #version) -# define default_symbol_version(real, name, version) \ - __asm__ (".symver " #real "," #name "@@" #version) +/* Taken from glibc */ +# define symbol_version(_real, _name, _version) \ + __asm__ (".symver " #_real "," #_name "@" #_version) +# define default_symbol_version(_real, _name, _version) \ + __asm__ (".symver " #_real "," #_name "@@" #_version) #endif +/* Taken from glibc */ +# define strong_alias(_name, _aliasname) \ + extern __typeof (_name) _aliasname __attribute__ ((alias (#_name))); + + #endif diff --git a/scripts/gen_symbol_header.awk b/scripts/gen_symbol_header.awk index 0426106..f6e877d 100644 --- a/scripts/gen_symbol_header.awk +++ b/scripts/gen_symbol_header.awk @@ -27,7 +27,8 @@ END { # Defualt symbol have '@@' and not '@', so name it by # prepending '__' rather than the symbol version so # that we know what the name is in libsandbox.c ... - if (sym_full_names[x] ~ /@@/) { + # Also do this for non-versioned libc's ... + if (sym_full_names[x] ~ /@@/ || !symbol_array[2]) { sym_real_name = "__" sym_index; } else { sym_real_name = sym_full_names[x]; @@ -54,6 +55,9 @@ END { else printf("symbol_version(%s, %s, %s);\n", sym_real_name, sym_index, symbol_array[2]); + } else { + printf("strong_alias(%s, %s);\n", sym_real_name, + sym_index); } printf("\n"); |