Mail Archives: cygwin/2001/09/18/22:35:46
Robert Collins wrote:
> I went round this one with Paul's original patch.
>
> Auto image base is bad (for cygwin).
>
> Very bad.
>
> Ok, now the scare is over, here is why:
>
> Lemma: Cygwin1.dll is only relocatable if it is consistently relocated
> to the same address in _all_ process's that load cygwin1.dll. Proof:
> cygwin copies the process address space to fork, if references to
> cygwin1.dll are not valid in the hild, the child will die badly.
>
> Auto image base will conflict with cygwin1.dll semi-randomly. Because
> other cygwin linked .dll's come before cygwin1.dll in the PE header
> (don't know if this is due to link order, sorting of the file or
> whathaveyou) cygwin1.dll is the last .dll. Thus when there is a
> conflict, cygwin1.dll gets relocated.
>
> The problem: bash does not depend on these conflicting .dll's, so every
> process started that does depend on them will fail to initialise.
>
> Solution: don't use auto-image-base. The overhead from relocation is
> quite low, why not let windows just do its thing.
Okay, suppose I have 5 dll's that are all based at the default,
0x10000000. I start an exe that depends on those 5, so at startup time
they all get relocated to (random) address in my exe's address space.
Then cygwin1.dll is loaded. But the random addresses chosen for the
relocation for the first 5 dlls MAY or may NOT conflict with
cygwin1.dll's *fixed* location.
Boom (sometimes).
How is this better than the current "boom (sometimes)" behavior? What
am I missing?
--Chuck
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -