[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    all this talk about exporting symbols
From:       Alex Zepeda <jazepeda () pacbell ! net>
Date:       2001-05-31 6:41:56
[Download RAW message or body]

Led me to play around with what Mozilla's using.  That is versioning
scripts for the linker.  The big dowside is that mangled symbols must be
listed here.  But on the plus side it's compatible with the GNU ld and the
Solaris ld... and it lets you specify virtual tables and RTTI stuff with
ease.  The scripts support basic wildcards (* and ?), and there's probably
some optimization left to be done there, but with all that this could be
automated pretty easily (name mangling is pretty easy).

I've "hidden" most of the symbols from the "Private" classes in kdecore,
some in kdeui and some in kio.  All three libs export stuff like this too:
__as__7QStringc (which for those unenlightened is:  
QString::operator=(char)).  Hmm.  I hid those too.

Using these versioning scripts makes my box feel slower to me, however my
box is a REALLY bad speed test.  Maybe exporting operators already defined
allows the rtld to save another lookup?  Hmm.

Anyways, I'm interested if this makes a discernable difference in speed
for anyone else (hint, use the gnu ld option --version-script <file>).

Symbol versioning does bloat the library a bit, but with all the hidden
symbols the libraries end up being a few kb smaller.

- alex

["kdecore.exp" (text/plain)]

EXPORTED {
        local:
		*__15QMapPrivateBase*;
		*_$_t11QMapPrivate*;
		*__t11QMapPrivate*;
		*__Ct11QMapPrivate*;
		*_$_t17QValueListPrivate*;
		*__t17QValueListPrivate*;
		*__Ct17QValueListPrivate*;

		*_14KRegExpPrivate*;
                *_19KDesktopFilePrivate*;
                *_14KConfigPrivate*;
                *_16KCharsetsPrivate*;
		*_14KSycocaPrivate*;
		*_16KInstancePrivate*;
		*_17KAboutDataPrivate*;
		*_17KIconThemePrivate*;
		*_17KLibLoaderPrivate*;
		*_17KWinModulePrivate*;
		*_t?17KWinModulePrivate*;
		*_17NETWinInfoPrivate*;
		*_18KIconLoaderPrivate*;
		*_18NETRootInfoPrivate*;
		*_19KApplicationPrivate*;
		*_19KStartupInfoPrivate*;
		*_20KServerSocketPrivate*;
		*_21KStartupInfoIdPrivate*;
		*_19KAudioPlayerPrivate*;
		*_19KGlobalAccelPrivate*;
		*_t?19KGlobalAccelPrivate*;
		*_vt$19KGlobalAccelPrivate*;
		*_23KStartupInfoDataPrivate*;
		*_25KUniqueApplicationPrivate*;
		*_Q218KInetSocketAddress7Private*;
		*_Q218KMimeSourceFactory25KMimeSourceFactoryPrivateP11KIconLoader*;
		*_Q218KUnixSocketAddress7Private*;
		*t17QValueListPrivate*;
		*_vt$17KWinModulePrivate*;
		*_Q215KExtendedSocket22KExtendedSocketPrivate*;
		*_Q218KDCOPPropertyProxy25KDCOPPropertyProxyPrivate*;
		*_15KLibWrapPrivate*;
		*_t13QListIterator1Z15KLibWrapPrivate*;
		*_Ct13QListIterator1Z15KLibWrapPrivate*;
		*_Ct18QAsciiDictIterator1Z15KLibWrapPrivate*;
		*_t18QAsciiDictIterator1Z15KLibWrapPrivate*;
		*_Ct10QAsciiDict1Z15KLibWrapPrivate*;
		*_vt$t10QAsciiDict1Z15KLibWrapPrivate*;
		*_t10QAsciiDict1Z15KLibWrapPrivate*;
		*__t?t10QAsciiDict1Z15KLibWrapPrivate*;
		*_t5QList1Z15KLibWrapPrivate*;
		*_Ct5QList1Z15KLibWrapPrivate*;
		*_vt$t5QList1Z15KLibWrapPrivate*;
		*__t?t5QList1Z15KLibWrapPrivate*;

		__11QStringList*;
		__7QShared*;
		__7QString*;
		__5QTime*;
		__8QCString*;
		__8QCharRef*;
		__op5QChar__C8QCharRef;	
		__as__7QStringc;
		__as__8QCStringPCc;
		__as__8QCStringRC8QCString;
		__ne__FRC8QCStringPCc;
		__op5QChar__C8QCharRef;
		__pl__FPCcRC7QString;
		__opPCc__C8QCString;
		__5QCharc;
		__5QCharRC5QChar;
		_$_8QCString;
		_$_7QString;
		_$_11QStringList;
		__vc__7QStringi;
		__vc__C7QStringi;
		append__7QStringG5QChar;
		append__7QStringRC7QString;
		append__7QStringc;
		at__7QStringUi;
		at__C7QStringUi;
		contains__C7QStringcb;
		constref__C7QStringUi;
		copy__C8QCString;
		setNum__7QStringUii;
		setNum__7QStringUsi;
		setNum__7QStringii;
		arg__C7QStringUiii;
		arg__C7QStringiii;
		constref__C7QStringUi;
		contains__C7QStringcb;
		findRev__C7QStringcib;
		find__C7QStringPCci;
		find__C7QStringcib;
		isEmpty__C7QString;
		isNull__C7QString;
		length__C7QString;
		unicode__C7QString;
		isEmpty__C8QCString;
		append__8QCStringPCc;
		setNum__8QCStringi;
		__eq__FG5QCharc;
		__eq__FRC8QCStringPCc;
		__eq__FRC8QCStringT0;
		button__C11QMouseEvent;
		*__7QShared*;
		__as__11QStringListRC11QStringList;
};

["kdeui.exp" (text/plain)]

EXPORTED {
        local:
		*__15QMapPrivateBase*;
		*_$_t11QMapPrivate*;
		*__t11QMapPrivate*;
		*__Ct11QMapPrivate*;
		*_$_t17QValueListPrivate*;
		*__t17QValueListPrivate*;
		*__Ct17QValueListPrivate*;

		*_18KDockWidgetPrivate*;
		*_vt$18KDockWidgetPrivate*;
		*__C18KDockWidgetPrivate;
		__t?18KDockWidgetPrivate*;

		*_19KDockButton_Private*;
		*_vt$19KDockButton_Private*;
		*__C19KDockButton_Private;
		__t?19KDockButton_Private*;

		*_14KCursorPrivate*;
		*_vt$14KCursorPrivate*;
		*__C14KCursorPrivate*;
		__t?14KCursorPrivate*;

		*_15KToolBarPrivate*;
		*_Q215KToolBarPrivate11ToolBarInfo*;

		*t5QList1Z25KDockTabCtl_PrivateStruct*;
		*25KDockTabBar_PrivateStruct*;
		*t5QList1Z25KDockTabBar_PrivateStruct*;
		*_vt$t5QList1Z25KDockTabCtl_PrivateStruct;

		*_16KHelpMenuPrivate*;
		*_17KBugReportPrivate*;
		*__17KFontComboPrivate*;
		*_18KKeyChooserPrivate*;
		*_18KMainWindowPrivate*;
		*_19KDialogQueuePrivate*;
		*__20KSharedPixmapPrivate*;
		*_20KXMLGUIClientPrivate*;
		*_21KToolBarButtonPrivate*;
		*_21KXMLGUIBuilderPrivate*;
		*_21KXMLGUIFactoryPrivate*;
		*_25KDockTabCtl_PrivateStruct*;
		*_25KEditToolbarWidgetPrivate*;
		__t?t5QList1Z25KDockTabCtl_PrivateStruct;
		*__Ct5QList1Z25KDockTabCtl_PrivateStruct*;
		*__t5QList1Z25KDockTabCtl_PrivateStruct*;
		*__t10QValueList1ZQ37KAction14KActionPrivate9Container*;
		*__Q24KLed11KLedPrivate*;
		*__Q27KAction14KActionPrivate*;
		*__Q27KEdFind14KEdFindPrivateP7QWidget*;
		*__Q28KMenuBar15KMenuBarPrivate*;
		*__Q29KComboBox16KComboBoxPrivate*;
		*__Q29KIconView16KIconViewPrivate*;
		*__Q29KLineEdit16KLineEditPrivate*;
		*__Q29KListView16KListViewPrivateP9KListView*;
		*__Q29KURLLabel7PrivateRC7QStringP9KURLLabel*;
		*__Q37KAction14KActionPrivate9Container*;
		*_Q213KToggleAction20KToggleActionPrivate*;
		*_Q214KCompletionBox21KCompletionBoxPrivate*;
		*_Q215KCommandHistory22KCommandHistoryPrivate*;
		*_Q215KFontSizeAction22KFontSizeActionPrivate*;
		*_Q216KDCOPActionProxy23KDCOPActionProxyPrivate*;
		*_Q216KDualColorButton17KDualColorPrivate*;
		*_Q217KActionCollection24KActionCollectionPrivate*;
		*_Q218KRecentFilesAction25KRecentFilesActionPrivate*;
		*_Q24KLed11KLedPrivate*;
		*_Q27KAction14KActionPrivate*;
		*_Q27KEdFind14KEdFindPrivate*;
		*_Q28KMenuBar15KMenuBarPrivate*;
		*_Q29KComboBox16KComboBoxPrivate*;
		*_Q29KIconView16KIconViewPrivate*;
		*_Q29KLineEdit16KLineEditPrivate*;
		*_Q210KButtonBox11PrivateData*;
		*_Q210KEdReplace17KEdReplacePrivate*;
		*_Q211KActionMenu18KActionMenuPrivate*;
		*_Q211KAnimWidget18KAnimWidgetPrivate*;
		*_Q211KDialogBase18KDialogBasePrivate*;
		*_Q211KFontAction18KFontActionPrivate*;
		*_Q213KSelectAction20KSelectActionPrivate*;
		*_Q29KListView16KListViewPrivate*;
		*_Q29KURLLabel7Private*;
		*Q211KListAction18KListActionPrivate*;
		*Q212KColorDialog19KColorDialogPrivate*;
		*__t14QValueListNode1ZQ37KAction14KActionPrivate9Container*;
		*t18QValueListIterator1ZQ37KAction14KActionPrivate9Container*;
		*__Q212KDockManager19KDockManagerPrivate*;
		*__Q212KFontChooser19KFontChooserPrivate*;
		*t23QValueListConstIterator1ZQ37KAction14KActionPrivate9Container*;
		*t10QValueList1ZQ37KAction14KActionPrivate9Container*;

		__11QStringList*;
		__7QShared*;
		__7QString*;
		__5QTime*;
		__8QCString*;
		__8QCharRef*;
		__op5QChar__C8QCharRef;	
		__as__7QStringc;
		__as__8QCStringPCc;
		__as__8QCStringRC8QCString;
		__ne__FRC8QCStringPCc;
		__op5QChar__C8QCharRef;
		__pl__FPCcRC7QString;
		__opPCc__C8QCString;
		__5QCharc;
		__5QCharRC5QChar;
		_$_8QCString;
		_$_7QString;
		_$_11QStringList;
		__vc__7QStringi;
		__vc__C7QStringi;
		append__7QStringG5QChar;
		append__7QStringRC7QString;
		append__7QStringc;
		at__7QStringUi;
		at__C7QStringUi;
		contains__C7QStringcb;
		constref__C7QStringUi;
		copy__C8QCString;
		setNum__7QStringUii;
		setNum__7QStringUsi;
		setNum__7QStringii;
		arg__C7QStringUiii;
		arg__C7QStringiii;
		constref__C7QStringUi;
		contains__C7QStringcb;
		findRev__C7QStringcib;
		find__C7QStringPCci;
		find__C7QStringcib;
		isEmpty__C7QString;
		isNull__C7QString;
		length__C7QString;
		unicode__C7QString;
		isEmpty__C8QCString;
		append__8QCStringPCc;
		setNum__8QCStringi;
		__eq__FG5QCharc;
		__eq__FRC8QCStringPCc;
		__eq__FRC8QCStringT0;
		button__C11QMouseEvent;
		*__7QShared*;
		__as__11QStringListRC11QStringList;
};

["kio.exp" (text/plain)]

EXPORTED {
	local:
		*_t17QValueListPrivate*;
		*_Ct17QValueListPrivate*;
		*_t11QMapPrivate*;
		*_Ct11QMapPrivate*;
		*_15QMapPrivateBase*;

		*_23KProtocolManagerPrivate*;
		*_Q23KIO16SlaveBasePrivate*;
		*_Q23KIO18SlaveConfigPrivate*;
		*_Q33KIO12TCPSlaveBase19TcpSlaveBasePrivate*;
		*_21KEMailSettingsPrivate*;
		*_t14KStaticDeleter1Z23KProtocolManagerPrivate*;
		*_t?t14KStaticDeleter1Z23KProtocolManagerPrivate*;
		*_vt$t14KStaticDeleter1Z23KProtocolManagerPrivate*;

		storeAuthInfo__Q23KIO9SlaveBaseRC8QCStringT1RCQ23KIO8AuthInfo;
		writeData__6KShredPUcUi;
		flush__6KShred;

		*_Q23KIO19SlaveConfigProtocol*;
		*_t?t5QDict1ZQ23KIO19SlaveConfigProtocol*;
		*_vt$t5QDict1ZQ23KIO19SlaveConfigProtocol*;
		*_t5QDict1ZQ23KIO19SlaveConfigProtocol*;
		*_Ct5QDict1ZQ23KIO19SlaveConfigProtocol*;

		*_t5QList1ZQ23KIO4Task*;
		*_Ct5QList1ZQ23KIO4Task*;
		*_t?t5QList1ZQ23KIO4Task*;
		*_vt$t5QList1ZQ23KIO4Task*;

		*_t5QList1ZQ23KIO7AuthKey*;
		*_Ct5QList1ZQ23KIO7AuthKey*;
		*_t?t5QList1ZQ23KIO7AuthKey*;
		*_vt$t5QList1ZQ23KIO7AuthKey*;
		*_t13QListIterator1ZQ23KIO7AuthKey*;
		*_Ct13QListIterator1ZQ23KIO7AuthKey*;
		delCachedAuthKeys__Q23KIO9SchedulerRCt5QList1ZQ23KIO7AuthKey;
		regCachedAuthKey__Q23KIO9SchedulerRC8QCStringT1;
		__Q23KIO7AuthKey*;

		__11QStringList*;
		__7QShared*;
		__7QString*;
		__5QTime*;
		__8QCString*;
		__8QCharRef*;
		__op5QChar__C8QCharRef;	
		__as__7QStringc;
		__as__8QCStringPCc;
		__as__8QCStringRC8QCString;
		__ne__FRC8QCStringPCc;
		__op5QChar__C8QCharRef;
		__pl__FPCcRC7QString;
		__opPCc__C8QCString;
		__5QCharc;
		__5QCharRC5QChar;
		_$_8QCString;
		_$_7QString;
		_$_11QStringList;
		__vc__7QStringi;
		__vc__C7QStringi;
		append__7QStringG5QChar;
		append__7QStringRC7QString;
		append__7QStringc;
		at__7QStringUi;
		at__C7QStringUi;
		contains__C7QStringcb;
		constref__C7QStringUi;
		copy__C8QCString;
		setNum__7QStringUii;
		setNum__7QStringUsi;
		setNum__7QStringii;
		arg__C7QStringUiii;
		arg__C7QStringiii;
		constref__C7QStringUi;
		contains__C7QStringcb;
		findRev__C7QStringcib;
		find__C7QStringPCci;
		find__C7QStringcib;
		isEmpty__C7QString;
		isNull__C7QString;
		length__C7QString;
		unicode__C7QString;
		isEmpty__C8QCString;
		append__8QCStringPCc;
		setNum__8QCStringi;
		__eq__FG5QCharc;
		__eq__FRC8QCStringPCc;
		__eq__FRC8QCStringT0;
		button__C11QMouseEvent;
		*__7QShared*;
		__as__11QStringListRC11QStringList;
};

["ksycoca.exp" (text/plain)]

EXPORTED {
	local:
		*_t11QMapPrivate*;		
		*_15QMapPrivateBase*;

		determineNextFile__Q23KIO10PreviewJob;
		emitPreview__Q23KIO10PreviewJobRC7QPixmap;
		emitFailed__Q23KIO10PreviewJobPC9KFileItem;
		saveThumbnail__Q23KIO10PreviewJobRCt6QArray1Zc;

		*_21KURIFilterDataPrivate*;

		*_Q26KTarGz13KTarGzPrivate*;
		*_t?t5QDict1Z9KTarEntry*;
		*_t5QDict1Z9KTarEntry*;
		*_Ct5QDict1Z9KTarEntry*;
		*_t13QDictIterator1Z9KTarEntry*;
		*_Ct13QDictIterator1Z9KTarEntry*;
		*_vt$t5QDict1Z9KTarEntry*;

		*_Ct10QValueList1ZQ23KIO9ChmodInfo*;
		*_t10QValueList1ZQ23KIO9ChmodInfo*;
		*_t17QValueListPrivate1ZQ23KIO9ChmodInfo*;
		*_t18QValueListIterator1ZQ23KIO9ChmodInfo*;
		*_Ct18QValueListIterator1ZQ23KIO9ChmodInfo*;
		*_t14QValueListNode1ZQ23KIO9ChmodInfo*;

		*_16KDirWatchPrivate*;
		*_21KURLCompletionPrivate*;
		*_Q210KDirLister17KDirListerPrivate*;
		*_Q210KFilterDev17KFilterDevPrivate*;
		*_Q23KIO17PreviewJobPrivate*;
		*_Q29KFileItem16KFileItemPrivate*;

		*_t4QMap2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_Ct4QMap2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_t8QMapNode2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_Ct11QMapPrivate2Z7QStringZQ216KDirWatchPrivate5EntryRC7QString*;
		*_t12QMapIterator2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_Ct12QMapIterator2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_Ct11QMapPrivate2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_t17QMapConstIterator2Z7QStringZQ216KDirWatchPrivate5Entry*;
		*_Ct17QMapConstIterator2Z7QStringZQ216KDirWatchPrivate5Entry*;

		splitText__16KShellCompletionRC7QStringR7QStringT2;
		quoteText__16KShellCompletionP7QStringbT2;
		unquote__16KShellCompletionRC7QString;

		*_9DirLister*;
};


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic