mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fix(linker): fixed extern linker symbol type from int to char
This commit is contained in:
parent
c7415fc78d
commit
256ef127dd
@ -136,10 +136,18 @@ esp_err_t mmu_config_psram_rodata_segment(uint32_t start_page, uint32_t psram_si
|
||||
/*----------------------------------------------------------------------------
|
||||
Part 2 APIs (See @Backgrounds on top of this file)
|
||||
-------------------------------------------------------------------------------*/
|
||||
extern int _instruction_reserved_start;
|
||||
extern int _instruction_reserved_end;
|
||||
extern int _rodata_reserved_start;
|
||||
extern int _rodata_reserved_end;
|
||||
/**
|
||||
* If using `int`, then for CLANG, with enabled optimization when inlined function is provided with the address of external symbol, the two least bits of the constant used inside that function get cleared.
|
||||
* Optimizer assumes that address of external symbol should be aligned to 4-bytes and therefore aligns constant value used for bitwise AND operation with that address.
|
||||
*
|
||||
* This means `extern int _instruction_reserved_start;` can be unaligned to 4 bytes, whereas using `char` can solve this issue.
|
||||
*
|
||||
* As we only use these symbol address, we declare them as `char` here
|
||||
*/
|
||||
extern char _instruction_reserved_start;
|
||||
extern char _instruction_reserved_end;
|
||||
extern char _rodata_reserved_start;
|
||||
extern char _rodata_reserved_end;
|
||||
|
||||
//------------------------------------Copy Flash .text to PSRAM-------------------------------------//
|
||||
#if CONFIG_SPIRAM_FETCH_INSTRUCTIONS
|
||||
|
@ -28,10 +28,18 @@
|
||||
#define ALIGN_UP_BY(num, align) (((num) + ((align) - 1)) & ~((align) - 1))
|
||||
#define ALIGN_DOWN_BY(num, align) ((num) & (~((align) - 1)))
|
||||
|
||||
extern int _instruction_reserved_start;
|
||||
extern int _instruction_reserved_end;
|
||||
extern int _rodata_reserved_start;
|
||||
extern int _rodata_reserved_end;
|
||||
/**
|
||||
* If using `int`, then for CLANG, with enabled optimization when inlined function is provided with the address of external symbol, the two least bits of the constant used inside that function get cleared.
|
||||
* Optimizer assumes that address of external symbol should be aligned to 4-bytes and therefore aligns constant value used for bitwise AND operation with that address.
|
||||
*
|
||||
* This means `extern int _instruction_reserved_start;` can be unaligned to 4 bytes, whereas using `char` can solve this issue.
|
||||
*
|
||||
* As we only use these symbol address, we declare them as `char` here
|
||||
*/
|
||||
extern char _instruction_reserved_start;
|
||||
extern char _instruction_reserved_end;
|
||||
extern char _rodata_reserved_start;
|
||||
extern char _rodata_reserved_end;
|
||||
|
||||
const static char *TAG = "mmu_psram";
|
||||
static uint32_t s_irom_vaddr_start;
|
||||
|
@ -136,10 +136,19 @@ extern int _rtc_bss_end;
|
||||
extern int _bss_bt_start;
|
||||
extern int _bss_bt_end;
|
||||
#endif // CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED
|
||||
extern int _instruction_reserved_start;
|
||||
extern int _instruction_reserved_end;
|
||||
extern int _rodata_reserved_start;
|
||||
extern int _rodata_reserved_end;
|
||||
|
||||
/**
|
||||
* If using `int`, then for CLANG, with enabled optimization when inlined function is provided with the address of external symbol, the two least bits of the constant used inside that function get cleared.
|
||||
* Optimizer assumes that address of external symbol should be aligned to 4-bytes and therefore aligns constant value used for bitwise AND operation with that address.
|
||||
*
|
||||
* This means `extern int _instruction_reserved_start;` can be unaligned to 4 bytes, whereas using `char` can solve this issue.
|
||||
*
|
||||
* As we only use these symbol address, we declare them as `char` here
|
||||
*/
|
||||
extern char _instruction_reserved_start;
|
||||
extern char _instruction_reserved_end;
|
||||
extern char _rodata_reserved_start;
|
||||
extern char _rodata_reserved_end;
|
||||
|
||||
extern int _vector_table;
|
||||
#if SOC_INT_CLIC_SUPPORTED
|
||||
|
@ -36,13 +36,13 @@
|
||||
#include "spi_flash_mmap.h"
|
||||
|
||||
#if CONFIG_SPIRAM_FETCH_INSTRUCTIONS
|
||||
extern int _instruction_reserved_start;
|
||||
extern int _instruction_reserved_end;
|
||||
extern char _instruction_reserved_start;
|
||||
extern char _instruction_reserved_end;
|
||||
#endif
|
||||
|
||||
#if CONFIG_SPIRAM_RODATA
|
||||
extern int _rodata_reserved_start;
|
||||
extern int _rodata_reserved_end;
|
||||
extern char _rodata_reserved_start;
|
||||
extern char _rodata_reserved_end;
|
||||
#endif
|
||||
|
||||
#if !CONFIG_SPI_FLASH_ROM_IMPL
|
||||
|
Loading…
Reference in New Issue
Block a user