https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111527

--- Comment #31 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <[email protected]>:

https://gcc.gnu.org/g:619a5e5586759a3ed16baf1333728664b06b0451

commit r17-1526-g619a5e5586759a3ed16baf1333728664b06b0451
Author: Sunil Dora <[email protected]>
Date:   Thu Jun 11 18:20:20 2026 +0530

    driver: Spill long COLLECT_GCC_OPTIONS to a response file [PR111527]

    Many kernels enforce a per-string length limit on argv and envp
    strings passed to execve().  On Linux, MAX_ARG_STRLEN limits each
    string to 32 * PAGE_SIZE (~128KB); Windows limits individual
    environment variables to 32767 characters.  When the assembled
    value exceeds such a limit, the build fails.

    When the assembled value would exceed COLLECT2_OPTIONS_MAX_LENGTH
    (default 1024, host-overridable via defaults.h), the driver writes
    the option list to a temporary response file via writeargv() and
    exports "COLLECT_GCC_OPTIONS=@<path>" instead.  collect2,
    lto-wrapper and lto-plugin transparently expand the @file form using
    existing expandargv() infrastructure, so the change is invisible to
    normal builds.

    Bootstrapped and regression tested on x86_64-pc-linux-gnu.

            PR driver/111527

    gcc/ChangeLog:

            * defaults.h (COLLECT2_OPTIONS_MAX_LENGTH): New macro.
            * collect-utils.cc (read_collect_gcc_options): New function.
            * collect-utils.h (read_collect_gcc_options): Declare.
            * collect2.cc (main): Use read_collect_gcc_options instead
            of getenv.
            * doc/hostconfig.texi (Host Misc): Document
            COLLECT2_OPTIONS_MAX_LENGTH.
            * doc/invoke.texi (Environment Variables): Document the
            @file form of COLLECT_GCC_OPTIONS.
            * gcc.cc (xsetenv_collect_gcc_options): New function.
            (set_collect_gcc_options): Use xsetenv_collect_gcc_options.
            * lto-wrapper.cc (run_gcc): Use read_collect_gcc_options
            instead of getenv.

    gcc/testsuite/ChangeLog:

            * gcc.misc-tests/pr111527.exp: New test.

    include/ChangeLog:

            * libiberty.h (expandargstr): Declare.

    libiberty/ChangeLog:

            * argv.c (expandargstr): New function.

    lto-plugin/ChangeLog:

            * lto-plugin.c (read_collect_gcc_options): New function.
            (onload): Use read_collect_gcc_options instead of getenv.

    Signed-off-by: Sunil Dora <[email protected]>

Reply via email to