summaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/libc.c2
-rw-r--r--src/internal/libc.h16
2 files changed, 13 insertions, 5 deletions
diff --git a/src/internal/libc.c b/src/internal/libc.c
index 954efedf..5f12e295 100644
--- a/src/internal/libc.c
+++ b/src/internal/libc.c
@@ -1,6 +1,6 @@
#include "libc.h"
-#ifdef __PIC__
+#ifdef USE_LIBC_ACCESSOR
struct __libc *__libc_loc()
{
static struct __libc __libc;
diff --git a/src/internal/libc.h b/src/internal/libc.h
index 8a84be0b..e81ef760 100644
--- a/src/internal/libc.h
+++ b/src/internal/libc.h
@@ -17,12 +17,20 @@ struct __libc {
void (*fork_handler)(int);
};
-#ifdef __PIC__
-extern struct __libc *__libc_loc(void) __attribute__((const));
-#define libc (*__libc_loc())
-#else
+
+#if 100*__GNUC__+__GNUC_MINOR__ >= 303 || defined(__PCC__) || defined(__TINYC__)
+extern struct __libc __libc __attribute__((visibility("hidden")));
+#define libc __libc
+
+#elif !defined(__PIC__)
extern struct __libc __libc;
#define libc __libc
+
+#else
+#define USE_LIBC_ACCESSOR
+extern struct __libc *__libc_loc(void) __attribute__((const));
+#define libc (*__libc_loc())
+
#endif