X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,TW_YG X-Spam-Check-By: sourceware.org Message-ID: <4D0B99EE.4010200@x-ray.at> Date: Fri, 17 Dec 2010 18:12:14 +0100 From: Reini Urban User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.16) Gecko/20101123 SeaMonkey/2.0.11 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: rebase, perl References: In-Reply-To: Content-Type: multipart/mixed; boundary="------------040309020103020003040209" X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --------------040309020103020003040209 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit >> Yes. Adding a -d0 solved so far the problems on Win7 for me. >> >> diff -u /usr/bin/perlrebase~ /usr/bin/perlrebase >> --- /usr/bin/perlrebase~ 2010-11-27 10:13:07.806866000 +0100 >> +++ /usr/bin/perlrebase 2010-12-01 07:50:13.843953700 +0100 >> @@ -39,5 +39,5 @@ >> >> /usr/bin/rebase -v -b $baseaddr -T rebase$suff.lst >> >> -[ -e /usr/bin/peflags.exe ]&& /usr/bin/grep .dll rebase$suff.lst | >> /usr/bin/peflags -d -T ->/dev/null >> +[ -e /usr/bin/peflags.exe ]&& /usr/bin/grep .dll rebase$suff.lst | >> /usr/bin/peflags -d0 -T ->/dev/null >> /usr/bin/cat rebase$suff.lst | /usr/bin/xargs chmod g-w > > Reini, this diff implies that the version of perlrebase I have is out of date since it doesn't use peflags anywhere. I also found an old post from back in July where you stated that its "baseaddr=0x5400000" is missing a 0, suggesting it is at least that old. > http://cygwin.com/ml/cygwin/2010-07/msg00146.html > > Where do I get an updated perlrebase? I've tried performing updates from the latest released cygwin installer (no snapshots), but I still have what appears to be an outdated version. perlrebase is in perl. latest is perl-5.10.1-4 > Perhaps this is part of my current cpan/rebase hell.... Looks like so. Attached is my latest and greatest version, you don't need to install the complete perl, as not much changed there. Now I'm trying starting from 56000000 as base, this seems to a bit better on win7 with lots of apps open. -- Reini Urban http://phpwiki.org/ http://murbreak.at/ --------------040309020103020003040209 Content-Type: text/plain; name="perlrebase" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="perlrebase" #!/bin/sh # The default perl modules are properly rebased, a rebase clash is very unlikely. # However with more and more CPAN XS extensions being added over time, # *** fatal error - unable to remap some.dll to same address as parent # will become more likely, and those new DLLs are not rebased by a normal rebaseall. # perlrebase starts afresh all perl DLLs from a pretty low base upwards. suff=$1 suff=${suff:=5.10.1} baseaddr=$2 # use a rather low base and go upwards, might clash with some Win7 system dlls baseaddr=${baseaddr:=0x56000000} perl=/usr/local/bin/perl$suff.exe if [ ! -f $perl ]; then perl=/usr/bin/perl$suff.exe if [ ! -f $perl ]; then echo "$perl and /usr/local/bin/perl$suff.exe not found" echo "usage: perlrebase [5.13.5 [baseaddr]]" exit fi fi dll=$(ldd $perl | $perl -anle 'print $F[2] if /cygperl/') # ldd was broken in 1.7.6 if [ -z $dll ]; then cygcheck $perl | $perl -anle 'print $F[0] if /cygperl/' >/tmp/$$ dll=$(cygpath `cat /tmp/$$`) rm /tmp/$$ fi arch=$($perl -MConfig -MFile::Basename -e'print basename($Config{archlib})') ver=$($perl -MConfig -MFile::Basename -e'print basename(dirname $Config{archlib})') # write to a local .lst to be able to re-order dlls locally echo $perl > rebase$suff.lst if [ ! -d /usr/lib/perl5/$ver/$arch/auto ]; then echo "no archlib found for $perl" exit fi if [ ! -e /usr/bin/rebase.exe ]; then echo "/usr/bin/rebase.exe not found. Install the rebase package" exit fi echo $dll >> rebase$suff.lst /usr/bin/find /usr/lib/perl5/{,site_perl/,vendor_perl/}$ver/$arch/auto/ -name \*.dll >> rebase$suff.lst /usr/bin/cat rebase$suff.lst | /usr/bin/xargs chmod ug+w [ -e /usr/bin/peflags.exe ] && /usr/bin/peflags -t $perl /usr/bin/rebase -v -b $baseaddr -T rebase$suff.lst [ -e /usr/bin/peflags.exe ] && /usr/bin/grep .dll rebase$suff.lst | /usr/bin/peflags -d0 -T - >/dev/null /usr/bin/cat rebase$suff.lst | /usr/bin/xargs chmod g-w --------------040309020103020003040209 Content-Type: text/plain; charset=us-ascii -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --------------040309020103020003040209--