initconst adjustments
- add .init.rodata to INIT_DATA, and group all initconst flavors together - move strings generated from __setup_param() into .init.rodata - add .*init.rodata to modpost's sets of init sections - make modpost warn about references between meminit and cpuinit as well as memexit and cpuexit sections (as CPU and memory hotplug are independently selectable features) Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
Родитель
6d9923219c
Коммит
fd6c3a8dc4
|
@ -336,10 +336,11 @@
|
|||
#define INIT_DATA \
|
||||
*(.init.data) \
|
||||
DEV_DISCARD(init.data) \
|
||||
DEV_DISCARD(init.rodata) \
|
||||
CPU_DISCARD(init.data) \
|
||||
CPU_DISCARD(init.rodata) \
|
||||
MEM_DISCARD(init.data) \
|
||||
*(.init.rodata) \
|
||||
DEV_DISCARD(init.rodata) \
|
||||
CPU_DISCARD(init.rodata) \
|
||||
MEM_DISCARD(init.rodata)
|
||||
|
||||
#define INIT_TEXT \
|
||||
|
|
|
@ -225,7 +225,8 @@ struct obs_kernel_param {
|
|||
* obs_kernel_param "array" too far apart in .init.setup.
|
||||
*/
|
||||
#define __setup_param(str, unique_id, fn, early) \
|
||||
static char __setup_str_##unique_id[] __initdata __aligned(1) = str; \
|
||||
static const char __setup_str_##unique_id[] __initconst \
|
||||
__aligned(1) = str; \
|
||||
static struct obs_kernel_param __setup_##unique_id \
|
||||
__used __section(.init.setup) \
|
||||
__attribute__((aligned((sizeof(long))))) \
|
||||
|
|
|
@ -763,6 +763,8 @@ static void check_section(const char *modname, struct elf_info *elf,
|
|||
|
||||
|
||||
#define ALL_INIT_DATA_SECTIONS \
|
||||
".init.setup$", ".init.rodata$", \
|
||||
".devinit.rodata$", ".cpuinit.rodata$", ".meminit.rodata$" \
|
||||
".init.data$", ".devinit.data$", ".cpuinit.data$", ".meminit.data$"
|
||||
#define ALL_EXIT_DATA_SECTIONS \
|
||||
".exit.data$", ".devexit.data$", ".cpuexit.data$", ".memexit.data$"
|
||||
|
@ -772,21 +774,23 @@ static void check_section(const char *modname, struct elf_info *elf,
|
|||
#define ALL_EXIT_TEXT_SECTIONS \
|
||||
".exit.text$", ".devexit.text$", ".cpuexit.text$", ".memexit.text$"
|
||||
|
||||
#define ALL_INIT_SECTIONS ALL_INIT_DATA_SECTIONS, ALL_INIT_TEXT_SECTIONS
|
||||
#define ALL_EXIT_SECTIONS ALL_EXIT_DATA_SECTIONS, ALL_EXIT_TEXT_SECTIONS
|
||||
#define ALL_INIT_SECTIONS INIT_SECTIONS, DEV_INIT_SECTIONS, \
|
||||
CPU_INIT_SECTIONS, MEM_INIT_SECTIONS
|
||||
#define ALL_EXIT_SECTIONS EXIT_SECTIONS, DEV_EXIT_SECTIONS, \
|
||||
CPU_EXIT_SECTIONS, MEM_EXIT_SECTIONS
|
||||
|
||||
#define DATA_SECTIONS ".data$", ".data.rel$"
|
||||
#define TEXT_SECTIONS ".text$"
|
||||
|
||||
#define INIT_SECTIONS ".init.data$", ".init.text$"
|
||||
#define DEV_INIT_SECTIONS ".devinit.data$", ".devinit.text$"
|
||||
#define CPU_INIT_SECTIONS ".cpuinit.data$", ".cpuinit.text$"
|
||||
#define MEM_INIT_SECTIONS ".meminit.data$", ".meminit.text$"
|
||||
#define INIT_SECTIONS ".init.*"
|
||||
#define DEV_INIT_SECTIONS ".devinit.*"
|
||||
#define CPU_INIT_SECTIONS ".cpuinit.*"
|
||||
#define MEM_INIT_SECTIONS ".meminit.*"
|
||||
|
||||
#define EXIT_SECTIONS ".exit.data$", ".exit.text$"
|
||||
#define DEV_EXIT_SECTIONS ".devexit.data$", ".devexit.text$"
|
||||
#define CPU_EXIT_SECTIONS ".cpuexit.data$", ".cpuexit.text$"
|
||||
#define MEM_EXIT_SECTIONS ".memexit.data$", ".memexit.text$"
|
||||
#define EXIT_SECTIONS ".exit.*"
|
||||
#define DEV_EXIT_SECTIONS ".devexit.*"
|
||||
#define CPU_EXIT_SECTIONS ".cpuexit.*"
|
||||
#define MEM_EXIT_SECTIONS ".memexit.*"
|
||||
|
||||
/* init data sections */
|
||||
static const char *init_data_sections[] = { ALL_INIT_DATA_SECTIONS, NULL };
|
||||
|
@ -869,12 +873,36 @@ const struct sectioncheck sectioncheck[] = {
|
|||
.tosec = { INIT_SECTIONS, NULL },
|
||||
.mismatch = XXXINIT_TO_INIT,
|
||||
},
|
||||
/* Do not reference cpuinit code/data from meminit code/data */
|
||||
{
|
||||
.fromsec = { MEM_INIT_SECTIONS, NULL },
|
||||
.tosec = { CPU_INIT_SECTIONS, NULL },
|
||||
.mismatch = XXXINIT_TO_INIT,
|
||||
},
|
||||
/* Do not reference meminit code/data from cpuinit code/data */
|
||||
{
|
||||
.fromsec = { CPU_INIT_SECTIONS, NULL },
|
||||
.tosec = { MEM_INIT_SECTIONS, NULL },
|
||||
.mismatch = XXXINIT_TO_INIT,
|
||||
},
|
||||
/* Do not reference exit code/data from devexit/cpuexit/memexit code/data */
|
||||
{
|
||||
.fromsec = { DEV_EXIT_SECTIONS, CPU_EXIT_SECTIONS, MEM_EXIT_SECTIONS, NULL },
|
||||
.tosec = { EXIT_SECTIONS, NULL },
|
||||
.mismatch = XXXEXIT_TO_EXIT,
|
||||
},
|
||||
/* Do not reference cpuexit code/data from memexit code/data */
|
||||
{
|
||||
.fromsec = { MEM_EXIT_SECTIONS, NULL },
|
||||
.tosec = { CPU_EXIT_SECTIONS, NULL },
|
||||
.mismatch = XXXEXIT_TO_EXIT,
|
||||
},
|
||||
/* Do not reference memexit code/data from cpuexit code/data */
|
||||
{
|
||||
.fromsec = { CPU_EXIT_SECTIONS, NULL },
|
||||
.tosec = { MEM_EXIT_SECTIONS, NULL },
|
||||
.mismatch = XXXEXIT_TO_EXIT,
|
||||
},
|
||||
/* Do not use exit code/data from init code */
|
||||
{
|
||||
.fromsec = { ALL_INIT_SECTIONS, NULL },
|
||||
|
|
Загрузка…
Ссылка в новой задаче