/* this is INCLUDEd into the arch-specific ld scripts */

	/* Linker-made tables.  Our tables (e.g. devtab) are 2^6 aligned,
	 * independently of us aligning '.'.  We align '.' to get the right start,
	 * e.g.  __devtabstart. */
	. = ALIGN(64);
	/* We shouldn't have to use PROVIDE, but if we don't, we get the wrong
	 * value for '.'.  And items with empty tables get the KLA (basically 0) */
	.devtab : {
		PROVIDE(__devtabstart = .);
		PROVIDE(devtab = .);
		*(.devtab)
		PROVIDE(__devtabend = .);
	}

	/* Not sure if these need to be aligned to 64 bytes or not.  We had to
	 * change the alignment above for the devtab, so we just changed it here
	 * too, but it's unclear if this is 100% necessary.  In any event, it
	 * doesn't hurt anything, it just wastes some bytes in our binary. */
	. = ALIGN(64);
	.linkerfunc1 : {
		PROVIDE(__linkerfunc1start = .);
		*(.linkerfunc1)
		PROVIDE(__linkerfunc1end = .);
	}

	. = ALIGN(64);
	.linkerfunc2 : {
		PROVIDE(__linkerfunc2start = .);
		*(.linkerfunc2)
		PROVIDE(__linkerfunc2end = .);
	}

	. = ALIGN(64);
	.linkerfunc3 : {
		PROVIDE(__linkerfunc3start = .);
		*(.linkerfunc3)
		PROVIDE(__linkerfunc3end = .);
	}

	. = ALIGN(64);
	.linkerfunc4 : {
		PROVIDE(__linkerfunc4start = .);
		*(.linkerfunc4)
		PROVIDE(__linkerfunc4end = .);
	}
