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

Julien Fischer jfischer at opturion.com
Mon Jun 15 11:23:24 AEST 2020

On Mon, 15 Jun 2020, Massimo Dentico wrote:

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

What you are missing is that the ml script invokes the linker via the C
compiler not directly.  (See the output of ml --print-link-command.)

The -Wl,--stack syntax is correct when passing flags from the C compiler
to the linker.


More information about the users mailing list