Eliminate .so PLT entries for local symbols. (thanks to Arjan van de Ven)
Using a simple shell script that processes the public headers, two header files are constructed that map public symbols to hidden internal aliases avoiding the assocated PLT entry for referring to a public symbol. A few mistakes in the FcPrivate/FcPublic annotations were also discovered through this process
This commit is contained in:
parent
323ecd0cd3
commit
23816bf9ac
|
@ -1,3 +1,5 @@
|
|||
fcalias.h
|
||||
fcaliastail.h
|
||||
tags
|
||||
*.tar.gz
|
||||
.libs
|
||||
|
|
|
@ -47,4 +47,11 @@ $(TARG):fc-arch${EXEEXT} $(STMPL) ${top_srcdir}/src/fcint.h ../config.h
|
|||
rm -f $(TARG)
|
||||
./fc-arch${EXEEXT} $(ARCHITECTURE) < $(STMPL) > $(TARG)
|
||||
|
||||
CLEANFILES=$(TARG)
|
||||
ALIAS_FILES = fcalias.h fcaliastail.h
|
||||
|
||||
BUILT_SOURCES = $(ALIAS_FILES)
|
||||
|
||||
$(ALIAS_FILES):
|
||||
touch $(ALIAS_FILES)
|
||||
|
||||
CLEANFILES=$(TARG) $(ALIAS_FILES)
|
||||
|
|
|
@ -52,5 +52,12 @@ $(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING)
|
|||
rm -f $(TARG)
|
||||
./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG)
|
||||
|
||||
CLEANFILES=$(TARG)
|
||||
ALIAS_FILES = fcalias.h fcaliastail.h
|
||||
|
||||
BUILT_SOURCES = $(ALIAS_FILES)
|
||||
|
||||
$(ALIAS_FILES):
|
||||
touch $(ALIAS_FILES)
|
||||
|
||||
CLEANFILES=$(TARG) $(ALIAS_FILES)
|
||||
|
||||
|
|
|
@ -47,5 +47,12 @@ $(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME)
|
|||
rm -f $(TARG)
|
||||
./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG)
|
||||
|
||||
CLEANFILES=$(TARG)
|
||||
ALIAS_FILES = fcalias.h fcaliastail.h
|
||||
|
||||
BUILT_SOURCES = $(ALIAS_FILES)
|
||||
|
||||
$(ALIAS_FILES):
|
||||
touch $(ALIAS_FILES)
|
||||
|
||||
CLEANFILES=$(TARG) $(ALIAS_FILES)
|
||||
|
||||
|
|
|
@ -46,4 +46,11 @@ $(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL)
|
|||
rm -f $(TARG)
|
||||
./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG)
|
||||
|
||||
CLEANFILES=$(TARG)
|
||||
ALIAS_FILES = fcalias.h fcaliastail.h
|
||||
|
||||
BUILT_SOURCES = $(ALIAS_FILES)
|
||||
|
||||
$(ALIAS_FILES):
|
||||
touch $(ALIAS_FILES)
|
||||
|
||||
CLEANFILES = $(TARG) $(ALIAS_FILES)
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "fcint.h"
|
||||
#include "fccharset.c"
|
||||
#include "fcstr.c"
|
||||
#include "fcserialize.c"
|
||||
|
|
|
@ -355,10 +355,10 @@ FcConfigGetConfigDirs (FcConfig *config);
|
|||
FcPublic FcStrList *
|
||||
FcConfigGetConfigFiles (FcConfig *config);
|
||||
|
||||
FcChar8 *
|
||||
FcPublic FcChar8 *
|
||||
FcConfigGetCache (FcConfig *config);
|
||||
|
||||
FcBlanks *
|
||||
FcPublic FcBlanks *
|
||||
FcConfigGetBlanks (FcConfig *config);
|
||||
|
||||
FcPublic FcStrList *
|
||||
|
@ -899,13 +899,13 @@ FcPublic void
|
|||
FcStrSetDestroy (FcPublic FcStrSet *set);
|
||||
|
||||
FcPublic FcStrList *
|
||||
FcPublic FcStrListCreate (FcPublic FcStrSet *set);
|
||||
FcStrListCreate (FcPublic FcStrSet *set);
|
||||
|
||||
FcPublic FcChar8 *
|
||||
FcPublic FcStrListNext (FcStrList *list);
|
||||
FcStrListNext (FcStrList *list);
|
||||
|
||||
FcPublic void
|
||||
FcPublic FcStrListDone (FcStrList *list);
|
||||
FcStrListDone (FcStrList *list);
|
||||
|
||||
/* fcxml.c */
|
||||
FcPublic FcBool
|
||||
|
|
|
@ -73,10 +73,14 @@ INCLUDES = \
|
|||
-DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
|
||||
-DFONTCONFIG_PATH='"$(CONFDIR)"'
|
||||
|
||||
EXTRA_DIST = fontconfig.def.in
|
||||
EXTRA_DIST = fontconfig.def.in makealias
|
||||
|
||||
noinst_HEADERS=fcint.h
|
||||
|
||||
ALIAS_FILES = fcalias.h fcaliastail.h
|
||||
|
||||
BUILT_SOURCES = $(ALIAS_FILES)
|
||||
|
||||
libfontconfig_la_SOURCES = \
|
||||
fcatomic.c \
|
||||
fcblanks.c \
|
||||
|
@ -112,3 +116,12 @@ install-data-local: install-ms-import-lib install-libtool-import-lib
|
|||
|
||||
uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib
|
||||
|
||||
PUBLIC_FILES = \
|
||||
$(top_srcdir)/fontconfig/fontconfig.h \
|
||||
$(top_srcdir)/fontconfig/fcfreetype.h \
|
||||
$(top_srcdir)/fontconfig/fcprivate.h
|
||||
|
||||
$(ALIAS_FILES): $(top_srcdir)/src/makealias $(PUBLIC_FILES)
|
||||
sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" $(PUBLIC_FILES)
|
||||
|
||||
CLEANFILES := $(ALIAS_FILES)
|
||||
|
|
|
@ -211,3 +211,6 @@ FcAtomicDestroy (FcAtomic *atomic)
|
|||
|
||||
free (atomic);
|
||||
}
|
||||
#define __fcatomic__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcatomic__
|
||||
|
|
|
@ -90,3 +90,6 @@ FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4)
|
|||
return FcTrue;
|
||||
return FcFalse;
|
||||
}
|
||||
#define __fcblanks__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcblanks__
|
||||
|
|
|
@ -1085,3 +1085,6 @@ static void MD5Transform(FcChar32 buf[4], FcChar32 in[16])
|
|||
buf[2] += c;
|
||||
buf[3] += d;
|
||||
}
|
||||
#define __fccache__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fccache__
|
||||
|
|
|
@ -1964,3 +1964,6 @@ FcConfigAcceptFont (FcConfig *config,
|
|||
return FcFalse;
|
||||
return FcTrue;
|
||||
}
|
||||
#define __fccfg__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fccfg__
|
||||
|
|
|
@ -1358,3 +1358,6 @@ FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs)
|
|||
|
||||
return cs_serialized;
|
||||
}
|
||||
#define __fccharset__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fccharset__
|
||||
|
|
|
@ -412,3 +412,6 @@ FcInitDebug (void)
|
|||
FcDebugVal = 0;
|
||||
}
|
||||
}
|
||||
#define __fcdbg__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcdbg__
|
||||
|
|
|
@ -166,3 +166,6 @@ FcDefaultSubstitute (FcPattern *pattern)
|
|||
FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL);
|
||||
}
|
||||
}
|
||||
#define __fcdefault__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcdefault__
|
||||
|
|
|
@ -292,3 +292,6 @@ FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir)
|
|||
{
|
||||
return FcFalse; /* XXX deprecated */
|
||||
}
|
||||
#define __fcdir__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcdir__
|
||||
|
|
|
@ -2952,3 +2952,7 @@ bail:
|
|||
ftglue_free(memory, gpostags);
|
||||
return complex;
|
||||
}
|
||||
|
||||
#define __fcfreetype__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcfreetype__
|
||||
|
|
|
@ -130,3 +130,6 @@ FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
|
|||
|
||||
return s_serialize;
|
||||
}
|
||||
#define __fcfs__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcfs__
|
||||
|
|
|
@ -263,3 +263,6 @@ FcMemFree (int kind, int size)
|
|||
FcMemReport ();
|
||||
}
|
||||
}
|
||||
#define __fcinit__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcinit__
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
#include <fontconfig/fontconfig.h>
|
||||
#include <fontconfig/fcprivate.h>
|
||||
#include <fontconfig/fcfreetype.h>
|
||||
#include "fcalias.h"
|
||||
|
||||
#ifndef FC_CONFIG_PATH
|
||||
#define FC_CONFIG_PATH "fonts.conf"
|
||||
|
@ -322,6 +323,8 @@ struct _FcCache {
|
|||
intptr_t set; /* offset to font set */
|
||||
};
|
||||
|
||||
#undef FcCacheDir
|
||||
#undef FcCacheSubdir
|
||||
#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
|
||||
#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
|
||||
#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
|
||||
|
@ -513,7 +516,7 @@ FcCacheObjectDereference (void *object);
|
|||
FcPrivate void
|
||||
FcCacheFini (void);
|
||||
|
||||
void
|
||||
FcPrivate void
|
||||
FcDirCacheReference (FcCache *cache, int nref);
|
||||
|
||||
/* fccfg.c */
|
||||
|
|
|
@ -727,3 +727,6 @@ FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l)
|
|||
*l_serialize = *l;
|
||||
return l_serialize;
|
||||
}
|
||||
#define __fclang__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fclang__
|
||||
|
|
|
@ -556,3 +556,6 @@ FcFontList (FcConfig *config,
|
|||
sets[nsets++] = config->fonts[FcSetApplication];
|
||||
return FcFontSetList (config, sets, nsets, p, os);
|
||||
}
|
||||
#define __fclist__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fclist__
|
||||
|
|
|
@ -835,3 +835,6 @@ FcFontSort (FcConfig *config,
|
|||
sets[nsets++] = config->fonts[FcSetApplication];
|
||||
return FcFontSetSort (config, sets, nsets, p, trim, csp, result);
|
||||
}
|
||||
#define __fcmatch__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcmatch__
|
||||
|
|
|
@ -115,3 +115,6 @@ FcMatrixShear (FcMatrix *m, double sh, double sv)
|
|||
r.yy = 1;
|
||||
FcMatrixMultiply (m, &r, m);
|
||||
}
|
||||
#define __fcmatrix__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcmatrix__
|
||||
|
|
|
@ -879,3 +879,6 @@ bail0:
|
|||
FcStrBufDestroy (&buf);
|
||||
return 0;
|
||||
}
|
||||
#define __fcname__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcname__
|
||||
|
|
|
@ -1208,3 +1208,6 @@ FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
|
|||
}
|
||||
return head_serialized;
|
||||
}
|
||||
#define __fcpat__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcpat__
|
||||
|
|
|
@ -159,3 +159,6 @@ FcStrSerialize (FcSerialize *serialize, const FcChar8 *str)
|
|||
strcpy ((char *) str_serialize, (const char *) str);
|
||||
return str_serialize;
|
||||
}
|
||||
#define __fcserialize__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcserialize__
|
||||
|
|
|
@ -1051,3 +1051,6 @@ FcStrListDone (FcStrList *list)
|
|||
free (list);
|
||||
}
|
||||
|
||||
#define __fcstr__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcstr__
|
||||
|
|
|
@ -2493,3 +2493,6 @@ bail0:
|
|||
}
|
||||
return FcTrue;
|
||||
}
|
||||
#define __fcxml__
|
||||
#include "fcaliastail.h"
|
||||
#undef __fcxml__
|
||||
|
|
|
@ -307,3 +307,6 @@ Exit:
|
|||
}
|
||||
|
||||
#undef QALLOC
|
||||
#define __ftglue__
|
||||
#include "fcaliastail.h"
|
||||
#undef __ftglue__
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
#!/bin/sh
|
||||
SRCDIR=$1
|
||||
shift
|
||||
HEAD=fcalias.h
|
||||
TAIL=fcaliastail.h
|
||||
rm -f $HEAD $TAIL
|
||||
sed -n -e '/^FcPublic /,+1p' "$@" | sed -e '/^FcPublic /d' -e 's/ *(.*$//' |
|
||||
while read name; do
|
||||
case $name in
|
||||
FcCacheDir|FcCacheSubdir)
|
||||
;;
|
||||
*)
|
||||
alias="IA__$name"
|
||||
hattr='__attribute((visibility("hidden")))'
|
||||
echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
|
||||
echo "#define $name $alias" >> $HEAD
|
||||
grep -l -w '^'$name "$SRCDIR"/*.c | sed -e 's/^.*\/\([^.]*\)\.c/#ifdef __\1__/' >> $TAIL
|
||||
echo "#undef $name" >> $TAIL
|
||||
cattr='__attribute((alias("'$alias'"), visibility("default")))'
|
||||
echo "extern __typeof ($name) $name $cattr;" >> $TAIL
|
||||
echo "#endif" >> $TAIL
|
||||
;;
|
||||
esac
|
||||
done
|
Loading…
Reference in New Issue