diff --git a/components/esp8266/include/esp_attr.h b/components/esp8266/include/esp_attr.h index 5beb0327..c13903a2 100644 --- a/components/esp8266/include/esp_attr.h +++ b/components/esp8266/include/esp_attr.h @@ -26,10 +26,10 @@ #define ICACHE_RODATA_ATTR // Forces code into IRAM instead of flash. -#define IRAM_ATTR __attribute__((section(".iram1"))) +#define IRAM_ATTR _SECTION_ATTR_IMPL(".iram1", __COUNTER__) // Forces data into DRAM instead of flash -#define DRAM_ATTR __attribute__((section(".dram0"))) +#define DRAM_ATTR _SECTION_ATTR_IMPL(".dram0", __COUNTER__) // Forces data to be 4 bytes aligned #define WORD_ALIGNED_ATTR __attribute__((aligned(4))) @@ -41,12 +41,23 @@ // Forces data into RTC memory. // Any variable marked with this attribute will keep its value // during a deep sleep / wake cycle. -#define RTC_DATA_ATTR __attribute__((section(".rtc.data"))) +#define RTC_DATA_ATTR _SECTION_ATTR_IMPL(".rtc.data", __COUNTER__) // Forces read-only data into RTC memory. -#define RTC_RODATA_ATTR __attribute__((section(".rtc.rodata"))) +#define RTC_RODATA_ATTR _SECTION_ATTR_IMPL(".rtc.rodata", __COUNTER__) // Forces to put some user defined data in the binary file header, the offset is 0x10. -#define USER_DATA_ATTR __attribute__((section(".user.data"))) +#define USER_DATA_ATTR _SECTION_ATTR_IMPL(".user.data", __COUNTER__) + +// Implementation for a unique custom section +// +// This prevents gcc producing "x causes a section type conflict with y" +// errors if two variables in the same source file have different linkage (maybe const & non-const) but are placed in the same custom section +// +// Using unique sections also means --gc-sections can remove unused +// data with a custom section type set +#define _SECTION_ATTR_IMPL(SECTION, COUNTER) __attribute__((section(SECTION "." _COUNTER_STRINGIFY(COUNTER)))) + +#define _COUNTER_STRINGIFY(COUNTER) #COUNTER #endif /* __ESP_ATTR_H__ */ diff --git a/components/esp8266/ld/esp8266.common.ld b/components/esp8266/ld/esp8266.common.ld index 74b57db7..be1f2c23 100644 --- a/components/esp8266/ld/esp8266.common.ld +++ b/components/esp8266/ld/esp8266.common.ld @@ -106,6 +106,8 @@ SECTIONS *(.init) *(.iram1 .iram1.*) *libspi_flash.a:spi_flash_raw.o(.literal .text .literal.* .text.*) + *libpp.a:(.literal .text .literal.* .text.*) + *libphy.a:(.literal .text .literal.* .text.*) *(.literal .text .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) *(.fini.literal) *(.fini) @@ -233,7 +235,8 @@ SECTIONS *(.user.data) *(.rodata.* .rodata .irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text) *(.literal.* .text.*) - + *(.rodata2.* .rodata2 .literal2.* .literal2 .text2.* .text2) + _irom0_text_end = ABSOLUTE(.); } >irom0_0_seg :irom0_0_phdr diff --git a/components/esp8266/lib/VERSION b/components/esp8266/lib/VERSION index ee242ccd..5126646a 100644 --- a/components/esp8266/lib/VERSION +++ b/components/esp8266/lib/VERSION @@ -1,10 +1,10 @@ gwen: - core: 021ebb5 - net80211: 021ebb5 - pp: 021ebb5 - wpa: 021ebb5 - espnow: 021ebb5 - wps: 021ebb5 + core: 38f8c34 + net80211: 38f8c34 + pp: 38f8c34 + wpa: 38f8c34 + espnow: 38f8c34 + wps: 38f8c34 smartconfig: 2.8.1 phy: 1055_8 diff --git a/components/esp8266/lib/libcore.a b/components/esp8266/lib/libcore.a index 77070d05..c59a80a7 100644 Binary files a/components/esp8266/lib/libcore.a and b/components/esp8266/lib/libcore.a differ diff --git a/components/esp8266/lib/libespnow.a b/components/esp8266/lib/libespnow.a index c15803df..f2c266fb 100644 Binary files a/components/esp8266/lib/libespnow.a and b/components/esp8266/lib/libespnow.a differ diff --git a/components/esp8266/lib/libnet80211.a b/components/esp8266/lib/libnet80211.a index ee98444d..78649994 100644 Binary files a/components/esp8266/lib/libnet80211.a and b/components/esp8266/lib/libnet80211.a differ diff --git a/components/esp8266/lib/libpp.a b/components/esp8266/lib/libpp.a index 3e4a3d6c..9192cddd 100644 Binary files a/components/esp8266/lib/libpp.a and b/components/esp8266/lib/libpp.a differ diff --git a/components/esp8266/lib/libwpa.a b/components/esp8266/lib/libwpa.a index 19b62dce..e6af2b6d 100644 Binary files a/components/esp8266/lib/libwpa.a and b/components/esp8266/lib/libwpa.a differ diff --git a/components/esp8266/lib/libwps.a b/components/esp8266/lib/libwps.a index bc4fc62f..144f4927 100644 Binary files a/components/esp8266/lib/libwps.a and b/components/esp8266/lib/libwps.a differ