Subject: Re: Text relocations in shared libs
To: None <port-sh3@netbsd.org>
From: Valeriy E. Ushakov <uwe@ptc.spbu.ru>
List: port-sh3
Date: 01/06/2006 08:40:50
On Sun, Dec 25, 2005 at 16:02:11 +0300, Valeriy E. Ushakov wrote:
> [Thanks to Nick Hudson for discovering this]
>
> For sh3 a few shared libraries in the base system has text
> relocations. This means that ld.so needs to perform relocations
> during startup. E.g.
>
> nada# ktruss echo
> ...
> 600 1 echo open("/lib/libc.so.12", 0, 0xfffff804) = 3, 6214
> 600 1 echo __fstat30(0x3, 0x7fffd82c) = 0, 6214
> 600 1 echo mmap(0, 0x1000, 0x1, 0x1, 0x3, 0, 0, 0) = 0x20434000
> 600 1 echo munmap(0x20434000, 0x1000) = 0, 541254268
> 600 1 echo mmap(0, 0xdc000, 0x5, 0x10000002, 0x3, 0, 0, 0) = 0x20440000
> 600 1 echo mmap(0x20505000, 0x8000, 0x3, 0x12, 0x3, 0, 0xb5000, 0) = 0x20505000
> 600 1 echo mmap(0x2050d000, 0xf000, 0x3, 0x1012, 0xffffffff, 0, 0, 0) = 0x2050d000
> 600 1 echo mprotect(0x204f6000, 0xf000, 0) = 0
> 600 1 echo close(0x3) = 0, 831372
> !->600 1 echo mprotect(0x20440000, 0xb6000, 0x7) = 0
> !->600 1 echo mprotect(0x20440000, 0xb6000, 0x5) = 0
>
> This also means that the pages are no longer shared.
>
>
> Offending libraries are libc, libposix, and libpthread. Text
> relocations come from the handwritten asm files. libc and libposix
> (that borrows SYS.h code from libc) has a lot of relocs for cerror:
I have cleaned up libc from text relocs. It should be truly shared
now. And an unscientific test of running /bin/echo -n in a loop 100
times went down from ~11s to ~8s of wall time on my Jornada.
SY, Uwe
--
uwe@ptc.spbu.ru | Zu Grunde kommen
http://snark.ptc.spbu.ru/~uwe/ | Ist zu Grunde gehen