[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[E-devel] Patch: GCC __attribute__((visibility("hidden"))) for intenal Imlib2 functions



Hello all,

This patch against imlib2 1.2.2 tries to utilize new GCC feature -
__attribute__((visibility("x"))) (see http://gcc.gnu.org/wiki/Visibility
for more details about this). Most of __imlib* functions are marked
with __attribute__((visibility("hidden"))), with the exceptions of
__imlib_AttachTag, __imlib_FindBestLoaderForFile, __imlib_GetTag
(they are used by loaders) and __imlib_SetMaxXImageCount (used by
'imlib2_show' program).

Assembly code is also changed (cosmetically - mostly to avoid
retyping of the same things again and again).

GNU C developers promises the benefits both for loading time
and memory footprint. I didn't measure load time, but it's
easy to see that this is true about memory footprint at least.
With e16-0.16.8, an unpatched Imlib2 on my Linux box consumes (from
/proc/[pid]/smap, kernel 2.6.16):

Size:               344 kB
Rss:                184 kB
Shared_Clean:         0 kB
Shared_Dirty:         0 kB
Private_Clean:      168 kB
Private_Dirty:       16 kB

And patched version consumes:

Size:               336 kB
Rss:                164 kB
Shared_Clean:         0 kB
Shared_Dirty:         0 kB
Private_Clean:      148 kB
Private_Dirty:       16 kB

Dmitry

diff -urN imlib2-1.2.2/configure.in imlib2-1.2.2-devel/configure.in
--- imlib2-1.2.2/configure.in	2006-03-18 16:38:58.000000000 +0300
+++ imlib2-1.2.2-devel/configure.in	2006-03-28 14:30:46.000000000 +0400
@@ -10,6 +10,16 @@

 AC_C_BIGENDIAN
 AC_PROG_CC
+
+AC_MSG_CHECKING([if gcc supports __attribute__((visibility("hidden")))])
+AC_COMPILE_IFELSE([
+void __attribute__((visibility("hidden"))) func (void) {}
+],
+        [AC_MSG_RESULT(yes)
+         AC_DEFINE(USE_HIDDEN_FUNCTION_ATTRIBUTE,1,
+         [Define this to 1 if `hidden' attribute for internal functions is used.])],
+        [AC_MSG_RESULT(no)])
+
 AM_PROG_CC_STDC
 AC_HEADER_STDC
 AC_C_CONST
diff -urN imlib2-1.2.2/src/lib/amd64_blend.S imlib2-1.2.2-devel/src/lib/amd64_blend.S
--- imlib2-1.2.2/src/lib/amd64_blend.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/amd64_blend.S	2006-03-28 14:21:08.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 16;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 16;
-#endif
+#include "asm.h"

 #ifdef DO_AMD64_ASM

@@ -70,49 +53,29 @@

 .text
 	.align 16
-.globl PR_(imlib_amd64_blend_rgba_to_rgb)
-	.type PT_(imlib_amd64_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_blend_rgba_to_rgba)
-	.type PT_(imlib_amd64_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_copy_rgba_to_rgb)
-	.type PT_(imlib_amd64_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_copy_rgba_to_rgba)
-	.type PT_(imlib_amd64_copy_rgba_to_rgba,@function)
-
-.globl PR_(imlib_amd64_copy_rgb_to_rgba)
-	.type PT_(imlib_amd64_copy_rgb_to_rgba,@function)
-.globl PR_(imlib_amd64_add_blend_rgba_to_rgb)
-	.type PT_(imlib_amd64_add_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_add_blend_rgba_to_rgba)
-	.type PT_(imlib_amd64_add_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_add_copy_rgba_to_rgb)
-	.type PT_(imlib_amd64_add_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_add_copy_rgba_to_rgba)
-	.type PT_(imlib_amd64_add_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_add_copy_rgb_to_rgba)
-	.type PT_(imlib_amd64_add_copy_rgb_to_rgba,@function)
-
-.globl PR_(imlib_amd64_subtract_blend_rgba_to_rgb)
-	.type PT_(imlib_amd64_subtract_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_subtract_blend_rgba_to_rgba)
-	.type PT_(imlib_amd64_subtract_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgba_to_rgb)
-	.type PT_(imlib_amd64_subtract_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgba_to_rgba)
-	.type PT_(imlib_amd64_subtract_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgb_to_rgba)
-	.type PT_(imlib_amd64_subtract_copy_rgb_to_rgba,@function)
-
-.globl PR_(imlib_amd64_reshade_blend_rgba_to_rgb)
-	.type PT_(imlib_amd64_reshade_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_reshade_blend_rgba_to_rgba)
-	.type PT_(imlib_amd64_reshade_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgba_to_rgb)
-	.type PT_(imlib_amd64_reshade_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgba_to_rgba)
-	.type PT_(imlib_amd64_reshade_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgb_to_rgba)
-	.type PT_(imlib_amd64_reshade_copy_rgb_to_rgba,@function)
+FN_(imlib_amd64_blend_rgba_to_rgb)
+FN_(imlib_amd64_blend_rgba_to_rgba)
+FN_(imlib_amd64_copy_rgba_to_rgb)
+FN_(imlib_amd64_copy_rgba_to_rgba)
+
+FN_(imlib_amd64_copy_rgb_to_rgba)
+FN_(imlib_amd64_add_blend_rgba_to_rgb)
+FN_(imlib_amd64_add_blend_rgba_to_rgba)
+FN_(imlib_amd64_add_copy_rgba_to_rgb)
+FN_(imlib_amd64_add_copy_rgba_to_rgba)
+FN_(imlib_amd64_add_copy_rgb_to_rgba)
+
+FN_(imlib_amd64_subtract_blend_rgba_to_rgb)
+FN_(imlib_amd64_subtract_blend_rgba_to_rgba)
+FN_(imlib_amd64_subtract_copy_rgba_to_rgb)
+FN_(imlib_amd64_subtract_copy_rgba_to_rgba)
+FN_(imlib_amd64_subtract_copy_rgb_to_rgba)
+
+FN_(imlib_amd64_reshade_blend_rgba_to_rgb)
+FN_(imlib_amd64_reshade_blend_rgba_to_rgba)
+FN_(imlib_amd64_reshade_copy_rgba_to_rgb)
+FN_(imlib_amd64_reshade_copy_rgba_to_rgba)
+FN_(imlib_amd64_reshade_copy_rgb_to_rgba)

 .extern pow_lut
 	
diff -urN imlib2-1.2.2/src/lib/amd64_blend_cmod.S imlib2-1.2.2-devel/src/lib/amd64_blend_cmod.S
--- imlib2-1.2.2/src/lib/amd64_blend_cmod.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/amd64_blend_cmod.S	2006-03-28 14:20:29.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 16;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 16;
-#endif
+#include "asm.h"

 #ifdef DO_AMD64_ASM

@@ -70,65 +53,37 @@

 .text
 	.align 16
-.globl PR_(imlib_amd64_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_blend_rgb_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_amd64_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_amd64_add_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_add_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_add_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_add_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_add_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_add_blend_rgb_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_add_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_amd64_add_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_add_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_add_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_add_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_add_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_add_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_add_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_amd64_subtract_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_subtract_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_subtract_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_subtract_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_subtract_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_subtract_blend_rgb_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_subtract_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_amd64_subtract_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_subtract_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_subtract_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_subtract_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_subtract_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_amd64_reshade_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_reshade_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_reshade_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_reshade_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_reshade_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_reshade_blend_rgb_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_reshade_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_amd64_reshade_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_amd64_reshade_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_amd64_reshade_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_amd64_reshade_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_amd64_reshade_copy_rgb_to_rgba_cmod,@function)
+FN_(imlib_amd64_blend_rgba_to_rgb_cmod)
+FN_(imlib_amd64_blend_rgba_to_rgba_cmod)
+FN_(imlib_amd64_blend_rgb_to_rgba_cmod)
+FN_(imlib_amd64_blend_rgb_to_rgb_cmod)
+FN_(imlib_amd64_copy_rgba_to_rgb_cmod)
+FN_(imlib_amd64_copy_rgba_to_rgba_cmod)
+FN_(imlib_amd64_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_amd64_add_blend_rgba_to_rgb_cmod)
+FN_(imlib_amd64_add_blend_rgba_to_rgba_cmod)
+FN_(imlib_amd64_add_blend_rgb_to_rgba_cmod)
+FN_(imlib_amd64_add_blend_rgb_to_rgb_cmod)
+FN_(imlib_amd64_add_copy_rgba_to_rgb_cmod)
+FN_(imlib_amd64_add_copy_rgba_to_rgba_cmod)
+FN_(imlib_amd64_add_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_amd64_subtract_blend_rgba_to_rgb_cmod)
+FN_(imlib_amd64_subtract_blend_rgba_to_rgba_cmod)
+FN_(imlib_amd64_subtract_blend_rgb_to_rgba_cmod)
+FN_(imlib_amd64_subtract_blend_rgb_to_rgb_cmod)
+FN_(imlib_amd64_subtract_copy_rgba_to_rgb_cmod)
+FN_(imlib_amd64_subtract_copy_rgba_to_rgba_cmod)
+FN_(imlib_amd64_subtract_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_amd64_reshade_blend_rgba_to_rgb_cmod)
+FN_(imlib_amd64_reshade_blend_rgba_to_rgba_cmod)
+FN_(imlib_amd64_reshade_blend_rgb_to_rgba_cmod)
+FN_(imlib_amd64_reshade_blend_rgb_to_rgb_cmod)
+FN_(imlib_amd64_reshade_copy_rgba_to_rgb_cmod)
+FN_(imlib_amd64_reshade_copy_rgba_to_rgba_cmod)
+FN_(imlib_amd64_reshade_copy_rgb_to_rgba_cmod)

 .extern pow_lut
 	
diff -urN imlib2-1.2.2/src/lib/api.c imlib2-1.2.2-devel/src/lib/api.c
--- imlib2-1.2.2/src/lib/api.c	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/api.c	2006-03-28 14:18:11.000000000 +0400
@@ -125,7 +125,7 @@
 static ImlibContext *ctx = NULL;        /* contexts->context; */

 /* frees the given context including all its members */
-void
+__hidden void
 __imlib_free_context(ImlibContext * context)
 {
    ImlibContextItem   *next = contexts;
diff -urN imlib2-1.2.2/src/lib/asm.h imlib2-1.2.2-devel/src/lib/asm.h
--- imlib2-1.2.2/src/lib/asm.h	1970-01-01 03:00:00.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm.h	2006-03-28 14:24:05.000000000 +0400
@@ -0,0 +1,35 @@
+#ifndef __ASM_H
+#define __ASM_H
+
+#ifdef __EMX__
+/* Due to strange behaviour of as.exe we use this macros */
+/* For all OS/2 coders - please use PGCC to compile this code */
+#define PR_(foo) ___##foo
+#define PT_(foo,func) ___##foo,##func
+#define FN_(foo) \
+.globl PR_(foo);			       \
+        .type PT_(foo,@function)
+#define SIZE(sym)                              \
+	.___end_##sym:;                        \
+	.size ___##sym,.___end_##sym-___##sym; \
+	.align 8;
+#else /* not __EMX__ */
+#define PR_(foo) __##foo
+#define PT_(foo,func) __##foo,##func
+#ifdef USE_HIDDEN_FUNCTION_ATTRIBUTE
+#define FN_(foo) \
+.globl PR_(foo);			    \
+        .hidden PR_(foo);		    \
+        .type PT_(foo,@function)
+#else /* not USE_HIDDEN... */
+#define FN_(foo) \
+.globl PR_(foo);			    \
+        .type PT_(foo,@function)
+#endif /* USE_HIDDEN... */
+#define SIZE(sym)                           \
+	.__end_##sym:;                      \
+	.size __##sym,.__end_##sym-__##sym; \
+	.align 8;
+#endif
+
+#endif /* __ASM_H */
diff -urN imlib2-1.2.2/src/lib/asm_blend.S imlib2-1.2.2-devel/src/lib/asm_blend.S
--- imlib2-1.2.2/src/lib/asm_blend.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm_blend.S	2006-03-28 14:22:15.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 8;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 8;
-#endif
+#include "asm.h"

 #ifdef DO_MMX_ASM

@@ -42,49 +25,29 @@

 .text
 	.align 8
-.globl PR_(imlib_mmx_blend_rgba_to_rgb)
-	.type PT_(imlib_mmx_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_blend_rgba_to_rgba)
-	.type PT_(imlib_mmx_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_copy_rgba_to_rgb)
-	.type PT_(imlib_mmx_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_copy_rgba_to_rgba)
-	.type PT_(imlib_mmx_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_copy_rgb_to_rgba)
-
-	.type PT_(imlib_mmx_copy_rgb_to_rgba,@function)
-.globl PR_(imlib_mmx_add_blend_rgba_to_rgb)
-	.type PT_(imlib_mmx_add_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_add_blend_rgba_to_rgba)
-	.type PT_(imlib_mmx_add_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_add_copy_rgba_to_rgb)
-	.type PT_(imlib_mmx_add_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_add_copy_rgba_to_rgba)
-	.type PT_(imlib_mmx_add_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_add_copy_rgb_to_rgba)
-	.type PT_(imlib_mmx_add_copy_rgb_to_rgba,@function)
-
-.globl PR_(imlib_mmx_subtract_blend_rgba_to_rgb)
-	.type PT_(imlib_mmx_subtract_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_subtract_blend_rgba_to_rgba)
-	.type PT_(imlib_mmx_subtract_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_subtract_copy_rgba_to_rgb)
-	.type PT_(imlib_mmx_subtract_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_subtract_copy_rgba_to_rgba)
-	.type PT_(imlib_mmx_subtract_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_subtract_copy_rgb_to_rgba)
-	.type PT_(imlib_mmx_subtract_copy_rgb_to_rgba,@function)
-
-.globl PR_(imlib_mmx_reshade_blend_rgba_to_rgb)
-	.type PT_(imlib_mmx_reshade_blend_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_reshade_blend_rgba_to_rgba)
-	.type PT_(imlib_mmx_reshade_blend_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_reshade_copy_rgba_to_rgb)
-	.type PT_(imlib_mmx_reshade_copy_rgba_to_rgb,@function)
-.globl PR_(imlib_mmx_reshade_copy_rgba_to_rgba)
-	.type PT_(imlib_mmx_reshade_copy_rgba_to_rgba,@function)
-.globl PR_(imlib_mmx_reshade_copy_rgb_to_rgba)
-	.type PT_(imlib_mmx_reshade_copy_rgb_to_rgba,@function)
+FN_(imlib_mmx_blend_rgba_to_rgb)
+FN_(imlib_mmx_blend_rgba_to_rgba)
+FN_(imlib_mmx_copy_rgba_to_rgb)
+FN_(imlib_mmx_copy_rgba_to_rgba)
+FN_(imlib_mmx_copy_rgb_to_rgba)
+
+FN_(imlib_mmx_add_blend_rgba_to_rgb)
+FN_(imlib_mmx_add_blend_rgba_to_rgba)
+FN_(imlib_mmx_add_copy_rgba_to_rgb)
+FN_(imlib_mmx_add_copy_rgba_to_rgba)
+FN_(imlib_mmx_add_copy_rgb_to_rgba)
+
+FN_(imlib_mmx_subtract_blend_rgba_to_rgb)
+FN_(imlib_mmx_subtract_blend_rgba_to_rgba)
+FN_(imlib_mmx_subtract_copy_rgba_to_rgb)
+FN_(imlib_mmx_subtract_copy_rgba_to_rgba)
+FN_(imlib_mmx_subtract_copy_rgb_to_rgba)
+
+FN_(imlib_mmx_reshade_blend_rgba_to_rgb)
+FN_(imlib_mmx_reshade_blend_rgba_to_rgba)
+FN_(imlib_mmx_reshade_copy_rgba_to_rgb)
+FN_(imlib_mmx_reshade_copy_rgba_to_rgba)
+FN_(imlib_mmx_reshade_copy_rgb_to_rgba)

 #include "asm_loadimmq.S"

diff -urN imlib2-1.2.2/src/lib/asm_blend_cmod.S imlib2-1.2.2-devel/src/lib/asm_blend_cmod.S
--- imlib2-1.2.2/src/lib/asm_blend_cmod.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm_blend_cmod.S	2006-03-28 14:21:53.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 8;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 8;
-#endif
+#include "asm.h"

 #ifdef DO_MMX_ASM

@@ -49,69 +32,41 @@

 .text
 	.align 8
-.globl PR_(imlib_mmx_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_mmx_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_blend_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_add_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_add_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_add_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_add_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_add_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_mmx_add_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_add_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_add_blend_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_add_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_add_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_add_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_add_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_add_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_add_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_subtract_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_subtract_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_subtract_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_subtract_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_subtract_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_mmx_subtract_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_subtract_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_subtract_blend_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_subtract_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_subtract_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_subtract_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_subtract_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_subtract_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_subtract_copy_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_reshade_blend_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_reshade_blend_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_reshade_blend_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_reshade_blend_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_reshade_blend_rgb_to_rgb_cmod)
-	.type PT_(imlib_mmx_reshade_blend_rgb_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_reshade_blend_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_reshade_blend_rgb_to_rgba_cmod,@function)
-
-.globl PR_(imlib_mmx_reshade_copy_rgba_to_rgb_cmod)
-	.type PT_(imlib_mmx_reshade_copy_rgba_to_rgb_cmod,@function)
-.globl PR_(imlib_mmx_reshade_copy_rgba_to_rgba_cmod)
-	.type PT_(imlib_mmx_reshade_copy_rgba_to_rgba_cmod,@function)
-.globl PR_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod)
-	.type PT_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod,@function)
+FN_(imlib_mmx_blend_rgba_to_rgb_cmod)
+FN_(imlib_mmx_blend_rgba_to_rgba_cmod)
+FN_(imlib_mmx_blend_rgb_to_rgb_cmod)
+FN_(imlib_mmx_blend_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_copy_rgba_to_rgb_cmod)
+FN_(imlib_mmx_copy_rgba_to_rgba_cmod)
+FN_(imlib_mmx_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_add_blend_rgba_to_rgb_cmod)
+FN_(imlib_mmx_add_blend_rgba_to_rgba_cmod)
+FN_(imlib_mmx_add_blend_rgb_to_rgb_cmod)
+FN_(imlib_mmx_add_blend_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_add_copy_rgba_to_rgb_cmod)
+FN_(imlib_mmx_add_copy_rgba_to_rgba_cmod)
+FN_(imlib_mmx_add_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_subtract_blend_rgba_to_rgb_cmod)
+FN_(imlib_mmx_subtract_blend_rgba_to_rgba_cmod)
+FN_(imlib_mmx_subtract_blend_rgb_to_rgb_cmod)
+FN_(imlib_mmx_subtract_blend_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_subtract_copy_rgba_to_rgb_cmod)
+FN_(imlib_mmx_subtract_copy_rgba_to_rgba_cmod)
+FN_(imlib_mmx_subtract_copy_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_reshade_blend_rgba_to_rgb_cmod)
+FN_(imlib_mmx_reshade_blend_rgba_to_rgba_cmod)
+FN_(imlib_mmx_reshade_blend_rgb_to_rgb_cmod)
+FN_(imlib_mmx_reshade_blend_rgb_to_rgba_cmod)
+
+FN_(imlib_mmx_reshade_copy_rgba_to_rgb_cmod)
+FN_(imlib_mmx_reshade_copy_rgba_to_rgba_cmod)
+FN_(imlib_mmx_reshade_copy_rgb_to_rgba_cmod)

 #include "asm_loadimmq.S"
 	
diff -urN imlib2-1.2.2/src/lib/asm_rgba.S imlib2-1.2.2-devel/src/lib/asm_rgba.S
--- imlib2-1.2.2/src/lib/asm_rgba.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm_rgba.S	2006-03-28 14:22:35.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 8;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 8;
-#endif
+#include "asm.h"

 #ifdef DO_MMX_ASM

@@ -43,17 +26,12 @@

 .text
 	.align 8
-.globl PR_(imlib_mmx_rgb565_fast)
-	.type PT_(imlib_mmx_rgb565_fast,@function)
-.globl PR_(imlib_mmx_bgr565_fast)
-	.type PT_(imlib_mmx_bgr565_fast,@function)
-.globl PR_(imlib_mmx_rgb555_fast)
-	.type PT_(imlib_mmx_rgb555_fast,@function)
-.globl PR_(imlib_mmx_bgr555_fast)
-	.type PT_(imlib_mmx_bgr555_fast,@function)
+FN_(imlib_mmx_rgb565_fast)
+FN_(imlib_mmx_bgr565_fast)
+FN_(imlib_mmx_rgb555_fast)
+FN_(imlib_mmx_bgr555_fast)

-.globl PR_(imlib_get_cpuid)
-	.type PT_(imlib_get_cpuid,@function)
+FN_(imlib_get_cpuid)

 #include "asm_loadimmq.S"

diff -urN imlib2-1.2.2/src/lib/asm_rotate.S imlib2-1.2.2-devel/src/lib/asm_rotate.S
--- imlib2-1.2.2/src/lib/asm_rotate.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm_rotate.S	2006-03-28 14:22:52.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 8;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 8;
-#endif
+#include "asm.h"

 #ifdef DO_MMX_ASM

@@ -27,8 +10,7 @@

 .text
 	.align 8
-.globl PR_(imlib_mmx_RotateAA)
-	.type PT_(imlib_mmx_RotateAA,@function)
+FN_(imlib_mmx_RotateAA)


 /*\ Prototype: __imlib_mmx_RotateAA(DATA32 *src, DATA32 *dest, int sow, int sw,
diff -urN imlib2-1.2.2/src/lib/asm_scale.S imlib2-1.2.2-devel/src/lib/asm_scale.S
--- imlib2-1.2.2/src/lib/asm_scale.S	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/asm_scale.S	2006-03-28 14:23:07.000000000 +0400
@@ -1,22 +1,5 @@
 #include <config.h>
-
-#ifdef __EMX__
-/* Due to strange behaviour of as.exe we use this macros */
-/* For all OS/2 coders - please use PGCC to compile this code */
-#define PR_(foo) ___##foo
-#define PT_(foo,func) ___##foo,##func
-#define SIZE(sym)                              \
-	.___end_##sym:;                        \
-	.size ___##sym,.___end_##sym-___##sym; \
-	.align 8;
-#else
-#define PR_(foo) __##foo
-#define PT_(foo,func) __##foo,##func
-#define SIZE(sym)                           \
-	.__end_##sym:;                      \
-	.size __##sym,.__end_##sym-__##sym; \
-	.align 8;
-#endif
+#include "asm.h"

 #ifdef DO_MMX_ASM

@@ -27,8 +10,7 @@

 .text
 	.align 8
-.globl PR_(imlib_Scale_mmx_AARGBA)
-	.type PT_(imlib_Scale_mmx_AARGBA,@function)
+FN_(imlib_Scale_mmx_AARGBA)

 /*\ Prototype: __imlib_Scale_mmx_AARGBA(ImlibScaleInfo *isi, DATA32 *dest,
 |*|	int dxx, int dyy, int dx, int dy, int dw, int dh, int dow, int sow)
diff -urN imlib2-1.2.2/src/lib/blend.h imlib2-1.2.2-devel/src/lib/blend.h
--- imlib2-1.2.2/src/lib/blend.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/blend.h	2006-03-28 14:18:11.000000000 +0400
@@ -387,22 +387,22 @@
 typedef void (*ImlibBlendFunction)(DATA32*, int, DATA32*, int, int, int,
 				   ImlibColorModifier *);

-ImlibBlendFunction
+__hidden ImlibBlendFunction
 __imlib_GetBlendFunction(ImlibOp op, char merge_alpha, char blend, char rgb_src,
 			 ImlibColorModifier * cm);
-void
+__hidden void
 __imlib_BlendImageToImage(ImlibImage *im_src, ImlibImage *im_dst,
                           char aa, char blend, char merge_alpha,
                           int ssx, int ssy, int ssw, int ssh,
                           int ddx, int ddy, int ddw, int ddh,
 			  ImlibColorModifier *cm, ImlibOp op,
 			  int clx, int cly, int clw, int clh);
-void
+__hidden void
 __imlib_BlendRGBAToData(DATA32 *src, int src_w, int src_h, DATA32 *dst,
 			int dst_w, int dst_h, int sx, int sy, int dx, int dy,
 			int w, int h, char blend, char merge_alpha,
 			ImlibColorModifier *cm, ImlibOp op, char rgb_src);
-void
+__hidden void
 __imlib_build_pow_lut(void);

 #ifdef DO_MMX_ASM
diff -urN imlib2-1.2.2/src/lib/color.h imlib2-1.2.2-devel/src/lib/color.h
--- imlib2-1.2.2/src/lib/color.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/color.h	2006-03-28 14:18:11.000000000 +0400
@@ -5,17 +5,17 @@

 extern DATA16 _max_colors;

-int __imlib_XActualDepth(Display *d, Visual *v);
-Visual *__imlib_BestVisual(Display *d, int screen, int *depth_return);
-DATA8 * __imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return, Visual *v);
-DATA8 * __imlib_AllocColors332(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors666(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors232(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors222(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors221(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors121(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors111(Display *d, Colormap cmap, Visual *v);
-DATA8 * __imlib_AllocColors1(Display *d, Colormap cmap, Visual *v);
+__hidden int __imlib_XActualDepth(Display *d, Visual *v);
+__hidden Visual *__imlib_BestVisual(Display *d, int screen, int *depth_return);
+__hidden DATA8 * __imlib_AllocColorTable(Display *d, Colormap cmap, DATA8 *type_return, Visual *v);
+__hidden DATA8 * __imlib_AllocColors332(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors666(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors232(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors222(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors221(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors121(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors111(Display *d, Colormap cmap, Visual *v);
+__hidden DATA8 * __imlib_AllocColors1(Display *d, Colormap cmap, Visual *v);

 #endif

diff -urN imlib2-1.2.2/src/lib/color_helpers.h imlib2-1.2.2-devel/src/lib/color_helpers.h
--- imlib2-1.2.2/src/lib/color_helpers.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/color_helpers.h	2006-03-28 14:18:11.000000000 +0400
@@ -7,9 +7,11 @@
 #include <string.h>
 #include <math.h>

-void        __imlib_rgb_to_hsv(int r, int g, int b, float *hue, float *saturation, float *value);
-void        __imlib_hsv_to_rgb(float hue, float saturation, float value, int *r, int *g, int *b);
-void        __imlib_rgb_to_hls(int r, int g, int b, float *hue, float *lightness, float *saturation);
-void        __imlib_hls_to_rgb(float hue, float lightness, float saturation, int *r, int *g, int *b);
+#include "common.h"
+
+__hidden void        __imlib_rgb_to_hsv(int r, int g, int b, float *hue, float *saturation, float *value);
+__hidden void        __imlib_hsv_to_rgb(float hue, float saturation, float value, int *r, int *g, int *b);
+__hidden void        __imlib_rgb_to_hls(int r, int g, int b, float *hue, float *lightness, float *saturation);
+__hidden void        __imlib_hls_to_rgb(float hue, float lightness, float saturation, int *r, int *g, int *b);

 #endif
diff -urN imlib2-1.2.2/src/lib/colormod.h imlib2-1.2.2-devel/src/lib/colormod.h
--- imlib2-1.2.2/src/lib/colormod.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/colormod.h	2006-03-28 14:18:11.000000000 +0400
@@ -51,22 +51,22 @@
 #define A_CMOD(cm, a) \
 (cm)->alpha_mapping[(int)(a)]

-ImlibColorModifier * __imlib_CreateCmod(void);
-void                 __imlib_FreeCmod(ImlibColorModifier *cm);
-void                 __imlib_CmodChanged(ImlibColorModifier *cm);
-void                 __imlib_CmodSetTables(ImlibColorModifier *cm, DATA8 *r,
+__hidden ImlibColorModifier * __imlib_CreateCmod(void);
+__hidden void                 __imlib_FreeCmod(ImlibColorModifier *cm);
+__hidden void                 __imlib_CmodChanged(ImlibColorModifier *cm);
+__hidden void                 __imlib_CmodSetTables(ImlibColorModifier *cm, DATA8 *r,
 					   DATA8 *g, DATA8 *b, DATA8 *a);
-void                 __imlib_CmodReset(ImlibColorModifier *cm);
-void                 __imlib_DataCmodApply(DATA32 *data, int w, int h,
+__hidden void                 __imlib_CmodReset(ImlibColorModifier *cm);
+__hidden void                 __imlib_DataCmodApply(DATA32 *data, int w, int h,
 					   int jump, ImlibImageFlags *fl,
 					   ImlibColorModifier *cm);

-void                 __imlib_CmodGetTables(ImlibColorModifier *cm, DATA8 *r,
+__hidden void                 __imlib_CmodGetTables(ImlibColorModifier *cm, DATA8 *r,
 					   DATA8 *g, DATA8 *b, DATA8 *a);
-void                 __imlib_CmodModBrightness(ImlibColorModifier *cm,
+__hidden void                 __imlib_CmodModBrightness(ImlibColorModifier *cm,
 					       double v);
-void                 __imlib_CmodModContrast(ImlibColorModifier *cm,
+__hidden void                 __imlib_CmodModContrast(ImlibColorModifier *cm,
 					     double v);
-void                 __imlib_CmodModGamma(ImlibColorModifier *cm,
+__hidden void                 __imlib_CmodModGamma(ImlibColorModifier *cm,
 					  double v);
 #endif
diff -urN imlib2-1.2.2/src/lib/common.h imlib2-1.2.2-devel/src/lib/common.h
--- imlib2-1.2.2/src/lib/common.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/common.h	2006-03-28 14:18:11.000000000 +0400
@@ -15,6 +15,12 @@
 #include <sys/types.h>
 #endif

+#ifdef USE_HIDDEN_FUNCTION_ATTRIBUTE
+#define __hidden __attribute__((visibility("hidden")))
+#else
+#define __hidden
+#endif
+
 #define DATABIG unsigned long long
 #define DATA64  unsigned long long
 #define DATA32  unsigned int
@@ -22,7 +28,7 @@
 #define DATA8   unsigned char

 #ifdef DO_MMX_ASM
-int __imlib_get_cpuid(void);
+__hidden int __imlib_get_cpuid(void);
 #define CPUID_MMX (1 << 23)
 #define CPUID_XMM (1 << 25)
 #endif
diff -urN imlib2-1.2.2/src/lib/context.h imlib2-1.2.2-devel/src/lib/context.h
--- imlib2-1.2.2/src/lib/context.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/context.h	2006-03-28 14:18:11.000000000 +0400
@@ -21,15 +21,15 @@
    void  *b_dither;
 };

-void     __imlib_SetMaxContexts(int num);
-int      __imlib_GetMaxContexts(void);
-void     __imlib_FlushContexts(void);
-void     __imlib_FreeContextForDisplay(Display *d);
-void     __imlib_FreeContextForColormap(Display *d, Colormap cm);
-void     __imlib_FreeContextForVisual(Display *d, Visual *v);
-Context *__imlib_FindContext(Display *d, Visual *v, Colormap c, int depth);
-Context *__imlib_NewContext(Display *d, Visual *v, Colormap c, int depth);
-Context *__imlib_GetContext(Display *d, Visual *v, Colormap c, int depth);
+__hidden void     __imlib_SetMaxContexts(int num);
+__hidden int      __imlib_GetMaxContexts(void);
+__hidden void     __imlib_FlushContexts(void);
+__hidden void     __imlib_FreeContextForDisplay(Display *d);
+__hidden void     __imlib_FreeContextForColormap(Display *d, Colormap cm);
+__hidden void     __imlib_FreeContextForVisual(Display *d, Visual *v);
+__hidden Context *__imlib_FindContext(Display *d, Visual *v, Colormap c, int depth);
+__hidden Context *__imlib_NewContext(Display *d, Visual *v, Colormap c, int depth);
+__hidden Context *__imlib_GetContext(Display *d, Visual *v, Colormap c, int depth);

 #endif

diff -urN imlib2-1.2.2/src/lib/draw.h imlib2-1.2.2-devel/src/lib/draw.h
--- imlib2-1.2.2/src/lib/draw.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/draw.h	2006-03-28 14:18:11.000000000 +0400
@@ -3,7 +3,7 @@

 #ifdef BUILD_X11

-char
+__hidden char
 __imlib_CreatePixmapsForImage(Display *d, Drawable w, Visual *v, int depth,
 			      Colormap cm, ImlibImage *im, Pixmap *p, Mask *m,
 			      int sx, int sy, int sw, int sh,
diff -urN imlib2-1.2.2/src/lib/dynamic_filters.h imlib2-1.2.2-devel/src/lib/dynamic_filters.h
--- imlib2-1.2.2/src/lib/dynamic_filters.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/dynamic_filters.h	2006-03-28 14:18:11.000000000 +0400
@@ -29,11 +29,11 @@
    pImlibExternalFilter next;
 };

-void                 __imlib_dynamic_filters_init();
-void                 __imlib_dynamic_filters_deinit();
-pImlibExternalFilter __imlib_get_dynamic_filter( char *name );
-char               **__imlib_ListFilters(int *num_ret);
-pImlibExternalFilter __imlib_LoadFilter( char *file );
+__hidden void                 __imlib_dynamic_filters_init();
+__hidden void                 __imlib_dynamic_filters_deinit();
+__hidden pImlibExternalFilter __imlib_get_dynamic_filter( char *name );
+__hidden char               **__imlib_ListFilters(int *num_ret);
+__hidden pImlibExternalFilter __imlib_LoadFilter( char *file );



diff -urN imlib2-1.2.2/src/lib/file.h imlib2-1.2.2-devel/src/lib/file.h
--- imlib2-1.2.2/src/lib/file.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/file.h	2006-03-28 14:18:11.000000000 +0400
@@ -1,20 +1,20 @@
 #ifndef __FILE
 #define __FILE 1
-char               *__imlib_FileKey(const char *file);
-char               *__imlib_FileRealFile(const char *file);
-char               *__imlib_FileExtension(const char *file);
-int                 __imlib_FileExists(const char *s);
-int                 __imlib_FileIsFile(const char *s);
-int                 __imlib_FileIsDir(const char *s);
-char              **__imlib_FileDir(char *dir, int *num);
-void                __imlib_FileFreeDirList(char **l, int num);
-void                __imlib_FileDel(char *s);
-time_t              __imlib_FileModDate(const char *s);
-char               *__imlib_FileHomeDir(int uid);
-char               *__imlib_FileField(char *s, int field);
-int                 __imlib_FilePermissions(const char *s);
-int                 __imlib_FileCanRead(const char *s);
-int                 __imlib_IsRealFile(const char *s);

+__hidden char               *__imlib_FileKey(const char *file);
+__hidden char               *__imlib_FileRealFile(const char *file);
+__hidden char               *__imlib_FileExtension(const char *file);
+__hidden int                 __imlib_FileExists(const char *s);
+__hidden int                 __imlib_FileIsFile(const char *s);
+__hidden int                 __imlib_FileIsDir(const char *s);
+__hidden char              **__imlib_FileDir(char *dir, int *num);
+__hidden void                __imlib_FileFreeDirList(char **l, int num);
+__hidden void                __imlib_FileDel(char *s);
+__hidden time_t              __imlib_FileModDate(const char *s);
+__hidden char               *__imlib_FileHomeDir(int uid);
+__hidden char               *__imlib_FileField(char *s, int field);
+__hidden int                 __imlib_FilePermissions(const char *s);
+__hidden int                 __imlib_FileCanRead(const char *s);
+__hidden int                 __imlib_IsRealFile(const char *s);

 #endif
diff -urN imlib2-1.2.2/src/lib/filter.h imlib2-1.2.2-devel/src/lib/filter.h
--- imlib2-1.2.2/src/lib/filter.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/filter.h	2006-03-28 14:18:11.000000000 +0400
@@ -23,20 +23,20 @@
    ImlibFilterColor alpha, red, green, blue;
 };

-ImlibFilter *
+__hidden ImlibFilter *
 __imlib_CreateFilter(int size);
-void
+__hidden void
 __imlib_FreeFilter(ImlibFilter *fil);
-void
+__hidden void
 __imlib_FilterSet(ImlibFilterColor *fil, int x, int y,
 		  int a, int r, int g, int b);
-void
+__hidden void
 __imlib_FilterSetColor(ImlibFilterColor * fil, int x, int y,
                        int a, int r, int g, int b);
-void
+__hidden void
 __imlib_FilterDivisors(ImlibFilter *fil, int a, int r, int g, int b);
-void
+__hidden void
 __imlib_FilterConstants(ImlibFilter *fil, int a, int r, int g, int b);
-void
+__hidden void
 __imlib_FilterImage(ImlibImage *im, ImlibFilter *fil);
 #endif
diff -urN imlib2-1.2.2/src/lib/grab.h imlib2-1.2.2-devel/src/lib/grab.h
--- imlib2-1.2.2/src/lib/grab.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/grab.h	2006-03-28 14:18:11.000000000 +0400
@@ -3,12 +3,12 @@

 #ifdef BUILD_X11

-char
+__hidden char
 __imlib_GrabDrawableToRGBA(DATA32 *data, int ox, int oy, int ow, int oh,
 			   Display *d, Drawable p, Pixmap m, Visual *v,
 			   Colormap cm, int depth, int x, int y,
 			   int w, int h, char domask, char grab);
-void
+__hidden void
 __imlib_GrabXImageToRGBA(DATA32 *data, int ox, int oy, int ow, int oh,
 			 Display *d, XImage *xim, XImage *mxim, Visual *v,
 			 int depth, int x, int y,
diff -urN imlib2-1.2.2/src/lib/grad.h imlib2-1.2.2-devel/src/lib/grad.h
--- imlib2-1.2.2/src/lib/grad.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/grad.h	2006-03-28 14:18:11.000000000 +0400
@@ -16,13 +16,13 @@
    ImlibRangeColor  *color;
 };

-ImlibRange *__imlib_CreateRange(void);
-void        __imlib_FreeRange(ImlibRange *rg);
-void        __imlib_AddRangeColor(ImlibRange *rg, DATA8 r, DATA8 g, DATA8 b,
+__hidden ImlibRange *__imlib_CreateRange(void);
+__hidden void        __imlib_FreeRange(ImlibRange *rg);
+__hidden void        __imlib_AddRangeColor(ImlibRange *rg, DATA8 r, DATA8 g, DATA8 b,
 				  DATA8 a, int dist);
-DATA32     *__imlib_MapRange(ImlibRange *rg, int len);
-DATA32     *__imlib_MapHsvaRange(ImlibRange *rg, int len);
-void        __imlib_DrawGradient(ImlibImage *im, int x, int y, int w, int h, ImlibRange *rg, double angle, ImlibOp op, int clx, int cly, int clw, int clh);
-void        __imlib_DrawHsvaGradient(ImlibImage *im, int x, int y, int w, int h, ImlibRange *rg, double angle, ImlibOp op, int clx, int cly, int clw, int clh);
+__hidden DATA32     *__imlib_MapRange(ImlibRange *rg, int len);
+__hidden DATA32     *__imlib_MapHsvaRange(ImlibRange *rg, int len);
+__hidden void        __imlib_DrawGradient(ImlibImage *im, int x, int y, int w, int h, ImlibRange *rg, double angle, ImlibOp op, int clx, int cly, int clw, int clh);
+__hidden void        __imlib_DrawHsvaGradient(ImlibImage *im, int x, int y, int w, int h, ImlibRange *rg, double angle, ImlibOp op, int clx, int cly, int clw, int clh);

 #endif
diff -urN imlib2-1.2.2/src/lib/image.c imlib2-1.2.2-devel/src/lib/image.c
--- imlib2-1.2.2/src/lib/image.c	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/image.c	2006-03-28 14:18:11.000000000 +0400
@@ -34,7 +34,7 @@
    if (!key)
       return;

-   /* if a tag of that name alreayd exists - remove it and free it */
+   /* if a tag of that name already exists - remove it and free it */
    if ((t = __imlib_RemoveTag(im, key)))
       __imlib_FreeTag(im, t);
    /* allocate the struct */
@@ -971,7 +971,7 @@
       return NULL;
    if (file[0] == 0)
       return NULL;
-   /* see if we alreayd have the image cached */
+   /* see if we already have the image cached */
    im = __imlib_FindCachedImage(file);
    /* if we found a cached image and we shoudl always check that it is */
    /* accurate to the disk conents if they changed since we last loaded */
@@ -1036,7 +1036,7 @@
         /* run through all loaders and try load until one succeeds */
         while ((l) && (im->w == 0))
           {
-             /* if its not the best loader that alreayd failed - try load */
+             /* if its not the best loader that already failed - try load */
              if (l != best_loader)
                 loader_ret =
                     l->load(im, progress, progress_granularity, immediate_load);
@@ -1049,7 +1049,7 @@
           }
         /* if we have a loader then its the loader that succeeded */
         /* move the successful loader to the head of the list */
-        /* as long as it's not alreayd at the head of the list */
+        /* as long as it's not already at the head of the list */
         if ((l) && (previous_l))
           {
              im->loader = l;
diff -urN imlib2-1.2.2/src/lib/image.h imlib2-1.2.2-devel/src/lib/image.h
--- imlib2-1.2.2/src/lib/image.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/image.h	2006-03-28 14:18:11.000000000 +0400
@@ -112,67 +112,67 @@
    ImlibLoader  *next;
 };

-void              __imlib_AttachTag(ImlibImage *im, const char *key, int val, void *data,
+void                     __imlib_AttachTag(ImlibImage *im, const char *key, int val, void *data,
 				    ImlibDataDestructorFunction destructor);
-ImlibImageTag    *__imlib_GetTag(ImlibImage *im, const char *key);
-ImlibImageTag    *__imlib_RemoveTag(ImlibImage *im, const char *key);
-void              __imlib_FreeTag(ImlibImage *im, ImlibImageTag *t);
-void              __imlib_FreeAllTags(ImlibImage *im);
+ImlibImageTag           *__imlib_GetTag(ImlibImage *im, const char *key);
+__hidden ImlibImageTag    *__imlib_RemoveTag(ImlibImage *im, const char *key);
+__hidden void              __imlib_FreeTag(ImlibImage *im, ImlibImageTag *t);
+__hidden void              __imlib_FreeAllTags(ImlibImage *im);

-void              __imlib_SetCacheSize(int size);
-int               __imlib_GetCacheSize(void);
-ImlibImage       *__imlib_ProduceImage(void);
-void              __imlib_ConsumeImage(ImlibImage *im);
-ImlibImage       *__imlib_FindCachedImage(const char *file);
-void              __imlib_AddImageToCache(ImlibImage *im);
-void              __imlib_RemoveImageFromCache(ImlibImage *im);
-int               __imlib_CurrentCacheSize(void);
-void              __imlib_CleanupImageCache(void);
+__hidden void              __imlib_SetCacheSize(int size);
+__hidden int               __imlib_GetCacheSize(void);
+__hidden ImlibImage       *__imlib_ProduceImage(void);
+__hidden void              __imlib_ConsumeImage(ImlibImage *im);
+__hidden ImlibImage       *__imlib_FindCachedImage(const char *file);
+__hidden void              __imlib_AddImageToCache(ImlibImage *im);
+__hidden void              __imlib_RemoveImageFromCache(ImlibImage *im);
+__hidden int               __imlib_CurrentCacheSize(void);
+__hidden void              __imlib_CleanupImageCache(void);
 # ifdef BUILD_X11
-ImlibImagePixmap *__imlib_ProduceImagePixmap(void);
-void              __imlib_ConsumeImagePixmap(ImlibImagePixmap *ip);
-ImlibImagePixmap *__imlib_FindCachedImagePixmap(ImlibImage *im, int w, int h,
+__hidden ImlibImagePixmap *__imlib_ProduceImagePixmap(void);
+__hidden void              __imlib_ConsumeImagePixmap(ImlibImagePixmap *ip);
+__hidden ImlibImagePixmap *__imlib_FindCachedImagePixmap(ImlibImage *im, int w, int h,
 						Display *d, Visual *v,
 						int depth, int sx, int sy,
 						int sw, int sh, Colormap cm,
 						char aa, char hiq, char dmask,
 						DATABIG modification_count);
-ImlibImagePixmap *__imlib_FindCachedImagePixmapByID(Display *d, Pixmap p);
-void              __imlib_AddImagePixmapToCache(ImlibImagePixmap *ip);
-void              __imlib_RemoveImagePixmapFromCache(ImlibImagePixmap *ip);
-void              __imlib_CleanupImagePixmapCache(void);
+__hidden ImlibImagePixmap *__imlib_FindCachedImagePixmapByID(Display *d, Pixmap p);
+__hidden void              __imlib_AddImagePixmapToCache(ImlibImagePixmap *ip);
+__hidden void              __imlib_RemoveImagePixmapFromCache(ImlibImagePixmap *ip);
+__hidden void              __imlib_CleanupImagePixmapCache(void);
 # endif
-ImlibLoader      *__imlib_ProduceLoader(char *file);
-char            **__imlib_ListLoaders(int *num_ret);
-char            **__imlib_TrimLoaderList(char **list, int *num);
-int               __imlib_ItemInList(char **list, int size, char *item);
-void              __imlib_ConsumeLoader(ImlibLoader *l);
-void              __imlib_RescanLoaders(void);
-void              __imlib_RemoveAllLoaders(void);
-void              __imlib_LoadAllLoaders(void);
-ImlibLoader      *__imlib_FindBestLoaderForFile(const char *file, int for_save);
-ImlibLoader      *__imlib_FindBestLoaderForFileFormat(const char *file, char *format, int for_save);
-void              __imlib_SetImageAlphaFlag(ImlibImage *im, char alpha);
-ImlibImage       *__imlib_CreateImage(int w, int h, DATA32 *data);
-ImlibImage       *__imlib_LoadImage(const char *file,
+__hidden ImlibLoader      *__imlib_ProduceLoader(char *file);
+__hidden char            **__imlib_ListLoaders(int *num_ret);
+__hidden char            **__imlib_TrimLoaderList(char **list, int *num);
+__hidden int               __imlib_ItemInList(char **list, int size, char *item);
+__hidden void              __imlib_ConsumeLoader(ImlibLoader *l);
+__hidden void              __imlib_RescanLoaders(void);
+__hidden void              __imlib_RemoveAllLoaders(void);
+__hidden void              __imlib_LoadAllLoaders(void);
+ImlibLoader             *__imlib_FindBestLoaderForFile(const char *file, int for_save);
+__hidden ImlibLoader      *__imlib_FindBestLoaderForFileFormat(const char *file, char *format, int for_save);
+__hidden void              __imlib_SetImageAlphaFlag(ImlibImage *im, char alpha);
+__hidden ImlibImage       *__imlib_CreateImage(int w, int h, DATA32 *data);
+__hidden ImlibImage       *__imlib_LoadImage(const char *file,
 				    ImlibProgressFunction progress,
 				    char progress_granularity, char immediate_load,
 				    char dont_cache, ImlibLoadError *er);
 # ifdef BUILD_X11
-ImlibImagePixmap *__imlib_FindImlibImagePixmapByID(Display *d, Pixmap p);
+__hidden ImlibImagePixmap *__imlib_FindImlibImagePixmapByID(Display *d, Pixmap p);
 # endif
-void              __imlib_FreeImage(ImlibImage *im);
+__hidden void              __imlib_FreeImage(ImlibImage *im);
 # ifdef BUILD_X11
-void              __imlib_FreePixmap(Display *d, Pixmap p);
+__hidden void              __imlib_FreePixmap(Display *d, Pixmap p);
 # endif
-void              __imlib_FlushCache(void);
+__hidden void              __imlib_FlushCache(void);
 # ifdef BUILD_X11
-void              __imlib_DirtyPixmapsForImage(ImlibImage *im);
+__hidden void              __imlib_DirtyPixmapsForImage(ImlibImage *im);
 # else
 #  define	__imlib_DirtyPixmapsForImage(x)	/* x */
 # endif
-void              __imlib_DirtyImage(ImlibImage *im);
-void              __imlib_SaveImage(ImlibImage *im, const char *file,
+__hidden void              __imlib_DirtyImage(ImlibImage *im);
+__hidden void              __imlib_SaveImage(ImlibImage *im, const char *file,
 				    ImlibProgressFunction progress,
 		                    char progress_granularity,
 		                    ImlibLoadError *er);
diff -urN imlib2-1.2.2/src/lib/rend.c imlib2-1.2.2-devel/src/lib/rend.c
--- imlib2-1.2.2/src/lib/rend.c	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/rend.c	2006-03-28 14:18:11.000000000 +0400
@@ -139,7 +139,7 @@
    return 0;
 }

-void
+__hidden void
                     __imlib_generic_render(DATA32 * src, int jump, int w, int h, int dx, int dy,
                                            XImage * xim, Visual * v,
                                            Context * ct);
diff -urN imlib2-1.2.2/src/lib/rend.h imlib2-1.2.2-devel/src/lib/rend.h
--- imlib2-1.2.2/src/lib/rend.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/rend.h	2006-03-28 14:18:11.000000000 +0400
@@ -3,10 +3,10 @@

 #ifdef BUILD_X11

-DATA32
+__hidden DATA32
 __imlib_RenderGetPixel(Display *d, Drawable w, Visual *v, Colormap cm, int depth, DATA8 r, DATA8 g, DATA8 b);

-void
+__hidden void
 __imlib_RenderImage(Display *d, ImlibImage *im,
 		    Drawable w, Drawable m,
 		    Visual *v, Colormap cm, int depth,
@@ -15,7 +15,7 @@
 		    char anitalias, char hiq, char blend, char dither_mask,
 		    ImlibColorModifier *cmod, ImlibOp op);

-void
+__hidden void
 __imlib_RenderImageSkewed(Display *d, ImlibImage *im, Drawable w,
 			  Drawable m, Visual *v, Colormap cm, int depth,
 			  int sx, int sy, int sw, int sh, int dx, int dy,
diff -urN imlib2-1.2.2/src/lib/rgba.h imlib2-1.2.2-devel/src/lib/rgba.h
--- imlib2-1.2.2/src/lib/rgba.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/rgba.h	2006-03-28 14:18:11.000000000 +0400
@@ -8,17 +8,17 @@
 #define DM_X (8)
 #define DM_Y (8)

-void    __imlib_RGBASetupContext(Context *ct);
-void    __imlib_RGBA_init(void *rd, void *gd, void *bd, int depth,
+__hidden void    __imlib_RGBASetupContext(Context *ct);
+__hidden void    __imlib_RGBA_init(void *rd, void *gd, void *bd, int depth,
 			  DATA8 palette_type);

 typedef void (*ImlibRGBAFunction)(DATA32*, int, DATA8*,
 				  int, int, int, int, int);
-ImlibRGBAFunction
+__hidden ImlibRGBAFunction
 __imlib_GetRGBAFunction(int depth,
 			unsigned long rm, unsigned long gm, unsigned long bm,
 			char hiq, DATA8 palette_type);
-ImlibRGBAFunction
+__hidden ImlibRGBAFunction
 __imlib_GetMaskFunction(char hiq);

 #ifdef DO_MMX_ASM
diff -urN imlib2-1.2.2/src/lib/rgbadraw.h imlib2-1.2.2-devel/src/lib/rgbadraw.h
--- imlib2-1.2.2/src/lib/rgbadraw.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/rgbadraw.h	2006-03-28 14:18:11.000000000 +0400
@@ -61,30 +61,30 @@

 /* image related operations: in rgbadraw.c */

-void __imlib_FlipImageHoriz(ImlibImage * im);
-void __imlib_FlipImageVert(ImlibImage * im);
-void __imlib_FlipImageBoth(ImlibImage * im);
-void __imlib_FlipImageDiagonal(ImlibImage * im, int direction);
-void __imlib_BlurImage(ImlibImage * im, int rad);
-void __imlib_SharpenImage(ImlibImage * im, int rad);
-void __imlib_TileImageHoriz(ImlibImage * im);
-void __imlib_TileImageVert(ImlibImage * im);
+__hidden void __imlib_FlipImageHoriz(ImlibImage * im);
+__hidden void __imlib_FlipImageVert(ImlibImage * im);
+__hidden void __imlib_FlipImageBoth(ImlibImage * im);
+__hidden void __imlib_FlipImageDiagonal(ImlibImage * im, int direction);
+__hidden void __imlib_BlurImage(ImlibImage * im, int rad);
+__hidden void __imlib_SharpenImage(ImlibImage * im, int rad);
+__hidden void __imlib_TileImageHoriz(ImlibImage * im);
+__hidden void __imlib_TileImageVert(ImlibImage * im);

-void __imlib_copy_alpha_data(ImlibImage * src, ImlibImage * dst, int x, int y,
+__hidden void __imlib_copy_alpha_data(ImlibImage * src, ImlibImage * dst, int x, int y,
                              int w, int h, int nx, int ny);

-void __imlib_copy_image_data(ImlibImage * im, int x, int y, int w, int h,
+__hidden void __imlib_copy_image_data(ImlibImage * im, int x, int y, int w, int h,
                              int nx, int ny);


 /* point and line drawing: in line.c */

-ImlibUpdate *
+__hidden ImlibUpdate *
 __imlib_Point_DrawToImage(int x, int y, DATA32 color,
 			  ImlibImage *im, int clx, int cly, int clw, int clh,
 			  ImlibOp op, char blend, char make_updates);

-ImlibUpdate *
+__hidden ImlibUpdate *
 __imlib_Line_DrawToImage(int x0, int y0, int x1, int y1, DATA32 color,
 			 ImlibImage *im, int clx, int cly, int clw, int clh,
 			 ImlibOp op, char blend, char anti_alias,
@@ -93,12 +93,12 @@

 /* rectangle drawing and filling: in rectangle.c */

-void
+__hidden void
 __imlib_Rectangle_DrawToImage(int xc, int yc, int w, int h, DATA32 color,
 			      ImlibImage *im, int clx, int cly, int clw, int clh,
 			      ImlibOp op, char blend);

-void
+__hidden void
 __imlib_Rectangle_FillToImage(int xc, int yc, int w, int h, DATA32 color,
 			      ImlibImage *im, int clx, int cly, int clw, int clh,
 			      ImlibOp op, char blend);
@@ -106,12 +106,12 @@

 /* ellipse drawing and filling: in ellipse.c */

-void
+__hidden void
 __imlib_Ellipse_DrawToImage(int xc, int yc, int a, int b, DATA32 color,
 			    ImlibImage *im, int clx, int cly, int clw, int clh,
 			    ImlibOp op, char blend, char anti_alias);

-void
+__hidden void
 __imlib_Ellipse_FillToImage(int xc, int yc, int a, int b, DATA32 color,
 			    ImlibImage *im, int clx, int cly, int clw, int clh,
 			    ImlibOp op, char blend, char anti_alias);
@@ -119,20 +119,20 @@

 /* polygon handling functions: in polygon.c */

-ImlibPoly __imlib_polygon_new(void);
-void __imlib_polygon_free(ImlibPoly poly);
-void __imlib_polygon_add_point(ImlibPoly poly, int x, int y);
-unsigned char __imlib_polygon_contains_point(ImlibPoly poly, int x, int y);
-void __imlib_polygon_get_bounds(ImlibPoly poly, int *px1, int *py1, int *px2, int *py2);
+__hidden ImlibPoly __imlib_polygon_new(void);
+__hidden void __imlib_polygon_free(ImlibPoly poly);
+__hidden void __imlib_polygon_add_point(ImlibPoly poly, int x, int y);
+__hidden unsigned char __imlib_polygon_contains_point(ImlibPoly poly, int x, int y);
+__hidden void __imlib_polygon_get_bounds(ImlibPoly poly, int *px1, int *py1, int *px2, int *py2);


 /* polygon drawing and filling: in polygon.c */

-void
+__hidden void
 __imlib_Polygon_DrawToImage(ImlibPoly poly, char closed, DATA32 color,
 			    ImlibImage *im, int clx, int cly, int clw, int clh,
 			    ImlibOp op, char blend, char anti_alias);
-void
+__hidden void
 __imlib_Polygon_FillToImage(ImlibPoly poly, DATA32 color,
 			    ImlibImage *im, int clx, int cly, int clw, int clh,
 			    ImlibOp op, char blend, char anti_alias);
diff -urN imlib2-1.2.2/src/lib/rotate.h imlib2-1.2.2-devel/src/lib/rotate.h
--- imlib2-1.2.2/src/lib/rotate.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/rotate.h	2006-03-28 14:18:11.000000000 +0400
@@ -10,13 +10,13 @@
 #define _ROTATE_PREC_MAX (1 << _ROTATE_PREC)
 #define _ROTATE_PREC_BITS (_ROTATE_PREC_MAX - 1)

-void __imlib_RotateSample(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
+__hidden void __imlib_RotateSample(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
 			  int dow, int dw, int dh, int x, int y,
 			  int dxh, int dyh, int dxv, int dyv);
-void __imlib_RotateAA(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
+__hidden void __imlib_RotateAA(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
 		      int dow, int dw, int dh, int x, int y,
 		      int dx, int dy, int dxv, int dyv);
-void __imlib_BlendImageToImageSkewed(ImlibImage *im_src, ImlibImage *im_dst,
+__hidden void __imlib_BlendImageToImageSkewed(ImlibImage *im_src, ImlibImage *im_dst,
 				     char aa, char blend, char merge_alpha,
 				     int ssx, int ssy, int ssw, int ssh,
 				     int ddx, int ddy,
@@ -26,7 +26,7 @@


 #ifdef DO_MMX_ASM
-void __imlib_mmx_RotateAA(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
+__hidden void __imlib_mmx_RotateAA(DATA32 *src, DATA32 *dest, int sow, int sw, int sh,
 			  int dow, int dw, int dh, int x, int y,
 			  int dx, int dy, int dxv, int dyv);
 #endif
diff -urN imlib2-1.2.2/src/lib/scale.h imlib2-1.2.2-devel/src/lib/scale.h
--- imlib2-1.2.2/src/lib/scale.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/scale.h	2006-03-28 14:18:11.000000000 +0400
@@ -3,20 +3,20 @@

 typedef struct _imlib_scale_info ImlibScaleInfo;

-ImlibScaleInfo *
+__hidden ImlibScaleInfo *
 __imlib_CalcScaleInfo(ImlibImage *im, int sw, int sh, int dw, int dh, char aa);
-ImlibScaleInfo *
+__hidden ImlibScaleInfo *
 __imlib_FreeScaleInfo(ImlibScaleInfo *isi);
-void
+__hidden void
 __imlib_ScaleSampleRGBA(ImlibScaleInfo *isi, DATA32 *dest, int dxx, int dyy,
 			int dx, int dy, int dw, int dh, int dow);
-void
+__hidden void
 __imlib_ScaleAARGBA(ImlibScaleInfo *isi, DATA32 *dest, int dxx, int dyy,
 		    int dx, int dy, int dw, int dh, int dow, int sow);
-void
+__hidden void
 __imlib_ScaleAARGB(ImlibScaleInfo *isi, DATA32 *dest, int dxx, int dyy,
 		   int dx, int dy, int dw, int dh, int dow, int sow);
-void
+__hidden void
 __imlib_Scale_mmx_AARGBA(ImlibScaleInfo *isi, DATA32 *dest, int dxx, int dyy,
 			 int dx, int dy, int dw, int dh, int dow, int sow);
 #endif
diff -urN imlib2-1.2.2/src/lib/script.h imlib2-1.2.2-devel/src/lib/script.h
--- imlib2-1.2.2/src/lib/script.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/script.h	2006-03-28 14:18:11.000000000 +0400
@@ -60,11 +60,11 @@
    struct _imlib_variable *next;
 } IVariable;

-Imlib_Image     __imlib_script_parse( Imlib_Image im, char *script, va_list );
-IFunctionParam *__imlib_script_parse_parameters( Imlib_Image im, char *parameters );
-Imlib_Image     __imlib_script_parse_function( Imlib_Image im, char *function );
-void            __imlib_script_tidyup(void);
-void           *__imlib_script_get_next_var(void);
-void            __imlib_script_add_var( void *ptr );
+__hidden Imlib_Image     __imlib_script_parse( Imlib_Image im, char *script, va_list );
+__hidden IFunctionParam *__imlib_script_parse_parameters( Imlib_Image im, char *parameters );
+__hidden Imlib_Image     __imlib_script_parse_function( Imlib_Image im, char *function );
+__hidden void            __imlib_script_tidyup(void);
+__hidden void           *__imlib_script_get_next_var(void);
+__hidden void            __imlib_script_add_var( void *ptr );

 #endif /* _FUNCTION_H_ */
diff -urN imlib2-1.2.2/src/lib/span.h imlib2-1.2.2-devel/src/lib/span.h
--- imlib2-1.2.2/src/lib/span.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/span.h	2006-03-28 14:18:11.000000000 +0400
@@ -4,19 +4,19 @@

 typedef void (*ImlibPointDrawFunction)(DATA32, DATA32 *);

-ImlibPointDrawFunction
+__hidden ImlibPointDrawFunction
 __imlib_GetPointDrawFunction(ImlibOp op, char dst_alpha, char blend);


 typedef void (*ImlibSpanDrawFunction)(DATA32, DATA32 *, int);

-ImlibSpanDrawFunction
+__hidden ImlibSpanDrawFunction
 __imlib_GetSpanDrawFunction(ImlibOp op, char dst_alpha, char blend);


 typedef void (*ImlibShapedSpanDrawFunction)(DATA8 *, DATA32, DATA32 *, int);

-ImlibShapedSpanDrawFunction
+__hidden ImlibShapedSpanDrawFunction
 __imlib_GetShapedSpanDrawFunction(ImlibOp op, char dst_alpha, char blend);


diff -urN imlib2-1.2.2/src/lib/updates.h imlib2-1.2.2-devel/src/lib/updates.h
--- imlib2-1.2.2/src/lib/updates.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/updates.h	2006-03-28 14:18:11.000000000 +0400
@@ -8,9 +8,9 @@
    ImlibUpdate *next;
 };

-ImlibUpdate *__imlib_AddUpdate(ImlibUpdate *u, int x, int y, int w, int h);
-ImlibUpdate *__imlib_MergeUpdate(ImlibUpdate *u, int w, int h, int hgapmax);
-void __imlib_FreeUpdates(ImlibUpdate *u);
-ImlibUpdate *__imlib_DupUpdates(ImlibUpdate *u);
+__hidden ImlibUpdate *__imlib_AddUpdate(ImlibUpdate *u, int x, int y, int w, int h);
+__hidden ImlibUpdate *__imlib_MergeUpdate(ImlibUpdate *u, int w, int h, int hgapmax);
+__hidden void __imlib_FreeUpdates(ImlibUpdate *u);
+__hidden ImlibUpdate *__imlib_DupUpdates(ImlibUpdate *u);

 #endif
diff -urN imlib2-1.2.2/src/lib/ximage.h imlib2-1.2.2-devel/src/lib/ximage.h
--- imlib2-1.2.2/src/lib/ximage.h	2006-01-24 06:46:04.000000000 +0300
+++ imlib2-1.2.2-devel/src/lib/ximage.h	2006-03-28 14:18:11.000000000 +0400
@@ -3,13 +3,13 @@

 #ifdef BUILD_X11

-void    __imlib_SetMaxXImageCount(Display *d, int num);
-int     __imlib_GetMaxXImageCount(Display *d);
-void    __imlib_SetMaxXImageTotalSize(Display *d, int num);
-int     __imlib_GetMaxXImageTotalSize(Display *d);
-void    __imlib_FlushXImage(Display *d);
-void    __imlib_ConsumeXImage(Display *d, XImage *xim);
-XImage *__imlib_ProduceXImage(Display *d, Visual *v, int depth, int w, int h, char *shared);
+void           __imlib_SetMaxXImageCount(Display *d, int num);
+__hidden int     __imlib_GetMaxXImageCount(Display *d);
+__hidden void    __imlib_SetMaxXImageTotalSize(Display *d, int num);
+__hidden int     __imlib_GetMaxXImageTotalSize(Display *d);
+__hidden void    __imlib_FlushXImage(Display *d);
+__hidden void    __imlib_ConsumeXImage(Display *d, XImage *xim);
+__hidden XImage *__imlib_ProduceXImage(Display *d, Visual *v, int depth, int w, int h, char *shared);

 #endif