From 7956a47bb49228458235dc3c8f98feeeb90dafde Mon Sep 17 00:00:00 2001 From: TerryE Date: Wed, 4 Jul 2018 13:50:13 +0100 Subject: [PATCH] Add Cygwin support for app/lua/luac_cross make and spiffsimg --- app/lua/compiler.h | 47 ---------------------------------------------- app/lua/lrotable.c | 25 ++++++++++++++---------- app/lua/lstring.c | 13 ++++++++----- 3 files changed, 23 insertions(+), 62 deletions(-) delete mode 100644 app/lua/compiler.h diff --git a/app/lua/compiler.h b/app/lua/compiler.h deleted file mode 100644 index 309c49b2..00000000 --- a/app/lua/compiler.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * define start/end address of ro data. - * different compiler with different implementation. - */ - -#ifndef __COMPILER_H__ -#define __COMPILER_H__ - -#if defined(__CC_ARM) // armcc - -//#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_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_END_ADDRESS (&_irom0_text_end) - -#else // other compilers - -/* Firstly, modify rodata's start/end address. Then, comment the line below */ -#error "Please modify RODATA_START_ADDRESS and RODATA_END_ADDRESS below." - -/* Perhaps you can use start/end address of flash */ -#define RODATA_START_ADDRESS ((char*)0x40200000) -#define RODATA_END_ADDRESS ((char*)0x40280000) - -#endif - -#endif // __COMPILER_H__ - diff --git a/app/lua/lrotable.c b/app/lua/lrotable.c index a5cbb7ca..5ece42ff 100644 --- a/app/lua/lrotable.c +++ b/app/lua/lrotable.c @@ -125,17 +125,22 @@ void luaR_getcstr(char *dest, const TString *src, size_t maxsize) { } } +#ifdef LUA_META_ROTABLES +/* Set in RO check depending on platform */ +#if defined(LUA_CROSS_COMPILER) && defined(__CYGWIN__) +extern char __end__[]; +#define IN_RO_AREA(p) ((p) < __end__) +#elif defined(LUA_CROSS_COMPILER) +extern char _edata[]; +#define IN_RO_AREA(p) ((p) < _edata) +#else /* xtensa tool chain for ESP target */ +extern char _irom0_text_start[]; +extern char _irom0_text_end[]; +#define IN_RO_AREA(p) ((p) >= _irom0_text_start && (p) <= _irom0_text_end) +#endif + /* Return 1 if the given pointer is a rotable */ -#ifdef LUA_META_ROTABLES -#ifdef LUA_CROSS_COMPILER -extern char edata[]; int luaR_isrotable(void *p) { - return (char*)p <= edata; -} -#else -#include "compiler.h" -int luaR_isrotable(void *p) { - return RODATA_START_ADDRESS <= (char*)p && (char*)p <= RODATA_END_ADDRESS; + return IN_RO_AREA((char *)p); } #endif -#endif diff --git a/app/lua/lstring.c b/app/lua/lstring.c index 2257c146..ee84e4d7 100644 --- a/app/lua/lstring.c +++ b/app/lua/lstring.c @@ -80,13 +80,16 @@ static TString *newlstr (lua_State *L, const char *str, size_t l, return ts; } -#include "compiler.h" -static int lua_is_ptr_in_ro_area(const char *p) { #ifdef LUA_CROSS_COMPILER - return 0; -#else - return p >= RODATA_START_ADDRESS && p <= RODATA_END_ADDRESS; +#define IN_RO_AREA(p) (0) +#else /* xtensa tool chain for ESP */ +extern char _irom0_text_start[]; +extern char _irom0_text_end[]; +#define IN_RO_AREA(p) ((p) >= _irom0_text_start && (p) <= _irom0_text_end) #endif + +int lua_is_ptr_in_ro_area(const char *p) { + return IN_RO_AREA(p); } /*