rebaseall on [1.7] : first glitch for ages

Jason Tishler jason@tishler.net
Tue Oct 5 13:06:00 GMT 2010


Fergus,

On Tue, Oct 05, 2010 at 01:10:14PM +0100, Fergus wrote:
> For the first time for months on my system rebaseall is reporting an
> error as follows:
> 
> M:\>bin\dash
> $ /bin/rebaseall
> << whirr away for ages >>

What precisely does "for ages" mean?

Note you can use the "-v" option to make rebaseall verbose.  Maybe this
will help you debug.

> FixImage
> (/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll)
> failed with last error = 13
> << halt immediately >>
> $

FWIW, we have the following:

    $ fgrep 13L /usr/include/w32api/winerror.h | head -1
    #define ERROR_INVALID_DATA 13L

It seems like rebase cannot handle 64-bit DLLs?

> Q1: OS is XP Pro SP3, 32 bit. I always install everything. Can I
> recover from this rebaseall error by fixing something or should I
> simply un-install all 64-related packages (and never have installed
> them in the first place)?

If you install all Cygwin packages, then you will likely run out of
rebase address space.

> Q2: rebaseall appears not to "skip and move on" when it encounters an
> error. In this case the whole thing simply halted as soon as this
> report came up. Can you tell me what actually happens in this kind of
> circumstance: does it skip-and-move-on or oh-dear-screech-to-a-halt?

rebase will skip some errors (e.g., when a DLL is not writable), but
will exit if FixImage() fails.  Maybe rebase should skip this error too?

> Q3: does rebaseall have a tasklist somewhere, that it reads? Or does
> it simply work its way through bin/ lib/ [and others] looking for
> executables and .dlls, and do stuff to them?

rebaseall uses the former approach.  It creates a list of files to
rebase from setup.exe's "package database" and an optional user supplied
file list.  From the rebaseall script, we have the following:

# Create rebase list
find /etc/setup -name '*.lst.gz' | xargs gzip -d -c |
    grep -E "\.($Suffixes)\$" |
    sed -e '/cygwin1\.dll$/d' -e '/cyglsa.*\.dll$/d' -e 's/^/\//' >"$TmpFile"

# Append user supplied file list, if any
if [ -n "$FileList" ]
then
    cat "$FileList" >>"$TmpFile"
fi

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

--
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



More information about the Cygwin mailing list