Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Feb 2013 23:20:35 +0100
From:      Tijl Coosemans <tijl@coosemans.org>
To:        Konstantin Belousov <kostikbel@gmail.com>, Damjan Jovanovic <damjan.jov@gmail.com>
Cc:        freebsd-hackers@freebsd.org, freebsd-emulation@freebsd.org
Subject:   Re: [patch] Wine DLL base address patches
Message-ID:  <51269DB3.2070603@coosemans.org>
In-Reply-To: <20130221154433.GY2598@kib.kiev.ua>
References:  <CAJm2B-mtXqZn0nQH4B9=fYik9gxSM8KAD5QcrLeqDOjXEnYfmg@mail.gmail.com> <20130220154855.GF2598@kib.kiev.ua> <51253759.70508@coosemans.org> <CAJm2B-=_HokZx5kOn0MDFAU8OrEBgFAE-32tBboX9%2BmubwenCQ@mail.gmail.com> <20130221154433.GY2598@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigF08F74E68299AB2CD11F700A
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On 21-02-2013 16:44, Konstantin Belousov wrote:
> On Thu, Feb 21, 2013 at 12:57:45AM +0200, Damjan Jovanovic wrote:
>> On Wed, Feb 20, 2013 at 10:51 PM, Tijl Coosemans <tijl@coosemans.org> =
wrote:
>>> On 20-02-2013 16:48, Konstantin Belousov wrote:
>>>> On Wed, Feb 20, 2013 at 05:29:01PM +0200, Damjan Jovanovic wrote:
>>>>> Hi
>>>>>
>>>>> Wine needs some of its libraries to be loaded at specific base
>>>>> addresses (https://wiki.freebsd.org/Wine), something FreeBSD curren=
tly
>>>>> lacks.
>>>>>
>>>>> I've written a patch to the dynamic loader (/libexec/ld-elf.so.1) t=
hat
>>>>> loads libraries at their preferred base addresses
>>>>> (http://www.freebsd.org/cgi/query-pr.cgi?pr=3D176216), as well as a=
 port
>>>>> of Prelink to FreeBSD which Wine uses to set base addresses
>>>>> (http://www.freebsd.org/cgi/query-pr.cgi?pr=3D176283). Both work :-=
),
>>>>> the changed dynamic loader doesn't show any problems in a few days =
of
>>>>> testing, and prelink works with the --reloc-only option as used by
>>>>> Wine.
>>>>>
>>>>> Please review/test/comment/commit.
>>>>
>>>> Unfortunately, it is not safe. MAP_FIXED overrides any previous mapp=
ings
>>>> which could exist at the specified address.
>>>
>>> I've simplified the rtld patch to a single line. The second patch mak=
es
>>> Wine use -Ttext-segment linker flag instead of prelink. This requires=

>>> binutils from ports, but it's easier than porting prelink.
>>>
>>
>> All of that occurred to me as well.
>>
>> The problem with that one-line rtld patch is that loading an
>> application will now fail if any of its libraries cannot be loaded at
>> their requested address.
> But this is intended behaviour. Also, the default virtaddr base for the=

> shared libraries is 0, so the existing binaries should be not affected.=

>=20
>>
>> The problem with -Ttext-segment (and isn't it just -Ttext?) is that it=

>> doesn't seem to work: the base_vaddr seen by rtld will remain 0, and
>> the address listed in /proc/.../map is different from what it should
>> be. Also run "readelf -l" on a library compiled that way and compare
>> with the output of one run through "prelink --reloc-only", you'll see
>> the lowest VirtAddr and PhysAddr in LOAD headers change only with
>> prelink. I really ported prelink because there was no other choice.
> The -Ttext-segment does work. As indicated by Tijl, you need recent
> binutils.  I just verified that ld 2.32.1 obeys -Ttext-segment.
>=20
> You can also take a look at the default linker script to see how
> -Ttext-segment is used, look for SEGMENT_START("text-segment").

Yes, -Ttext sets the address of the .text section and -Ttext-segment
that of the text segment. It does work for me. The output of /proc/.../ma=
p
looks correct as does the output of "info share" in winedbg, but to be
sure I've asked on wine-devel mailing list if they see any problem with
this approach.


--------------enigF08F74E68299AB2CD11F700A
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iF4EAREIAAYFAlEmnbkACgkQfoCS2CCgtiuqEgD8CK7u+iaYSadNZnZE7cQSc87a
YvdFZnnS/TY6Ny+j40oA/3AREjS15QyntDDo+E+1v2sxuqkYhBCzteaRtAJnyeNV
=KKZp
-----END PGP SIGNATURE-----

--------------enigF08F74E68299AB2CD11F700A--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51269DB3.2070603>