[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#911421: linux: FTBFS on armel/armhf: ABI change for return_address



Source: linux
Version: 4.9.130-1
Severity: serious
Justification: FTBFS
Tags: patch

Hi,

The latest linux upload to stretch FTBFS on both armel and armhf due to
symbol changes. The only offending (non-ignored) change is the following:
> ABI has changed!  Refusing to continue.
> […]
> Changed symbols:
> […]
> return_address                                   module: vmlinux, version: 0x0bbae511 -> 0x3244c143, export: EXPORT_SYMBOL_GPL

Full build logs:
  https://buildd.debian.org/status/fetch.php?pkg=linux&arch=armel&ver=4.9.130-1&stamp=1539386797&raw=0
  https://buildd.debian.org/status/fetch.php?pkg=linux&arch=armhf&ver=4.9.130-1&stamp=1539388630&raw=0

A cursory look at the source changes since 4.9.110-* didn't yield any
obvious reasons for that to happen, so I've spent some time trying to
figure out what was happening.

First I checked that the toolchain packages were the same between the
last successful builds and the first failing ones, and that the other
installed packages didn't see obvious updates that could account for
this change.

With the abel.debian.org porterbox I've been able to work with partial
builds (to speed up debugging) in an armel stretch chroot, comparing
4.9.110-3+deb9u6 and 4.9.130-1, after “make vmlinux” in the
debian/build/build_armel_none_marvell directory.

To get more information from genksyms, I've added the -d -D flags to the
genksyms calls in the scripts/Makefile.build file, and triggered another
build with:

    touch ../../../arch/arm/kernel/return_address.c
    make vmlinux 2>&1 | tee ~/build.txt

Comparing build.txt for both 4.9.110 and 4.9.130, this popped up:
-Export return_address == <__attribute__ ( ( always_inline ) ) __attribute__ ( ( no_instrument_function ) ) void * return_address ( unsigned int ) >
+Export return_address == <__attribute__ ( ( always_inline , unused ) ) __attribute__ ( ( no_instrument_function ) ) void * return_address ( unsigned int ) >

along with many more lines accounting for the addition of the “unused”
attribute.

With this hint in mind, it was way easier to spot candidates:

    git log --stat -p --pickaxe-all -Gunused v4.9.110..v4.9.130

in the upstream linux tree, which made me suspect:

  https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=29524a9d42f683ca7b67f07f1ac3f6049c8675cc

which aims at fixing inlining, but seems to introduce “unused” as a side
effect.

Since it couldn't be reverted directly, I've revert the following commit
as well:

  https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=02c89527b056301846bfdec4fabbad924d1ad59d

With both commits reverted, a partial build leads to the come back of
the wanted value for the return_address symbol (0x0bbae511), so this
should fix / work around the FTBFS. A full build wasn't attempted
though; feel free to ping me if you'd like that to happen for armel
and/or armhf on abel.


Cheers,
-- 
Cyril Brulebois -- Debian Consultant @ DEBAMAX -- https://debamax.com/

Attachment: signature.asc
Description: PGP signature


Reply to: