[m-users.] Compiler build failure with --enable-lto

Massimo Dentico m.dentico at virgilio.it
Mon Jun 15 11:08:54 AEST 2020


On 15/06/2020 00:31, M McDonough wrote:
> Yeah, something is wrong there, although I don't really know what
> (maybe we need different flags for ar, or to fiddle with whole-archive
> settings, or one of the "prune" sections flags?). I mostly tested on
> MSVC to make sure it worked, and Clang on OpenBSD to make sure it at
> least compiled. I didn't try to use it with GCC on Windows at all.
> It's most reliable on Windows with MSVC at this point, although it
> would be great if it did work with GCC on Windows :(

This line caught my attention:

../scripts/ml --grade asm_fast.gc    --no-mercury-stdlib-dir --shared 
--trace-init-file ../browser/mer_browser.init --ssdb-init-file 
../ssdb/mer_ssdb.init        -- -Wl,--stack=8388608   -o 
mercury_compile.exe mercury_compile_init.o \

The syntax of this flag in particular:

    -Wl,--stack=8388608

[For people not familiar with this flag: it's passing linker flags
from GCC to the linker. See:
    https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#index-Wl
]

On my system:

    $ ld --version
    GNU ld (GNU Binutils) 2.34

So let's look at the binutils documentation for this version of ld:

    https://sourceware.org/binutils/docs-2.34/ld/Options.html

The stack size is specified in this way (emphasis added):

    --stack reserve
    --stack reserve,commit
       Specify the number of bytes of memory to reserve (and optionally
       commit) to be used as stack for this program. The default is 2MB
       reserved, 4K committed. [This option is specific to the i386 *PE*
       targeted port of the linker]

For Windows the executable format is Portable Executable (PE), so that
syntax doesn't seem correct. Or I'm missing something?

I hope this is helpful. Ok, it's late night here, I need to sleep.

--
Massimo A. Dentico



More information about the users mailing list