835bd1de9c
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl5TfSAACgkQONu9yGCS aT4I8w//SU+w9Tj8Crpt1BI7Lk2AiTGvyZtX0wGd53vzFKGy+Wi1Oba1ybB+xyYw UgMJJpoOgp9gTatRgjDl0vO/7U7vZckigPpog3pSW+xq2JW0kTWGS2z04hUjWKkG W4l3sAGwHRv7MTBbpjECDSHv+6x6ZqlWcVodpkHqLNmGxR0mYuiB6Zu8QuCu1bl0 K0SAlt+yd0laUt2bU3wpEqBwGXHepz+IqsqcYp78sAeytT8ds9ZfPxKv98CvLlXs VLVr87UqZy3Hkl6IWKGrmdhWbTZE+3AyjKnxlA8PovA0ET5xO/IFPLHVhVX+or+5 UFp/1qvacr+EIu8CKvftc2n1CflaRXIn/QNpwdemh94mi/2TqiXiqAUu1EiW56vg /PUH8G72Q26AiWSmD3WRr09ohTu4hfz6fIDKV60qmdVe4AUffLw0SnBEE0VFA3/S lVKZeXKkePeMlHcTyRDQ6+/y49yjfq2exdrjetypOwRa1emHxj/YsfdnEWYfwT53 sikMLjP4XA7v5rsDr9LJTwQL/V/7euu1Hr3lSGpRv8vmePprvfmivTLcY5tgvOTC GZ51Em+CxJ+W4vCJKHuM7i0nUvf2Knn5lBidq4KsvLRUuZ31mSXSfSn4bW6Gl/Jm RZPDC71MqT/FMtfuQLlVNqIw2umC1buNa5SwZ8GhJG6za4gU4FU= =L+e0 -----END PGP SIGNATURE----- Merge 5.4.22 into android-5.4 Changes in 5.4.22 core: Don't skip generic XDP program execution for cloned SKBs enic: prevent waking up stopped tx queues over watchdog reset net/smc: fix leak of kernel memory to user space net: dsa: tag_qca: Make sure there is headroom for tag net/sched: matchall: add missing validation of TCA_MATCHALL_FLAGS net/sched: flower: add missing validation of TCA_FLOWER_FLAGS drm/gma500: Fixup fbdev stolen size usage evaluation ath10k: Fix qmi init error handling wil6210: fix break that is never reached because of zero'ing of a retry counter drm/qxl: Complete exception handling in qxl_device_init() rcu/nocb: Fix dump_tree hierarchy print always active rcu: Fix missed wakeup of exp_wq waiters rcu: Fix data-race due to atomic_t copy-by-value f2fs: preallocate DIO blocks when forcing buffered_io f2fs: call f2fs_balance_fs outside of locked page media: meson: add missing allocation failure check on new_buf clk: meson: pll: Fix by 0 division in __pll_params_to_rate() cpu/hotplug, stop_machine: Fix stop_machine vs hotplug order brcmfmac: Fix memory leak in brcmf_p2p_create_p2pdev() brcmfmac: Fix use after free in brcmf_sdio_readframes() PCI: Fix pci_add_dma_alias() bitmask size drm/amd/display: Map ODM memory correctly when doing ODM combine leds: pca963x: Fix open-drain initialization ext4: fix ext4_dax_read/write inode locking sequence for IOCB_NOWAIT ALSA: ctl: allow TLV read operation for callback type of element in locked case gianfar: Fix TX timestamping with a stacked DSA driver pinctrl: sh-pfc: sh7264: Fix CAN function GPIOs printk: fix exclusive_console replaying drm/mipi_dbi: Fix off-by-one bugs in mipi_dbi_blank() drm/msm/adreno: fix zap vs no-zap handling pxa168fb: Fix the function used to release some memory in an error handling path media: ov5640: Fix check for PLL1 exceeding max allowed rate media: i2c: mt9v032: fix enum mbus codes and frame sizes media: sun4i-csi: Deal with DRAM offset media: sun4i-csi: Fix data sampling polarity handling media: sun4i-csi: Fix [HV]sync polarity handling clk: at91: sam9x60: fix programmable clock prescaler powerpc/powernv/iov: Ensure the pdn for VFs always contains a valid PE number clk: meson: meson8b: make the CCF use the glitch-free mali mux gpio: gpio-grgpio: fix possible sleep-in-atomic-context bugs in grgpio_irq_map/unmap() iommu/vt-d: Fix off-by-one in PASID allocation x86/fpu: Deactivate FPU state after failure during state load char/random: silence a lockdep splat with printk() media: sti: bdisp: fix a possible sleep-in-atomic-context bug in bdisp_device_run() kernel/module: Fix memleak in module_add_modinfo_attrs() IB/core: Let IB core distribute cache update events pinctrl: baytrail: Do not clear IRQ flags on direct-irq enabled pins efi/x86: Map the entire EFI vendor string before copying it MIPS: Loongson: Fix potential NULL dereference in loongson3_platform_init() sparc: Add .exit.data section. net: ethernet: ixp4xx: Standard module init raid6/test: fix a compilation error uio: fix a sleep-in-atomic-context bug in uio_dmem_genirq_irqcontrol() drm/amdgpu/sriov: workaround on rev_id for Navi12 under sriov spi: fsl-lpspi: fix only one cs-gpio working drm/nouveau/nouveau: fix incorrect sizeof on args.src an args.dst usb: gadget: udc: fix possible sleep-in-atomic-context bugs in gr_probe() usb: dwc2: Fix IN FIFO allocation clocksource/drivers/bcm2835_timer: Fix memory leak of timer drm/amd/display: Clear state after exiting fixed active VRR state kselftest: Minimise dependency of get_size on C library interfaces jbd2: clear JBD2_ABORT flag before journal_reset to update log tail info when load journal ext4: fix deadlock allocating bio_post_read_ctx from mempool clk: ti: dra7: fix parent for gmac_clkctrl x86/sysfb: Fix check for bad VRAM size pwm: omap-dmtimer: Simplify error handling udf: Allow writing to 'Rewritable' partitions dmaengine: fsl-qdma: fix duplicated argument to && wan/hdlc_x25: fix skb handling s390/pci: Fix possible deadlock in recover_store() powerpc/iov: Move VF pdev fixup into pcibios_fixup_iov() tracing: Fix tracing_stat return values in error handling paths tracing: Fix very unlikely race of registering two stat tracers ARM: 8952/1: Disable kmemleak on XIP kernels ext4, jbd2: ensure panic when aborting with zero errno ath10k: Correct the DMA direction for management tx buffers rtw88: fix rate mask for 1SS chip brcmfmac: sdio: Fix OOB interrupt initialization on brcm43362 selftests: settings: tests can be in subsubdirs rtc: i2c/spi: Avoid inclusion of REGMAP support when not needed drm/amd/display: Retrain dongles when SINK_COUNT becomes non-zero tracing: Simplify assignment parsing for hist triggers nbd: add a flush_workqueue in nbd_start_device KVM: s390: ENOTSUPP -> EOPNOTSUPP fixups Btrfs: keep pages dirty when using btrfs_writepage_fixup_worker drivers/block/zram/zram_drv.c: fix error return codes not being returned in writeback_store block, bfq: do not plug I/O for bfq_queues with no proc refs kconfig: fix broken dependency in randconfig-generated .config clk: qcom: Don't overwrite 'cfg' in clk_rcg2_dfs_populate_freq() clk: qcom: rcg2: Don't crash if our parent can't be found; return an error drm/amdkfd: Fix a bug in SDMA RLC queue counting under HWS mode bpf, sockhash: Synchronize_rcu before free'ing map drm/amdgpu: remove 4 set but not used variable in amdgpu_atombios_get_connector_info_from_object_table ath10k: correct the tlv len of ath10k_wmi_tlv_op_gen_config_pno_start drm/amdgpu: Ensure ret is always initialized when using SOC15_WAIT_ON_RREG drm/panel: simple: Add Logic PD Type 28 display support arm64: dts: rockchip: Fix NanoPC-T4 cooling maps modules: lockdep: Suppress suspicious RCU usage warning ASoC: intel: sof_rt5682: Add quirk for number of HDMI DAI's ASoC: intel: sof_rt5682: Add support for tgl-max98357a-rt5682 regulator: rk808: Lower log level on optional GPIOs being not available net/wan/fsl_ucc_hdlc: reject muram offsets above 64K NFC: port100: Convert cpu_to_le16(le16_to_cpu(E1) + E2) to use le16_add_cpu(). arm64: dts: allwinner: H6: Add PMU mode arm64: dts: allwinner: H5: Add PMU node arm: dts: allwinner: H3: Add PMU node opp: Free static OPPs on errors while adding them selinux: ensure we cleanup the internal AVC counters on error in avc_insert() arm64: dts: qcom: msm8996: Disable USB2 PHY suspend by core padata: validate cpumask without removed CPU during offline clk: imx: Add correct failure handling for clk based helpers ARM: exynos_defconfig: Bring back explicitly wanted options ARM: dts: imx6: rdu2: Disable WP for USDHC2 and USDHC3 ARM: dts: imx6: rdu2: Limit USBH1 to Full Speed bus: ti-sysc: Implement quirk handling for CLKDM_NOAUTO PCI: iproc: Apply quirk_paxc_bridge() for module as well as built-in media: cx23885: Add support for AVerMedia CE310B PCI: Add generic quirk for increasing D3hot delay PCI: Increase D3 delay for AMD Ryzen5/7 XHCI controllers Revert "nfp: abm: fix memory leak in nfp_abm_u32_knode_replace" gpu/drm: ingenic: Avoid null pointer deference in plane atomic update selftests/net: make so_txtime more robust to timer variance media: v4l2-device.h: Explicitly compare grp{id,mask} to zero in v4l2_device macros reiserfs: Fix spurious unlock in reiserfs_fill_super() error handling samples/bpf: Set -fno-stack-protector when building BPF programs r8169: check that Realtek PHY driver module is loaded fore200e: Fix incorrect checks of NULL pointer dereference netfilter: nft_tunnel: add the missing ERSPAN_VERSION nla_policy ALSA: usx2y: Adjust indentation in snd_usX2Y_hwdep_dsp_status PCI: Add nr_devfns parameter to pci_add_dma_alias() PCI: Add DMA alias quirk for PLX PEX NTB b43legacy: Fix -Wcast-function-type ipw2x00: Fix -Wcast-function-type iwlegacy: Fix -Wcast-function-type rtlwifi: rtl_pci: Fix -Wcast-function-type orinoco: avoid assertion in case of NULL pointer drm/amdgpu: fix KIQ ring test fail in TDR of SRIOV clk: qcom: smd: Add missing bimc clock ACPICA: Disassembler: create buffer fields in ACPI_PARSE_LOAD_PASS1 nfsd: Clone should commit src file metadata too scsi: ufs: Complete pending requests in host reset and restore path scsi: aic7xxx: Adjust indentation in ahc_find_syncrate crypto: inside-secure - add unspecified HAS_IOMEM dependency drm/mediatek: handle events when enabling/disabling crtc clk: renesas: rcar-gen3: Allow changing the RPC[D2] clocks ARM: dts: r8a7779: Add device node for ARM global timer selinux: ensure we cleanup the internal AVC counters on error in avc_update() scsi: lpfc: Fix: Rework setting of fdmi symbolic node name registration arm64: dts: qcom: db845c: Enable ath10k 8bit host-cap quirk iommu/amd: Check feature support bit before accessing MSI capability registers iommu/amd: Only support x2APIC with IVHD type 11h/40h iommu/iova: Silence warnings under memory pressure clk: actually call the clock init before any other callback of the clock dmaengine: Store module owner in dma_device struct dmaengine: imx-sdma: Fix memory leak bpf: Print error message for bpftool cgroup show net: phy: realtek: add logging for the RGMII TX delay configuration crypto: chtls - Fixed memory leak x86/vdso: Provide missing include file PM / devfreq: exynos-ppmu: Fix excessive stack usage PM / devfreq: rk3399_dmc: Add COMPILE_TEST and HAVE_ARM_SMCCC dependency drm/fbdev: Fallback to non tiled mode if all tiles not present pinctrl: sh-pfc: sh7269: Fix CAN function GPIOs reset: uniphier: Add SCSSI reset control for each channel ASoC: soc-topology: fix endianness issues fbdev: fix numbering of fbcon options RDMA/rxe: Fix error type of mmap_offset clk: sunxi-ng: add mux and pll notifiers for A64 CPU clock ALSA: sh: Fix unused variable warnings clk: Use parent node pointer during registration if necessary clk: uniphier: Add SCSSI clock gate for each channel ALSA: hda/realtek - Apply mic mute LED quirk for Dell E7xx laptops, too ALSA: sh: Fix compile warning wrt const net: phy: fixed_phy: fix use-after-free when checking link GPIO tools lib api fs: Fix gcc9 stringop-truncation compilation error vfio/spapr/nvlink2: Skip unpinning pages on error exit ASoC: Intel: sof_rt5682: Ignore the speaker amp when there isn't one. ACPI: button: Add DMI quirk for Razer Blade Stealth 13 late 2019 lid switch iommu/vt-d: Match CPU and IOMMU paging mode iommu/vt-d: Avoid sending invalid page response drm/amdkfd: Fix permissions of hang_hws mlx5: work around high stack usage with gcc RDMA/hns: Avoid printing address of mtt page drm: remove the newline for CRC source name. usb: dwc3: use proper initializers for property entries ARM: dts: stm32: Add power-supply for DSI panel on stm32f469-disco usbip: Fix unsafe unaligned pointer usage udf: Fix free space reporting for metadata and virtual partitions drm/mediatek: Add gamma property according to hardware capability staging: rtl8188: avoid excessive stack usage IB/hfi1: Add software counter for ctxt0 seq drop IB/hfi1: Add RcvShortLengthErrCnt to hfi1stats soc/tegra: fuse: Correct straps' address for older Tegra124 device trees efi/x86: Don't panic or BUG() on non-critical error conditions rcu: Use WRITE_ONCE() for assignments to ->pprev for hlist_nulls Input: edt-ft5x06 - work around first register access error bnxt: Detach page from page pool before sending up the stack x86/nmi: Remove irq_work from the long duration NMI handler wan: ixp4xx_hss: fix compile-testing on 64-bit clocksource: davinci: only enable clockevents once tim34 is initialized arm64: dts: rockchip: fix dwmmc clock name for px30 arm64: dts: rockchip: add reg property to brcmf sub-nodes ARM: dts: rockchip: add reg property to brcmf sub node for rk3188-bqedison2qc ALSA: usb-audio: Add boot quirk for MOTU M Series ASoC: atmel: fix build error with CONFIG_SND_ATMEL_SOC_DMA=m raid6/test: fix a compilation warning tty: synclinkmp: Adjust indentation in several functions tty: synclink_gt: Adjust indentation in several functions misc: xilinx_sdfec: fix xsdfec_poll()'s return type visorbus: fix uninitialized variable access driver core: platform: Prevent resouce overflow from causing infinite loops driver core: Print device when resources present in really_probe() ASoC: SOF: Intel: hda-dai: fix compilation warning in pcm_prepare bpf: Return -EBADRQC for invalid map type in __bpf_tx_xdp_map vme: bridges: reduce stack usage drm/nouveau/secboot/gm20b: initialize pointer in gm20b_secboot_new() drm/nouveau/gr/gk20a,gm200-: add terminators to method lists read from fw drm/nouveau: Fix copy-paste error in nouveau_fence_wait_uevent_handler drm/nouveau/drm/ttm: Remove set but not used variable 'mem' drm/nouveau/fault/gv100-: fix memory leak on module unload dm thin: don't allow changing data device during thin-pool reload gpiolib: Set lockdep class for hierarchical irq domains drm/vmwgfx: prevent memory leak in vmw_cmdbuf_res_add perf/imx_ddr: Fix cpu hotplug state cleanup usb: musb: omap2430: Get rid of musb .set_vbus for omap2430 glue kbuild: remove *.tmp file when filechk fails iommu/arm-smmu-v3: Use WRITE_ONCE() when changing validity of an STE ALSA: usb-audio: unlock on error in probe f2fs: set I_LINKABLE early to avoid wrong access by vfs f2fs: free sysfs kobject scsi: ufs: pass device information to apply_dev_quirks scsi: ufs-mediatek: add apply_dev_quirks variant operation scsi: iscsi: Don't destroy session if there are outstanding connections crypto: essiv - fix AEAD capitalization and preposition use in help text ALSA: usb-audio: add implicit fb quirk for MOTU M Series RDMA/mlx5: Don't fake udata for kernel path arm64: lse: fix LSE atomics with LLVM's integrated assembler arm64: fix alternatives with LLVM's integrated assembler drm/amd/display: fixup DML dependencies EDAC/sifive: Fix return value check in ecc_register() KVM: PPC: Remove set but not used variable 'ra', 'rs', 'rt' arm64: dts: ti: k3-j721e-main: Add missing power-domains for smmu sched/core: Fix size of rq::uclamp initialization sched/topology: Assert non-NUMA topology masks don't (partially) overlap perf/x86/amd: Constrain Large Increment per Cycle events watchdog/softlockup: Enforce that timestamp is valid on boot debugobjects: Fix various data races ASoC: SOF: Intel: hda: Fix SKL dai count regulator: vctrl-regulator: Avoid deadlock getting and setting the voltage f2fs: fix memleak of kobject x86/mm: Fix NX bit clearing issue in kernel_map_pages_in_pgd pwm: omap-dmtimer: Remove PWM chip in .remove before making it unfunctional cmd64x: potential buffer overflow in cmd64x_program_timings() ide: serverworks: potential overflow in svwks_set_pio_mode() pwm: Remove set but not set variable 'pwm' btrfs: fix possible NULL-pointer dereference in integrity checks btrfs: safely advance counter when looking up bio csums btrfs: device stats, log when stats are zeroed module: avoid setting info->name early in case we can fall back to info->mod->name remoteproc: Initialize rproc_class before use regulator: core: Fix exported symbols to the exported GPL version irqchip/mbigen: Set driver .suppress_bind_attrs to avoid remove problems ALSA: hda/hdmi - add retry logic to parse_intel_hdmi() spi: spi-fsl-qspi: Ensure width is respected in spi-mem operations kbuild: use -S instead of -E for precise cc-option test in Kconfig objtool: Fix ARCH=x86_64 build error x86/decoder: Add TEST opcode to Group3-2 s390: adjust -mpacked-stack support check for clang 10 s390/ftrace: generate traced function stack frame driver core: platform: fix u32 greater or equal to zero comparison bpf, btf: Always output invariant hit in pahole DWARF to BTF transform ALSA: hda - Add docking station support for Lenovo Thinkpad T420s sunrpc: Fix potential leaks in sunrpc_cache_unhash() drm/nouveau/mmu: fix comptag memory leak powerpc/sriov: Remove VF eeh_dev state when disabling SR-IOV media: uvcvideo: Add a quirk to force GEO GC6500 Camera bits-per-pixel value btrfs: separate definition of assertion failure handlers btrfs: Fix split-brain handling when changing FSID to metadata uuid bcache: cached_dev_free needs to put the sb page bcache: rework error unwinding in register_bcache bcache: fix use-after-free in register_bcache() iommu/vt-d: Remove unnecessary WARN_ON_ONCE() alarmtimer: Make alarmtimer platform device child of RTC device selftests: bpf: Reset global state between reuseport test runs jbd2: switch to use jbd2_journal_abort() when failed to submit the commit record jbd2: make sure ESHUTDOWN to be recorded in the journal superblock powerpc/pseries/lparcfg: Fix display of Maximum Memory selftests/eeh: Bump EEH wait time to 60s ARM: 8951/1: Fix Kexec compilation issue. ALSA: usb-audio: add quirks for Line6 Helix devices fw>=2.82 hostap: Adjust indentation in prism2_hostapd_add_sta rtw88: fix potential NULL skb access in TX ISR iwlegacy: ensure loop counter addr does not wrap and cause an infinite loop cifs: fix unitialized variable poential problem with network I/O cache lock patch cifs: Fix mount options set in automount cifs: fix NULL dereference in match_prepath bpf: map_seq_next should always increase position index powerpc/mm: Don't log user reads to 0xffffffff ceph: check availability of mds cluster on mount after wait timeout rbd: work around -Wuninitialized warning drm/amd/display: do not allocate display_mode_lib unnecessarily irqchip/gic-v3: Only provision redistributors that are enabled in ACPI drm/nouveau/disp/nv50-: prevent oops when no channel method map provided char: hpet: Fix out-of-bounds read bug ftrace: fpid_next() should increase position index trigger_next should increase position index radeon: insert 10ms sleep in dce5_crtc_load_lut powerpc: Do not consider weak unresolved symbol relocations as bad btrfs: do not do delalloc reservation under page lock ocfs2: make local header paths relative to C files ocfs2: fix a NULL pointer dereference when call ocfs2_update_inode_fsync_trans() lib/scatterlist.c: adjust indentation in __sg_alloc_table reiserfs: prevent NULL pointer dereference in reiserfs_insert_item() bcache: fix memory corruption in bch_cache_accounting_clear() bcache: explicity type cast in bset_bkey_last() bcache: fix incorrect data type usage in btree_flush_write() irqchip/gic-v3-its: Reference to its_invall_cmd descriptor when building INVALL nvmet: Pass lockdep expression to RCU lists nvme-pci: remove nvmeq->tags iwlwifi: mvm: Fix thermal zone registration iwlwifi: mvm: Check the sta is not NULL in iwl_mvm_cfg_he_sta() asm-generic/tlb: add missing CONFIG symbol microblaze: Prevent the overflow of the start brd: check and limit max_part par drm/amdgpu/smu10: fix smu10_get_clock_by_type_with_latency drm/amdgpu/smu10: fix smu10_get_clock_by_type_with_voltage NFS: Fix memory leaks help_next should increase position index i40e: Relax i40e_xsk_wakeup's return value when PF is busy cifs: log warning message (once) if out of disk space virtio_balloon: prevent pfn array overflow fuse: don't overflow LLONG_MAX with end offset mlxsw: spectrum_dpipe: Add missing error path s390/pci: Recover handle in clp_set_pci_fn() drm/amdgpu/display: handle multiple numbers of fclks in dcn_calcs.c (v2) bcache: properly initialize 'path' and 'err' in register_bcache() rtc: Kconfig: select REGMAP_I2C when necessary Linux 5.4.22 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Iaeb3945493ecc81a0ae90ef87b19ceb2caf48164
386 lines
9.1 KiB
Bash
Executable File
386 lines
9.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# link vmlinux
|
|
#
|
|
# vmlinux is linked from the objects selected by $(KBUILD_VMLINUX_OBJS) and
|
|
# $(KBUILD_VMLINUX_LIBS). Most are built-in.a files from top-level directories
|
|
# in the kernel tree, others are specified in arch/$(ARCH)/Makefile.
|
|
# $(KBUILD_VMLINUX_LIBS) are archives which are linked conditionally
|
|
# (not within --whole-archive), and do not require symbol indexes added.
|
|
#
|
|
# vmlinux
|
|
# ^
|
|
# |
|
|
# +--< $(KBUILD_VMLINUX_OBJS)
|
|
# | +--< init/built-in.a drivers/built-in.a mm/built-in.a + more
|
|
# |
|
|
# +--< $(KBUILD_VMLINUX_LIBS)
|
|
# | +--< lib/lib.a + more
|
|
# |
|
|
# +-< ${kallsymso} (see description in KALLSYMS section)
|
|
#
|
|
# vmlinux version (uname -v) cannot be updated during normal
|
|
# descending-into-subdirs phase since we do not yet know if we need to
|
|
# update vmlinux.
|
|
# Therefore this step is delayed until just before final link of vmlinux.
|
|
#
|
|
# System.map is generated to document addresses of all kernel symbols
|
|
|
|
# Error out on error
|
|
set -e
|
|
|
|
# Nice output in kbuild format
|
|
# Will be supressed by "make -s"
|
|
info()
|
|
{
|
|
if [ "${quiet}" != "silent_" ]; then
|
|
printf " %-7s %s\n" "${1}" "${2}"
|
|
fi
|
|
}
|
|
|
|
# If CONFIG_LTO_CLANG is selected, generate a linker script to ensure correct
|
|
# ordering of initcalls, and with CONFIG_MODVERSIONS also enabled, collect the
|
|
# previously generated symbol versions into the same script.
|
|
lto_lds()
|
|
{
|
|
if [ -z "${CONFIG_LTO_CLANG}" ]; then
|
|
return
|
|
fi
|
|
|
|
${srctree}/scripts/generate_initcall_order.pl \
|
|
${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS} \
|
|
> .tmp_lto.lds
|
|
|
|
if [ -n "${CONFIG_MODVERSIONS}" ]; then
|
|
for a in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
|
|
for o in $(${AR} t $a 2>/dev/null); do
|
|
if [ -f ${o}.symversions ]; then
|
|
cat ${o}.symversions >> .tmp_lto.lds
|
|
fi
|
|
done
|
|
done
|
|
fi
|
|
|
|
echo "-T .tmp_lto.lds"
|
|
}
|
|
|
|
# Link of vmlinux.o used for section mismatch analysis
|
|
# ${1} output file
|
|
modpost_link()
|
|
{
|
|
local objects
|
|
|
|
objects="--whole-archive \
|
|
${KBUILD_VMLINUX_OBJS} \
|
|
--no-whole-archive \
|
|
--start-group \
|
|
${KBUILD_VMLINUX_LIBS} \
|
|
--end-group"
|
|
|
|
if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
# This might take a while, so indicate that we're doing
|
|
# an LTO link
|
|
info LTO ${1}
|
|
else
|
|
info LD ${1}
|
|
fi
|
|
|
|
${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(lto_lds) ${objects}
|
|
}
|
|
|
|
# If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until
|
|
# we have compiled LLVM IR to an object file.
|
|
recordmcount()
|
|
{
|
|
if [ -z "${CONFIG_LTO_CLANG}" ]; then
|
|
return
|
|
fi
|
|
|
|
if [ -n "${CONFIG_FTRACE_MCOUNT_RECORD}" ]; then
|
|
scripts/recordmcount ${RECORDMCOUNT_FLAGS} $*
|
|
fi
|
|
}
|
|
|
|
# Link of vmlinux
|
|
# ${1} - output file
|
|
# ${2}, ${3}, ... - optional extra .o files
|
|
vmlinux_link()
|
|
{
|
|
local lds="${objtree}/${KBUILD_LDS}"
|
|
local output=${1}
|
|
local objects
|
|
|
|
info LD ${output}
|
|
|
|
# skip output file argument
|
|
shift
|
|
|
|
if [ "${SRCARCH}" != "um" ]; then
|
|
if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
# Use vmlinux.o instead of performing the slow LTO
|
|
# link again.
|
|
objects="--whole-archive \
|
|
vmlinux.o \
|
|
--no-whole-archive \
|
|
${@}"
|
|
else
|
|
objects="--whole-archive \
|
|
${KBUILD_VMLINUX_OBJS} \
|
|
--no-whole-archive \
|
|
--start-group \
|
|
${KBUILD_VMLINUX_LIBS} \
|
|
--end-group \
|
|
${@}"
|
|
fi
|
|
|
|
${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \
|
|
-o ${output} \
|
|
-T ${lds} ${objects}
|
|
else
|
|
objects="-Wl,--whole-archive \
|
|
${KBUILD_VMLINUX_OBJS} \
|
|
-Wl,--no-whole-archive \
|
|
-Wl,--start-group \
|
|
${KBUILD_VMLINUX_LIBS} \
|
|
-Wl,--end-group \
|
|
${@}"
|
|
|
|
${CC} ${CFLAGS_vmlinux} \
|
|
-o ${output} \
|
|
-Wl,-T,${lds} \
|
|
${objects} \
|
|
-lutil -lrt -lpthread
|
|
rm -f linux
|
|
fi
|
|
}
|
|
|
|
# generate .BTF typeinfo from DWARF debuginfo
|
|
# ${1} - vmlinux image
|
|
# ${2} - file to dump raw BTF data into
|
|
gen_btf()
|
|
{
|
|
local pahole_ver
|
|
local bin_arch
|
|
|
|
if ! [ -x "$(command -v ${PAHOLE})" ]; then
|
|
echo >&2 "BTF: ${1}: pahole (${PAHOLE}) is not available"
|
|
return 1
|
|
fi
|
|
|
|
pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
|
|
if [ "${pahole_ver}" -lt "113" ]; then
|
|
echo >&2 "BTF: ${1}: pahole version $(${PAHOLE} --version) is too old, need at least v1.13"
|
|
return 1
|
|
fi
|
|
|
|
info "BTF" ${2}
|
|
vmlinux_link ${1}
|
|
LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1}
|
|
|
|
# dump .BTF section into raw binary file to link with final vmlinux
|
|
bin_arch=$(LANG=C ${OBJDUMP} -f ${1} | grep architecture | \
|
|
cut -d, -f1 | cut -d' ' -f2)
|
|
bin_format=$(LANG=C ${OBJDUMP} -f ${1} | grep 'file format' | \
|
|
awk '{print $4}')
|
|
${OBJCOPY} --change-section-address .BTF=0 \
|
|
--set-section-flags .BTF=alloc -O binary \
|
|
--only-section=.BTF ${1} .btf.vmlinux.bin
|
|
${OBJCOPY} -I binary -O ${bin_format} -B ${bin_arch} \
|
|
--rename-section .data=.BTF .btf.vmlinux.bin ${2}
|
|
}
|
|
|
|
# Create ${2} .o file with all symbols from the ${1} object file
|
|
kallsyms()
|
|
{
|
|
info KSYM ${2}
|
|
local kallsymopt;
|
|
|
|
if [ -n "${CONFIG_KALLSYMS_ALL}" ]; then
|
|
kallsymopt="${kallsymopt} --all-symbols"
|
|
fi
|
|
|
|
if [ -n "${CONFIG_KALLSYMS_ABSOLUTE_PERCPU}" ]; then
|
|
kallsymopt="${kallsymopt} --absolute-percpu"
|
|
fi
|
|
|
|
if [ -n "${CONFIG_KALLSYMS_BASE_RELATIVE}" ]; then
|
|
kallsymopt="${kallsymopt} --base-relative"
|
|
fi
|
|
|
|
local aflags="${KBUILD_AFLAGS} ${KBUILD_AFLAGS_KERNEL} \
|
|
${NOSTDINC_FLAGS} ${LINUXINCLUDE} ${KBUILD_CPPFLAGS}"
|
|
|
|
local afile="`basename ${2} .o`.S"
|
|
|
|
${NM} -n ${1} | scripts/kallsyms ${kallsymopt} > ${afile}
|
|
${CC} ${aflags} -c -o ${2} ${afile}
|
|
}
|
|
|
|
# Perform one step in kallsyms generation, including temporary linking of
|
|
# vmlinux.
|
|
kallsyms_step()
|
|
{
|
|
kallsymso_prev=${kallsymso}
|
|
kallsymso=.tmp_kallsyms${1}.o
|
|
kallsyms_vmlinux=.tmp_vmlinux${1}
|
|
|
|
vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o}
|
|
kallsyms ${kallsyms_vmlinux} ${kallsymso}
|
|
}
|
|
|
|
# Create map file with all symbols from ${1}
|
|
# See mksymap for additional details
|
|
mksysmap()
|
|
{
|
|
${CONFIG_SHELL} "${srctree}/scripts/mksysmap" ${1} ${2}
|
|
}
|
|
|
|
sortextable()
|
|
{
|
|
${objtree}/scripts/sortextable ${1}
|
|
}
|
|
|
|
# Delete output files in case of error
|
|
cleanup()
|
|
{
|
|
rm -f .btf.*
|
|
rm -f .tmp_System.map
|
|
rm -f .tmp_kallsyms*
|
|
rm -f .tmp_lto.lds
|
|
rm -f .tmp_vmlinux*
|
|
rm -f System.map
|
|
rm -f vmlinux
|
|
rm -f vmlinux.o
|
|
}
|
|
|
|
on_exit()
|
|
{
|
|
if [ $? -ne 0 ]; then
|
|
cleanup
|
|
fi
|
|
}
|
|
trap on_exit EXIT
|
|
|
|
on_signals()
|
|
{
|
|
exit 1
|
|
}
|
|
trap on_signals HUP INT QUIT TERM
|
|
|
|
#
|
|
#
|
|
# Use "make V=1" to debug this script
|
|
case "${KBUILD_VERBOSE}" in
|
|
*1*)
|
|
set -x
|
|
;;
|
|
esac
|
|
|
|
if [ "$1" = "clean" ]; then
|
|
cleanup
|
|
exit 0
|
|
fi
|
|
|
|
# We need access to CONFIG_ symbols
|
|
. include/config/auto.conf
|
|
|
|
# Update version
|
|
info GEN .version
|
|
if [ -r .version ]; then
|
|
VERSION=$(expr 0$(cat .version) + 1)
|
|
echo $VERSION > .version
|
|
else
|
|
rm -f .version
|
|
echo 1 > .version
|
|
fi;
|
|
|
|
# final build of init/
|
|
${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init
|
|
|
|
#link vmlinux.o
|
|
modpost_link vmlinux.o
|
|
|
|
# modpost vmlinux.o to check for section mismatches
|
|
${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
|
|
|
|
if [ -n "${CONFIG_LTO_CLANG}" ]; then
|
|
# Call recordmcount if needed
|
|
recordmcount vmlinux.o
|
|
fi
|
|
|
|
info MODINFO modules.builtin.modinfo
|
|
${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
|
|
|
|
btf_vmlinux_bin_o=""
|
|
if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then
|
|
if gen_btf .tmp_vmlinux.btf .btf.vmlinux.bin.o ; then
|
|
btf_vmlinux_bin_o=.btf.vmlinux.bin.o
|
|
else
|
|
echo >&2 "Failed to generate BTF for vmlinux"
|
|
echo >&2 "Try to disable CONFIG_DEBUG_INFO_BTF"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
kallsymso=""
|
|
kallsymso_prev=""
|
|
kallsyms_vmlinux=""
|
|
if [ -n "${CONFIG_KALLSYMS}" ]; then
|
|
|
|
# kallsyms support
|
|
# Generate section listing all symbols and add it into vmlinux
|
|
# It's a three step process:
|
|
# 1) Link .tmp_vmlinux1 so it has all symbols and sections,
|
|
# but __kallsyms is empty.
|
|
# Running kallsyms on that gives us .tmp_kallsyms1.o with
|
|
# the right size
|
|
# 2) Link .tmp_vmlinux2 so it now has a __kallsyms section of
|
|
# the right size, but due to the added section, some
|
|
# addresses have shifted.
|
|
# From here, we generate a correct .tmp_kallsyms2.o
|
|
# 3) That link may have expanded the kernel image enough that
|
|
# more linker branch stubs / trampolines had to be added, which
|
|
# introduces new names, which further expands kallsyms. Do another
|
|
# pass if that is the case. In theory it's possible this results
|
|
# in even more stubs, but unlikely.
|
|
# KALLSYMS_EXTRA_PASS=1 may also used to debug or work around
|
|
# other bugs.
|
|
# 4) The correct ${kallsymso} is linked into the final vmlinux.
|
|
#
|
|
# a) Verify that the System.map from vmlinux matches the map from
|
|
# ${kallsymso}.
|
|
|
|
kallsyms_step 1
|
|
kallsyms_step 2
|
|
|
|
# step 3
|
|
size1=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso_prev})
|
|
size2=$(${CONFIG_SHELL} "${srctree}/scripts/file-size.sh" ${kallsymso})
|
|
|
|
if [ $size1 -ne $size2 ] || [ -n "${KALLSYMS_EXTRA_PASS}" ]; then
|
|
kallsyms_step 3
|
|
fi
|
|
fi
|
|
|
|
vmlinux_link vmlinux "${kallsymso}" ${btf_vmlinux_bin_o}
|
|
|
|
if [ -n "${CONFIG_BUILDTIME_EXTABLE_SORT}" ]; then
|
|
info SORTEX vmlinux
|
|
sortextable vmlinux
|
|
fi
|
|
|
|
info SYSMAP System.map
|
|
mksysmap vmlinux System.map
|
|
|
|
# step a (see comment above)
|
|
if [ -n "${CONFIG_KALLSYMS}" ]; then
|
|
mksysmap ${kallsyms_vmlinux} .tmp_System.map
|
|
|
|
if ! cmp -s System.map .tmp_System.map; then
|
|
echo >&2 Inconsistent kallsyms data
|
|
echo >&2 Try "make KALLSYMS_EXTRA_PASS=1" as a workaround
|
|
exit 1
|
|
fi
|
|
fi
|