[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: Re: Faster startups by fixing C++ object files before linking (numbers, howto, etc.)
From: Leon Bottou <leonb () research ! att ! com>
Date: 2001-07-29 20:54:22
[Download RAW message or body]
*** NUMBERS
These numbers were obtained using command
bash% LD_DEBUG=statistics DISPLAY=localhost:1:s konqueror
--------- with regular builds
26923: runtime linker statistics:
26923: total startup time in dynamic loader: 358288994 clock cycles
26923: time needed for relocation: 355202059 clock cycles (99.1)
26923: number of relocations: 53651
26923: time needed to load objects: 2864849 clock cycles (.7)
konqueror: cannot connect to X server localhost:1:s
--------- after rebuilding qt, kdelibs, kdecore (2.2beta1)
26891: runtime linker statistics:
26891: total startup time in dynamic loader: 171268316 clock cycles
26891: time needed for relocation: 168954584 clock cycles (98.6)
26891: number of relocations: 21143
26891: time needed to load objects: 2094340 clock cycles (1.2)
konqueror: cannot connect to X server localhost:1:s
*** BINUTIL PROBLEMS
Some people ran into binutil problems
- I am using binutils-2.10.91
- It is important to compile using a libbfd.so and a libiberty.a with matching versions.
Some distribution have chose to put these libraries in separate packages.
When they mismatch, you can have undefined symbols, or segfaults.
Maybe one should do:
% gcc -O2 -o objprelink objprelink.c /usr/lib/libbfd.a /usr/lib/libiberty.a
since these .a files seem to come together.
I just tried with the libbfd.a and libiberty.a that come with the
current rawhide rpm ( binutils-2.11.90.0.8-5.i386.rpm ).
That works for me.
Attached a new version of objprelink.c
*** COMPILER ISSUES
I am using the famous gcc-2.96-85
This is not the "-69" version that came with RH7.
This is the "-85" version that works quite well.
Note that my code scans virtual table sections named ".gnu.linkonce.d.__vt_*"
I just checked that this is also true with gcc 2.95.3.
Old versions of gcc do not put virtual tables in such sections.
**** HOWTO-QT
I used QT-2.3.1
First I patch the config file "linux-g++-shared" using the attached patch "qt-configs.patch"
Then I do "configure -shared -system-zlib -system-jpeg" and "make src-moc sub-src"
Here are the compared relocation counts. These are obtained with
the "counreloc" script attached.
-------- before
16915 R_386_32
2690 R_386_GLOB_DAT
5040 R_386_JUMP_SLOT
4926 R_386_RELATIVE
-------- after
4563 R_386_32
2690 R_386_GLOB_DAT
5039 R_386_JUMP_SLOT
21669 R_386_RELATIVE
Here is what I obtain with flag -v on a particular file in QT
% objprelink -v widgets/qscrollview.o | c++filt
processing file widgets/qscrollview.o
scanning section "QPtrDict<QSVChildRec> virtual table"
scanning section "QList<QSVChildRec> virtual table"
scanning section "QClipperWidget virtual table"
scanning section "QClipperWidget::QPaintDevice virtual table"
scanning section "QPaintEvent virtual table"
scanning section "QWheelEvent virtual table"
scanning section "QMouseEvent virtual table"
found 126 symbols in need for a stub
defining stub sections
copying section data from widgets/qscrollview.o
patching relocs for QPtrDict<QSVChildRec> virtual table
patching relocs for QList<QSVChildRec> virtual table
patching relocs for QClipperWidget virtual table
patching relocs for QClipperWidget::QPaintDevice virtual table
patching relocs for QPaintEvent virtual table
patching relocs for QWheelEvent virtual table
patching relocs for QMouseEvent virtual table
finishing widgets/qscrollview.o
**** HOWTO-KDE
I recompiled kdelibs, kdebase, kdenetwork using the following procedure:
1) compile everything as usual
2) fix all object files
find . -name '*.o' -exec objprelink {} \;
3) touch all LO files in order to cause the rebuilding of all libraries (.LA,.A,.SO)
find . -name '*.lo' -exec touch {} \;
4) rebuild libraries
make
The attached KDELIBS file shows the differences
in number of relocation records for all the kdelibs libraries, one by one.
["countreloc" (application/x-shellscript)]
#!/bin/sh
objdump --dynamic-reloc "$@" \
| cut -c10-24 | tail +6 | grep -v '^ *$' | sort \
| uniq -c
["qt-configs.patch" (text/x-diff)]
--- configs/linux-g++-shared.orig Fri Jul 27 19:44:50 2001
+++ configs/linux-g++-shared Fri Jul 27 19:48:59 2001
@@ -32,7 +32,7 @@
SYSCONF_LIBS_YACC =
# Linking applications
-SYSCONF_LINK = g++
+SYSCONF_LINK = objprelink $(OBJECTS) $(OBJMOC) && g++
SYSCONF_LFLAGS =
SYSCONF_LIBS =
@@ -58,7 +58,8 @@
#
SYSCONF_LINK_SHLIB = g++
SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
-SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+SYSCONF_LINK_LIB_SHARED = objprelink $(OBJECTS) $(OBJMOC) && \
+ $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
$(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
$(OBJECTS) $(OBJMOC) $(LIBS) && \
mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
["KDELIBS" (text/x-diff)]
--- /usr/lib/basicstyle.so
5 R_386_32 5 R_386_32
10 R_386_GLOB_DAT 10 R_386_GLOB_DAT
16 R_386_JUMP_SLOT 16 R_386_JUMP_SLOT
3 R_386_RELATIVE 8 R_386_RELATIVE
--- /usr/lib/dcopserver.so
136 R_386_32 82 R_386_32
63 R_386_GLOB_DAT 63 R_386_GLOB_DAT
206 R_386_JUMP_SLOT 206 R_386_JUMP_SLOT
4 R_386_RELATIVE 137 R_386_RELATIVE
--- /usr/lib/hcstyle.so
135 R_386_32 115 R_386_32
37 R_386_GLOB_DAT 37 R_386_GLOB_DAT
172 R_386_JUMP_SLOT 172 R_386_JUMP_SLOT
6 R_386_RELATIVE 139 R_386_RELATIVE
--- /usr/lib/kbuildsycoca.so
167 R_386_32 137 R_386_32
68 R_386_GLOB_DAT 68 R_386_GLOB_DAT
209 R_386_JUMP_SLOT 209 R_386_JUMP_SLOT
12 R_386_RELATIVE 178 R_386_RELATIVE
--- /usr/lib/kconf_update.so
5 R_386_32 5 R_386_32
11 R_386_GLOB_DAT 11 R_386_GLOB_DAT
92 R_386_JUMP_SLOT 92 R_386_JUMP_SLOT
5 R_386_RELATIVE 10 R_386_RELATIVE
--- /usr/lib/kcookiejar.so
326 R_386_32 212 R_386_32
59 R_386_GLOB_DAT 59 R_386_GLOB_DAT
290 R_386_JUMP_SLOT 290 R_386_JUMP_SLOT
63 R_386_RELATIVE 386 R_386_RELATIVE
--- /usr/lib/kde2/kbzip2filter.so
46 R_386_32 36 R_386_32
13 R_386_GLOB_DAT 13 R_386_GLOB_DAT
27 R_386_JUMP_SLOT 27 R_386_JUMP_SLOT
3 R_386_RELATIVE 49 R_386_RELATIVE
--- /usr/lib/kde2/kgzipfilter.so
46 R_386_32 36 R_386_32
13 R_386_GLOB_DAT 13 R_386_GLOB_DAT
35 R_386_JUMP_SLOT 35 R_386_JUMP_SLOT
3 R_386_RELATIVE 49 R_386_RELATIVE
--- /usr/lib/kde2/kimg_eps.so
5 R_386_32 5 R_386_32
10 R_386_GLOB_DAT 10 R_386_GLOB_DAT
60 R_386_JUMP_SLOT 60 R_386_JUMP_SLOT
3 R_386_RELATIVE 8 R_386_RELATIVE
--- /usr/lib/kde2/kimg_g3.so
5 R_386_32 5 R_386_32
9 R_386_GLOB_DAT 9 R_386_GLOB_DAT
22 R_386_JUMP_SLOT 22 R_386_JUMP_SLOT
3 R_386_RELATIVE 8 R_386_RELATIVE
--- /usr/lib/kde2/kimg_ico.so
14 R_386_32 14 R_386_32
10 R_386_GLOB_DAT 10 R_386_GLOB_DAT
55 R_386_JUMP_SLOT 55 R_386_JUMP_SLOT
3 R_386_RELATIVE 16 R_386_RELATIVE
--- /usr/lib/kde2/kimg_krl.so
4 R_386_GLOB_DAT 4 R_386_GLOB_DAT
9 R_386_JUMP_SLOT 9 R_386_JUMP_SLOT
3 R_386_RELATIVE 3 R_386_RELATIVE
--- /usr/lib/kde2/kimg_tiff.so
5 R_386_32 5 R_386_32
9 R_386_GLOB_DAT 9 R_386_GLOB_DAT
21 R_386_JUMP_SLOT 21 R_386_JUMP_SLOT
3 R_386_RELATIVE 8 R_386_RELATIVE
--- /usr/lib/kde2/kimg_xview.so
4 R_386_GLOB_DAT 4 R_386_GLOB_DAT
16 R_386_JUMP_SLOT 16 R_386_JUMP_SLOT
3 R_386_RELATIVE 3 R_386_RELATIVE
--- /usr/lib/kde2/kio_file.so
75 R_386_32 68 R_386_32
42 R_386_GLOB_DAT 42 R_386_GLOB_DAT
153 R_386_JUMP_SLOT 153 R_386_JUMP_SLOT
6 R_386_RELATIVE 79 R_386_RELATIVE
--- /usr/lib/kde2/kio_ftp.so
32 R_386_32 29 R_386_32
18 R_386_GLOB_DAT 18 R_386_GLOB_DAT
192 R_386_JUMP_SLOT 192 R_386_JUMP_SLOT
15 R_386_RELATIVE 47 R_386_RELATIVE
--- /usr/lib/kde2/kio_help.so
124 R_386_32 82 R_386_32
35 R_386_GLOB_DAT 35 R_386_GLOB_DAT
184 R_386_JUMP_SLOT 184 R_386_JUMP_SLOT
3 R_386_RELATIVE 127 R_386_RELATIVE
--- /usr/lib/kde2/kio_http.so
50 R_386_32 45 R_386_32
24 R_386_GLOB_DAT 24 R_386_GLOB_DAT
271 R_386_JUMP_SLOT 271 R_386_JUMP_SLOT
3 R_386_RELATIVE 53 R_386_RELATIVE
--- /usr/lib/kde2/kjs_html.so
2012 R_386_32 622 R_386_32
441 R_386_GLOB_DAT 441 R_386_GLOB_DAT
1488 R_386_JUMP_SLOT 1488 R_386_JUMP_SLOT
21896 R_386_RELATIVE 23884 R_386_RELATIVE
--- /usr/lib/kde2/libkded_kdeprintd.so
72 R_386_32 57 R_386_32
35 R_386_GLOB_DAT 35 R_386_GLOB_DAT
99 R_386_JUMP_SLOT 99 R_386_JUMP_SLOT
10 R_386_RELATIVE 81 R_386_RELATIVE
--- /usr/lib/kde2/libkdeprint_cups.so
1334 R_386_32 273 R_386_32
90 R_386_GLOB_DAT 90 R_386_GLOB_DAT
340 R_386_JUMP_SLOT 340 R_386_JUMP_SLOT
6 R_386_RELATIVE 1329 R_386_RELATIVE
--- /usr/lib/kde2/libkdeprint_ext.so
89 R_386_32 56 R_386_32
17 R_386_GLOB_DAT 17 R_386_GLOB_DAT
37 R_386_JUMP_SLOT 37 R_386_JUMP_SLOT
3 R_386_RELATIVE 92 R_386_RELATIVE
--- /usr/lib/kde2/libkdeprint_lpd.so
151 R_386_32 97 R_386_32
41 R_386_GLOB_DAT 41 R_386_GLOB_DAT
180 R_386_JUMP_SLOT 180 R_386_JUMP_SLOT
23 R_386_RELATIVE 174 R_386_RELATIVE
--- /usr/lib/kde2/libkdeprint_lpdunix.so
75 R_386_32 55 R_386_32
20 R_386_GLOB_DAT 20 R_386_GLOB_DAT
98 R_386_JUMP_SLOT 98 R_386_JUMP_SLOT
3 R_386_RELATIVE 78 R_386_RELATIVE
--- /usr/lib/kde2/libkdeprint_rlpr.so
645 R_386_32 229 R_386_32
54 R_386_GLOB_DAT 54 R_386_GLOB_DAT
172 R_386_JUMP_SLOT 172 R_386_JUMP_SLOT
6 R_386_RELATIVE 646 R_386_RELATIVE
--- /usr/lib/kde2/libkpac.so
85 R_386_32 65 R_386_32
42 R_386_GLOB_DAT 42 R_386_GLOB_DAT
156 R_386_JUMP_SLOT 156 R_386_JUMP_SLOT
24 R_386_RELATIVE 109 R_386_RELATIVE
--- /usr/lib/kded.so
221 R_386_32 149 R_386_32
85 R_386_GLOB_DAT 85 R_386_GLOB_DAT
242 R_386_JUMP_SLOT 242 R_386_JUMP_SLOT
11 R_386_RELATIVE 225 R_386_RELATIVE
--- /usr/lib/kio_http_cache_cleaner.so
23 R_386_32 17 R_386_32
20 R_386_GLOB_DAT 20 R_386_GLOB_DAT
82 R_386_JUMP_SLOT 82 R_386_JUMP_SLOT
8 R_386_RELATIVE 31 R_386_RELATIVE
--- /usr/lib/kio_uiserver.so
628 R_386_32 355 R_386_32
81 R_386_GLOB_DAT 81 R_386_GLOB_DAT
298 R_386_JUMP_SLOT 298 R_386_JUMP_SLOT
88 R_386_RELATIVE 708 R_386_RELATIVE
--- /usr/lib/klauncher.so
95 R_386_32 65 R_386_32
44 R_386_GLOB_DAT 44 R_386_GLOB_DAT
234 R_386_JUMP_SLOT 234 R_386_JUMP_SLOT
7 R_386_RELATIVE 101 R_386_RELATIVE
--- /usr/lib/klegacystyle.so
144 R_386_32 128 R_386_32
40 R_386_GLOB_DAT 40 R_386_GLOB_DAT
291 R_386_JUMP_SLOT 291 R_386_JUMP_SLOT
6 R_386_RELATIVE 149 R_386_RELATIVE
--- /usr/lib/kstepstyle.so
98 R_386_32 96 R_386_32
23 R_386_GLOB_DAT 23 R_386_GLOB_DAT
88 R_386_JUMP_SLOT 88 R_386_JUMP_SLOT
3 R_386_RELATIVE 100 R_386_RELATIVE
--- /usr/lib/libDCOP.so
119 R_386_32 95 R_386_32
74 R_386_GLOB_DAT 74 R_386_GLOB_DAT
310 R_386_JUMP_SLOT 310 R_386_JUMP_SLOT
45 R_386_RELATIVE 154 R_386_RELATIVE
--- /usr/lib/libkab.so
378 R_386_32 194 R_386_32
68 R_386_GLOB_DAT 68 R_386_GLOB_DAT
312 R_386_JUMP_SLOT 312 R_386_JUMP_SLOT
38 R_386_RELATIVE 413 R_386_RELATIVE
--- /usr/lib/libkdecore.so
1973 R_386_32 876 R_386_32
530 R_386_GLOB_DAT 530 R_386_GLOB_DAT
1916 R_386_JUMP_SLOT 1916 R_386_JUMP_SLOT
853 R_386_RELATIVE 2804 R_386_RELATIVE
--- /usr/lib/libkdefakes.so
4 R_386_GLOB_DAT 4 R_386_GLOB_DAT
7 R_386_JUMP_SLOT 7 R_386_JUMP_SLOT
3 R_386_RELATIVE 3 R_386_RELATIVE
--- /usr/lib/libkdeprint.so
2623 R_386_32 757 R_386_32
292 R_386_GLOB_DAT 292 R_386_GLOB_DAT
664 R_386_JUMP_SLOT 664 R_386_JUMP_SLOT
104 R_386_RELATIVE 2703 R_386_RELATIVE
--- /usr/lib/libkdeprint_management.so
5341 R_386_32 971 R_386_32
392 R_386_GLOB_DAT 392 R_386_GLOB_DAT
689 R_386_JUMP_SLOT 689 R_386_JUMP_SLOT
31 R_386_RELATIVE 5317 R_386_RELATIVE
--- /usr/lib/libkdesu.so
33 R_386_32 26 R_386_32
26 R_386_GLOB_DAT 26 R_386_GLOB_DAT
155 R_386_JUMP_SLOT 155 R_386_JUMP_SLOT
3 R_386_RELATIVE 36 R_386_RELATIVE
--- /usr/lib/libkdeui.so
15962 R_386_32 2647 R_386_32
1576 R_386_GLOB_DAT 1576 R_386_GLOB_DAT
2786 R_386_JUMP_SLOT 2786 R_386_JUMP_SLOT
656 R_386_RELATIVE 16486 R_386_RELATIVE
--- /usr/lib/libkfile.so
3341 R_386_32 909 R_386_32
495 R_386_GLOB_DAT 495 R_386_GLOB_DAT
987 R_386_JUMP_SLOT 987 R_386_JUMP_SLOT
38 R_386_RELATIVE 3352 R_386_RELATIVE
--- /usr/lib/libkhtml.so
12094 R_386_32 2569 R_386_32
1160 R_386_GLOB_DAT 1160 R_386_GLOB_DAT
2227 R_386_JUMP_SLOT 2227 R_386_JUMP_SLOT
5948 R_386_RELATIVE 17988 R_386_RELATIVE
--- /usr/lib/libkhtmlimage.so
91 R_386_32 70 R_386_32
38 R_386_GLOB_DAT 38 R_386_GLOB_DAT
93 R_386_JUMP_SLOT 93 R_386_JUMP_SLOT
8 R_386_RELATIVE 98 R_386_RELATIVE
--- /usr/lib/libkio.so
1152 R_386_32 526 R_386_32
321 R_386_GLOB_DAT 321 R_386_GLOB_DAT
931 R_386_JUMP_SLOT 931 R_386_JUMP_SLOT
110 R_386_RELATIVE 1252 R_386_RELATIVE
--- /usr/lib/libkjava.so
310 R_386_32 161 R_386_32
61 R_386_GLOB_DAT 61 R_386_GLOB_DAT
228 R_386_JUMP_SLOT 228 R_386_JUMP_SLOT
12 R_386_RELATIVE 320 R_386_RELATIVE
--- /usr/lib/libkjs.so
1094 R_386_32 473 R_386_32
325 R_386_GLOB_DAT 325 R_386_GLOB_DAT
288 R_386_JUMP_SLOT 288 R_386_JUMP_SLOT
157 R_386_RELATIVE 1248 R_386_RELATIVE
--- /usr/lib/libkparts.so
710 R_386_32 358 R_386_32
181 R_386_GLOB_DAT 181 R_386_GLOB_DAT
292 R_386_JUMP_SLOT 292 R_386_JUMP_SLOT
21 R_386_RELATIVE 720 R_386_RELATIVE
--- /usr/lib/libkscreensaver.so
236 R_386_32 131 R_386_32
34 R_386_GLOB_DAT 34 R_386_GLOB_DAT
83 R_386_JUMP_SLOT 83 R_386_JUMP_SLOT
16 R_386_RELATIVE 246 R_386_RELATIVE
--- /usr/lib/libkspell.so
256 R_386_32 163 R_386_32
86 R_386_GLOB_DAT 86 R_386_GLOB_DAT
220 R_386_JUMP_SLOT 220 R_386_JUMP_SLOT
8 R_386_RELATIVE 262 R_386_RELATIVE
--- /usr/lib/libkssl.so
410 R_386_32 215 R_386_32
47 R_386_GLOB_DAT 47 R_386_GLOB_DAT
317 R_386_JUMP_SLOT 317 R_386_JUMP_SLOT
7 R_386_RELATIVE 414 R_386_RELATIVE
--- /usr/lib/libksycoca.so
948 R_386_32 544 R_386_32
270 R_386_GLOB_DAT 270 R_386_GLOB_DAT
848 R_386_JUMP_SLOT 848 R_386_JUMP_SLOT
30 R_386_RELATIVE 974 R_386_RELATIVE
--- /usr/lib/libktexteditor.so
208 R_386_32 168 R_386_32
29 R_386_GLOB_DAT 29 R_386_GLOB_DAT
45 R_386_JUMP_SLOT 45 R_386_JUMP_SLOT
7 R_386_RELATIVE 212 R_386_RELATIVE
--- /usr/lib/webstyle.so
89 R_386_32 87 R_386_32
21 R_386_GLOB_DAT 21 R_386_GLOB_DAT
82 R_386_JUMP_SLOT 82 R_386_JUMP_SLOT
3 R_386_RELATIVE 92 R_386_RELATIVE
["objprelink.c.gz" (application/x-gzip)]
>> Visit http://master.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic