Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -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							\
+2 −1
Original line number Original line Diff line number Diff line
@@ -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)))))	\
+38 −10
Original line number Original line Diff line number Diff line
@@ -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,
#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[] = {
	.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 },