gcc version used for kernel configs doesn't match the one used for builds

Bug #1933856 reported by Kleber Sacilotto de Souza
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
linux-riscv-5.8 (Ubuntu)
Invalid
Undecided
Unassigned
Focal
Fix Committed
Medium
Kleber Sacilotto de Souza

Bug Description

[Impact]
linux-riscv-5.8 needs to be built with gcc-10 in Focal otherwise it won't boot. This was fixed by commit "UBUNTU: [Packaging] Use gcc-10 for riscv 5.8 kernel build", which adds gcc-10 as "Build-Depends-Arch" and sets a variable "gcc" in 'debian/rules', which is passed down to make by 'debian/rules.d/2-binary-arch.mk'.

The other gcc version dependency is when we generate locally the kernel configs by running 'make syncconfig', which is called by 'debian/scripts/misc/kernelconfig'. Currently, the syncconfig is called using the chroot default compiler, which in Focal is gcc-9. So far there hasn't been any major differences, however with the update of gcc-10 in Groovy and Focal from 10.2.0 to 10.3.0 some KASAN related config options are not available anymore, causing some changes on the configs generated. The problem with non-matching gcc versions being used, is that there will be a mismatch between the configs being generated during the preparation of the kernel and the ones during the build.

[Fix]
The proposed fix is to use the same variable defined for the build, passing it down to 'debian/scripts/misc/kernelconfig' and using it to define the correct cross-compiler to be used.

[Where problems could occur]
If the environment variables are not set correctly the build can break in some environment which was not tested.

Changed in linux-riscv-5.8 (Ubuntu Focal):
assignee: nobody → Kleber Sacilotto de Souza (kleber-souza)
status: New → Confirmed
status: Confirmed → In Progress
Stefan Bader (smb)
Changed in linux-riscv-5.8 (Ubuntu):
status: New → Invalid
Changed in linux-riscv-5.8 (Ubuntu Focal):
importance: Undecided → Medium
Changed in linux-riscv-5.8 (Ubuntu Focal):
status: In Progress → Fix Committed
Revision history for this message
Kleber Sacilotto de Souza (kleber-souza) wrote :

For the record, this is what's causing the config differences between the gcc versions:

With gcc 10.3.0, CC_HAS_KASAN_GENERIC is not available as it depends on the following compiler flag:

config CC_HAS_KASAN_GENERIC
         def_bool $(cc-option, -fsanitize=kernel-address)

'cc-option' will do something similar to the following, which with gcc 10.2.0 riscv64 cross compiler would return success:

$ /usr/bin/riscv64-linux-gnu-gcc-10 -Werror -fsanitize=kernel-address -c -x c /dev/null
$ echo $?
0

But with 10.3.0 this doesn't seem to be supported anymore as a standalone flag, depending now on '-fasan-shadow-offset=':

$ /usr/bin/riscv64-linux-gnu-gcc-10 -Werror -fsanitize=kernel-address -c -x c /dev/null
cc1: error: ‘-fsanitize=kernel-address’ with stack protection is not supported without ‘-fasan-shadow-offset=’ for this target [-Werror]

And all KASAN options get removed altogether.

This doesn't cause any real config change, as we disable CONFIG_KASAN anyway. But for our annotations '-' != 'n', failing the config checks.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.