forked from espressif/esp-idf
fix(system): discard eh_frame sections if disabled in sdkconfig
This commit is contained in:
@@ -3,6 +3,9 @@
|
|||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point: */
|
/* Default entry point: */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -313,9 +316,11 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.e.*)
|
*(.gnu.linkonce.e.*)
|
||||||
*(.gnu.version_r)
|
*(.gnu.version_r)
|
||||||
. = (. + 3) & ~ 3;
|
. = (. + 3) & ~ 3;
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
__eh_frame = ABSOLUTE(.);
|
__eh_frame = ABSOLUTE(.);
|
||||||
KEEP(*(.eh_frame))
|
KEEP(*(.eh_frame))
|
||||||
. = (. + 7) & ~ 3;
|
. = (. + 7) & ~ 3;
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
/* C++ constructor and destructor tables
|
/* C++ constructor and destructor tables
|
||||||
|
|
||||||
Make a point of not including anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt
|
Make a point of not including anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt
|
||||||
@@ -459,12 +464,20 @@ SECTIONS
|
|||||||
*/
|
*/
|
||||||
.xt.prop 0 :
|
.xt.prop 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.prop .gnu.linkonce.prop.*))
|
KEEP (*(.xt.prop .xt.prop.* .gnu.linkonce.prop.*))
|
||||||
}
|
}
|
||||||
|
|
||||||
.xt.lit 0 :
|
.xt.lit 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.lit .gnu.linkonce.p.*))
|
KEEP (*(.xt.lit .xt.lit.* .gnu.linkonce.p.*))
|
||||||
|
}
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
#if !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -241,9 +243,12 @@ SECTIONS
|
|||||||
*(.tbss)
|
*(.tbss)
|
||||||
*(.tbss.*)
|
*(.tbss.*)
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
. = ALIGN(ALIGNOF(.eh_frame));
|
. = ALIGN(ALIGNOF(.eh_frame));
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
/* Keep this section shall be at least aligned on 4 */
|
/* Keep this section shall be at least aligned on 4 */
|
||||||
.eh_frame : ALIGN(8)
|
.eh_frame : ALIGN(8)
|
||||||
{
|
{
|
||||||
@@ -263,6 +268,7 @@ SECTIONS
|
|||||||
KEEP (*(.eh_frame_hdr))
|
KEEP (*(.eh_frame_hdr))
|
||||||
__eh_frame_hdr_end = ABSOLUTE(.);
|
__eh_frame_hdr_end = ABSOLUTE(.);
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This section is a place where we dump all the rodata which aren't used at runtime,
|
This section is a place where we dump all the rodata which aren't used at runtime,
|
||||||
@@ -330,6 +336,14 @@ SECTIONS
|
|||||||
. = ALIGN (16);
|
. = ALIGN (16);
|
||||||
_heap_start = ABSOLUTE(.);
|
_heap_start = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -354,9 +356,12 @@ SECTIONS
|
|||||||
*(.tbss)
|
*(.tbss)
|
||||||
*(.tbss.*)
|
*(.tbss.*)
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
. = ALIGN(ALIGNOF(.eh_frame));
|
. = ALIGN(ALIGNOF(.eh_frame));
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
/* Keep this section shall be at least aligned on 4 */
|
/* Keep this section shall be at least aligned on 4 */
|
||||||
.eh_frame : ALIGN(8)
|
.eh_frame : ALIGN(8)
|
||||||
{
|
{
|
||||||
@@ -376,6 +381,7 @@ SECTIONS
|
|||||||
KEEP (*(.eh_frame_hdr))
|
KEEP (*(.eh_frame_hdr))
|
||||||
__eh_frame_hdr_end = ABSOLUTE(.);
|
__eh_frame_hdr_end = ABSOLUTE(.);
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This section is a place where we dump all the rodata which aren't used at runtime,
|
This section is a place where we dump all the rodata which aren't used at runtime,
|
||||||
@@ -431,6 +437,14 @@ SECTIONS
|
|||||||
. = ALIGN (16);
|
. = ALIGN (16);
|
||||||
_heap_start = ABSOLUTE(.);
|
_heap_start = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -389,9 +391,12 @@ SECTIONS
|
|||||||
*(.tbss)
|
*(.tbss)
|
||||||
*(.tbss.*)
|
*(.tbss.*)
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
. = ALIGN(ALIGNOF(.eh_frame));
|
. = ALIGN(ALIGNOF(.eh_frame));
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
/* Keep this section shall be at least aligned on 4 */
|
/* Keep this section shall be at least aligned on 4 */
|
||||||
.eh_frame : ALIGN(8)
|
.eh_frame : ALIGN(8)
|
||||||
{
|
{
|
||||||
@@ -411,6 +416,7 @@ SECTIONS
|
|||||||
KEEP (*(.eh_frame_hdr))
|
KEEP (*(.eh_frame_hdr))
|
||||||
__eh_frame_hdr_end = ABSOLUTE(.);
|
__eh_frame_hdr_end = ABSOLUTE(.);
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This section is a place where we dump all the rodata which aren't used at runtime,
|
This section is a place where we dump all the rodata which aren't used at runtime,
|
||||||
@@ -433,6 +439,14 @@ SECTIONS
|
|||||||
. = ALIGN (16);
|
. = ALIGN (16);
|
||||||
_heap_start = ABSOLUTE(.);
|
_heap_start = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -389,9 +391,12 @@ SECTIONS
|
|||||||
*(.tbss.*)
|
*(.tbss.*)
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
_rodata_reserved_end = ABSOLUTE(.);
|
_rodata_reserved_end = ABSOLUTE(.);
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
. = ALIGN(ALIGNOF(.eh_frame));
|
. = ALIGN(ALIGNOF(.eh_frame));
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
/* Keep this section shall be at least aligned on 4 */
|
/* Keep this section shall be at least aligned on 4 */
|
||||||
.eh_frame : ALIGN(8)
|
.eh_frame : ALIGN(8)
|
||||||
{
|
{
|
||||||
@@ -411,6 +416,7 @@ SECTIONS
|
|||||||
KEEP (*(.eh_frame_hdr))
|
KEEP (*(.eh_frame_hdr))
|
||||||
__eh_frame_hdr_end = ABSOLUTE(.);
|
__eh_frame_hdr_end = ABSOLUTE(.);
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
|
|
||||||
.flash.rodata_noload (NOLOAD) :
|
.flash.rodata_noload (NOLOAD) :
|
||||||
{
|
{
|
||||||
@@ -424,6 +430,14 @@ SECTIONS
|
|||||||
. = ALIGN (16);
|
. = ALIGN (16);
|
||||||
_heap_start = ABSOLUTE(.);
|
_heap_start = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -410,9 +412,12 @@ SECTIONS
|
|||||||
*(.tbss)
|
*(.tbss)
|
||||||
*(.tbss.*)
|
*(.tbss.*)
|
||||||
_thread_local_end = ABSOLUTE(.);
|
_thread_local_end = ABSOLUTE(.);
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
. = ALIGN(ALIGNOF(.eh_frame));
|
. = ALIGN(ALIGNOF(.eh_frame));
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
/* Keep this section shall be at least aligned on 4 */
|
/* Keep this section shall be at least aligned on 4 */
|
||||||
.eh_frame : ALIGN(8)
|
.eh_frame : ALIGN(8)
|
||||||
{
|
{
|
||||||
@@ -432,6 +437,7 @@ SECTIONS
|
|||||||
KEEP (*(.eh_frame_hdr))
|
KEEP (*(.eh_frame_hdr))
|
||||||
__eh_frame_hdr_end = ABSOLUTE(.);
|
__eh_frame_hdr_end = ABSOLUTE(.);
|
||||||
} > default_rodata_seg
|
} > default_rodata_seg
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This section is a place where we dump all the rodata which aren't used at runtime,
|
This section is a place where we dump all the rodata which aren't used at runtime,
|
||||||
@@ -454,6 +460,14 @@ SECTIONS
|
|||||||
. = ALIGN (16);
|
. = ALIGN (16);
|
||||||
_heap_start = ABSOLUTE(.);
|
_heap_start = ABSOLUTE(.);
|
||||||
} > dram0_0_seg
|
} > dram0_0_seg
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
#if !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !(CONFIG_COMPILER_CXX_EXCEPTIONS || CONFIG_ESP_SYSTEM_USE_EH_FRAME)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
ASSERT(((_iram_end - ORIGIN(iram0_0_seg)) <= LENGTH(iram0_0_seg)),
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point: */
|
/* Default entry point: */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -311,9 +313,11 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.e.*)
|
*(.gnu.linkonce.e.*)
|
||||||
*(.gnu.version_r)
|
*(.gnu.version_r)
|
||||||
. = (. + 3) & ~ 3;
|
. = (. + 3) & ~ 3;
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
__eh_frame = ABSOLUTE(.);
|
__eh_frame = ABSOLUTE(.);
|
||||||
KEEP(*(.eh_frame))
|
KEEP(*(.eh_frame))
|
||||||
. = (. + 7) & ~ 3;
|
. = (. + 7) & ~ 3;
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
/* C++ constructor and destructor tables
|
/* C++ constructor and destructor tables
|
||||||
|
|
||||||
Make a point of not including anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt
|
Make a point of not including anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt
|
||||||
@@ -434,12 +438,20 @@ SECTIONS
|
|||||||
*/
|
*/
|
||||||
.xt.prop 0 :
|
.xt.prop 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.prop .gnu.linkonce.prop.*))
|
KEEP (*(.xt.prop .xt.prop.* .gnu.linkonce.prop.*))
|
||||||
}
|
}
|
||||||
|
|
||||||
.xt.lit 0 :
|
.xt.lit 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.lit .gnu.linkonce.p.*))
|
KEEP (*(.xt.lit .xt.lit.* .gnu.linkonce.p.*))
|
||||||
|
}
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
#if !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,6 +4,8 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
/* Default entry point */
|
/* Default entry point */
|
||||||
ENTRY(call_start_cpu0);
|
ENTRY(call_start_cpu0);
|
||||||
|
|
||||||
@@ -340,9 +342,11 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.e.*)
|
*(.gnu.linkonce.e.*)
|
||||||
*(.gnu.version_r)
|
*(.gnu.version_r)
|
||||||
. = (. + 3) & ~ 3;
|
. = (. + 3) & ~ 3;
|
||||||
|
#if CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
__eh_frame = ABSOLUTE(.);
|
__eh_frame = ABSOLUTE(.);
|
||||||
KEEP(*(.eh_frame))
|
KEEP(*(.eh_frame))
|
||||||
. = (. + 7) & ~ 3;
|
. = (. + 7) & ~ 3;
|
||||||
|
#endif // CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
/* C++ constructor and destructor tables */
|
/* C++ constructor and destructor tables */
|
||||||
/* Don't include anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt */
|
/* Don't include anything from crtbegin.o or crtend.o, as IDF doesn't use toolchain crt */
|
||||||
__init_array_start = ABSOLUTE(.);
|
__init_array_start = ABSOLUTE(.);
|
||||||
@@ -473,12 +477,20 @@ SECTIONS
|
|||||||
*/
|
*/
|
||||||
.xt.prop 0 :
|
.xt.prop 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.prop .gnu.linkonce.prop.*))
|
KEEP (*(.xt.prop .xt.prop.* .gnu.linkonce.prop.*))
|
||||||
}
|
}
|
||||||
|
|
||||||
.xt.lit 0 :
|
.xt.lit 0 :
|
||||||
{
|
{
|
||||||
KEEP (*(.xt.lit .gnu.linkonce.p.*))
|
KEEP (*(.xt.lit .xt.lit.* .gnu.linkonce.p.*))
|
||||||
|
}
|
||||||
|
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
*(.eh_frame_hdr)
|
||||||
|
#if !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
|
*(.eh_frame)
|
||||||
|
#endif // !CONFIG_COMPILER_CXX_EXCEPTIONS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,33 +1,51 @@
|
|||||||
# For each supported target, a memory.ld.in and sections.ld.in is processed and dictate the
|
|
||||||
# memory layout of the app.
|
|
||||||
#
|
|
||||||
# memory.ld.in goes through the preprocessor
|
|
||||||
# sections.ld.in goes through linker script generator
|
|
||||||
|
|
||||||
idf_build_get_property(target IDF_TARGET)
|
idf_build_get_property(target IDF_TARGET)
|
||||||
idf_build_get_property(sdkconfig_header SDKCONFIG_HEADER)
|
idf_build_get_property(sdkconfig_header SDKCONFIG_HEADER)
|
||||||
|
idf_build_get_property(config_dir CONFIG_DIR)
|
||||||
set(ld_input "${CMAKE_CURRENT_LIST_DIR}/${target}/memory.ld.in")
|
|
||||||
set(ld_output "${CMAKE_CURRENT_BINARY_DIR}/ld/memory.ld")
|
|
||||||
target_linker_script(${COMPONENT_LIB} INTERFACE "${ld_output}")
|
|
||||||
|
|
||||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ld")
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ld")
|
||||||
|
|
||||||
# Process the template file through the linker script generation mechanism, and use the output for linking the
|
# Cmake script that generates linker script from "*.ld.in" scripts using compiler preprocessor
|
||||||
# final binary
|
set(linker_script_generator "${CMAKE_CURRENT_BINARY_DIR}/ld/linker_script_generator.cmake")
|
||||||
target_linker_script(${COMPONENT_LIB} INTERFACE "${CMAKE_CURRENT_LIST_DIR}/${target}/sections.ld.in"
|
file(WRITE ${linker_script_generator}
|
||||||
PROCESS "${CMAKE_CURRENT_BINARY_DIR}/ld/sections.ld")
|
[=[
|
||||||
|
execute_process(COMMAND "${CC}" "-C" "-P" "-x" "c" "-E" "-I" "${CONFIG_DIR}" "-I" "${LD_DIR}" "${SOURCE}"
|
||||||
|
RESULT_VARIABLE RET_CODE
|
||||||
|
OUTPUT_VARIABLE PREPROCESSED_LINKER_SCRIPT
|
||||||
|
ERROR_VARIABLE ERROR_VAR)
|
||||||
|
if(RET_CODE AND NOT RET_CODE EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Can't generate ${TARGET}\nRET_CODE: ${RET_CODE}\nERROR_MESSAGE: ${ERROR_VAR}")
|
||||||
|
endif()
|
||||||
|
string(REPLACE "\\n" "\n" TEXT "${PREPROCESSED_LINKER_SCRIPT}")
|
||||||
|
file(WRITE "${TARGET}" "${TEXT}")
|
||||||
|
]=])
|
||||||
|
|
||||||
|
function(preprocess_linker_file name_in name_out out_path)
|
||||||
|
set(script_in "${CMAKE_CURRENT_LIST_DIR}/${target}/${name_in}")
|
||||||
|
set(script_out "${CMAKE_CURRENT_BINARY_DIR}/ld/${name_out}")
|
||||||
|
set(${out_path} ${script_out} PARENT_SCOPE)
|
||||||
|
|
||||||
idf_build_get_property(config_dir CONFIG_DIR)
|
|
||||||
# Preprocess memory.ld.in linker script to include configuration, becomes memory.ld
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${ld_output}
|
OUTPUT ${script_out}
|
||||||
COMMAND "${CMAKE_C_COMPILER}" -C -P -x c -E -o ${ld_output} -I ${config_dir}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-I "${CMAKE_CURRENT_LIST_DIR}" ${ld_input}
|
"-DCC=${CMAKE_C_COMPILER}"
|
||||||
MAIN_DEPENDENCY ${ld_input}
|
"-DSOURCE=${script_in}"
|
||||||
|
"-DTARGET=${script_out}"
|
||||||
|
"-DCONFIG_DIR=${config_dir}"
|
||||||
|
"-DLD_DIR=${CMAKE_CURRENT_LIST_DIR}"
|
||||||
|
-P "${linker_script_generator}"
|
||||||
|
MAIN_DEPENDENCY ${script_in}
|
||||||
DEPENDS ${sdkconfig_header}
|
DEPENDS ${sdkconfig_header}
|
||||||
COMMENT "Generating memory.ld linker script..."
|
COMMENT "Generating ${script_out} linker script..."
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
|
add_custom_target("${name_out}" DEPENDS "${script_out}")
|
||||||
|
add_dependencies(${COMPONENT_LIB} "${name_out}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
add_custom_target(memory_ld DEPENDS ${ld_output})
|
# Generage memory.ld
|
||||||
add_dependencies(${COMPONENT_LIB} memory_ld)
|
preprocess_linker_file("memory.ld.in" "memory.ld" ld_out_path)
|
||||||
|
target_linker_script(${COMPONENT_LIB} INTERFACE "${ld_out_path}")
|
||||||
|
|
||||||
|
# Generage sections.ld.in and pass it through linker script generator
|
||||||
|
preprocess_linker_file("sections.ld.in" "sections.ld.in" ld_out_path)
|
||||||
|
target_linker_script(${COMPONENT_LIB} INTERFACE "${ld_out_path}"
|
||||||
|
PROCESS "${CMAKE_CURRENT_BINARY_DIR}/ld/sections.ld")
|
||||||
|
Reference in New Issue
Block a user