Merge "arm64: defconfig: Enable CONFIG_UNUSED_KSYMS_WHITELIST_ONLY"

This commit is contained in:
qctecmdr 2020-05-13 00:38:16 -07:00 • committed by Gerrit - the friendly Code Review server
commit fc82c60db2
11 changed files with 80961 additions and 116475 deletions

View file

@ -1362,6 +1362,8 @@ all: modules
PHONY += modules
modules: $(if $(KBUILD_BUILTIN),vmlinux) modules.order modules.builtin
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
"$(MAKE) -f $(srctree)/Makefile vmlinux"
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/modules-check.sh

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,87 @@
# List of symbols exported by QCOM in-kernel drivers and used by external DLKMs
# QCOM internal whitelist
[abi_whitelist]
cnss_athdiag_read
cnss_athdiag_write
cnss_auto_resume
cnss_auto_suspend
cnss_device_crashed
cnss_force_collect_rddm
cnss_get_fw_files_for_target
cnss_get_msi_address
cnss_get_msi_irq
cnss_get_platform_cap
cnss_get_soc_info
cnss_get_user_msi_assignment
cnss_get_virt_ramdump_mem
cnss_idle_restart
cnss_idle_shutdown
cnss_lock_pm_sem
cnss_pci_allow_l1
cnss_pci_force_wake_release
cnss_pci_force_wake_request
cnss_pci_is_device_awake
cnss_pci_is_device_down
cnss_pci_is_drv_connected
cnss_pci_link_down
cnss_pci_lock_reg_window
cnss_pci_prevent_l1
cnss_pci_unlock_reg_window
cnss_qmi_send
cnss_qmi_send_get
cnss_qmi_send_put
cnss_release_pm_sem
cnss_remove_pm_qos
cnss_request_bus_bandwidth
cnss_request_pm_qos
cnss_self_recovery
cnss_set_fw_log_mode
cnss_smmu_get_domain
cnss_smmu_map
cnss_wlan_disable
cnss_wlan_enable
cnss_wlan_register_driver
cnss_wlan_unregister_driver
hdcp2_app_comm
hdcp2_close_stream
hdcp2_deinit
hdcp2_force_encryption
hdcp2_init
hdcp2_open_stream
ipa_register_rmnet_ctl_cb
ipa_rmnet_ctl_xmit
ipa_unregister_rmnet_ctl_cb
qmi_rmnet_ps_ind_deregister
qmi_rmnet_ps_ind_register
qmi_rmnet_work_maybe_restart
rmnet_ctl_log
rmnet_ctl_register_client
rmnet_ctl_send_client
rmnet_ctl_unregister_client
rmnet_deliver_skb
rmnet_frag_deliver
rmnet_frag_ipv6_skip_exthdr
rmnet_get_endpoint
rmnet_get_port
rmnet_is_real_dev_registered
rmnet_map_checksum_downlink_packet
rmnet_map_dl_ind_deregister
rmnet_map_dl_ind_register
rmnet_map_flow_command
rmnet_perf_chain_end
rmnet_perf_deag_entry
rmnet_perf_desc_entry
rmnet_recycle_frag_descriptor
rmnet_set_skb_proto
rmnet_shs_skb_entry
socinfo_get_id
socinfo_get_id_string
subsys_bus_type
__tracepoint_rmnet_freq_boost
__tracepoint_rmnet_freq_reset
__tracepoint_rmnet_perf_low
__tracepoint_rmnet_shs_err
__tracepoint_rmnet_shs_high
__tracepoint_rmnet_shs_low
__tracepoint_rmnet_shs_wq_high
__tracepoint_rmnet_shs_wq_low

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,8 @@
CONFIG_ARCH_QCOM=y
CONFIG_ARCH_HOLI=y
CONFIG_TRIM_UNUSED_KSYMS=y
CONFIG_UNUSED_KSYMS_WHITELIST="abi_gki_aarch64_qcom_whitelist abi_gki_aarch64_qcom_internal_whitelist"
CONFIG_UNUSED_KSYMS_WHITELIST_ONLY=y
CONFIG_PINCTRL_HOLI=m
CONFIG_HVC_DCC=y
CONFIG_HVC_DCC_SERIALIZE_SMP=y

View file

@ -1,3 +1,4 @@
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y
CONFIG_IOMMU_DEBUGFS=y
CONFIG_QCOM_LAZY_MAPPING=y

View file

