foss-for-synopsys-dwc-arc-processors / arc-gnu-toolchain

Scripting for building ARC toolchain
5 stars 3 forks source link

Added debug info option #20

Closed luismgsilva closed 1 year ago

luismgsilva commented 1 year ago

Added option to enable (--enable-debug-info) or disable (--disable-debug-info) the debug information in the building process in order to reduce the size of the toolchain distribution. This option is enabled by default.

This is a request from https://github.com/foss-for-synopsys-dwc-arc-processors/arc-gnu-toolchain/issues/11 .

abrodkin commented 1 year ago

@luismgsilva could you please provide in your commit message and in the PR description proof of the improvement, for example sizes of packed or unpacked built tools w/ and w/o debug option? This helps to review that change as well as might be useful in the future to understand what we did and why.

luismgsilva commented 1 year ago

Results

Baremetal Toolchain

Directories Default Debug (--enable-debug-info) Release (--disable-debug-info)
./include 20K 20K 20K
./lib 15M 38M 11M
./share 17M 17M 17M
./arc64-elf 23M 132M 23M
./bin 538M 356M 91M
./libexec 743M 452M 123M
./ 1.4G 992M 263M

Linux Toolchain

Directories Default Debug (--enable-debug-info) Release (--disable-debug-info)
./include 20K 20K 20K
./lib 16M 44M 11M
./share 18M 18M 18M
./arc64-linux-gnu 76M 255M 45M
./bin 472M 316M 77M
./libexec 987M 598M 163M
./sysroot 1.2G 1.3G 65M
./ 2.7G 2.5G 377M

TLDR

The updated approach for building the toolchain has resulted in the emergence of new failing tests for both Baremetal and Linux distributions. These failures are associated with the debugging aspects of the compilation process.

In the case of Baremetal, the new failing tests exhibit behavior that relies on Linux tools such as mkdir, pathconf, and getcwd. This issue could be potencially be related to a problem with newlib.

For Linux, the new failing test is connected to the build process of glibc, where the use of the -Og flag instead of -O2 appears to be the cause.

Configuration

Build for ARC64 Baremetal

# /scratch/luiss/builds/debug/build-arc64-baremetal
$ ../arc-gnu-toolchain/configure                                    \
        --prefix=/scratch/luiss/builds/debug/build-arc64-baremetal/../install-arc64-baremetal   \
        --target=arc64                                      \
        --disable-werror
$ make -j32

Build for ARC64 Linux

# /scratch/luiss/builds/debug/build-arc64-linux

$ ../arc-gnu-toolchain/configure                                    \
        --prefix=/scratch/luiss/builds/debug/build-arc64-linux/../install-arc64-linux       \
        --target=arc64                                      \
        --enable-linux
$ make -j32

Smoke Tests Default Toolchain Distribution

This report utilizes the smoke tests from the arc-gnu-toolchain repository. To execute these tests, the command make report -j<NPROC> should be used. This command will clone and compile the most recent version of QEMU, along with compiling the tests themselves.

Results ARC64 Baremetal

$ make report -j32
/scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-baremetal/../arc-gnu-toolchain/scripts/testsuite-filter newlib \
    /scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-baremetal/../arc-gnu-toolchain/test/allowlist/gcc/hs6x/gcc.json \
    `find build-gcc-newlib-stage2 -name *.sum |paste -sd "," -`
/scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-baremetal/../arc-gnu-toolchain/scripts/testsuite-filter newlib \
    /scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-baremetal/../arc-gnu-toolchain/test/allowlist/binutils/binutils.json \
    `find build-binutils-newlib -name *.sum |paste -sd "," -`
=== gas ld binutils: Unexpected fails for arc-sim ===

=== ERROR ===
    arc64-elf-cc does not exist
    arc64-elf-cc does not exist
    arc64-elf-cc does not exist
=== FAIL ===
    simple objcopy of executable

# Tests | # Detected Errors
--------+------------------
   1169 |       4

=== g++ gcc: Unexpected fails for arc-sim ===

=== XPASS ===
=== FAIL ===

# Tests | # Detected Errors
--------+------------------
 328584 |       0

Results ARC64 Linux

$ make report -j32
/scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-linux/../arc-gnu-toolchain/scripts/testsuite-filter linux \
    /scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-linux/../arc-gnu-toolchain/test/allowlist/gcc/hs6x/gcc.json \
    `find build-gcc-linux-stage2 -name *.sum |paste -sd "," -`
/scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-linux/../arc-gnu-toolchain/scripts/testsuite-filter linux \
    /scratch/luiss/issues/arc-gnu-toolchain/11/default/build-arc64-linux/../arc-gnu-toolchain/test/allowlist/binutils/binutils.json \
    `find build-binutils-linux -name *.sum |paste -sd "," -`
=== gas ld binutils: Unexpected fails for arc-sim ===

=== FAIL ===
    ld-elf/pr19539
    DT_TEXTREL in shared lib
    DT_TEXTREL map file warning
    pr20995
    pr20995-2
    Build pr23162a
    Build pr23162b
    Build pr22263-1
    plugin claimfile lost symbol
    plugin claimfile replace symbol
    plugin claimfile resolve symbol
    load plugin with source
    plugin claimfile lost symbol with source
    plugin claimfile replace symbol with source
    plugin claimfile resolve symbol with source
    plugin claimfile replace file with source
    plugin set symbol visibility with source
    plugin ignore lib with source
    plugin claimfile replace lib with source
    plugin 2 with source lib
    load plugin 2 with source
    load plugin 2 with source and -r
    plugin 3 with source lib
    load plugin 3 with source
    load plugin 3 with source and -r
    PR ld/20070
    Could not create a shared library containing an unique symbol with reference

# Tests | # Detected Errors
--------+------------------
   2013 |      27

=== gcc g++ gfortran: Unexpected fails for arc-sim ===

=== FAIL ===
    gcc.dg/di-sync-multithread.c execution test
    gcc.target/arc64/interrupt-5.c scan-assembler popl_s\\s+r30\n
    gcc.target/arc64/interrupt-5.c scan-assembler pushl_s\\s+r30\n
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++14 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++17 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++20 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++98 (test for excess errors)
    gfortran.dg/bind_c_array_params_2.f90   -O   scan-assembler-times [ \t][$,_0-9]*myBindC 1
    gfortran.dg/elemental_subroutine_3.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for excess errors)
    gfortran.dg/matmul_15.f90   -O  execution test
    gfortran.dg/pr95690.f90   -O   (test for errors, line 6)
    gfortran.dg/pr95690.f90   -O  (test for excess errors)
    gfortran.dg/pr98076.f90   -O0  execution test
    gfortran.dg/pr98076.f90   -O1  execution test
    gfortran.dg/pr98076.f90   -O2  execution test
    gfortran.dg/pr98076.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/pr98076.f90   -O3 -g  execution test
    gfortran.dg/pr98076.f90   -Os  execution test
    gfortran.dg/ieee/ieee_1.F90   -O0  execution test
    gfortran.dg/ieee/ieee_1.F90   -O1  execution test
    gfortran.dg/ieee/ieee_1.F90   -O2  execution test
    gfortran.dg/ieee/ieee_1.F90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_1.F90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_1.F90   -Os  execution test
    gfortran.dg/ieee/ieee_2.f90   -O0  execution test
    gfortran.dg/ieee/ieee_2.f90   -O1  execution test
    gfortran.dg/ieee/ieee_2.f90   -O2  execution test
    gfortran.dg/ieee/ieee_2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_2.f90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_2.f90   -Os  execution test
    gfortran.dg/ieee/ieee_6.f90   -O0  execution test
    gfortran.dg/ieee/ieee_6.f90   -O1  execution test
    gfortran.dg/ieee/ieee_6.f90   -O2  execution test
    gfortran.dg/ieee/ieee_6.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_6.f90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_6.f90   -Os  execution test
    gfortran.dg/ieee/large_2.f90   -O0  execution test
    gfortran.dg/ieee/large_2.f90   -O1  execution test
    gfortran.dg/ieee/large_2.f90   -O2  execution test
    gfortran.dg/ieee/large_2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/large_2.f90   -O3 -g  execution test
    gfortran.dg/ieee/large_2.f90   -Os  execution test
    gfortran.dg/ieee/large_3.F90   -O0  execution test
    gfortran.dg/ieee/large_3.F90   -O1  execution test
    gfortran.dg/ieee/large_3.F90   -O2  execution test
    gfortran.dg/ieee/large_3.F90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/large_3.F90   -O3 -g  execution test
    gfortran.dg/ieee/large_3.F90   -Os  execution test
    gfortran.dg/ieee/rounding_1.f90   -O0  execution test
    gfortran.dg/ieee/rounding_1.f90   -O1  execution test
    gfortran.dg/ieee/rounding_1.f90   -O2  execution test
    gfortran.dg/ieee/rounding_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/rounding_1.f90   -O3 -g  execution test
    gfortran.dg/ieee/rounding_1.f90   -Os  execution test
    gfortran.dg/vect/fast-math-pr38968.f90   -O   scan-tree-dump vect "vectorized 1 loops"
