esp32/Makefile: Put all IDF compenents in .a libs to use IDF ld script.
When the ESP IDF builds a project it puts all separate components into separate .a library archives. And then the esp32.common.ld linker script references these .a libraries by explicit name to put certain object files in iRAM. This patch does a similar thing for the custom build system used here, putting all IDF .o's into their respective .a. So a custom linker script is no longer needed.
This commit is contained in:
parent
e7ab475276
commit
f59904f799
@ -117,7 +117,7 @@ LDFLAGS += -u call_user_start_cpu0 -u uxTopUsedPriority -u ld_include_panic_high
|
|||||||
LDFLAGS += -u __cxa_guard_dummy # so that implementation of static guards is taken from cxx_guards.o instead of libstdc++.a
|
LDFLAGS += -u __cxa_guard_dummy # so that implementation of static guards is taken from cxx_guards.o instead of libstdc++.a
|
||||||
LDFLAGS += -L$(ESPCOMP)/esp32/ld
|
LDFLAGS += -L$(ESPCOMP)/esp32/ld
|
||||||
LDFLAGS += -T $(BUILD)/esp32_out.ld
|
LDFLAGS += -T $(BUILD)/esp32_out.ld
|
||||||
LDFLAGS += -T ./esp32.custom_common.ld
|
LDFLAGS += -T esp32.common.ld
|
||||||
LDFLAGS += -T esp32.rom.ld
|
LDFLAGS += -T esp32.rom.ld
|
||||||
LDFLAGS += -T esp32.peripherals.ld
|
LDFLAGS += -T esp32.peripherals.ld
|
||||||
|
|
||||||
@ -634,6 +634,75 @@ OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_SMARTCONFIG_ACK_O))
|
|||||||
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_SPI_FLASH_O))
|
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_SPI_FLASH_O))
|
||||||
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_ULP_O))
|
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_ULP_O))
|
||||||
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_WPA_SUPPLICANT_O))
|
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_WPA_SUPPLICANT_O))
|
||||||
|
|
||||||
|
LIB_ESPIDF =
|
||||||
|
LIB_ESPIDF += driver
|
||||||
|
LIB_ESPIDF += esp32
|
||||||
|
LIB_ESPIDF += heap
|
||||||
|
LIB_ESPIDF += soc
|
||||||
|
LIB_ESPIDF += cxx
|
||||||
|
LIB_ESPIDF += ethernet
|
||||||
|
LIB_ESPIDF += expat
|
||||||
|
LIB_ESPIDF += pthread
|
||||||
|
LIB_ESPIDF += freertos
|
||||||
|
LIB_ESPIDF += vfs
|
||||||
|
LIB_ESPIDF += json
|
||||||
|
LIB_ESPIDF += log
|
||||||
|
LIB_ESPIDF += xtensa-debug-module
|
||||||
|
LIB_ESPIDF += tcpip_adapter
|
||||||
|
LIB_ESPIDF += app_trace
|
||||||
|
LIB_ESPIDF += app_update
|
||||||
|
LIB_ESPIDF += newlib
|
||||||
|
LIB_ESPIDF += nghttp
|
||||||
|
LIB_ESPIDF += nvs_flash
|
||||||
|
LIB_ESPIDF += smartconfig_ack
|
||||||
|
LIB_ESPIDF += spi_flash
|
||||||
|
LIB_ESPIDF += ulp
|
||||||
|
LIB_ESPIDF += lwip
|
||||||
|
LIB_ESPIDF += mbedtls
|
||||||
|
LIB_ESPIDF += wpa_supplicant
|
||||||
|
|
||||||
|
BUILD_ESPIDF_LIB = $(BUILD)/esp-idf
|
||||||
|
|
||||||
|
OBJ_ESPIDF_DIRS = $(sort $(dir $(OBJ_ESPIDF))) $(BUILD_ESPIDF_LIB) $(addprefix $(BUILD_ESPIDF_LIB)/,$(LIB_ESPIDF))
|
||||||
|
$(OBJ_ESPIDF): | $(OBJ_ESPIDF_DIRS)
|
||||||
|
$(OBJ_ESPIDF_DIRS):
|
||||||
|
$(MKDIR) -p $@
|
||||||
|
|
||||||
|
define gen_espidf_lib_rule
|
||||||
|
$(BUILD_ESPIDF_LIB)/$(1)/lib$(1).a: $(addprefix $$(BUILD)/,$(2))
|
||||||
|
$(ECHO) "AR $$@"
|
||||||
|
$(Q)$(AR) cru $$@ $$^
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call gen_espidf_lib_rule,driver,$(ESPIDF_DRIVER_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,esp32,$(ESPIDF_ESP32_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,heap,$(ESPIDF_HEAP_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,soc,$(ESPIDF_SOC_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,cxx,$(ESPIDF_CXX_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,ethernet,$(ESPIDF_ETHERNET_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,expat,$(ESPIDF_EXPAT_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,pthread,$(ESPIDF_PTHREAD_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,freertos,$(ESPIDF_FREERTOS_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,vfs,$(ESPIDF_VFS_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,json,$(ESPIDF_JSON_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,log,$(ESPIDF_LOG_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,xtensa-debug-module,$(ESPIDF_XTENSA_DEBUG_MODULE_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,tcpip_adapter,$(ESPIDF_TCPIP_ADAPTER_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,app_trace,$(ESPIDF_APP_TRACE_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,app_update,$(ESPIDF_APP_UPDATE_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,newlib,$(ESPIDF_NEWLIB_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,nghttp,$(ESPIDF_NGHTTP_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,nvs_flash,$(ESPIDF_NVS_FLASH_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,smartconfig_ack,$(ESPIDF_SMARTCONFIG_ACK_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,spi_flash,$(ESPIDF_SPI_FLASH_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,ulp,$(ESPIDF_ULP_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,lwip,$(ESPIDF_LWIP_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,mbedtls,$(ESPIDF_MBEDTLS_O)))
|
||||||
|
$(eval $(call gen_espidf_lib_rule,wpa_supplicant,$(ESPIDF_WPA_SUPPLICANT_O)))
|
||||||
|
|
||||||
|
LIB = $(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Main targets
|
# Main targets
|
||||||
|
|
||||||
@ -659,7 +728,7 @@ erase:
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Declarations to build the application
|
# Declarations to build the application
|
||||||
|
|
||||||
OBJ = $(OBJ_MP) $(OBJ_ESPIDF)
|
OBJ = $(OBJ_MP)
|
||||||
|
|
||||||
APP_LD_ARGS =
|
APP_LD_ARGS =
|
||||||
APP_LD_ARGS += $(LDFLAGS_MOD)
|
APP_LD_ARGS += $(LDFLAGS_MOD)
|
||||||
@ -670,6 +739,7 @@ APP_LD_ARGS += $(LIBC_LIBM)
|
|||||||
APP_LD_ARGS += $(ESPCOMP)/esp32/libhal.a
|
APP_LD_ARGS += $(ESPCOMP)/esp32/libhal.a
|
||||||
APP_LD_ARGS += -L$(ESPCOMP)/esp32/lib -lcore -lmesh -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lcoexist -lwps -lwpa2
|
APP_LD_ARGS += -L$(ESPCOMP)/esp32/lib -lcore -lmesh -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lcoexist -lwps -lwpa2
|
||||||
APP_LD_ARGS += $(OBJ)
|
APP_LD_ARGS += $(OBJ)
|
||||||
|
APP_LD_ARGS += $(LIB)
|
||||||
APP_LD_ARGS += --end-group
|
APP_LD_ARGS += --end-group
|
||||||
|
|
||||||
$(BUILD)/esp32_out.ld: sdkconfig.h
|
$(BUILD)/esp32_out.ld: sdkconfig.h
|
||||||
@ -679,7 +749,7 @@ $(BUILD)/application.bin: $(BUILD)/application.elf
|
|||||||
$(ECHO) "Create $@"
|
$(ECHO) "Create $@"
|
||||||
$(Q)$(ESPTOOL) --chip esp32 elf2image --flash_mode $(FLASH_MODE) --flash_freq $(FLASH_FREQ) --flash_size $(FLASH_SIZE) $<
|
$(Q)$(ESPTOOL) --chip esp32 elf2image --flash_mode $(FLASH_MODE) --flash_freq $(FLASH_FREQ) --flash_size $(FLASH_SIZE) $<
|
||||||
|
|
||||||
$(BUILD)/application.elf: $(OBJ) $(BUILD)/esp32_out.ld
|
$(BUILD)/application.elf: $(OBJ) $(LIB) $(BUILD)/esp32_out.ld
|
||||||
$(ECHO) "LINK $@"
|
$(ECHO) "LINK $@"
|
||||||
$(Q)$(LD) $(LDFLAGS) -o $@ $(APP_LD_ARGS)
|
$(Q)$(LD) $(LDFLAGS) -o $@ $(APP_LD_ARGS)
|
||||||
$(Q)$(SIZE) $@
|
$(Q)$(SIZE) $@
|
||||||
|
@ -1,273 +0,0 @@
|
|||||||
/* Default entry point: */
|
|
||||||
ENTRY(call_start_cpu0);
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* RTC fast memory holds RTC wake stub code,
|
|
||||||
including from any source file named rtc_wake_stub*.c
|
|
||||||
*/
|
|
||||||
.rtc.text :
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
*(.rtc.literal .rtc.text)
|
|
||||||
*rtc_wake_stub*.o(.literal .text .literal.* .text.*)
|
|
||||||
} > rtc_iram_seg
|
|
||||||
|
|
||||||
/* RTC slow memory holds RTC wake stub
|
|
||||||
data/rodata, including from any source file
|
|
||||||
named rtc_wake_stub*.c
|
|
||||||
*/
|
|
||||||
.rtc.data :
|
|
||||||
{
|
|
||||||
_rtc_data_start = ABSOLUTE(.);
|
|
||||||
*(.rtc.data)
|
|
||||||
*(.rtc.rodata)
|
|
||||||
*rtc_wake_stub*.o(.data .rodata .data.* .rodata.* .bss .bss.*)
|
|
||||||
_rtc_data_end = ABSOLUTE(.);
|
|
||||||
} > rtc_slow_seg
|
|
||||||
|
|
||||||
/* RTC bss, from any source file named rtc_wake_stub*.c */
|
|
||||||
.rtc.bss (NOLOAD) :
|
|
||||||
{
|
|
||||||
_rtc_bss_start = ABSOLUTE(.);
|
|
||||||
*rtc_wake_stub*.o(.bss .bss.*)
|
|
||||||
*rtc_wake_stub*.o(COMMON)
|
|
||||||
_rtc_bss_end = ABSOLUTE(.);
|
|
||||||
} > rtc_slow_seg
|
|
||||||
|
|
||||||
/* This section holds data that should not be initialized at power up
|
|
||||||
and will be retained during deep sleep. The section located in
|
|
||||||
RTC SLOW Memory area. User data marked with RTC_NOINIT_ATTR will be placed
|
|
||||||
into this section. See the file "esp_attr.h" for more information.
|
|
||||||
*/
|
|
||||||
.rtc_noinit (NOLOAD):
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
_rtc_noinit_start = ABSOLUTE(.);
|
|
||||||
*(.rtc_noinit .rtc_noinit.*)
|
|
||||||
. = ALIGN(4) ;
|
|
||||||
_rtc_noinit_end = ABSOLUTE(.);
|
|
||||||
} > rtc_slow_seg
|
|
||||||
|
|
||||||
/* Send .iram0 code to iram */
|
|
||||||
.iram0.vectors :
|
|
||||||
{
|
|
||||||
_iram_start = ABSOLUTE(.);
|
|
||||||
/* Vectors go to IRAM */
|
|
||||||
_init_start = ABSOLUTE(.);
|
|
||||||
/* Vectors according to builds/RF-2015.2-win32/esp108_v1_2_s5_512int_2/config.html */
|
|
||||||
. = 0x0;
|
|
||||||
KEEP(*(.WindowVectors.text));
|
|
||||||
. = 0x180;
|
|
||||||
KEEP(*(.Level2InterruptVector.text));
|
|
||||||
. = 0x1c0;
|
|
||||||
KEEP(*(.Level3InterruptVector.text));
|
|
||||||
. = 0x200;
|
|
||||||
KEEP(*(.Level4InterruptVector.text));
|
|
||||||
. = 0x240;
|
|
||||||
KEEP(*(.Level5InterruptVector.text));
|
|
||||||
. = 0x280;
|
|
||||||
KEEP(*(.DebugExceptionVector.text));
|
|
||||||
. = 0x2c0;
|
|
||||||
KEEP(*(.NMIExceptionVector.text));
|
|
||||||
. = 0x300;
|
|
||||||
KEEP(*(.KernelExceptionVector.text));
|
|
||||||
. = 0x340;
|
|
||||||
KEEP(*(.UserExceptionVector.text));
|
|
||||||
. = 0x3C0;
|
|
||||||
KEEP(*(.DoubleExceptionVector.text));
|
|
||||||
. = 0x400;
|
|
||||||
*(.*Vector.literal)
|
|
||||||
|
|
||||||
*(.UserEnter.literal);
|
|
||||||
*(.UserEnter.text);
|
|
||||||
. = ALIGN (16);
|
|
||||||
*(.entry.text)
|
|
||||||
*(.init.literal)
|
|
||||||
*(.init)
|
|
||||||
_init_end = ABSOLUTE(.);
|
|
||||||
} > iram0_0_seg
|
|
||||||
|
|
||||||
.iram0.text :
|
|
||||||
{
|
|
||||||
/* Code marked as runnning out of IRAM */
|
|
||||||
_iram_text_start = ABSOLUTE(.);
|
|
||||||
*(.iram1 .iram1.*)
|
|
||||||
*freertos/*(.literal .text .literal.* .text.*)
|
|
||||||
*heap/multi_heap.o(.literal .text .literal.* .text.*)
|
|
||||||
*heap/multi_heap_poisoning.o(.literal .text .literal.* .text.*)
|
|
||||||
*esp32/panic.o(.literal .text .literal.* .text.*)
|
|
||||||
*esp32/core_dump.o(.literal .text .literal.* .text.*)
|
|
||||||
*app_trace/*(.literal .text .literal.* .text.*)
|
|
||||||
*xtensa-debug-module/eri.o(.literal .text .literal.* .text.*)
|
|
||||||
*librtc.a:(.literal .text .literal.* .text.*)
|
|
||||||
*soc/esp32/rtc_*.o(.literal .text .literal.* .text.*)
|
|
||||||
*soc/esp32/cpu_util.o(.literal .text .literal.* .text.*)
|
|
||||||
*libhal.a:(.literal .text .literal.* .text.*)
|
|
||||||
*libgcc.a:lib2funcs.o(.literal .text .literal.* .text.*)
|
|
||||||
*spi_flash/spi_flash_rom_patch.o(.literal .text .literal.* .text.*)
|
|
||||||
*libgcov.a:(.literal .text .literal.* .text.*)
|
|
||||||
INCLUDE esp32.spiram.rom-functions-iram.ld
|
|
||||||
_iram_text_end = ABSOLUTE(.);
|
|
||||||
_iram_end = ABSOLUTE(.);
|
|
||||||
} > iram0_0_seg
|
|
||||||
|
|
||||||
.dram0.data :
|
|
||||||
{
|
|
||||||
_data_start = ABSOLUTE(.);
|
|
||||||
_bt_data_start = ABSOLUTE(.);
|
|
||||||
*libbt.a:(.data .data.*)
|
|
||||||
. = ALIGN (4);
|
|
||||||
_bt_data_end = ABSOLUTE(.);
|
|
||||||
_btdm_data_start = ABSOLUTE(.);
|
|
||||||
*libbtdm_app.a:(.data .data.*)
|
|
||||||
. = ALIGN (4);
|
|
||||||
_btdm_data_end = ABSOLUTE(.);
|
|
||||||
*(.data)
|
|
||||||
*(.data.*)
|
|
||||||
*(.gnu.linkonce.d.*)
|
|
||||||
*(.data1)
|
|
||||||
*(.sdata)
|
|
||||||
*(.sdata.*)
|
|
||||||
*(.gnu.linkonce.s.*)
|
|
||||||
*(.sdata2)
|
|
||||||
*(.sdata2.*)
|
|
||||||
*(.gnu.linkonce.s2.*)
|
|
||||||
*(.jcr)
|
|
||||||
*(.dram1 .dram1.*)
|
|
||||||
*esp32/panic.o(.rodata .rodata.*)
|
|
||||||
*libphy.a:(.rodata .rodata.*)
|
|
||||||
*soc/esp32/rtc_clk.o(.rodata .rodata.*)
|
|
||||||
*app_trace/app_trace.o(.rodata .rodata.*)
|
|
||||||
*libgcov.a:(.rodata .rodata.*)
|
|
||||||
*heap/multi_heap.o(.rodata .rodata.*)
|
|
||||||
*heap/multi_heap_poisoning.o(.rodata .rodata.*)
|
|
||||||
INCLUDE esp32.spiram.rom-functions-dram.ld
|
|
||||||
_data_end = ABSOLUTE(.);
|
|
||||||
. = ALIGN(4);
|
|
||||||
} > dram0_0_seg
|
|
||||||
|
|
||||||
/*This section holds data that should not be initialized at power up.
|
|
||||||
The section located in Internal SRAM memory region. The macro _NOINIT
|
|
||||||
can be used as attribute to place data into this section.
|
|
||||||
See the esp_attr.h file for more information.
|
|
||||||
*/
|
|
||||||
.noinit (NOLOAD):
|
|
||||||
{
|
|
||||||
. = ALIGN(4);
|
|
||||||
_noinit_start = ABSOLUTE(.);
|
|
||||||
*(.noinit .noinit.*)
|
|
||||||
. = ALIGN(4) ;
|
|
||||||
_noinit_end = ABSOLUTE(.);
|
|
||||||
} > dram0_0_seg
|
|
||||||
|
|
||||||
/* Shared RAM */
|
|
||||||
.dram0.bss (NOLOAD) :
|
|
||||||
{
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_start = ABSOLUTE(.);
|
|
||||||
_bt_bss_start = ABSOLUTE(.);
|
|
||||||
*libbt.a:(.bss .bss.* COMMON)
|
|
||||||
. = ALIGN (4);
|
|
||||||
_bt_bss_end = ABSOLUTE(.);
|
|
||||||
_btdm_bss_start = ABSOLUTE(.);
|
|
||||||
*libbtdm_app.a:(.bss .bss.* COMMON)
|
|
||||||
. = ALIGN (4);
|
|
||||||
_btdm_bss_end = ABSOLUTE(.);
|
|
||||||
*(.dynsbss)
|
|
||||||
*(.sbss)
|
|
||||||
*(.sbss.*)
|
|
||||||
*(.gnu.linkonce.sb.*)
|
|
||||||
*(.scommon)
|
|
||||||
*(.sbss2)
|
|
||||||
*(.sbss2.*)
|
|
||||||
*(.gnu.linkonce.sb2.*)
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(.share.mem)
|
|
||||||
*(.gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN (8);
|
|
||||||
_bss_end = ABSOLUTE(.);
|
|
||||||
/* The heap starts right after end of this section */
|
|
||||||
_heap_start = ABSOLUTE(.);
|
|
||||||
} > dram0_0_seg
|
|
||||||
|
|
||||||
.flash.rodata :
|
|
||||||
{
|
|
||||||
_rodata_start = ABSOLUTE(.);
|
|
||||||
*(.rodata)
|
|
||||||
*(.rodata.*)
|
|
||||||
*(.irom1.text) /* catch stray ICACHE_RODATA_ATTR */
|
|
||||||
*(.gnu.linkonce.r.*)
|
|
||||||
*(.rodata1)
|
|
||||||
__XT_EXCEPTION_TABLE_ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_table)
|
|
||||||
*(.gcc_except_table .gcc_except_table.*)
|
|
||||||
*(.gnu.linkonce.e.*)
|
|
||||||
*(.gnu.version_r)
|
|
||||||
. = (. + 3) & ~ 3;
|
|
||||||
__eh_frame = ABSOLUTE(.);
|
|
||||||
KEEP(*(.eh_frame))
|
|
||||||
. = (. + 7) & ~ 3;
|
|
||||||
/* C++ constructor and destructor tables, properly ordered: */
|
|
||||||
__init_array_start = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.ctors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
|
||||||
KEEP (*(SORT(.ctors.*)))
|
|
||||||
KEEP (*(.ctors))
|
|
||||||
__init_array_end = ABSOLUTE(.);
|
|
||||||
KEEP (*crtbegin.o(.dtors))
|
|
||||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
|
||||||
KEEP (*(SORT(.dtors.*)))
|
|
||||||
KEEP (*(.dtors))
|
|
||||||
/* C++ exception handlers table: */
|
|
||||||
__XT_EXCEPTION_DESCS_ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc)
|
|
||||||
*(.gnu.linkonce.h.*)
|
|
||||||
__XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
|
|
||||||
*(.xt_except_desc_end)
|
|
||||||
*(.dynamic)
|
|
||||||
*(.gnu.version_d)
|
|
||||||
/* Addresses of memory regions reserved via
|
|
||||||
SOC_RESERVE_MEMORY_REGION() */
|
|
||||||
soc_reserved_memory_region_start = ABSOLUTE(.);
|
|
||||||
KEEP (*(.reserved_memory_address))
|
|
||||||
soc_reserved_memory_region_end = ABSOLUTE(.);
|
|
||||||
_rodata_end = ABSOLUTE(.);
|
|
||||||
/* Literals are also RO data. */
|
|
||||||
_lit4_start = ABSOLUTE(.);
|
|
||||||
*(*.lit4)
|
|
||||||
*(.lit4.*)
|
|
||||||
*(.gnu.linkonce.lit4.*)
|
|
||||||
_lit4_end = ABSOLUTE(.);
|
|
||||||
. = ALIGN(4);
|
|
||||||
_thread_local_start = ABSOLUTE(.);
|
|
||||||
*(.tdata)
|
|
||||||
*(.tdata.*)
|
|
||||||
*(.tbss)
|
|
||||||
*(.tbss.*)
|
|
||||||
_thread_local_end = ABSOLUTE(.);
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >drom0_0_seg
|
|
||||||
|
|
||||||
.flash.text :
|
|
||||||
{
|
|
||||||
_stext = .;
|
|
||||||
_text_start = ABSOLUTE(.);
|
|
||||||
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
|
|
||||||
*(.irom0.text) /* catch stray ICACHE_RODATA_ATTR */
|
|
||||||
*(.fini.literal)
|
|
||||||
*(.fini)
|
|
||||||
*(.gnu.version)
|
|
||||||
_text_end = ABSOLUTE(.);
|
|
||||||
_etext = .;
|
|
||||||
|
|
||||||
/* Similar to _iram_start, this symbol goes here so it is
|
|
||||||
resolved by addr2line in preference to the first symbol in
|
|
||||||
the flash.text segment.
|
|
||||||
*/
|
|
||||||
_flash_cache_start = ABSOLUTE(0);
|
|
||||||
} >iram0_2_seg
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user