summaryrefslogtreecommitdiffstats
path: root/loader/stubs.c
diff options
context:
space:
mode:
authorMatt Wilson <msw@redhat.com>2000-08-03 16:32:41 +0000
committerMatt Wilson <msw@redhat.com>2000-08-03 16:32:41 +0000
commitdcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26 (patch)
tree6fc14ce8b28497979ca72f3bc693344eecf246f9 /loader/stubs.c
parent789a84e5a29874dd58af85f5bc818aad2072fbf2 (diff)
downloadanaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.tar.gz
anaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.tar.xz
anaconda-dcd59e47b336d9f4dd7bd9e4e3b44dfd6e736b26.zip
updated stubs
Diffstat (limited to 'loader/stubs.c')
-rw-r--r--loader/stubs.c90
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);