Subject: Re: rebaseall question
From: Jason Tishler <[email-masked]>
To: "Arms, Mike" <[email-masked]>
Cc: Cygwin <[email-masked]>
Date: Wed, 26 May 2004 08:49:41 -0400

Mike,

Please post instead of sending private email.

On Tue, May 25, 2004 at 02:08:49PM -0600, Arms, Mike wrote:
> I began my search trying to get the Perl module GD::Text
> to compile under Cygwin and Cywin Perl 5.8.2-1 .
> The "make" step would fail right away with:
> 
> Checking if your kit is complete...
> Looks good
> C:\cygwin\bin\perl.exe (2780): *** unable to remap
> C:\cygwin\bin\cygfreetype-6.dll to same address as parent(0x?) != 0xD00000
>      10 [main] perl 2936 sync_with_child: child 2780(0x27C) died before
> initialization with status code 0x1
>    3880 [main] perl 2936 sync_with_child: *** child state child loading dlls
> 
> Note: in the log above, I neglected to grab the hex address so
> I just show it as 0x? .
> 
> So I did some googling and found several references to solving
> this problem by using your "rebaseall" utility. I followed the
> procedure (stopped all cygwin processes, fired up a Cygwin bash
> window, and ran "rebaseall -v"). It did not report that it
> changed "/usr/bin/cygfreetype-6.dll" . And no change when I
> ran "make". So I ran the "rebase" program directly with:
> 
>   rebase -v -b 13631488 /usr/bin/cygfreetype-6.dll
> 
> That indicated that it changed the base address to 0xD00000.
> Ran the make again, and it did a similar complaint with
> "/usr/bin/cygz.dll". I ran rebase on it with an offset based
> on the 60000 size from the previous rebase:
> 
>   rebase -v -b 14024704 /usr/bin/cygz.dll
> 
> So now the "make" is complaining:
> 
>   C:\cygwin\bin\perl.exe (2780): *** unable to remap
> C:\cygwin\bin\cygiconv-2.dll to same address as parent(0xDC0000) != 0xDD0000
> 
> I hesitate to do any more rebasing for fear of totally hosing my
> Cywgin installation. I take it that each of these DLL's need
> a separate base address that does not overlap with any others
> (after taking into consideration their size)?

Yes.

> Is there a way to list the mappings for all of the cygwin DLLs?

The following will display the base addresses for all DLLs install via
Cygwin setup.exe:

    $ zcat /etc/setup/*.gz | grep '.dll$' | sed 's/^/\//' | xargs objdump -p | egrep 'pei-i386|ImageBase'

> Is this contained in a file somewhere?

No.

> Why would rebaseall when passed the Files arguments choose to skip
> them? (That was from the output, although the names of the additional
> Files were not shown.)

IIRC, because they are read-only, non-existent, etc.

> Hoping for some illumination. Thanks.

Note the following:

1. Rebasing is usually an all or nothing operation.  Hence, I typically
only recommend using rebaseall.

2. rebaseall only rebases DLLs installed via Cygwin's setup.exe and the
extra ones possibly specified by the -T option.  So, if your make
produces new DLLs that are dlopen-ed by perl then this could be your
problem.

Jason

-- 
PGP/GPG Key: http://www.tishler.net/jason/pubkey.asc or key servers
Fingerprint: 7A73 1405 7F2B E669 C19D  8784 1AFD E4CC ECF4 8EF6

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/