Teach Lua LTR about ESP32 drom0 location.

This fixes the rather unexpected Fatal Exception(9) crashes when executing
something as trivial as "=type(4)". Also ensured the #if/#else structure
will complain loudly next time we port to a new board.
This commit is contained in:
Johny Mattsson 2016-06-24 18:17:38 +10:00
parent b3e8eddf14
commit 79671aa526
1 changed files with 8 additions and 21 deletions

View File

@ -1,37 +1,24 @@
/** /**
* define start/end address of ro data. * define start/end address of ro data.
* different compiler with different implementation.
*/ */
#ifndef __COMPILER_H__ #ifndef __COMPILER_H__
#define __COMPILER_H__ #define __COMPILER_H__
#if defined(__CC_ARM) // armcc #if defined(__ESP8266__)
//#warning "Please check scatter file to ensure rodata is in ER_IROM1 region."
/* symbols reference to the scatter file */
extern char Image$$ER_IROM1$$Base;
extern char Image$$ER_IROM1$$Limit;
#define RODATA_START_ADDRESS (&Image$$ER_IROM1$$Base)
#define RODATA_END_ADDRESS (&Image$$ER_IROM1$$Limit)
#elif defined(__GNUC__) // gcc
//#warning "Please check linker script to ensure rodata is between _stext and _etext."
/* symbols defined in linker script */
// extern char _rodata_start;
// extern char _rodata_end;
extern char _irom0_text_start; extern char _irom0_text_start;
extern char _irom0_text_end; extern char _irom0_text_end;
// modify linker script to ensure rodata and rodata1 is between _rodata_start and _rodata_end.
// #define RODATA_START_ADDRESS (&_rodata_start)
// #define RODATA_END_ADDRESS (&_rodata_end)
#define RODATA_START_ADDRESS (&_irom0_text_start) #define RODATA_START_ADDRESS (&_irom0_text_start)
#define RODATA_END_ADDRESS (&_irom0_text_end) #define RODATA_END_ADDRESS (&_irom0_text_end)
#elif defined(__ESP32__)
extern char _drom0_text_start;
extern char _drom0_text_end;
#define RODATA_START_ADDRESS (&_drom0_text_start)
#define RODATA_END_ADDRESS (&_drom0_text_end)
#else // other compilers #else // other compilers
/* Firstly, modify rodata's start/end address. Then, comment the line below */ /* Firstly, modify rodata's start/end address. Then, comment the line below */