ax-percpu 0.4.18

Define and access per-CPU data structures
Documentation
SECTIONS
{
    .percpu.init : ALIGN(8) {
        __PERCPU_INIT_START = .;
        KEEP(*(.percpu.init))
        __PERCPU_INIT_END = .;
    }

    .percpu.align : ALIGN(8) {
        __PERCPU_ALIGN_START = .;
        KEEP(*(.percpu.align))
        __PERCPU_ALIGN_END = .;
        __PERCPU_TEMPLATE_ALIGN_START = .;
        __PERCPU_TEMPLATE_ALIGN_END =
            . + MAX(64, ALIGNOF(.percpu.template));
    }

    .percpu.template : {
        KEEP(*(.percpu.template.header))
        *(SORT_BY_NAME(.percpu.template.storage*))
        KEEP(*(.percpu.template.end))
    }
    ASSERT(!DEFINED(__CPU_LOCAL_AREA_PREFIX) ||
           __CPU_LOCAL_AREA_PREFIX == ADDR(.percpu.template),
           "CPU area prefix must be at template offset zero")
    ASSERT(!DEFINED(__CPU_LOCAL_TEMPLATE_END) ||
           __CPU_LOCAL_TEMPLATE_END + 1 ==
               ADDR(.percpu.template) + SIZEOF(.percpu.template),
           "CPU area end sentinel must follow every template object")
}
INSERT AFTER .data;