Commit fd6c3a8d authored by Jan Beulich's avatar Jan Beulich Committed by Sam Ravnborg

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: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 6d992321
...@@ -336,10 +336,11 @@ ...@@ -336,10 +336,11 @@
#define INIT_DATA \ #define INIT_DATA \
*(.init.data) \ *(.init.data) \
DEV_DISCARD(init.data) \ DEV_DISCARD(init.data) \
DEV_DISCARD(init.rodata) \
CPU_DISCARD(init.data) \ CPU_DISCARD(init.data) \
CPU_DISCARD(init.rodata) \
MEM_DISCARD(init.data) \ MEM_DISCARD(init.data) \
*(.init.rodata) \
DEV_DISCARD(init.rodata) \
CPU_DISCARD(init.rodata) \
MEM_DISCARD(init.rodata) MEM_DISCARD(init.rodata)
#define INIT_TEXT \ #define INIT_TEXT \
......
...@@ -225,7 +225,8 @@ struct obs_kernel_param { ...@@ -225,7 +225,8 @@ struct obs_kernel_param {
* obs_kernel_param "array" too far apart in .init.setup. * obs_kernel_param "array" too far apart in .init.setup.
*/ */
#define __setup_param(str, unique_id, fn, early) \ #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 \ static struct obs_kernel_param __setup_##unique_id \
__used __section(.init.setup) \ __used __section(.init.setup) \
__attribute__((aligned((sizeof(long))))) \ __attribute__((aligned((sizeof(long))))) \
......
...@@ -763,6 +763,8 @@ static void check_section(const char *modname, struct elf_info *elf, ...@@ -763,6 +763,8 @@ static void check_section(const char *modname, struct elf_info *elf,
#define ALL_INIT_DATA_SECTIONS \ #define ALL_INIT_DATA_SECTIONS \
".init.setup$", ".init.rodata$", \
".devinit.rodata$", ".cpuinit.rodata$", ".meminit.rodata$" \
".init.data$", ".devinit.data$", ".cpuinit.data$", ".meminit.data$" ".init.data$", ".devinit.data$", ".cpuinit.data$", ".meminit.data$"
#define ALL_EXIT_DATA_SECTIONS \ #define ALL_EXIT_DATA_SECTIONS \
".exit.data$", ".devexit.data$", ".cpuexit.data$", ".memexit.data$" ".exit.data$", ".devexit.data$", ".cpuexit.data$", ".memexit.data$"
...@@ -772,21 +774,23 @@ static void check_section(const char *modname, struct elf_info *elf, ...@@ -772,21 +774,23 @@ static void check_section(const char *modname, struct elf_info *elf,
#define ALL_EXIT_TEXT_SECTIONS \ #define ALL_EXIT_TEXT_SECTIONS \
".exit.text$", ".devexit.text$", ".cpuexit.text$", ".memexit.text$" ".exit.text$", ".devexit.text$", ".cpuexit.text$", ".memexit.text$"
#define ALL_INIT_SECTIONS ALL_INIT_DATA_SECTIONS, ALL_INIT_TEXT_SECTIONS #define ALL_INIT_SECTIONS INIT_SECTIONS, DEV_INIT_SECTIONS, \
#define ALL_EXIT_SECTIONS ALL_EXIT_DATA_SECTIONS, ALL_EXIT_TEXT_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 DATA_SECTIONS ".data$", ".data.rel$"
#define TEXT_SECTIONS ".text$" #define TEXT_SECTIONS ".text$"
#define INIT_SECTIONS ".init.data$", ".init.text$" #define INIT_SECTIONS ".init.*"
#define DEV_INIT_SECTIONS ".devinit.data$", ".devinit.text$" #define DEV_INIT_SECTIONS ".devinit.*"
#define CPU_INIT_SECTIONS ".cpuinit.data$", ".cpuinit.text$" #define CPU_INIT_SECTIONS ".cpuinit.*"
#define MEM_INIT_SECTIONS ".meminit.data$", ".meminit.text$" #define MEM_INIT_SECTIONS ".meminit.*"
#define EXIT_SECTIONS ".exit.data$", ".exit.text$" #define EXIT_SECTIONS ".exit.*"
#define DEV_EXIT_SECTIONS ".devexit.data$", ".devexit.text$" #define DEV_EXIT_SECTIONS ".devexit.*"
#define CPU_EXIT_SECTIONS ".cpuexit.data$", ".cpuexit.text$" #define CPU_EXIT_SECTIONS ".cpuexit.*"
#define MEM_EXIT_SECTIONS ".memexit.data$", ".memexit.text$" #define MEM_EXIT_SECTIONS ".memexit.*"
/* init data sections */ /* init data sections */
static const char *init_data_sections[] = { ALL_INIT_DATA_SECTIONS, NULL }; static const char *init_data_sections[] = { ALL_INIT_DATA_SECTIONS, NULL };
...@@ -869,12 +873,36 @@ const struct sectioncheck sectioncheck[] = { ...@@ -869,12 +873,36 @@ const struct sectioncheck sectioncheck[] = {
.tosec = { INIT_SECTIONS, NULL }, .tosec = { INIT_SECTIONS, NULL },
.mismatch = XXXINIT_TO_INIT, .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 */ /* Do not reference exit code/data from devexit/cpuexit/memexit code/data */
{ {
.fromsec = { DEV_EXIT_SECTIONS, CPU_EXIT_SECTIONS, MEM_EXIT_SECTIONS, NULL }, .fromsec = { DEV_EXIT_SECTIONS, CPU_EXIT_SECTIONS, MEM_EXIT_SECTIONS, NULL },
.tosec = { EXIT_SECTIONS, NULL }, .tosec = { EXIT_SECTIONS, NULL },
.mismatch = XXXEXIT_TO_EXIT, .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 */ /* Do not use exit code/data from init code */
{ {
.fromsec = { ALL_INIT_SECTIONS, NULL }, .fromsec = { ALL_INIT_SECTIONS, NULL },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment