From 0a0a7a9ac82cb79af91f098cedc69cc67bca3978 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Thu, 26 Mar 2020 10:57:12 +0900 Subject: [PATCH] linker_script: replace common read-only data with RODATA_COMMON The common section data are repeated in many linker scripts (often twice in each script to support SEPARATE_CODE_AND_RODATA). When you add a new read-only data section, you end up with touching lots of places. After this commit, you will only need to touch bl_common.ld.h when you add a new section to RODATA_COMMON. Replace a series of RO section with RODATA_COMMON, which contains 6 sections, some of which did not exist before. This is not a big deal because unneeded data should not be compiled in the first place. I believe this should be controlled by BL*_SOURCES in Makefiles, not by linker scripts. When I was working on this commit, the BL1 image size increased due to the fconf_populator. Commit c452ba159c14 ("fconf: exclude fconf_dyn_cfg_getter.c from BL1_SOURCES") fixed this issue. I investigated BL1, BL2, BL2U, BL31 for plat=fvp, and BL2-AT-EL3, BL31, BL31 for plat=uniphier. I did not see any more unexpected code addition. Change-Id: I5d14d60dbe3c821765bce3ae538968ef266f1460 Signed-off-by: Masahiro Yamada --- bl1/bl1.ld.S | 6 ++---- bl2/bl2.ld.S | 6 ++---- bl2/bl2_el3.ld.S | 8 ++------ bl2u/bl2u.ld.S | 5 +++++ bl31/bl31.ld.S | 12 ++---------- bl32/sp_min/sp_min.ld.S | 9 ++------- bl32/tsp/tsp.ld.S | 4 ++-- include/common/bl_common.ld.h | 8 ++++++++ plat/mediatek/mt6795/bl31.ld.S | 3 +-- 9 files changed, 26 insertions(+), 35 deletions(-) diff --git a/bl1/bl1.ld.S b/bl1/bl1.ld.S index 87f1ae82f..e706ce286 100644 --- a/bl1/bl1.ld.S +++ b/bl1/bl1.ld.S @@ -45,8 +45,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - PARSER_LIB_DESCS - CPU_OPS + RODATA_COMMON /* * No need to pad out the .rodata section to a page boundary. Next is @@ -67,8 +66,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - PARSER_LIB_DESCS - CPU_OPS + RODATA_COMMON *(.vectors) __RO_END__ = .; diff --git a/bl2/bl2.ld.S b/bl2/bl2.ld.S index afb013390..dc5165280 100644 --- a/bl2/bl2.ld.S +++ b/bl2/bl2.ld.S @@ -45,8 +45,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - FCONF_POPULATOR - PARSER_LIB_DESCS + RODATA_COMMON . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; @@ -58,8 +57,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - FCONF_POPULATOR - PARSER_LIB_DESCS + RODATA_COMMON *(.vectors) __RO_END_UNALIGNED__ = .; diff --git a/bl2/bl2_el3.ld.S b/bl2/bl2_el3.ld.S index d23799029..3c2744369 100644 --- a/bl2/bl2_el3.ld.S +++ b/bl2/bl2_el3.ld.S @@ -53,9 +53,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - PARSER_LIB_DESCS - CPU_OPS - GOT + RODATA_COMMON . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; @@ -73,9 +71,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - CPU_OPS - PARSER_LIB_DESCS - GOT + RODATA_COMMON *(.vectors) __RO_END_UNALIGNED__ = .; diff --git a/bl2u/bl2u.ld.S b/bl2u/bl2u.ld.S index 96545a3ab..37e658ad3 100644 --- a/bl2u/bl2u.ld.S +++ b/bl2u/bl2u.ld.S @@ -46,6 +46,9 @@ SECTIONS .rodata . : { __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) + + RODATA_COMMON + . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; } >RAM @@ -56,6 +59,8 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) + RODATA_COMMON + *(.vectors) __RO_END_UNALIGNED__ = .; /* diff --git a/bl31/bl31.ld.S b/bl31/bl31.ld.S index 6b7f9157a..ac99a7de4 100644 --- a/bl31/bl31.ld.S +++ b/bl31/bl31.ld.S @@ -47,11 +47,7 @@ SECTIONS __RODATA_START__ = .; *(SORT_BY_ALIGNMENT(.rodata*)) - RT_SVC_DESCS - FCONF_POPULATOR - PMF_SVC_DESCS - CPU_OPS - GOT + RODATA_COMMON /* Place pubsub sections for events */ . = ALIGN(8); @@ -67,11 +63,7 @@ SECTIONS *(SORT_BY_ALIGNMENT(.text*)) *(SORT_BY_ALIGNMENT(.rodata*)) - RT_SVC_DESCS - FCONF_POPULATOR - PMF_SVC_DESCS - CPU_OPS - GOT + RODATA_COMMON /* Place pubsub sections for events */ . = ALIGN(8); diff --git a/bl32/sp_min/sp_min.ld.S b/bl32/sp_min/sp_min.ld.S index d83b4e018..f652f17e2 100644 --- a/bl32/sp_min/sp_min.ld.S +++ b/bl32/sp_min/sp_min.ld.S @@ -48,10 +48,7 @@ SECTIONS __RODATA_START__ = .; *(.rodata*) - RT_SVC_DESCS - FCONF_POPULATOR - PMF_SVC_DESCS - CPU_OPS + RODATA_COMMON /* Place pubsub sections for events */ . = ALIGN(8); @@ -67,9 +64,7 @@ SECTIONS *(.text*) *(.rodata*) - RT_SVC_DESCS - FCONF_POPULATOR - CPU_OPS + RODATA_COMMON /* Place pubsub sections for events */ . = ALIGN(8); diff --git a/bl32/tsp/tsp.ld.S b/bl32/tsp/tsp.ld.S index b1ec42350..b071e82fd 100644 --- a/bl32/tsp/tsp.ld.S +++ b/bl32/tsp/tsp.ld.S @@ -37,7 +37,7 @@ SECTIONS __RODATA_START__ = .; *(.rodata*) - GOT + RODATA_COMMON . = ALIGN(PAGE_SIZE); __RODATA_END__ = .; @@ -49,7 +49,7 @@ SECTIONS *(.text*) *(.rodata*) - GOT + RODATA_COMMON *(.vectors) diff --git a/include/common/bl_common.ld.h b/include/common/bl_common.ld.h index d9e2e015f..5c5fe5b15 100644 --- a/include/common/bl_common.ld.h +++ b/include/common/bl_common.ld.h @@ -56,6 +56,14 @@ *(.got) \ __GOT_END__ = .; +#define RODATA_COMMON \ + RT_SVC_DESCS \ + FCONF_POPULATOR \ + PMF_SVC_DESCS \ + PARSER_LIB_DESCS \ + CPU_OPS \ + GOT + #define STACK_SECTION \ stacks (NOLOAD) : { \ __STACKS_START__ = .; \ diff --git a/plat/mediatek/mt6795/bl31.ld.S b/plat/mediatek/mt6795/bl31.ld.S index 03a737f69..02d79af38 100644 --- a/plat/mediatek/mt6795/bl31.ld.S +++ b/plat/mediatek/mt6795/bl31.ld.S @@ -38,8 +38,7 @@ SECTIONS *(.text*) *(.rodata*) - RT_SVC_DESCS - CPU_OPS + RODATA_COMMON __RO_END_UNALIGNED__ = .; /*