This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: rebase-4.4.3-1 regression: Too many DLLs for available address space


On Jan 11 22:52, Denis Excoffier wrote:
> > On 2018-01-11 13:32, Christian Franke wrote:
> > 
> > After 4.4.3-1 upgrade, rebase always fails on 32- and 64-bit Cygwin:
> > 
> > $ rebase -s -T /var/cache/rebase/rebase_all
> > rebase: Too many DLLs for available address space: Cannot allocate memory
> > 
> > Using /bin/rebaseall does not help.
> > 
> > A downgrade to 4.4.2-1 fixes the problem.
> > 
> Same for me. I also tried rebase-4.4.3 and it didn't work (message in setup.log and no /etc/re* created).
> Therefore i also switched back to 4.4.2.
> 
> I would like to add that under my system (Windows 7 32bits), when i autorebase everything (full),
> the 'rebase -si' function (rebase-4.4.2) produces the following result:
> 
> /usr/bin/cygvpx-3.dll                         base 0x002d0000 size 0x00201000
> /usr/bin/cygvpx-1.dll                         base 0x004e0000 size 0x001ed000
> /usr/bin/cygvorbisfile-3.dll                  base 0x006d0000 size 0x00010000
> ...
> [...]
> /usr/bin/cygvte-9.dll                         base 0xffee0000 size 0x00099000
> /usr/bin/cygvte-2.91-0.dll                    base 0xfff80000 size 0x0005f000
> /usr/bin/cygvpx-4.dll                         base 0xfffe0000 size 0x002e2000
> [...]
> Is this expected, this kind of arithmetic modulo 2^32?

Yes, because rebase was not designed originally with a lower address
boundary, so it just dilligently computes addresses and never checks if
a boundary is crossed.  At the time when this was designed we had
hundreds, rather than thousands of DLLs, and it didn't occur any of us
that the distro would grow to these dimensions.

I pushed a patch yesterday which let rebase bail out as soon as the
address gets < 0x1000000.  That's only barely above the usual address
executables are loaded to (0x400000).  The regions beneath that are
usually used for the main thread stack (0x20000 - 0x220000) and various
helper address mappings.

I releaase rebase 4.4.4 with the above patch today.

> In any case, i have no fork problems.

That may be as it is, but if you're really running a 32 bit Windows, in
contrast to under WOW64 on a 64 bit Windows, the above does not at all
work as desired and you're just lucky.  Any DLL in the upper region
beyond 0x80000000 will be rebased at runtime by the Windows loader.

> The full list contains 8006 lines, i have the complete Cygwin 32bit installation

The bottom line of this is, and it has been said before and I can't
stress this enough, we can't support this scenario at all, for the
simple fact that we have more DLLs than fit into the 32 bit address
space.  It's not much of a problem on 64 bit, but on 32 bit it's just
not feasible anymore.

Ultimately, You should (must) not install all of Cygwin on 32 bit, only
the set of stuff you need on top of the base category.  Or install 64
bit Cygwin.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: signature.asc
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]