Unless overridden by SORT*, LD will place sections matched by wildcards in the order they were seen in the link. So far, this meant that arch/ initcalls and device trees compiled into barebox proper, were always last. For platforms with PBL or with only one device tree in barebox proper, this didn't matter much, but when enabling the of_manipulation selftest, a second device tree would be built into barebox on kvx, openrisc and some MIPS. Because all directories appear before arch/, this had the effect that on kvx, openrisc and some MIPS, __dtb_start would end up pointing at the test's device tree instead of the board device tree breaking the build. Switching the affected platforms to use PBL would be one fix for the issue, but there's a simple one: let's do what Linux does in its top-level Kbuild file and have arch/ not be the last in sequence. This may fause fallout for code that depended on specific ordering of initcalls or other linker-defined lists, which would need to be fixed. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- While a fix, I think this needs to sit a while in next first. --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 711cba7bed29..4fdb8f1b41af 100644 --- a/Makefile +++ b/Makefile @@ -586,11 +586,12 @@ endif # We need some generic definitions. include $(srctree)/scripts/Makefile.lib -# Objects we will link into barebox / subdirs we need to visit -common-y := common/ drivers/ commands/ lib/ crypto/ net/ fs/ firmware/ test/ +# Objects we will link into barebox / subdirs we need to visit include $(srctree)/arch/$(SRCARCH)/Makefile +common-y += common/ drivers/ commands/ lib/ crypto/ net/ fs/ firmware/ test/ + ifdef need-config ifdef may-sync-config # Read in dependencies to all Kconfig* files, make sure to run syncconfig if -- 2.39.2