=== XPASS ===
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++14 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++17 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++20 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++98 (internal compiler error)

# Tests | # Detected Errors
--------+------------------
 436339 |      59

Smoke Tests Debug Toolchain Distribution

This report utilizes the smoke tests from the arc-gnu-toolchain repository. To execute these tests, the command make report -j<NPROC> should be used. This command will clone and compile the most recent version of QEMU, along with compiling the tests themselves.

Results ARC64 Baremetal

$ make report -j32
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/scripts/testsuite-filter newlib \
    /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/test/allowlist/gcc/hs6x/gcc.json \
    `find build-gcc-newlib-stage2 -name *.sum |paste -sd "," -`
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/scripts/testsuite-filter newlib \
    /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/test/allowlist/binutils/binutils.json \
    `find build-binutils-newlib -name *.sum |paste -sd "," -`
=== binutils ld gas: Unexpected fails for arc-sim ===

=== ERROR ===
    arc64-elf-cc does not exist
    arc64-elf-cc does not exist
    arc64-elf-cc does not exist
=== FAIL ===
    simple objcopy of executable

# Tests | # Detected Errors
--------+------------------
   1169 |       4

=== g++ gcc: Unexpected fails for arc-sim ===

=== XPASS ===
=== FAIL ===
    g++.dg/concepts/expression.C  -std=gnu++17 (test for excess errors)             x
    g++.dg/cpp0x/initlist25.C  -std=c++14 (test for excess errors)              x
    g++.dg/cpp0x/initlist25.C  -std=c++17 (test for excess errors)              x
    g++.dg/cpp0x/initlist25.C  -std=c++20 (test for excess errors)              x
    g++.dg/eh/omit-frame-pointer.C  -std=gnu++14 (test for excess errors)           x
    g++.dg/eh/omit-frame-pointer.C  -std=gnu++17 (test for excess errors)           x
    g++.dg/eh/omit-frame-pointer.C  -std=gnu++20 (test for excess errors)           x
    g++.dg/eh/omit-frame-pointer.C  -std=gnu++98 (test for excess errors)           x
    g++.dg/opt/pr15551.C  -std=gnu++14 (test for excess errors)                 x
    g++.dg/opt/pr15551.C  -std=gnu++17 (test for excess errors)                 x
    g++.dg/opt/pr15551.C  -std=gnu++20 (test for excess errors)                 x
    g++.dg/opt/pr15551.C  -std=gnu++98 (test for excess errors)                 x
    g++.dg/rtti/typeid4.C  -std=gnu++14 (test for excess errors)                x
    g++.dg/rtti/typeid4.C  -std=gnu++17 (test for excess errors)                
    g++.dg/rtti/typeid4.C  -std=gnu++20 (test for excess errors)                
    g++.dg/rtti/typeid4.C  -std=gnu++98 (test for excess errors)                x
    g++.dg/template/friend10.C  -std=c++14 (test for excess errors)
    g++.dg/template/friend10.C  -std=c++17 (test for excess errors)
    g++.dg/template/friend10.C  -std=c++20 (test for excess errors)
    g++.dg/template/friend10.C  -std=c++98 (test for excess errors)
    g++.dg/modules/global-3 -std=c++17 link
    g++.dg/modules/global-3 -std=c++2a link
    g++.dg/modules/global-3 -std=c++2b link
    g++.dg/modules/hello-1 -std=c++17 link
    g++.dg/modules/hello-1 -std=c++2a link
    g++.dg/modules/hello-1 -std=c++2b link
    g++.dg/modules/iostream-1 -std=c++17 link
    g++.dg/modules/iostream-1 -std=c++2a link
    g++.dg/modules/iostream-1 -std=c++2b link
    g++.dg/torture/pr67600.C   -O0  (test for excess errors)
    g++.dg/torture/pr67600.C   -O1  (test for excess errors)
    g++.dg/torture/pr67600.C   -O2  (test for excess errors)
    g++.dg/torture/pr67600.C   -O2 -flto -fno-use-linker-plugin -flto-partition=none  (test for excess errors)
    g++.dg/torture/pr67600.C   -O3 -g  (test for excess errors)
    g++.dg/torture/pr67600.C   -Os  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O0  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O1  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O2  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O2 -flto -fno-use-linker-plugin -flto-partition=none  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -O3 -g  (test for excess errors)
    g++.dg/torture/pr95493-1.C   -Os  (test for excess errors)
    g++.old-deja/g++.benjamin/15071.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.benjamin/15071.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.benjamin/15071.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.benjamin/15071.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.brendan/copy9.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.brendan/copy9.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.brendan/copy9.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.brendan/copy9.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.brendan/nest21.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.brendan/nest21.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.brendan/nest21.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.brendan/nest21.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.brendan/ptolemy2.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.brendan/ptolemy2.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.brendan/ptolemy2.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.brendan/ptolemy2.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.jason/2371.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.jason/2371.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.jason/2371.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.jason/2371.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.jason/template24.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.jason/template24.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.jason/template24.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.jason/template24.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.jason/template31.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.jason/template31.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.jason/template31.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.jason/template31.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.law/arg8.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.law/arg8.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.law/arg8.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.law/arg8.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.law/code-gen5.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.law/code-gen5.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.law/code-gen5.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.law/code-gen5.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.law/ctors12.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.law/ctors12.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.law/ctors12.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.law/ctors12.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.law/cvt2.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.law/cvt2.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.law/cvt2.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.law/cvt2.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.law/virtual3.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.law/virtual3.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.law/virtual3.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.law/virtual3.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.mike/eh2.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.mike/eh2.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.mike/eh2.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.mike/eh2.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.mike/net34.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.mike/net34.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.mike/net34.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.mike/net34.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.mike/net46.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.mike/net46.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.mike/net46.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.mike/net46.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.mike/p658.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.mike/p658.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.mike/p658.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.mike/p658.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.other/headers1.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.other/headers1.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.other/headers1.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.other/headers1.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.other/sibcall1.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.other/sibcall1.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.other/sibcall1.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.other/sibcall1.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.other/unchanging1.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.other/unchanging1.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.other/unchanging1.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.other/unchanging1.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb115.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb115.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb115.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb115.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb31.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb31.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb31.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb31.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb41.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb41.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb41.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb41.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb46.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb46.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb46.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb46.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb54.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb54.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb54.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb54.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb66.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb66.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb66.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb66.C  -std=c++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb73.C  -std=gnu++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb73.C  -std=gnu++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb73.C  -std=gnu++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb73.C  -std=gnu++98 (test for excess errors)
    g++.old-deja/g++.robertl/eb77.C  -std=c++14 (test for excess errors)
    g++.old-deja/g++.robertl/eb77.C  -std=c++17 (test for excess errors)
    g++.old-deja/g++.robertl/eb77.C  -std=c++20 (test for excess errors)
    g++.old-deja/g++.robertl/eb77.C  -std=c++98 (test for excess errors)

