Implement AOT support for RISCV (#649)
Enable RISCV AOT support, the supported ABIs are LP64 and LP64D for riscv64, ILP32 and ILP32D for riscv32.
For wamrc:
use --target=riscv64/riscv32 to specify the target arch of output AOT file,
use --target-abi=lp64d/lp64/ilp32d/ilp32 to specify the target ABI,
if --target-abi isn't specified, by default lp64d is used for riscv64, and ilp32d is used for riscv32.
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
Co-authored-by: wenyongh <wenyong.huang@intel.com>
This commit is contained in:
@ -182,6 +182,7 @@ GET_U64_FROM_ADDR(uint32 *addr)
|
||||
#define E_MACHINE_MIPS_X 51 /* Stanford MIPS-X */
|
||||
#define E_MACHINE_X86_64 62 /* AMD x86-64 architecture */
|
||||
#define E_MACHINE_XTENSA 94 /* Tensilica Xtensa Architecture */
|
||||
#define E_MACHINE_RISCV 243 /* RISC-V 32/64 */
|
||||
#define E_MACHINE_WIN_X86_64 0x8664 /* Windowx x86-64 architecture */
|
||||
|
||||
/* Legal values for e_version */
|
||||
@ -257,6 +258,9 @@ get_aot_file_target(AOTTargetInfo *target_info,
|
||||
case E_MACHINE_XTENSA:
|
||||
machine_type = "xtensa";
|
||||
break;
|
||||
case E_MACHINE_RISCV:
|
||||
machine_type = "riscv";
|
||||
break;
|
||||
default:
|
||||
set_error_buf_v(error_buf, error_buf_size,
|
||||
"unknown machine type %d",
|
||||
@ -1030,7 +1034,8 @@ load_object_data_sections(const uint8 **p_buf, const uint8 *buf_end,
|
||||
/* Create each data section */
|
||||
for (i = 0; i < module->data_section_count; i++) {
|
||||
int map_prot = MMAP_PROT_READ | MMAP_PROT_WRITE;
|
||||
#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_AMD_64)
|
||||
#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_AMD_64) \
|
||||
|| defined(BUILD_TARGET_RISCV64_LP64D) || defined(BUILD_TARGET_RISCV64_LP64)
|
||||
/* aot code and data in x86_64 must be in range 0 to 2G due to
|
||||
relocation for R_X86_64_32/32S/PC32 */
|
||||
int map_flags = MMAP_MAP_32BIT;
|
||||
@ -1501,6 +1506,7 @@ do_text_relocation(AOTModule *module,
|
||||
symbol_addr = module->code;
|
||||
}
|
||||
else if (!strcmp(symbol, ".data")
|
||||
|| !strcmp(symbol, ".sdata")
|
||||
|| !strcmp(symbol, ".rdata")
|
||||
|| !strcmp(symbol, ".rodata")
|
||||
/* ".rodata.cst4/8/16/.." */
|
||||
@ -2235,7 +2241,8 @@ create_sections(const uint8 *buf, uint32 size,
|
||||
if (section_size > 0) {
|
||||
int map_prot = MMAP_PROT_READ | MMAP_PROT_WRITE
|
||||
| MMAP_PROT_EXEC;
|
||||
#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_AMD_64)
|
||||
#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_AMD_64) \
|
||||
|| defined(BUILD_TARGET_RISCV64_LP64D) || defined(BUILD_TARGET_RISCV64_LP64)
|
||||
/* aot code and data in x86_64 must be in range 0 to 2G due to
|
||||
relocation for R_X86_64_32/32S/PC32 */
|
||||
int map_flags = MMAP_MAP_32BIT;
|
||||
|
||||
Reference in New Issue
Block a user