arm64: Rename page table BSS section to .bss..pgtbl

Rename the .pgdir.bss section to .bss..pgtbl so that the compiler will
notice the leading ".bss" and mark it as NOBITS by default (rather than
PROGBITS, which would take up space in Image binary, forcing all of the
preceding BSS to be emitted into the image as well). This supersedes the
NOLOAD linker directive, which achieves the same thing, and can be
therefore be dropped.

Also, rename .pgdir to .pgtbl to be more generic, as page tables of
various levels will reside here.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
Ard Biesheuvel 2026-06-04 17:11:53 +02:00 committed by Will Deacon
parent 63e0b6a5b6
commit 9c401fa739
5 changed files with 10 additions and 10 deletions

View File

@ -43,4 +43,6 @@
SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN) \
bti c ;
#define __bss_pgtbl __section(".bss..pgtbl") __aligned(PAGE_SIZE)
#endif

View File

@ -13,8 +13,6 @@
#ifndef __ASSEMBLER__
#define __pgtbl_bss __section(".pgdir.bss") __aligned(PAGE_SIZE)
#include <linux/refcount.h>
#include <asm/cpufeature.h>

View File

@ -352,11 +352,11 @@ SECTIONS
BSS_SECTION(SBSS_ALIGN, 0, PAGE_SIZE)
__pi___bss_start = __bss_start;
/* fixmap BSS starts here - preceding data/BSS is omitted from the linear map */
.pgdir.bss (NOLOAD) : ALIGN(PAGE_SIZE) {
*(.pgdir.bss)
/* page table BSS starts here - preceding data/BSS is omitted from the linear map */
.pgtbl : ALIGN(PAGE_SIZE) {
*(.bss..pgtbl)
}
ASSERT(ADDR(.pgdir.bss) == __bss_stop, ".pgdir.bss must follow BSS")
ASSERT(ADDR(.pgtbl) == __bss_stop, ".pgtbl must follow BSS")
. = ALIGN(PAGE_SIZE);
__pi_init_pg_dir = .;

View File

@ -31,9 +31,9 @@ static_assert(NR_BM_PMD_TABLES == 1);
#define BM_PTE_TABLE_IDX(addr) __BM_TABLE_IDX(addr, PMD_SHIFT)
static pte_t bm_pte[NR_BM_PTE_TABLES][PTRS_PER_PTE] __pgtbl_bss;
static pmd_t bm_pmd[PTRS_PER_PMD] __pgtbl_bss __maybe_unused;
static pud_t bm_pud[PTRS_PER_PUD] __pgtbl_bss __maybe_unused;
static pte_t bm_pte[NR_BM_PTE_TABLES][PTRS_PER_PTE] __bss_pgtbl;
static pmd_t bm_pmd[PTRS_PER_PMD] __bss_pgtbl __maybe_unused;
static pud_t bm_pud[PTRS_PER_PUD] __bss_pgtbl __maybe_unused;
static inline pte_t *fixmap_pte(unsigned long addr)
{

View File

@ -214,7 +214,7 @@ asmlinkage void __init kasan_early_init(void)
* shadow pud_t[]/p4d_t[], which could end up getting corrupted
* when the linear region is mapped.
*/
static pte_t tbl[PTRS_PER_PTE] __pgtbl_bss;
static pte_t tbl[PTRS_PER_PTE] __bss_pgtbl;
pgd_t *pgdp = pgd_offset_k(KASAN_SHADOW_START);
set_pgd(pgdp, __pgd(__pa_symbol(tbl) | PGD_TYPE_TABLE));