Linker script vs. visibility patch

Karl Vogel <[email protected]>
Newsgroups gmane.comp.kde.devel.optimize
Message-ID <[email protected]>
Here is an overview of konsole compiled with a linker script vs using 
-fvisibility=hidden + KDE_EXPORT:

Normal build:

 217942 Jul 21 14:50 .libs.full/kded_kwrited.so
   6262 Jul 21 14:55 .libs.full/konsole.so
2493671 Jul 21 14:54 .libs.full/libkdeinit_konsole.so
1659603 Jul 21 14:50 .libs.full/libkonsolepart.so

Build with -fvisibility=hidden and KDE_EXPORT:

 210666 Jul 21 15:19 .libs/kded_kwrited.so
   6214 Jul 21 15:21 .libs/konsole.so
2393839 Jul 21 15:21 .libs/libkdeinit_konsole.so
1591911 Jul 21 15:21 .libs/libkonsolepart.so

Build with KDEINIT_VSCRIPT linker script:

2395943 Jul 21 14:52 .libs.map/libkdeinit_konsole.so


And the relocation information:

.libs.full/kded_kwrited.so: 198 relocations, 51 relative (25%), 128 PLT entries
.libs.full/konsole.so: 5 relocations, 2 relative (40%), 2 PLT entries
.libs.full/libkdeinit_konsole.so: 3757 relocations, 1012 relative (26%), 1402 PLT entries
.libs.full/libkonsolepart.so: 2177 relocations, 621 relative (28%), 950 PLT entries

.libs/kded_kwrited.so: 192 relocations, 103 relative (53%), 103 PLT entries
.libs/konsole.so: 5 relocations, 2 relative (40%), 2 PLT entries
.libs/libkdeinit_konsole.so: 3728 relocations, 1787 relative (47%), 810 PLT entries
.libs/libkonsolepart.so: 2152 relocations, 1173 relative (54%), 539 PLT entries

.libs.map/libkdeinit_konsole.so: 3757 relocations, 1816 relative (48%), 810 PLT entries

Changes to sources:

kdemacros.h :
-#define KDE_EXPORT __attribute__ ((visibility("visible")))
+#define KDE_EXPORT __attribute__ ((visibility("default")))

Index: konsole_part.cpp
===================================================================
RCS file: /home/kde/kdebase/konsole/konsole/konsole_part.cpp,v
retrieving revision 1.93
diff -u -r1.93 konsole_part.cpp
--- konsole_part.cpp	6 May 2004 18:58:37 -0000	1.93
+++ konsole_part.cpp	21 Jul 2004 13:22:55 -0000
@@ -60,7 +60,7 @@
    * the form 'void *init_lib<library name>()  It always returns a
    * new factory object
    */
-  void *init_libkonsolepart()
+  void KDE_EXPORT *init_libkonsolepart()
   {
     return new konsoleFactory;
   }
Index: kwrited.cpp
===================================================================
RCS file: /home/kde/kdebase/konsole/konsole/kwrited.cpp,v
retrieving revision 1.42
diff -u -r1.42 kwrited.cpp
--- kwrited.cpp	20 Apr 2004 15:13:39 -0000	1.42
+++ kwrited.cpp	21 Jul 2004 13:22:55 -0000
@@ -91,7 +91,7 @@
 }
 
 extern "C"
-KDEDModule *create_kwrited( const QCString& obj )
+KDEDModule KDE_EXPORT *create_kwrited( const QCString& obj )
     {
     return new KWritedModule( obj );
     }
Index: main.cpp
===================================================================
RCS file: /home/kde/kdebase/konsole/konsole/main.cpp,v
retrieving revision 1.267
diff -u -r1.267 main.cpp
--- main.cpp	10 Jul 2004 15:51:52 -0000	1.267
+++ main.cpp	21 Jul 2004 13:22:56 -0000
@@ -149,7 +149,7 @@
 
 
 /* --| main |------------------------------------------------------ */
-extern "C" int kdemain(int argc, char* argv[])
+extern "C" int KDE_EXPORT kdemain(int argc, char* argv[])
 {
   setgid(getgid()); setuid(getuid()); // drop privileges
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.