|
@@ -430,12 +430,51 @@
|
|
*(.initcall7.init) \
|
|
*(.initcall7.init) \
|
|
*(.initcall7s.init)
|
|
*(.initcall7s.init)
|
|
|
|
|
|
-#define PERCPU(align) \
|
|
|
|
- . = ALIGN(align); \
|
|
|
|
- VMLINUX_SYMBOL(__per_cpu_start) = .; \
|
|
|
|
- .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
|
|
|
|
|
|
+#define PERCPU_PROLOG(vaddr) \
|
|
|
|
+ VMLINUX_SYMBOL(__per_cpu_load) = .; \
|
|
|
|
+ .data.percpu vaddr : AT(__per_cpu_load - LOAD_OFFSET) { \
|
|
|
|
+ VMLINUX_SYMBOL(__per_cpu_start) = .;
|
|
|
|
+
|
|
|
|
+#define PERCPU_EPILOG(phdr) \
|
|
|
|
+ VMLINUX_SYMBOL(__per_cpu_end) = .; \
|
|
|
|
+ } phdr \
|
|
|
|
+ . = __per_cpu_load + SIZEOF(.data.percpu);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * PERCPU_VADDR - define output section for percpu area
|
|
|
|
+ * @vaddr: explicit base address (optional)
|
|
|
|
+ * @phdr: destination PHDR (optional)
|
|
|
|
+ *
|
|
|
|
+ * Macro which expands to output section for percpu area. If @vaddr
|
|
|
|
+ * is not blank, it specifies explicit base address and all percpu
|
|
|
|
+ * symbols will be offset from the given address. If blank, @vaddr
|
|
|
|
+ * always equals @laddr + LOAD_OFFSET.
|
|
|
|
+ *
|
|
|
|
+ * @phdr defines the output PHDR to use if not blank. Be warned that
|
|
|
|
+ * output PHDR is sticky. If @phdr is specified, the next output
|
|
|
|
+ * section in the linker script will go there too. @phdr should have
|
|
|
|
+ * a leading colon.
|
|
|
|
+ *
|
|
|
|
+ * This macro defines three symbols, __per_cpu_load, __per_cpu_start
|
|
|
|
+ * and __per_cpu_end. The first one is the vaddr of loaded percpu
|
|
|
|
+ * init data. __per_cpu_start equals @vaddr and __per_cpu_end is the
|
|
|
|
+ * end offset.
|
|
|
|
+ */
|
|
|
|
+#define PERCPU_VADDR(vaddr, phdr) \
|
|
|
|
+ PERCPU_PROLOG(vaddr) \
|
|
*(.data.percpu.page_aligned) \
|
|
*(.data.percpu.page_aligned) \
|
|
*(.data.percpu) \
|
|
*(.data.percpu) \
|
|
*(.data.percpu.shared_aligned) \
|
|
*(.data.percpu.shared_aligned) \
|
|
- } \
|
|
|
|
- VMLINUX_SYMBOL(__per_cpu_end) = .;
|
|
|
|
|
|
+ PERCPU_EPILOG(phdr)
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * PERCPU - define output section for percpu area, simple version
|
|
|
|
+ * @align: required alignment
|
|
|
|
+ *
|
|
|
|
+ * Align to @align and outputs output section for percpu area. This
|
|
|
|
+ * macro doesn't maniuplate @vaddr or @phdr and __per_cpu_load and
|
|
|
|
+ * __per_cpu_start will be identical.
|
|
|
|
+ */
|
|
|
|
+#define PERCPU(align) \
|
|
|
|
+ . = ALIGN(align); \
|
|
|
|
+ PERCPU_VADDR( , )
|