|
@@ -242,6 +242,12 @@ SECTIONS
|
|
|
__x86_cpu_dev_end = .;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * start address and size of operations which during runtime
|
|
|
+ * can be patched with virtualization friendly instructions or
|
|
|
+ * baremetal native ones. Think page table operations.
|
|
|
+ * Details in paravirt_types.h
|
|
|
+ */
|
|
|
. = ALIGN(8);
|
|
|
.parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) {
|
|
|
__parainstructions = .;
|
|
@@ -249,6 +255,11 @@ SECTIONS
|
|
|
__parainstructions_end = .;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * struct alt_inst entries. From the header (alternative.h):
|
|
|
+ * "Alternative instructions for different CPU types or capabilities"
|
|
|
+ * Think locking instructions on spinlocks.
|
|
|
+ */
|
|
|
. = ALIGN(8);
|
|
|
.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
|
|
|
__alt_instructions = .;
|
|
@@ -256,10 +267,21 @@ SECTIONS
|
|
|
__alt_instructions_end = .;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * And here are the replacement instructions. The linker sticks
|
|
|
+ * them as binary blobs. The .altinstructions has enough data to
|
|
|
+ * get the address and the length of them to patch the kernel safely.
|
|
|
+ */
|
|
|
.altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
|
|
|
*(.altinstr_replacement)
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * struct iommu_table_entry entries are injected in this section.
|
|
|
+ * It is an array of IOMMUs which during run time gets sorted depending
|
|
|
+ * on its dependency order. After rootfs_initcall is complete
|
|
|
+ * this section can be safely removed.
|
|
|
+ */
|
|
|
.iommu_table : AT(ADDR(.iommu_table) - LOAD_OFFSET) {
|
|
|
__iommu_table = .;
|
|
|
*(.iommu_table)
|