26.12.1. Update GCC: GCC supported by Buildroot
This is of course the simplest case.
You can quickly determine all the GCC versions supported by Buildroot by looking at:
submodules/buildroot/package/gcc/Config.in.host
For example, in Buildroot 2018.08, which was used at LKMC 5d10529c10ad8a4777b0bac1543320df0c89a1ce, the default toolchain was 7.3.0, and the latest supported one was 8.2.0.
To just upgrade the toolchain to 8.2.0, and rebuild some userland executables to later run them, we could do:
cd submodules/gcc git fetch up git checkout -b lkmc-gcc-8_2_0-release gcc-8_2_0-release git am ../buildroot/package/gcc/8.2.0/* cd ../.. ./build-buildroot \ --arch aarch64 \ --buildroot-build-id gcc-8-2 \ --config 'BR2_GCC_VERSION_8_X=y' \ --config 'BR2_GCC_VERSION="8.2.0"' \ --no-all \ -- \ toolchain \ ; ./build-userland \ --arch aarch64 \ --buildroot-build-id gcc-8-2 \ --out-rootfs-overlay-dir-prefix gcc-8-2 \ --userland-build-id gcc-8-2 \ ; ./build-buildroot --arch aarch64
where the toolchain
Buildroot target builds only Buildroot: https://stackoverflow.com/questions/44521150/buildroot-install-and-build-the-toolchain-only
Note that this setup did not overwrite any of our default Buildroot due to careful namespacing with our gcc-8-2
prefix!
Now you can either run the executables on User mode simulation with:
./run --arch aarch64 --userland userland/c/hello.c --userland-build-id gcc-8-2
or in full system with:
./run --arch aarch64 --eval-after './gcc-8-2/c/hello.out'
where the gcc-8-2
prefix was added by --out-rootfs-overlay-dir-prefix
.
ARM SVE support was only added to GCC 8 and can be enabled with the flag: -march=armv8.2-a+sve
.
We already even had a C SVE test in-tree, but it was disabled because the old toolchain does not support it.
So once the new GCC 8 toolchain was built, we can first enable that test by editing the path_properties.py file to not skip C SVE tests anymore:
#os.path.splitext(self.path_components[-1])[1] == '.c' and self['arm_sve']
and then rebuild run one of the experiments from Change ARM SVE vector length in emulators:
./build-userland \ --arch aarch64 \ --buildroot-build-id gcc-8-2 \ --force-rebuild \ --march=armv8.2-a+sve \ --out-rootfs-overlay-dir-prefix gcc-8-2 \ --static \ --userland-build-id gcc-8-2 \ ; ./run \ --arch aarch64 \ --userland userland/arch/aarch64/inline_asm/sve_addvl.c \ --userland-build-id gcc-8-2 \ --static \ --gem5-worktree master \ -- \ --param 'system.cpu[:].isa[:].sve_vl_se = 4' \
Bibliography: