/* * The following skip makes sure the trap table in ttable.S is aligned * on a 32K boundary as required by the v9 specs for TBA register. * * We align to a 32K boundary, then we have the 32K kernel TSB,- * then the 32K aligned trap table.+ * the 64K kernel 4MB TSB, and then the 32K aligned trap table. */ 1: .skip 0x4000 + _start - 1b

-! 0x0000000000408000-+ .globl swapper_4m_tsb+swapper_4m_tsb:+ .skip (64 * 1024)++! 0x0000000000420000++ /* Some care needs to be exercised if you try to move the+ * location of the trap table relative to other things. For+ * one thing there are br* instructions in some of the+ * trap table entires which branch back to code in ktlb.S+ * Those instructions can only handle a signed 16-bit+ * displacement.+ *+ * There is a binutils bug (bugzilla #4558) which causes+ * the relocation overflow checks for such instructions to+ * not be done correctly. So bintuils will not notice the+ * error and will instead write junk into the relocation and+ * you'll have an unbootable kernel.+ */ #include "ttable.S"

#ifndef CONFIG_DEBUG_PAGEALLOC-/* A special kernel TSB for 4MB and 256MB linear mappings. */-struct tsb swapper_4m_tsb[KERNEL_TSB4M_NENTRIES];+/* A special kernel TSB for 4MB and 256MB linear mappings.+ * Space is allocated for this right after the trap table+ * in arch/sparc64/kernel/head.S+ */+extern struct tsb swapper_4m_tsb[KERNEL_TSB4M_NENTRIES]; #endif