diff options
author | Matt Wilson <msw@redhat.com> | 2000-08-03 16:32:41 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 2000-08-03 16:32:41 +0000 |
commit | dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26 (patch) | |
tree | 6fc14ce8b28497979ca72f3bc693344eecf246f9 | |
parent | 789a84e5a29874dd58af85f5bc818aad2072fbf2 (diff) | |
download | anaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.tar.gz anaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.tar.xz anaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.zip |
updated stubs
-rw-r--r-- | loader/stubs.c | 90 |
1 files changed, 54 insertions, 36 deletions
diff --git a/loader/stubs.c b/loader/stubs.c index b1fb30430..78d63a3f9 100644 --- a/loader/stubs.c +++ b/loader/stubs.c @@ -1,47 +1,65 @@ #include <gconv.h> - -#if !defined(UNKNOWN_10646_CHAR) && defined(__UNKNOWN_10646_CHAR) -/* Newer glibcs use underscores in gconv.h */ -#define GCONV_OK __GCONV_OK -#define GCONV_NOCONV __GCONV_NOCONV -#endif - -#define ASM_GLOBAL_DIRECTIVE .globl -#define __SYMBOL_PREFIX -/* Define ALIAS as a strong alias for ORIGINAL. */ -#define strong_alias(original, alias) \ - asm (__string_1 (ASM_GLOBAL_DIRECTIVE) " " __SYMBOL_PREFIX #alias "\n" \ - ".set " __SYMBOL_PREFIX #alias "," __SYMBOL_PREFIX #original); +/* hj's gconv stubs, a little modified */ -/* Helper macros used above. */ -#define __string_1(x) __string_0(x) -#define __string_0(x) #x +/* Define ALIASNAME as a strong alias for NAME. */ +# define strong_alias(name, aliasname) _strong_alias(name, aliasname) +# define _strong_alias(name, aliasname) \ + extern __typeof (name) aliasname __attribute__ ((alias (#name))); /* Don't drag in the dynamic linker. */ void *__libc_stack_end; int -__gconv_OK () {return GCONV_OK;} +__gconv_OK () { +#if __GLIBC__ > 2 || __GLIBC_MINOR__ > 1 + return __GCONV_OK; +#else + return GCONV_OK; +#endif +} -/* int -__gconv_NOCONV () {return GCONV_NOCONV;} -*/ - -strong_alias (__gconv_OK, __gconv_close_transform); -strong_alias (__gconv_OK, __gconv); -strong_alias (__gconv_OK, __gconv_find_transform); -strong_alias (__gconv_OK, __gconv_open); -strong_alias (__gconv_OK, __gconv_transform_ascii_internal); -strong_alias (__gconv_OK, __gconv_transform_internal_ascii); -strong_alias (__gconv_OK, __gconv_transform_internal_ucs2); -strong_alias (__gconv_OK, __gconv_transform_internal_ucs2little); -strong_alias (__gconv_OK, __gconv_transform_internal_ucs4); -strong_alias (__gconv_OK, __gconv_transform_internal_utf16); -strong_alias (__gconv_OK, __gconv_transform_internal_utf8); -strong_alias (__gconv_OK, __gconv_transform_ucs2_internal); -strong_alias (__gconv_OK, __gconv_transform_ucs2little_internal); -strong_alias (__gconv_OK, __gconv_transform_utf16_internal); -strong_alias (__gconv_OK, __gconv_transform_utf8_internal); +__gconv_NOCONV () { +#if __GLIBC__ > 2 || __GLIBC_MINOR__ > 1 + return __GCONV_NOCONV; +#else + return GCONV_NOCONV; +#endif +} + +strong_alias (__gconv_OK, + __gconv_close_transform); + +strong_alias (__gconv_NOCONV, + __gconv); +strong_alias (__gconv_NOCONV, + __gconv_find_transform); +strong_alias (__gconv_NOCONV, + __gconv_open); + +/* These transformations should not fail in normal conditions */ +strong_alias (__gconv_OK, + __gconv_transform_ascii_internal); +strong_alias (__gconv_OK, + __gconv_transform_ucs2little_internal); +strong_alias (__gconv_OK, + __gconv_transform_utf16_internal); +strong_alias (__gconv_OK, + __gconv_transform_utf8_internal); +strong_alias (__gconv_OK, + __gconv_transform_ucs2_internal); +/* We can assume no conversion for these ones */ +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_ascii); +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_ucs2); +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_ucs2little); +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_ucs4); +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_utf16); +strong_alias (__gconv_NOCONV, + __gconv_transform_internal_utf8); |