Skip to content

Commit

Permalink
Move ICACHE_* to unique sections, local LD script
Browse files Browse the repository at this point in the history
Similar to PROGMEM changes, make the name of each ICACHE_* variable/fuction
unique to avoid issues with section conflicts.

Also rename the generated LD linker script to avoid issue with older copies
of the eagle.app.v6.common.ld which were generated by the build process
in a global directory before being moved to the {build.path}.  The linker
would use the older, generated *.ld file instead of the generated one, which
would lead to runtime failures on some systems and cause the VTABLE location
to not correspond to the IDE menu selection.

Fixes #5115, and is an update to #5117 and #5116.
  • Loading branch information
earlephilhower committed Sep 19, 2018
1 parent 1a44f79 commit 30eb729
Show file tree
Hide file tree
Showing 26 changed files with 32 additions and 30 deletions.
2 changes: 1 addition & 1 deletion platform.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ recipe.hooks.core.prebuild.1.pattern.windows=cmd.exe /c mkdir {build.path}\core
recipe.hooks.core.prebuild.2.pattern.windows=

## Build the app.ld linker file
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/eagle.app.v6.common.ld"
recipe.hooks.linking.prelink.1.pattern="{compiler.path}{compiler.c.cmd}" -CC -E -P {build.vtable_flags} "{runtime.platform.path}/tools/sdk/ld/eagle.app.v6.common.ld.h" -o "{build.path}/local.eagle.app.v6.common.ld"

## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.cpreprocessor.flags} {compiler.c.flags} -DF_CPU={build.f_cpu} {build.lwip_flags} {build.debug_port} {build.debug_level} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" {build.led} {compiler.c.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{object_file}"
Expand Down
8 changes: 5 additions & 3 deletions tools/sdk/include/c_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,11 @@ typedef enum {
#define SHMEM_ATTR

#ifdef ICACHE_FLASH
#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))
#define ICACHE_RAM_ATTR __attribute__((section(".iram.text")))
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
#define __ICACHE_STRINGIZE_NX(A) #A
#define __ICACHE_STRINGIZE(A) __ICACHE_STRINGIZE_NX(A)
#define ICACHE_FLASH_ATTR __attribute__((section("\".irom0.text." __FILE__ "." __ICACHE_STRINGIZE(__LINE__) "." __ICACHE_STRINGIZE(__COUNTER__) "\"")))
#define ICACHE_RAM_ATTR __attribute__((section("\".iram.text." __FILE__ "." __ICACHE_STRINGIZE(__LINE__) "." __ICACHE_STRINGIZE(__COUNTER__) "\"")))
#define ICACHE_RODATA_ATTR __attribute__((section("\".irom.text." __FILE__ "." __ICACHE_STRINGIZE(__LINE__) "." __ICACHE_STRINGIZE(__COUNTER__) "\"")))
#else
#define ICACHE_FLASH_ATTR
#define ICACHE_RAM_ATTR
Expand Down
6 changes: 3 additions & 3 deletions tools/sdk/ld/eagle.app.v6.common.ld.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ SECTIONS
*libwpa.a:(.literal.* .text.*)
*libwpa2.a:(.literal.* .text.*)
*libwps.a:(.literal.* .text.*)
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text .irom.text.*)
*(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom0.text.* .irom.text .irom.text.*)
_irom0_text_end = ABSOLUTE(.);
_flash_code_end = ABSOLUTE(.);
} >irom0_0_seg :irom0_0_phdr
Expand Down Expand Up @@ -164,8 +164,8 @@ SECTIONS
*(.init.literal)
*(.init)
*(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
*.cpp.o(.iram.text)
*.c.o(.iram.text)
*.cpp.o(.iram.text .iram.text.*)
*.c.o(.iram.text .iram.text.*)
#ifdef VTABLES_IN_IRAM
*(.rodata._ZTV*) /* C++ vtables */
#endif
Expand Down
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.16m14m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x411FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.16m15m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x411FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x0 );
PROVIDE ( _SPIFFS_block = 0x0 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m128.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m144.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m160.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m192.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m256.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m512.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.1m64.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x402FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.2m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x403FB000 );
PROVIDE ( _SPIFFS_page = 0x0 );
PROVIDE ( _SPIFFS_block = 0x0 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.2m1m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x403FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.2m512.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x403FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.4m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x405FB000 );
PROVIDE ( _SPIFFS_page = 0x0 );
PROVIDE ( _SPIFFS_block = 0x0 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.4m1m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x405FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.4m2m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x405FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.4m3m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x405FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.512k.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x4027B000 );
PROVIDE ( _SPIFFS_page = 0x0 );
PROVIDE ( _SPIFFS_block = 0x0 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.512k128.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x4027B000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.512k32.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x4027B000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.512k64.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x4027B000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x1000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.8m6m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x409FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"
2 changes: 1 addition & 1 deletion tools/sdk/ld/eagle.flash.8m7m.ld
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ PROVIDE ( _SPIFFS_end = 0x409FB000 );
PROVIDE ( _SPIFFS_page = 0x100 );
PROVIDE ( _SPIFFS_block = 0x2000 );

INCLUDE "eagle.app.v6.common.ld"
INCLUDE "local.eagle.app.v6.common.ld"

0 comments on commit 30eb729

Please sign in to comment.