From nobody Wed Apr 8 04:56:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E59BBC433FE for ; Sat, 22 Oct 2022 22:54:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229604AbiJVWyE (ORCPT ); Sat, 22 Oct 2022 18:54:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229817AbiJVWyB (ORCPT ); Sat, 22 Oct 2022 18:54:01 -0400 Received: from mail-il1-x135.google.com (mail-il1-x135.google.com [IPv6:2607:f8b0:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A25025852E for ; Sat, 22 Oct 2022 15:53:59 -0700 (PDT) Received: by mail-il1-x135.google.com with SMTP id d14so3496551ilf.2 for ; Sat, 22 Oct 2022 15:53:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hFv6klmLex8GcpwEYKFzL/qYorx4xChHakZG9csO4Oc=; b=pEBLA47FuvZo/x5vJgcq9vHfm10XoF99FDDBkzNFLPs2ki1rBwH44Dpqf5ke2ZdP8n HAGsNkIm7OtO7E18iWfeAOeGwCsxrZhMDYq2EkaVDI9QBNnTtIDxPoc0lm4rDg3CXMIM XunhiZ8XBFnekzPMqo2geYQmdoSfWtSqKTRYJuPNnZLaIq7ZZTktkT/I4ha17gBnIdxG dUcCE09G8TCWH9WgiRwxEXy5zfcjYdAp9j1bgQj45h/T8pHWgoh0hAYylVMSfL3RXUqj Z6DKxZRcXYhfwXuWb5F5oxyKV97OACHStuyOOKb/0D5oAMcFYtTE9/JdFzcsJiZsZYlJ 3yfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hFv6klmLex8GcpwEYKFzL/qYorx4xChHakZG9csO4Oc=; b=udhQMb+A/jG8OtIGZqyurhFKGNj3X9ujVEm+Aao9lOzJry5JztdJXAr5+o07ULxojB aoWciTUWb2vWM+vCfq4fFnqg0vKJixU3IQaN5R8/tQZ7cUEuawAAo/IRw4JklGnwvJpd b76XQKL8TsE1OojU/wsZJP2Jy603vvbxEyBpZ4U4YnaI5LC9No/j9H0lFKrglaM6U5EJ 9jm676jp9muDIwYRXvlPloyiwTpkamLOjJgRHUXm1FGxcruHi+3P4ndVI3rYs2KVTgac 8pWvYvAetXz1Dbg92uwXGUH9CHTGS+pxw2HwJB0M3+4wmxN5bBA5EGyW/PQdgnU+IsEk pPuw== X-Gm-Message-State: ACrzQf3TcRBppDJ5KbFgLJKCo6C+NnmDM383Cr8HWbadLhcCAFPWQxD2 aFEQikTtlUMaBtAaFOpG/0BNPv2HWVA= X-Google-Smtp-Source: AMsMyM778hpoAldrTaCUwBgq/An3851OWQIW9OaWuBJac/K/GI5iHjV+wMES8BWp+DMY7yN8zyRivA== X-Received: by 2002:a05:6e02:1e06:b0:2f9:4efc:eb90 with SMTP id g6-20020a056e021e0600b002f94efceb90mr17300457ila.178.1666479238619; Sat, 22 Oct 2022 15:53:58 -0700 (PDT) Received: from frodo.. (c-73-78-62-130.hsd1.co.comcast.net. [73.78.62.130]) by smtp.googlemail.com with ESMTPSA id y19-20020a056e02119300b002ffcf2e2e05sm534189ili.58.2022.10.22.15.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 15:53:58 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org, jbaron@akamai.com, gregkh@linuxfoundation.org Cc: Jim Cromie , Suren Baghdasaryan , Kent Overstreet Subject: [PATCH 1/2] vmlinux.lds.h: add BOUNDED_SECTION* macros Date: Sat, 22 Oct 2022 16:53:49 -0600 Message-Id: <20221022225351.1406492-2-jim.cromie@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022225351.1406492-1-jim.cromie@gmail.com> References: <20221022225351.1406492-1-jim.cromie@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" vmlinux.lds.h has ~45 occurrences of this general pattern: __start_foo =3D .; KEEP(*(foo)) __stop_foo =3D .; Reduce this pattern to a (group of 4) macros, and use them to reduce linecount. This was inspired by the codetag patchset. no functional change. CC: Suren Baghdasaryan CC: Kent Overstreet Signed-off-by: Jim Cromie --- Shall we bikeshed the names ? --- include/asm-generic/vmlinux.lds.h | 219 +++++++++++------------------- 1 file changed, 79 insertions(+), 140 deletions(-) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index c15de165ec8f..9f6352171f88 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -193,100 +193,99 @@ # endif #endif =20 +#define BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _s_, _e_) \ + _s_##_label_ =3D .; \ + KEEP(*(_sec_)) \ + _e_##_label_ =3D .; + +#define BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _s_, _e_) \ + _label_##_s_ =3D .; \ + KEEP(*(_sec_)) \ + _label_##_e_ =3D .; + +#define BOUNDED_SECTION_BY(_sec_, _label_) \ + BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, __start, __stop) + +#define BOUNDED_SECTION(_sec) BOUNDED_SECTION_BY(_sec, _sec) + #ifdef CONFIG_TRACE_BRANCH_PROFILING -#define LIKELY_PROFILE() __start_annotated_branch_profile =3D .; \ - KEEP(*(_ftrace_annotated_branch)) \ - __stop_annotated_branch_profile =3D .; +#define LIKELY_PROFILE() \ + BOUNDED_SECTION_BY(_ftrace_annotated_branch, _annotated_branch_profile) #else #define LIKELY_PROFILE() #endif =20 #ifdef CONFIG_PROFILE_ALL_BRANCHES -#define BRANCH_PROFILE() __start_branch_profile =3D .; \ - KEEP(*(_ftrace_branch)) \ - __stop_branch_profile =3D .; +#define BRANCH_PROFILE() \ + BOUNDED_SECTION_BY(_ftrace_branch, _branch_profile) #else #define BRANCH_PROFILE() #endif =20 #ifdef CONFIG_KPROBES -#define KPROBE_BLACKLIST() . =3D ALIGN(8); \ - __start_kprobe_blacklist =3D .; \ - KEEP(*(_kprobe_blacklist)) \ - __stop_kprobe_blacklist =3D .; +#define KPROBE_BLACKLIST() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION(_kprobe_blacklist) #else #define KPROBE_BLACKLIST() #endif =20 #ifdef CONFIG_FUNCTION_ERROR_INJECTION -#define ERROR_INJECT_WHITELIST() STRUCT_ALIGN(); \ - __start_error_injection_whitelist =3D .; \ - KEEP(*(_error_injection_whitelist)) \ - __stop_error_injection_whitelist =3D .; +#define ERROR_INJECT_WHITELIST() \ + STRUCT_ALIGN(); \ + BOUNDED_SECTION(_error_injection_whitelist) #else #define ERROR_INJECT_WHITELIST() #endif =20 #ifdef CONFIG_EVENT_TRACING -#define FTRACE_EVENTS() . =3D ALIGN(8); \ - __start_ftrace_events =3D .; \ - KEEP(*(_ftrace_events)) \ - __stop_ftrace_events =3D .; \ - __start_ftrace_eval_maps =3D .; \ - KEEP(*(_ftrace_eval_map)) \ - __stop_ftrace_eval_maps =3D .; +#define FTRACE_EVENTS() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION(_ftrace_events) \ + BOUNDED_SECTION_BY(_ftrace_eval_map, _ftrace_eval_maps) #else #define FTRACE_EVENTS() #endif =20 #ifdef CONFIG_TRACING -#define TRACE_PRINTKS() __start___trace_bprintk_fmt =3D .; \ - KEEP(*(__trace_printk_fmt)) /* Trace_printk fmt' pointer */ \ - __stop___trace_bprintk_fmt =3D .; -#define TRACEPOINT_STR() __start___tracepoint_str =3D .; \ - KEEP(*(__tracepoint_str)) /* Trace_printk fmt' pointer */ \ - __stop___tracepoint_str =3D .; +#define TRACE_PRINTKS() BOUNDED_SECTION_BY(__trace_printk_fmt, ___trace_b= printk_fmt) +#define TRACEPOINT_STR() BOUNDED_SECTION_BY(__tracepoint_str, ___tracepoin= t_str) #else #define TRACE_PRINTKS() #define TRACEPOINT_STR() #endif =20 #ifdef CONFIG_FTRACE_SYSCALLS -#define TRACE_SYSCALLS() . =3D ALIGN(8); \ - __start_syscalls_metadata =3D .; \ - KEEP(*(__syscalls_metadata)) \ - __stop_syscalls_metadata =3D .; +#define TRACE_SYSCALLS() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION_BY(__syscalls_metadata, _syscalls_metadata) #else #define TRACE_SYSCALLS() #endif =20 #ifdef CONFIG_BPF_EVENTS -#define BPF_RAW_TP() STRUCT_ALIGN(); \ - __start__bpf_raw_tp =3D .; \ - KEEP(*(__bpf_raw_tp_map)) \ - __stop__bpf_raw_tp =3D .; +#define BPF_RAW_TP() STRUCT_ALIGN(); \ + BOUNDED_SECTION_BY(__bpf_raw_tp_map, __bpf_raw_tp) #else #define BPF_RAW_TP() #endif =20 #ifdef CONFIG_SERIAL_EARLYCON -#define EARLYCON_TABLE() . =3D ALIGN(8); \ - __earlycon_table =3D .; \ - KEEP(*(__earlycon_table)) \ - __earlycon_table_end =3D .; +#define EARLYCON_TABLE() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION_POST_LABEL(__earlycon_table, __earlycon_table, , _end) #else #define EARLYCON_TABLE() #endif =20 #ifdef CONFIG_SECURITY -#define LSM_TABLE() . =3D ALIGN(8); \ - __start_lsm_info =3D .; \ - KEEP(*(.lsm_info.init)) \ - __end_lsm_info =3D .; -#define EARLY_LSM_TABLE() . =3D ALIGN(8); \ - __start_early_lsm_info =3D .; \ - KEEP(*(.early_lsm_info.init)) \ - __end_early_lsm_info =3D .; +#define LSM_TABLE() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION_PRE_LABEL(.lsm_info.init, _lsm_info, __start, __end) + +#define EARLY_LSM_TABLE() \ + . =3D ALIGN(8); \ + BOUNDED_SECTION_PRE_LABEL(.early_lsm_info.init, _early_lsm_info, __start,= __end) #else #define LSM_TABLE() #define EARLY_LSM_TABLE() @@ -312,9 +311,8 @@ #ifdef CONFIG_ACPI #define ACPI_PROBE_TABLE(name) \ . =3D ALIGN(8); \ - __##name##_acpi_probe_table =3D .; \ - KEEP(*(__##name##_acpi_probe_table)) \ - __##name##_acpi_probe_table_end =3D .; + BOUNDED_SECTION_POST_LABEL(__##name##_acpi_probe_table, \ + __##name##_acpi_probe_table,, _end) #else #define ACPI_PROBE_TABLE(name) #endif @@ -322,9 +320,8 @@ #ifdef CONFIG_THERMAL #define THERMAL_TABLE(name) \ . =3D ALIGN(8); \ - __##name##_thermal_table =3D .; \ - KEEP(*(__##name##_thermal_table)) \ - __##name##_thermal_table_end =3D .; + BOUNDED_SECTION_POST_LABEL(__##name##_thermal_table, \ + __##name##_thermal_table,, _end) #else #define THERMAL_TABLE(name) #endif @@ -353,12 +350,8 @@ *(__tracepoints) \ /* implement dynamic printk debug */ \ . =3D ALIGN(8); \ - __start___dyndbg_classes =3D .; \ - KEEP(*(__dyndbg_classes)) \ - __stop___dyndbg_classes =3D .; \ - __start___dyndbg =3D .; \ - KEEP(*(__dyndbg)) \ - __stop___dyndbg =3D .; \ + BOUNDED_SECTION_BY(__dyndbg_classes, ___dyndbg_classes) \ + BOUNDED_SECTION_BY(__dyndbg, ___dyndbg) \ LIKELY_PROFILE() \ BRANCH_PROFILE() \ TRACE_PRINTKS() \ @@ -401,19 +394,13 @@ =20 #define JUMP_TABLE_DATA \ . =3D ALIGN(8); \ - __start___jump_table =3D .; \ - KEEP(*(__jump_table)) \ - __stop___jump_table =3D .; + BOUNDED_SECTION_BY(__jump_table, ___jump_table) =20 #ifdef CONFIG_HAVE_STATIC_CALL_INLINE #define STATIC_CALL_DATA \ . =3D ALIGN(8); \ - __start_static_call_sites =3D .; \ - KEEP(*(.static_call_sites)) \ - __stop_static_call_sites =3D .; \ - __start_static_call_tramp_key =3D .; \ - KEEP(*(.static_call_tramp_key)) \ - __stop_static_call_tramp_key =3D .; + BOUNDED_SECTION_BY(.static_call_sites, _static_call_sites) \ + BOUNDED_SECTION_BY(.static_call_tramp_key, _static_call_tramp_key) #else #define STATIC_CALL_DATA #endif @@ -439,9 +426,7 @@ #ifdef CONFIG_ARCH_USES_CFI_TRAPS #define KCFI_TRAPS \ __kcfi_traps : AT(ADDR(__kcfi_traps) - LOAD_OFFSET) { \ - __start___kcfi_traps =3D .; \ - KEEP(*(.kcfi_traps)) \ - __stop___kcfi_traps =3D .; \ + BOUNDED_SECTION_BY(.kcfi_traps, ___kcfi_traps) \ } #else #define KCFI_TRAPS @@ -459,9 +444,7 @@ SCHED_DATA \ RO_AFTER_INIT_DATA /* Read only after init */ \ . =3D ALIGN(8); \ - __start___tracepoints_ptrs =3D .; \ - KEEP(*(__tracepoints_ptrs)) /* Tracepoints: pointer array */ \ - __stop___tracepoints_ptrs =3D .; \ + BOUNDED_SECTION_BY(__tracepoints_ptrs, ___tracepoints_ptrs) \ *(__tracepoints_strings)/* Tracepoints: strings */ \ } \ \ @@ -471,30 +454,14 @@ \ /* PCI quirks */ \ .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \ - __start_pci_fixups_early =3D .; \ - KEEP(*(.pci_fixup_early)) \ - __end_pci_fixups_early =3D .; \ - __start_pci_fixups_header =3D .; \ - KEEP(*(.pci_fixup_header)) \ - __end_pci_fixups_header =3D .; \ - __start_pci_fixups_final =3D .; \ - KEEP(*(.pci_fixup_final)) \ - __end_pci_fixups_final =3D .; \ - __start_pci_fixups_enable =3D .; \ - KEEP(*(.pci_fixup_enable)) \ - __end_pci_fixups_enable =3D .; \ - __start_pci_fixups_resume =3D .; \ - KEEP(*(.pci_fixup_resume)) \ - __end_pci_fixups_resume =3D .; \ - __start_pci_fixups_resume_early =3D .; \ - KEEP(*(.pci_fixup_resume_early)) \ - __end_pci_fixups_resume_early =3D .; \ - __start_pci_fixups_suspend =3D .; \ - KEEP(*(.pci_fixup_suspend)) \ - __end_pci_fixups_suspend =3D .; \ - __start_pci_fixups_suspend_late =3D .; \ - KEEP(*(.pci_fixup_suspend_late)) \ - __end_pci_fixups_suspend_late =3D .; \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_early, _pci_fixups_early, __start= , __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_header, _pci_fixups_header, __start= , __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_final, _pci_fixups_final, __start= , __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_enable, _pci_fixups_enable, __start= , __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_resume, _pci_fixups_resume, __start= , __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_suspend, _pci_fixups_suspend, __sta= rt, __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_resume_early, _pci_fixups_resume_ea= rly, __start, __end) \ + BOUNDED_SECTION_PRE_LABEL(.pci_fixup_suspend_late, _pci_fixups_suspend_l= ate, __start, __end) \ } \ \ FW_LOADER_BUILT_IN_DATA \ @@ -544,16 +511,12 @@ \ /* Built-in module parameters. */ \ __param : AT(ADDR(__param) - LOAD_OFFSET) { \ - __start___param =3D .; \ - KEEP(*(__param)) \ - __stop___param =3D .; \ + BOUNDED_SECTION_BY(__param, ___param) \ } \ \ /* Built-in module versions. */ \ __modver : AT(ADDR(__modver) - LOAD_OFFSET) { \ - __start___modver =3D .; \ - KEEP(*(__modver)) \ - __stop___modver =3D .; \ + BOUNDED_SECTION_BY(__modver, ___modver) \ } \ \ KCFI_TRAPS \ @@ -663,9 +626,7 @@ #define EXCEPTION_TABLE(align) \ . =3D ALIGN(align); \ __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \ - __start___ex_table =3D .; \ - KEEP(*(__ex_table)) \ - __stop___ex_table =3D .; \ + BOUNDED_SECTION_BY(__ex_table, ___ex_table) \ } =20 /* @@ -674,9 +635,7 @@ #ifdef CONFIG_DEBUG_INFO_BTF #define BTF \ .BTF : AT(ADDR(.BTF) - LOAD_OFFSET) { \ - __start_BTF =3D .; \ - KEEP(*(.BTF)) \ - __stop_BTF =3D .; \ + BOUNDED_SECTION_BY(.BTF, _BTF) \ } \ . =3D ALIGN(4); \ .BTF_ids : AT(ADDR(.BTF_ids) - LOAD_OFFSET) { \ @@ -853,9 +812,7 @@ #define BUG_TABLE \ . =3D ALIGN(8); \ __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ - __start___bug_table =3D .; \ - KEEP(*(__bug_table)) \ - __stop___bug_table =3D .; \ + BOUNDED_SECTION_BY(__bug_table, ___bug_table) \ } #else #define BUG_TABLE @@ -865,15 +822,11 @@ #define ORC_UNWIND_TABLE \ . =3D ALIGN(4); \ .orc_unwind_ip : AT(ADDR(.orc_unwind_ip) - LOAD_OFFSET) { \ - __start_orc_unwind_ip =3D .; \ - KEEP(*(.orc_unwind_ip)) \ - __stop_orc_unwind_ip =3D .; \ + BOUNDED_SECTION_BY(.orc_unwind_ip, _orc_unwind_ip) \ } \ . =3D ALIGN(2); \ .orc_unwind : AT(ADDR(.orc_unwind) - LOAD_OFFSET) { \ - __start_orc_unwind =3D .; \ - KEEP(*(.orc_unwind)) \ - __stop_orc_unwind =3D .; \ + BOUNDED_SECTION_BY(.orc_unwind, _orc_unwind) \ } \ text_size =3D _etext - _stext; \ . =3D ALIGN(4); \ @@ -891,9 +844,7 @@ #ifdef CONFIG_FW_LOADER #define FW_LOADER_BUILT_IN_DATA \ .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) ALIGN(8) { \ - __start_builtin_fw =3D .; \ - KEEP(*(.builtin_fw)) \ - __end_builtin_fw =3D .; \ + BOUNDED_SECTION_PRE_LABEL(.builtin_fw, _builtin_fw, __start, __end) \ } #else #define FW_LOADER_BUILT_IN_DATA @@ -903,9 +854,7 @@ #define TRACEDATA \ . =3D ALIGN(4); \ .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ - __tracedata_start =3D .; \ - KEEP(*(.tracedata)) \ - __tracedata_end =3D .; \ + BOUNDED_SECTION_POST_LABEL(.tracedata, __tracedata, _start, _end) \ } #else #define TRACEDATA @@ -914,9 +863,7 @@ #ifdef CONFIG_PRINTK_INDEX #define PRINTK_INDEX \ .printk_index : AT(ADDR(.printk_index) - LOAD_OFFSET) { \ - __start_printk_index =3D .; \ - *(.printk_index) \ - __stop_printk_index =3D .; \ + BOUNDED_SECTION_BY(.printk_index, _printk_index) \ } #else #define PRINTK_INDEX @@ -924,17 +871,13 @@ =20 #define NOTES \ .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ - __start_notes =3D .; \ - KEEP(*(.note.*)) \ - __stop_notes =3D .; \ + BOUNDED_SECTION_BY(.note.*, _notes) \ } NOTES_HEADERS \ NOTES_HEADERS_RESTORE =20 #define INIT_SETUP(initsetup_align) \ . =3D ALIGN(initsetup_align); \ - __setup_start =3D .; \ - KEEP(*(.init.setup)) \ - __setup_end =3D .; + BOUNDED_SECTION_POST_LABEL(.init.setup, __setup, _start, _end) =20 #define INIT_CALLS_LEVEL(level) \ __initcall##level##_start =3D .; \ @@ -956,16 +899,12 @@ __initcall_end =3D .; =20 #define CON_INITCALL \ - __con_initcall_start =3D .; \ - KEEP(*(.con_initcall.init)) \ - __con_initcall_end =3D .; + BOUNDED_SECTION_POST_LABEL(.con_initcall.init, __con_initcall, _start, _e= nd) =20 /* Alignment must be consistent with (kunit_suite *) in include/kunit/test= .h */ #define KUNIT_TABLE() \ . =3D ALIGN(8); \ - __kunit_suites_start =3D .; \ - KEEP(*(.kunit_test_suites)) \ - __kunit_suites_end =3D .; + BOUNDED_SECTION_POST_LABEL(.kunit_test_suites, __kunit_suites, _start, _= end) =20 #ifdef CONFIG_BLK_DEV_INITRD #define INIT_RAM_FS \ --=20 2.37.3 From nobody Wed Apr 8 04:56:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4E18C433FE for ; Sat, 22 Oct 2022 22:54:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229887AbiJVWyI (ORCPT ); Sat, 22 Oct 2022 18:54:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229519AbiJVWyC (ORCPT ); Sat, 22 Oct 2022 18:54:02 -0400 Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A99E80F77 for ; Sat, 22 Oct 2022 15:54:01 -0700 (PDT) Received: by mail-io1-xd31.google.com with SMTP id b79so5099999iof.5 for ; Sat, 22 Oct 2022 15:54:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ORhdzvQEaSdepN8FuCdBMVAeS8RbuY3+hyzMb2MUCmU=; b=cmegG/cQDs9JlhTYb5B/1Yps85vDQaZe03tGZYWlnQUdwwlRGUTFrOs5tyvcOTGvEM c6V+nXWdwsbn4a5bPYs99R6i792gXqvKN7u1Ehni4ivH4PEkkUmA8XKcP+tzRru7LdLU sRkoyXnem6Msk2BBa9c56OlWsevI160fSBVhWuQEAyLQixWEkdz/rEo7PXJzzF9v2yOy z1sd9A+cyB7ikWu2SB1rJC+bcqGFwBndlh4SKlNui9krsVp7KwZ7sJeD823B94NXEkeg TCXvNxfAUP/iU6qv5oxr0n9tauN7rU4mYby6QhNT6EIf9zc4+7BpgODEBfuqeO1dP45U zUlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ORhdzvQEaSdepN8FuCdBMVAeS8RbuY3+hyzMb2MUCmU=; b=ymBkUSpSKrd+VN0eMmLSBDaqe2bwtlEE+daHDv1/nRwuslimNUB7R7/T7AT36mt7Op aEN21Ee9+x8z8On7UVQPCIIX9V9NuG31ulSbPXFRFxCO3y/ZudK7GG0C7NQETvPh3ydz WQ5cyw20N8TjKgXoJS450NzHZ8i4IRaBzpsDglqmcnArgch0ZKadl6DncvUFrGEDL4CI gH8n4WDTCs/tqhAg0mWDIZcZiBfJ3++Kj8dVkBgm5rNEO5JIqAV9eiwjj2CdUz6lvpx4 LL+JCWEuVZGTLfrgGb1H5wQEK4zWTlBQz+K7ge0o6ThgX0TPWh+BQ+y4MncnnsZ+8YT+ w2sg== X-Gm-Message-State: ACrzQf1NjMFIK5NKR91CftdoZuzhF8Qxuj0x2Bds1Xi/iMbBYU54pvXV j6kcSVm9PZjrCJ+2thWYtR4swgzTe8c= X-Google-Smtp-Source: AMsMyM66MKZKPBiSW21ttvdHgWgCjqGGvcoRwzHjguU0+YNF1b6g6A3rjfKRqhOXuUIXWCdSTK4UJA== X-Received: by 2002:a05:6638:16ce:b0:363:b8b5:8d6b with SMTP id g14-20020a05663816ce00b00363b8b58d6bmr19093815jat.194.1666479240444; Sat, 22 Oct 2022 15:54:00 -0700 (PDT) Received: from frodo.. (c-73-78-62-130.hsd1.co.comcast.net. [73.78.62.130]) by smtp.googlemail.com with ESMTPSA id y19-20020a056e02119300b002ffcf2e2e05sm534189ili.58.2022.10.22.15.53.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 15:53:59 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org, jbaron@akamai.com, gregkh@linuxfoundation.org Cc: Jim Cromie Subject: [PATCH 2/2] vmlinux.lds.h: add a KEEP .gnu.linkonce.##_name into BOUNDED_SECTION Date: Sat, 22 Oct 2022 16:53:50 -0600 Message-Id: <20221022225351.1406492-3-jim.cromie@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022225351.1406492-1-jim.cromie@gmail.com> References: <20221022225351.1406492-1-jim.cromie@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Extend recently added BOUNDED_SECTION(_name) macro by adding a KEEP(*(.gnu.linkonce.##_name)) before the KEEP(*(_name)). This does nothing by itself, vmlinux is the same before and after this patch. But if a developer adds a .gnu.linkonce.foo record, that record is placed in the front of the section, where it can be used as a header for the table. The intent is to create an up-link to another organizing struct, from where related tables can be referenced. And since every item in a table has a known offset from its header, that same offset can be used to fetch records from the related tables. By itself, this doesnt gain much, unless maybe the pattern of access is to scan 1 or 2 fields in each fat record, but with 2 16 bit .map* fields added, we could de-duplicate 2 related tables. The use case here is struct _ddebug, which has 3 pointers (function, file, module) with substantial repetition; respectively 53%, 90%, and the module column is fully recoverable after dynamic_debug_init() splits the table into a linked list of "module" chunks. On a DYNAMIC_DEBUG=3Dy kernel with 5k pr_debugs, the memory savings should be ~100 KiB. Signed-off-by: Jim Cromie --- ? does this need a new name ? HEADERED_SECTION ? --- include/asm-generic/vmlinux.lds.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index 9f6352171f88..b3ca56ac163f 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -195,11 +195,13 @@ =20 #define BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _s_, _e_) \ _s_##_label_ =3D .; \ + KEEP(*(.gnu.linkonce.##_sec_)) \ KEEP(*(_sec_)) \ _e_##_label_ =3D .; =20 #define BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _s_, _e_) \ _label_##_s_ =3D .; \ + KEEP(*(.gnu.linkonce.##_sec_)) \ KEEP(*(_sec_)) \ _label_##_e_ =3D .; =20 --=20 2.37.3 From nobody Wed Apr 8 04:56:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA1B8C04A95 for ; Sat, 22 Oct 2022 22:54:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229678AbiJVWy1 (ORCPT ); Sat, 22 Oct 2022 18:54:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229908AbiJVWyQ (ORCPT ); Sat, 22 Oct 2022 18:54:16 -0400 Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85DB3EA9E8 for ; Sat, 22 Oct 2022 15:54:11 -0700 (PDT) Received: by mail-io1-xd31.google.com with SMTP id 187so5075766iov.10 for ; Sat, 22 Oct 2022 15:54:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ORhdzvQEaSdepN8FuCdBMVAeS8RbuY3+hyzMb2MUCmU=; b=ptlBFuNh0CJbHnMl5CumWjpfc0nWpUgZ4XEP1PmmV/ultNfezZtEFUw7AChzN+ItNN wxEVFv3i5yU5MRYSKVoAKRNGW9NsHkN91PypPczHUDGNBpbnQYWVGd4DQarAaKRct5Zh SXtKFv2vz0OyM38mOkzvjBaQ1YUiiwyu6dX03MkUFhy4eCefs738RJYGJkr9IKXVUYl0 kzk9RkuHNjMyk2fqwU1XuygbijL8iQjQfJobb0nqFrAS1fcVrHdycK7q8+Vh+QIUy59q dT5/vSbHWu/2AWcbwjnHdqekTl6Kg9CVbPWNEVFJLVsZObJZSLv1UEzxJ4ZcPsr2NuTI RrCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ORhdzvQEaSdepN8FuCdBMVAeS8RbuY3+hyzMb2MUCmU=; b=cKRTqnRlOWQotHjIkY7VUOmVHfGg4KoqwCF46xCGnNoQRTrq0FZNaGTK71TY9Ge2eg gUAJTqrHTcdY7imfNHoDYjUjRPe4ApKIt2T8cU1gL3GThYqTO2d3H+0k5wJ44hrNFGs6 b6I/I60jxS6ZeLXRjk+obIxiN++SynPGwAkLCFCuMBpql2fifoPEQ9RHd9WSWdphg9WG 4YqjsZ752548QyfgohZIEJQQu/u2UVGHLG9Hrs390h6V7TWOyrGx3AwQ28EP9guUTh1j I+RFPlA9LpRg+7FiUrhRo9ZNqERYgt7bFaXXu3LD7YVghJznCM9LE3it3nrs0OxStcoq VpJA== X-Gm-Message-State: ACrzQf3JoKsx9gXJKXXr2Tf6POGIFVt/rjCTKleRU213Rju9dzZXip3H GF0/K7EQZM9rbEQFTJ9d5iRlf+Ulwfs= X-Google-Smtp-Source: AMsMyM6LZYOGHckuR/62UDILXyIoTy88xXcHeQ42CxC1naP5vKcUWFWGnCcc+yiuY/MCRfxUz+hpmg== X-Received: by 2002:a05:6638:378d:b0:363:b8c7:13cc with SMTP id w13-20020a056638378d00b00363b8c713ccmr19383480jal.114.1666479249763; Sat, 22 Oct 2022 15:54:09 -0700 (PDT) Received: from frodo.. (c-73-78-62-130.hsd1.co.comcast.net. [73.78.62.130]) by smtp.googlemail.com with ESMTPSA id y19-20020a056e02119300b002ffcf2e2e05sm534189ili.58.2022.10.22.15.54.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 15:54:09 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org, jbaron@akamai.com, gregkh@linuxfoundation.org Cc: Jim Cromie Subject: [PATCH 2/2] vmlinux.lds.h: place optional header space in BOUNDED_SECTION Date: Sat, 22 Oct 2022 16:53:51 -0600 Message-Id: <20221022225351.1406492-4-jim.cromie@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022225351.1406492-1-jim.cromie@gmail.com> References: <20221022225351.1406492-1-jim.cromie@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Extend recently added BOUNDED_SECTION(_name) macro by adding a KEEP(*(.gnu.linkonce.##_name)) before the KEEP(*(_name)). This does nothing by itself, vmlinux is the same before and after this patch. But if a developer adds a .gnu.linkonce.foo record, that record is placed in the front of the section, where it can be used as a header for the table. The intent is to create an up-link to another organizing struct, from where related tables can be referenced. And since every item in a table has a known offset from its header, that same offset can be used to fetch records from the related tables. By itself, this doesnt gain much, unless maybe the pattern of access is to scan 1 or 2 fields in each fat record, but with 2 16 bit .map* fields added, we could de-duplicate 2 related tables. The use case here is struct _ddebug, which has 3 pointers (function, file, module) with substantial repetition; respectively 53%, 90%, and the module column is fully recoverable after dynamic_debug_init() splits the table into a linked list of "module" chunks. On a DYNAMIC_DEBUG=3Dy kernel with 5k pr_debugs, the memory savings should be ~100 KiB. Signed-off-by: Jim Cromie --- ? does this need a new name ? HEADERED_SECTION ? --- include/asm-generic/vmlinux.lds.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinu= x.lds.h index 9f6352171f88..b3ca56ac163f 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -195,11 +195,13 @@ =20 #define BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _s_, _e_) \ _s_##_label_ =3D .; \ + KEEP(*(.gnu.linkonce.##_sec_)) \ KEEP(*(_sec_)) \ _e_##_label_ =3D .; =20 #define BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _s_, _e_) \ _label_##_s_ =3D .; \ + KEEP(*(.gnu.linkonce.##_sec_)) \ KEEP(*(_sec_)) \ _label_##_e_ =3D .; =20 --=20 2.37.3