https://groups.google.com/forum/?fromgroups#!topic/mozilla.d...
https://groups.google.com/forum/?fromgroups#!topic/mozilla.d...
There are still internal limits in the PE32 format which mean parts of the output as a whole will be limited to 2 GiB or so, regardless of the address space available to the linker.
I too have hit internal linker limits from time-to-time, but the span of computing history in which it makes sense to have a 64-bit linker building a load module output with 32-bit internal limits to run on 64-bit processors doesn't seem like the place to be in the great scheme of things. Just my personal observation.
What hits the 32-bit limit is the link-time code generation, which has to have the entire program's AST, plus all the profiling information, plus whatever other data structures it's using in memory all at once.
For my custom Qt5 build, I've disabled /LTCG only for QtWebkit (32/64bit debug/release) and was able to deal with this limitation (at some other cost I guess)
Mozilla has never struck me as the most... forward looking.
* Edit: oops, I corrected a typo where I wrote "32-bit build".
So what are their problems exactly? That they are building with VS 2005 (from what I saw in that thread) and MS isn't backporting changes to the 2005 toolset?
[0] http://msdn.microsoft.com/en-us/library/0zza0de8%28v=vs.100%...
(Mozilla is building with 2010 now.)
Also note that the problem still exists in VS2012, and in fact is even worse because the linker memory usage has gotten higher in general. Fortunately we now have a fairly good workaround (developed with help from Microsoft -- maybe some of the people in this thread?) that limits which files participate in PGO:
The following list describes the various versions of cl.exe (the Visual C++ compiler):
...
x64 on x86 (x64 cross-compiler) Allows you to create output files for x64. This version of cl.exe runs as a 32-bit process, native on an x86 machine and under WOW64 on a 64-bit Widows operating system.
This 32-bit linker is apparently LARGE_ADDRESS_AWARE, so running it on 64-bit windows gets them 4GB to play with (which they are apparently rapidly burning through.) What they need is a 64-bit linker to run on 64-bit windows that can produce 32-bit output.
OS Linker Output Mem
1 32 32 32 3GB
2 32 32 64 3GB
3 64 32 32 4GB
4 64 64 32 8TB
They use to be doing 1, now they are doing 3. They need to do 4, but apparently cannot. My understanding of this may be wrong, or they may be wrong, I don't know.I am baaarely familiar with Microsoft-world development.