When creating the kernel page tables we create them all executable to
allow the kernel to boot.
We can reduce the number of 2 blocks or l3 pages created as executable
by looking where the end of the .text section is and only marking
memory up to this as executable (rounded up to the block/page size).
Sponsored by: Arm Ltd