Re: [PATCH v6 09/15] arm64: Move fixmap and kasan page tables to end of kernel image
Kevin Brodsky <[email protected]> Mon, 1 Jun 2026 10:37:03 +0200
| Newsgroups | org.kernel.vger.linux-sh,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-hardening,org.kernel.vger.linux-kernel,org.kvack.linux-mm,org.ozlabs.lists.linuxppc-dev |
|---|---|
| Message-ID | <[email protected]> |
On 29/05/2026 16:47, Ard Biesheuvel wrote:
>>>>> + /* fixmap BSS starts here - preceding data/BSS is omitted from the linear map */
>>>>> + .pgdir.bss (NOLOAD) : ALIGN(PAGE_SIZE) {
>>>> Do we actually need the NOLOAD type here?
>>> Yes, otherwise it is emitted as PROGBITS, resulting in all of BSS to be
>>> emitted into Image.
>> That's rather strange, aren't the .pgdir.bss input sections already
>> NOBITS since __pgtbl_bss is only used on default-initialised globals?
> Not sure why, but the section was PROGBITS not NOBITS before I added the (NOLOAD)
I've had a closer look into this. Similar sections in other
architectures are all named .bss..<something>. If I rename this section
to .bss..pgdir, then indeed the compiler does emit an object file with
that section marked NOBITS:
$ readelf -e out/arch/arm64/mm/fixmap.o | grep bss
[ 4] .bss NOBITS 0000000000000000 0002ac 000000
00 WA 0 0 1
[18] .bss..pgdir NOBITS 0000000000000000 000750 005000
00 WA 0 0 4096
And then the linker does the right thing without having to use NOLOAD.
I was concerned that .bss..pgdir might get caught by BSS_SECTION(), but
it seems that the double dots are meant to prevent exactly that.
- Kevin