@ -1,6 +1,9 @@
CONFIG_ARCH_QCOM=y
CONFIG_ARCH_LAHAINA=y
CONFIG_ARCH_SHIMA=y
CONFIG_TRIM_UNUSED_KSYMS=y
CONFIG_UNUSED_KSYMS_WHITELIST="abi_gki_aarch64_qcom_whitelist abi_gki_aarch64_qcom_internal_whitelist"
CONFIG_UNUSED_KSYMS_WHITELIST_ONLY=y
CONFIG_HVC_DCC=y
CONFIG_HVC_DCC_SERIALIZE_SMP=y
CONFIG_REGULATOR_STUB=m

View file

@ -1,4 +1,5 @@
CONFIG_LOCALVERSION="-qgki"
# CONFIG_TRIM_UNUSED_KSYMS is not set
CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y
CONFIG_QCOM_LAZY_MAPPING=y
CONFIG_QCOM_SECURE_BUFFER=y

View file

@ -2250,6 +2250,17 @@ config UNUSED_KSYMS_WHITELIST
one per line. The path can be absolute, or relative to the kernel
source tree.
config UNUSED_KSYMS_WHITELIST_ONLY
bool "Export ONLY the symbols that are a part of whitelist"
depends on UNUSED_KSYMS_WHITELIST != ""
help
Keep ONLY the symbols that are defined in the whitelist. The
CONFIG works on top of CONFIG_UNUSED_KSYMS_WHITELIST which takes
whitelist file(s) as its settings, and would export only the
symbols listed in these file(s).
This is mainly used to detect if drivers are using the symbols
outside of the whitelist.
endif # MODULES
config MODULES_TREE_LOOKUP

View file

@ -40,6 +40,11 @@ esac
# Generate a new symbol list file
$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST_ONLY" ] && [ -f "vmlinux" ] ; then
info "WARNING" "CONFIG_UNUSED_KSYMS_WHITELIST_ONLY is enabled. "\
"Non-whitelisted symbols will be undefined!"
fi
# Extract changes between old and new list and touch corresponding
# dependency files.
changed=$(

View file

@ -21,13 +21,18 @@ esac
ksym_wl=/dev/null
if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then
# Use 'eval' to expand the whitelist path and check if it is relative
eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST"
[ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
if [ ! -f "$ksym_wl" ]; then
echo "ERROR: '$ksym_wl' whitelist file not found" >&2
exit 1
fi
for UNUSED_KSYMS_WHITELIST_FILE in $CONFIG_UNUSED_KSYMS_WHITELIST; do
# Use 'eval' to expand the whitelist path and
# check if it is relative
eval ksym_wl="$UNUSED_KSYMS_WHITELIST_FILE"
[ "${ksym_wl}" != "${ksym_wl#/}" ] ||
ksym_wl="$abs_srctree/$ksym_wl"
if [ ! -f "$ksym_wl" ]; then
echo "ERROR: '$ksym_wl' whitelist file not found" >&2
exit 1
fi
ksym_wls="$ksym_wls $ksym_wl"
done
fi
# Generate a new ksym list file with symbols needed by the current
@ -42,7 +47,8 @@ EOT
[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
sed 's/ko$/mod/' $modlist |
xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
cat - "$ksym_wl" |
cat - $ksym_wls |
sed 's/^#.*//;s/^ *//;/[[abi_whitelist]]/g' |
sort -u |
sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
@ -50,3 +56,27 @@ sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
if [ -n "$CONFIG_MODVERSIONS" ]; then
echo "#define __KSYM_module_layout 1" >> "$output_file"
fi
if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST_ONLY" ] && [ -f "vmlinux" ] ; then
syms_from_whitelist="$(mktemp)"
syms_from_vmlinux="$(mktemp)"
cat $ksym_wls |
sed 's/^#.*//;s/^ *//;/[[abi_whitelist]]/g' |
sort -u > "$syms_from_whitelist"
$NM --defined-only vmlinux |
grep "__ksymtab_" |
sed 's/^.*__ksymtab_//' |
sort -u > "$syms_from_vmlinux"
# Forcefully unexport the symbols that are not declared in the whitelist
syms_to_unexport=$(comm -13 "$syms_from_whitelist" "$syms_from_vmlinux")
for sym_to_unexport in $syms_to_unexport; do
sed -i "/^#define __KSYM_${sym_to_unexport} 1/d" \
"$output_file"
done
rm -f "$syms_from_whitelist" "$syms_from_vmlinux"
fi