openwrt/include
Mark Mentovai 802bfe0806 kernel: disable stack validation for external module builds as needed
c3e31b6a9b and 5f8e587240 disable stack validation when the build
host is not running Linux, as the objtool kernel build tool required for
stack validation is not portable to other build host environments. This
was achieved by setting CONFIG_STACK_VALIDATION= in KERNEL_MAKEOPTS, and
by setting SKIP_STACK_VALIDATION=1 in the environment. KERNEL_MAKEOPTS
only has effect for the kernel build, not for external module builds,
but through kernel 5.14, SKIP_STACK_VALIDATION worked to disable this
feature too, so stack validation was disabled for external module builds
as well. Since kernel 0d989ac2c90b, the kernel build no longer considers
SKIP_STACK_VALIDATION, so the feature will be disabled for the kernel
build, but not for external module builds.

When building OpenWrt on a non-Linux build host targeting x86 (the only
target architecture for which OpenWrt enables the kernel
CONFIG_STACK_VALIDATION) and using kernel 5.15 (such as via
CONFIG_TESTING_KERNEL), this caused a build failure during any external
module build, such as kmod-button-hotplug. This manifested as build
errors such as:

  make[4]: *** No rule to make target
  '.../build_dir/target-x86_64_musl/linux-x86_64/button-hotplug/button-hotplug.o',
  needed by
  '.../build_dir/target-x86_64_musl/linux-x86_64/button-hotplug/button-hotplug.mod'.
  Stop.

Although button-hotplug.c was present, the implicit rule to make
$(obj)/%.o from $(src)/%.c in the kernel's scripts/Makefile.build could
not be satisfied in this case, as it also depends on $(objtool_dep),
non-empty as a result of the failure to propagate disabling of stack
validation to external module builds, in a configuration where it is not
possible to build objtool.

KERNEL_MAKEOPTS is used for just the kernel build itself, while
KERNEL_MAKE_FLAGS is used for both the kernel build and for external
module builds. This restores the ability to build OpenWrt in such
configurations by moving the CONFIG_STACK_VALIDATION= make argument from
KERNEL_MAKEOPTS to KERNEL_MAKE_FLAGS where it is able to affect external
module builds properly.

Note that the kernel's objtool and related configuration have seen a
major overhaul since kernel 5.15, and may need more attention again
after 22922deae13f, in kernel 5.19.

Signed-off-by: Mark Mentovai <mark@mentovai.com>
2022-10-20 09:53:23 +02:00
..
site Revert "build: use config.site generated by autoconf-lean, drop hardcoded sitefiles" 2021-03-02 11:35:45 +00:00
autotools.mk libiconv-stub: remove 2022-07-15 15:21:44 +02:00
bpf.mk treewide: drop use of which 2022-01-17 09:14:26 +01:00
cmake.mk treewide: drop use of which 2022-01-17 09:14:26 +01:00
debug.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
depends.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
device_table.txt image: ensure that /dev/console exist in rootfs images 2013-08-27 12:02:58 +00:00
download.mk scripts/download.pl: make the download tool configurable 2022-10-20 00:35:19 +02:00
feeds.mk build: ensure that dash isn't prepended twice to abi version suffix 2021-06-15 09:58:33 +02:00
hardened-ld-pie.specs build: add hardened builds with PIE (ASLR) support 2018-01-27 16:46:45 +01:00
hardening.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
host-build.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
image-commands.mk build: move Build/edimax-header to image-commands.mk 2022-10-19 22:58:12 +02:00
image.mk image: always rebuild kernel loaders 2022-10-14 23:13:02 +02:00
kernel-5.10 kernel: bump 5.10 to 5.10.149 2022-10-18 15:09:23 +02:00
kernel-5.15 kernel: bump 5.15 to 5.15.74 2022-10-18 15:09:23 +02:00
kernel-build.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
kernel-defaults.mk uml: headers are not exportable 2022-09-24 23:52:14 +02:00
kernel-version.mk kernel: split kernel version to dedicated files 2022-01-13 23:46:39 +00:00
kernel.mk kernel: disable stack validation for external module builds as needed 2022-10-20 09:53:23 +02:00
logo.png include: update logo with better kerning 2021-01-18 09:31:39 -10:00
logo.svg include: update logo with better kerning 2021-01-18 09:31:39 -10:00
meson.mk tools/meson: update to 0.61.4 2022-04-09 15:56:04 +02:00
netfilter.mk kernel: kmod-ipt-ulog: Remove package 2022-08-10 21:36:17 +02:00
nls.mk libiconv-stub: remove 2022-07-15 15:21:44 +02:00
openssl-engine.mk openssl: move engine.mk to INCLUDE_DIR 2022-03-23 23:13:51 +00:00
package-bin.mk build: allow package to be built for all variants 2021-11-15 00:38:46 +01:00
package-defaults.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
package-dumpinfo.mk build: drop ABI version from metadata 2021-02-14 19:41:52 +01:00
package-ipkg.mk tools: build bash on macOS and use it for ipkg-build 2022-01-27 13:38:48 +01:00
package-seccomp.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00
package.mk build: make find_md5 reproducible with AUTOREMOVE 2022-09-30 22:26:51 +02:00
prereq-build.mk include/prereq-build: fix ldconfig-stub symlink on macos and BSD OSs 2022-09-27 16:54:42 +02:00
prereq.mk treewide: drop use of which 2022-01-17 09:14:26 +01:00
quilt.mk quilt.mk: fix typo in the Host section 2022-03-19 16:13:58 +01:00
rootfs.mk build: reduce cleanup binary calls in rootfs.mk 2020-12-05 22:07:00 -10:00
scan.awk build: propagate override information to .packageinfo 2015-02-09 12:09:31 +00:00
scan.mk build: fix find warning with SCAN_EXTRA 2022-06-05 15:38:27 +02:00
shell.sh build: use mkhash to replace various quirky md5sum/openssl calls 2017-01-05 11:09:12 +01:00
subdir.mk build: allow package to be built for all variants 2021-11-15 00:38:46 +01:00
target.mk build: fix issues with targets installed via feeds 2022-09-27 13:41:12 +02:00
toolchain-build.mk toolchain: fix dangling symlink to self in FixupLibdir 2022-07-01 19:17:36 +02:00
toplevel.mk build: export STAGING_DIR_HOST in toplevel make code 2022-09-05 11:17:19 +02:00
trusted-firmware-a.mk trusted-firmware-a.mk: pass DTC path similar to u-boot.mk 2022-08-28 19:01:55 +01:00
u-boot.mk u-boot.mk: add LOCALVERSION (explicitly specify OpenWrt build) 2022-02-28 23:54:52 +01:00
uclibc++.mk uclibc++: remove 2021-10-24 18:20:50 +02:00
unpack.mk include: use cpio from staging dir 2021-02-28 00:09:09 +00:00
verbose.mk verbose.mk: print ERROR messages in non-verbose 2022-02-28 23:52:13 +01:00
version.mk build: use SPDX license tags 2021-02-05 14:54:47 +01:00