When creating the kernel page tables we create them all executable to
allow the kernel to boot.
We can reduce the number of l2 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).
Memory after the .text is marked as execute never as it will be data.
Sponsored by: Arm Ltd