# Tests | # Detected Errors
--------+------------------
 328584 |     151

All the extra new errors from the baremetal applications is due to undefined reference to linux tools like mkdir, chmod, pathconf, chdir. Bellow is a test example that describes the same isse for all the reported new test fails

Example of failling test

All the new failing cases share the same issue. In this manner, a single test example is provided.

Executing on host: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/gcc/testsuite/g++2/../../xg++ -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/gcc/testsuite/g++2/../../ /scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/gcc/testsuite/g++.old-deja/g++.benjamin/15071
.C    -fdiagnostics-plain-output  -nostdinc++ -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/libstdc++-v3/include/arc64-elf -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/libstdc++-v3/include -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gc
c/libstdc++-v3/libsupc++ -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/libstdc++-v3/include/backward -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/libstdc++-v3/testsuite/util -fmessage-length=0  -std=c++98  -pedantic-errors -Wno-long-long    --specs=nsim.specs -Wl,--defsym=__DEFAULT_HEAP_SIZE=256m -Wl,--defsym=__DEFAULT_STACK_S
IZE=1024m   -L/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs  -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs  -lm  -o ./15071.exe    (timeout = 600)
spawn -ignore SIGHUP /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/gcc/testsuite/g++2/../../xg++ -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/gcc/testsuite/g++2/../../ /scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/gcc/testsuite/g++.old-deja/g++.benjamin/150
71.C -fdiagnostics-plain-output -nostdinc++ -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/libstdc++-v3/include/arc64-elf -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/libstdc++-v3/include -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/
libstdc++-v3/libsupc++ -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/libstdc++-v3/include/backward -I/scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/libstdc++-v3/testsuite/util -fmessage-length=0 -std=c++98 -pedantic-errors -Wno-long-long --specs=nsim.specs -Wl,--defsym=__DEFAULT_HEAP_SIZE=256m -Wl,--defsym=__DEFAULT_STACK_SIZE=102
4m -L/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs -lm -o ./15071.exe
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(cow-fs_ops.o): in function `(anonymous namespace)::create_dir(std::filesystem::path const&, std::filesystem::perms, std::erro
r_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(cow-fs_ops.o): in function `std::filesystem::current_path(std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(cow-fs_ops.o): in function `std::filesystem::current_path(std::filesystem::path const&, std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(cow-fs_ops.o): in function `std::filesystem::permissions(std::filesystem::path const&, std::filesystem::perms, std::filesyste
m::perm_options, std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(fs_ops.o): in function `std::filesystem::do_copy_file(char const*, char const*, std::filesystem::copy_options_existing_file, 
stat*, stat*, std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/../filesystem/ops-common.h:489: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/../filesystem/ops-common.h:489: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(fs_ops.o): in function `(anonymous namespace)::create_dir(std::filesystem::__cxx11::path const&, std::filesystem::perms, std:
:error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(fs_ops.o): in function `std::filesystem::current_path[abi:cxx11](std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(fs_ops.o): in function `std::filesystem::current_path(std::filesystem::__cxx11::path const&, std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/build-gcc-newlib-stage2/arc64-elf/./libstdc++-v3/src/.libs/libstdc++.a(fs_ops.o): in function `std::filesystem::permissions(std::filesystem::__cxx11::path const&, std::filesystem::perms, std::file
system::perm_options, std::error_code&)':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/lib/gcc/arc64-elf/12.2.1/../../../../arc64-elf/lib/libc.a(libc_a-linkr.o): in function `_link_r':
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/newlib/newlib/libc/reent/linkr.c:53: undefined reference to `_link'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/newlib/newlib/libc/reent/linkr.c:53: undefined reference to `_link'
collect2: error: ld returned 1 exit status
compiler exited with status 1
FAIL: g++.old-deja/g++.benjamin/15071.C  -std=c++98 (test for excess errors)
Excess errors:
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/../filesystem/ops-common.h:489: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/../filesystem/ops-common.h:489: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:582: undefined reference to `mkdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:749: undefined reference to `pathconf'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:768: undefined reference to `getcwd'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:805: undefined reference to `chdir'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/gcc/libstdc++-v3/src/c++17/fs_ops.cc:1133: undefined reference to `chmod'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/newlib/newlib/libc/reent/linkr.c:53: undefined reference to `_link'
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../install-arc64-baremetal/arc64-elf/bin/ld: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-baremetal/../arc-gnu-toolchain/newlib/newlib/libc/reent/linkr.c:53: undefined reference to `_link'

The presence of undefined references to Linux tools like mkdir, chmod, pathconf, and chdir in bare metal applications is a direct result of the absence of an operating system. In a bare metal environment, where an operating system is not present, these Linux tools and their corresponding functionalities are not available. Therefore, attempting to use or reference them in bare metal applications will lead to errors. These errors occur consistently across all these tools due to the fundamental limitation of the bare metal environment not having the necessary operating system components.

Results ARC64 Linux

$ make report -j32
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/scripts/testsuite-filter linux \
    /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/test/allowlist/gcc/hs6x/gcc.json \
    `find build-gcc-linux-stage2 -name *.sum |paste -sd "," -`
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/scripts/testsuite-filter linux \
    /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/test/allowlist/binutils/binutils.json \
    `find build-binutils-linux -name *.sum |paste -sd "," -`
=== ld binutils gas: Unexpected fails for arc-sim ===

=== FAIL ===
    ld-elf/pr19539
    DT_TEXTREL in shared lib
    DT_TEXTREL map file warning
    pr20995
    pr20995-2
    Build pr23162a
    Build pr23162b
    Build pr22263-1
    plugin claimfile lost symbol
    plugin claimfile replace symbol
    plugin claimfile resolve symbol
    load plugin with source
    plugin claimfile lost symbol with source
    plugin claimfile replace symbol with source
    plugin claimfile resolve symbol with source
    plugin claimfile replace file with source
    plugin set symbol visibility with source
    plugin ignore lib with source
    plugin claimfile replace lib with source
    plugin 2 with source lib
    load plugin 2 with source
    load plugin 2 with source and -r
    plugin 3 with source lib
    load plugin 3 with source
    load plugin 3 with source and -r
    PR ld/20070
    Could not create a shared library containing an unique symbol with reference

# Tests | # Detected Errors
--------+------------------
   2013 |      27

=== g++ gcc gfortran: Unexpected fails for arc-sim ===

=== FAIL ===
    gcc.dg/di-sync-multithread.c execution test
    gcc.dg/pr84877.c execution test
    gcc.target/arc64/interrupt-5.c scan-assembler popl_s\\s+r30\n
    gcc.target/arc64/interrupt-5.c scan-assembler pushl_s\\s+r30\n
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++14 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++17 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++20 (test for excess errors)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++98 (test for excess errors)
    gfortran.dg/bind_c_array_params_2.f90   -O   scan-assembler-times [ \t][$,_0-9]*myBindC 1
    gfortran.dg/elemental_subroutine_3.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for excess errors)
    gfortran.dg/matmul_15.f90   -O  execution test
    gfortran.dg/pr95690.f90   -O   (test for errors, line 6)
    gfortran.dg/pr95690.f90   -O  (test for excess errors)
    gfortran.dg/pr98076.f90   -O0  execution test
    gfortran.dg/pr98076.f90   -O1  execution test
    gfortran.dg/pr98076.f90   -O2  execution test
    gfortran.dg/pr98076.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/pr98076.f90   -O3 -g  execution test
    gfortran.dg/pr98076.f90   -Os  execution test
    gfortran.dg/ieee/ieee_1.F90   -O0  execution test
    gfortran.dg/ieee/ieee_1.F90   -O1  execution test
    gfortran.dg/ieee/ieee_1.F90   -O2  execution test
    gfortran.dg/ieee/ieee_1.F90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_1.F90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_1.F90   -Os  execution test
    gfortran.dg/ieee/ieee_2.f90   -O0  execution test
    gfortran.dg/ieee/ieee_2.f90   -O1  execution test
    gfortran.dg/ieee/ieee_2.f90   -O2  execution test
    gfortran.dg/ieee/ieee_2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_2.f90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_2.f90   -Os  execution test
    gfortran.dg/ieee/ieee_6.f90   -O0  execution test
    gfortran.dg/ieee/ieee_6.f90   -O1  execution test
    gfortran.dg/ieee/ieee_6.f90   -O2  execution test
    gfortran.dg/ieee/ieee_6.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/ieee_6.f90   -O3 -g  execution test
    gfortran.dg/ieee/ieee_6.f90   -Os  execution test
    gfortran.dg/ieee/large_2.f90   -O0  execution test
    gfortran.dg/ieee/large_2.f90   -O1  execution test
    gfortran.dg/ieee/large_2.f90   -O2  execution test
    gfortran.dg/ieee/large_2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/large_2.f90   -O3 -g  execution test
    gfortran.dg/ieee/large_2.f90   -Os  execution test
    gfortran.dg/ieee/large_3.F90   -O0  execution test
    gfortran.dg/ieee/large_3.F90   -O1  execution test
    gfortran.dg/ieee/large_3.F90   -O2  execution test
    gfortran.dg/ieee/large_3.F90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/large_3.F90   -O3 -g  execution test
    gfortran.dg/ieee/large_3.F90   -Os  execution test
    gfortran.dg/ieee/rounding_1.f90   -O0  execution test
    gfortran.dg/ieee/rounding_1.f90   -O1  execution test
    gfortran.dg/ieee/rounding_1.f90   -O2  execution test
    gfortran.dg/ieee/rounding_1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
    gfortran.dg/ieee/rounding_1.f90   -O3 -g  execution test
    gfortran.dg/ieee/rounding_1.f90   -Os  execution test
    gfortran.dg/vect/fast-math-pr38968.f90   -O   scan-tree-dump vect "vectorized 1 loops"
=== XPASS ===
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++14 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++17 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++20 (internal compiler error)
    c-c++-common/goacc/kernels-decompose-pr100400-1-2.c  -std=c++98 (internal compiler error)

# Tests | # Detected Errors
--------+------------------
 436339 |      60

There is evidence of a single new failing test for the linux toolchain. This test gcc.dg/pr84877.c is designed to ensure that the compiler correctly optimizes the code with the -O2 flag while mainting the expected behavior and avoiding any potential issues or inconsistencies.

Debugging

Test Case
/* { dg-do run { xfail { cris-*-* sparc*-*-* } } } */
/* { dg-options "-O2" } */

#include <inttypes.h>

struct U {
    int M0;
    int M1;
} __attribute ((aligned (16)));

volatile struct U p0 = {1, 0};

void __attribute__ ((noinline))
foo (struct U p)
{

  volatile intptr_t mask = 0b1111;
  volatile int dummy[2];
  struct U p1 = p;
  dummy[1] = p.M0;

  if ((intptr_t)(&p1) & mask)
    __builtin_abort ();
  if ((intptr_t)(&p) & mask)
    __builtin_abort ();

  if (p1.M0 != dummy[1])
    __builtin_abort ();
  if (p1.M1 != p.M1)
    __builtin_abort ();
}

int
main ()
{
  foo (p0);
  return 0;
}
Test Execution
Executing on host: /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/build-gcc-linux-stage2/gcc/xgcc -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/build-gcc-linux-stage2/gcc/ /scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/gcc/testsuite/gcc.dg/pr84877.c    -fdiagnostics-plain-output   -O2     -lm  -o ./pr84877.exe    (timeout = 600)
spawn -ignore SIGHUP /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/build-gcc-linux-stage2/gcc/xgcc -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/build-gcc-linux-stage2/gcc/ /scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/gcc/testsuite/gcc.dg/pr84877.c -fdiagnostics-plain-output -O2 -lm -o ./pr84877.exe
PASS: gcc.dg/pr84877.c (test for excess errors)
spawn arc64-linux-gnu-run ./pr84877.exe
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/scripts/wrapper/qemu/arc64-linux-gnu-run: line 20: 1974371 Aborted                 qemu-arc$qemu -cpu ${QEMU_CPU} -R 3G "${qemu_args[@]}" -L ${ARC_SYSROOT} "$@"
FAIL: gcc.dg/pr84877.c execution test

Test Debug


/scratch/luiss/issues/arc-gnu-toolchain/11/debug/install-arc64-linux/bin/arc64-linux-gnu-gcc                   \
        -B/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/build-gcc-linux-stage2/gcc/       \
        /scratch/luiss/issues/arc-gnu-toolchain/11/debug/arc-gnu-toolchain/gcc/gcc/testsuite/gcc.dg/pr84877.c  \
        -fdiagnostics-plain-output                                         \
        -O2 -lm -o ./pr84877.exe -g

# NOTE: "-g $PORT" must be the first argument
/scratch/luiss/issues/arc-gnu-toolchain/11/debug/install-arc64-linux/bin/qemu-arc64             \
        -g 6174 -cpu hs6x -R 3G                                 \
        -L /scratch/luiss/issues/arc-gnu-toolchain/11/debug/install-arc64-linux/sysroot     \
        ./pr84877.exe

/scratch/luiss/issues/arc-gnu-toolchain/11/debug/install-arc64-linux/bin/arc64-linux-gnu-gdb ./pr84877.exe \
    -ex "tar rem :6174"     \
    -ex "lay asm"       \
    -ex "lay next"      \
    -ex "b main"        \
    -ex "cont"
Before After

From the provided images, it is evident that the test starts from line 24 and ends at line 23. This observation appears to be connected to the usage of the -O2 flag in the test. However, the root cause of this issue seems to be the way glibc is compiled during the toolchain configuration. Specifically, glibc needs to be compiled with the -O minimal option; otherwise, it will fail to compile altogether. Based on my experimentation, I have found that glibc must be compiled with either -O2 instead of -Og for the test to succeed.

GLIBC building
$ /scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/glibc/configure   \
        --host=arc64-linux-gnu --prefix=/usr --disable-werror --enable-shared --enable-obsolete-rpc     \
        --with-headers=/scratch/luiss/issues/arc-gnu-toolchain/11/debug/build-arc64-linux/../arc-gnu-toolchain/linux-headers/include \
        --disable-multilib --libdir=/usr/lib libc_cv_slibdir=/lib libc_cv_rtlddir=/lib  \
        ASFLAGS=""                                      \
        CFLAGS=" -O2 -Og -g3 -fvar-tracking-assignments"                \
        CFLAGS_FOR_TARGET="   -Og -g3 -fvar-tracking-assignments"           \
        CFLAGS_FOR_BUILD=" -Og -g3 -fvar-tracking-assignments"              \
        CXXFLAGS=" -O2 -Og -g3 -fvar-tracking-assignments"                  \
        CXXFLAGS_FOR_TARGET="   -Og -g3 -fvar-tracking-assignments"             \
        CXXFLAGS_FOR_BUILD=" -Og -g3 -fvar-tracking-assignments"

Please note that for the compilation, the Og flag will be utilized instead of O2 since it appears as an argument afterward.