summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.doxygen1
-rw-r--r--src/git/common.h12
-rw-r--r--src/git/errors.h3
3 files changed, 14 insertions, 2 deletions
diff --git a/api.doxygen b/api.doxygen
index faf2dae9a..4d25aed8f 100644
--- a/api.doxygen
+++ b/api.doxygen
@@ -17,6 +17,7 @@ CASE_SENSE_NAMES = NO
PREDEFINED = \
"GIT_EXTERN(x)=x" \
+ "GIT_EXTERN_TLS(x)=x" \
"GIT_INLINE(x)=x" \
"GIT_BEGIN_DECL=" \
"GIT_END_DECL=" \
diff --git a/src/git/common.h b/src/git/common.h
index c470e0e0a..375649f87 100644
--- a/src/git/common.h
+++ b/src/git/common.h
@@ -1,6 +1,8 @@
#ifndef INCLUDE_git_common_h__
#define INCLUDE_git_common_h__
+#include "thread-utils.h"
+
#ifdef __cplusplus
# define GIT_BEGIN_DECL extern "C" {
# define GIT_END_DECL }
@@ -20,6 +22,16 @@
# define GIT_EXTERN(type) extern type
#endif
+/** Declare a public TLS symbol exported for application use. */
+#ifdef __GNUC__
+# define GIT_EXTERN_TLS(type) extern \
+ __attribute__((visibility("default"))) \
+ GIT_TLS \
+ type
+#else
+# define GIT_EXTERN_TLS(type) extern GIT_TLS type
+#endif
+
/** Declare a function as always inlined. */
#if defined(_MSC_VER)
# define GIT_INLINE(type) static __inline type
diff --git a/src/git/errors.h b/src/git/errors.h
index 37870a4c5..8e9e423ed 100644
--- a/src/git/errors.h
+++ b/src/git/errors.h
@@ -2,7 +2,6 @@
#define INCLUDE_git_errors_h__
#include "common.h"
-#include "thread-utils.h"
/**
* @file git/errors.h
@@ -14,7 +13,7 @@ GIT_BEGIN_DECL
/** The git errno. */
#if defined(GIT_TLS)
-GIT_EXTERN(int) GIT_TLS git_errno;
+GIT_EXTERN_TLS(int) git_errno;
#elif defined(GIT_HAS_PTHREAD)
# define git_errno (*git__errno_storage())