// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_SNAPSHOT_MACROS_H_ #define V8_SNAPSHOT_MACROS_H_ #include "include/v8config.h" // .byte portability macros. #if defined(V8_OS_MACOSX) // MACOSX #define V8_ASM_MANGLE_LABEL "_" #define V8_ASM_RODATA_SECTION ".const_data\n" #define V8_ASM_TEXT_SECTION ".text\n" #define V8_ASM_DECLARE(NAME) ".private_extern " V8_ASM_MANGLE_LABEL NAME "\n" #elif defined(V8_OS_AIX) // AIX #define V8_ASM_RODATA_SECTION ".csect[RO]\n" #define V8_ASM_TEXT_SECTION ".csect .text[PR]\n" #define V8_ASM_MANGLE_LABEL "" #define V8_ASM_DECLARE(NAME) ".globl " V8_ASM_MANGLE_LABEL NAME "\n" #elif defined(V8_OS_WIN) // WIN #if defined(V8_TARGET_ARCH_X64) #define V8_ASM_MANGLE_LABEL "" #else #define V8_ASM_MANGLE_LABEL "_" #endif #define V8_ASM_RODATA_SECTION ".section .rodata\n" #define V8_ASM_TEXT_SECTION ".section .text\n" #define V8_ASM_DECLARE(NAME) #else // !MACOSX && !WIN && !AIX #define V8_ASM_MANGLE_LABEL "" #define V8_ASM_RODATA_SECTION ".section .rodata\n" #if defined(OS_CHROMEOS) // ChromeOS #define V8_ASM_TEXT_SECTION ".section .text.hot.embedded\n" #else #define V8_ASM_TEXT_SECTION ".section .text\n" #endif #if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) #define V8_ASM_DECLARE(NAME) ".global " V8_ASM_MANGLE_LABEL NAME "\n" #else #define V8_ASM_DECLARE(NAME) ".local " V8_ASM_MANGLE_LABEL NAME "\n" #endif #endif // Align to kCodeAlignment. #define V8_ASM_BALIGN32 ".balign 32\n" #define V8_ASM_LABEL(NAME) V8_ASM_MANGLE_LABEL NAME ":\n" // clang-format off #if defined(V8_OS_AIX) #define V8_EMBEDDED_TEXT_HEADER(LABEL) \ __asm__(V8_ASM_DECLARE(#LABEL) \ ".csect " #LABEL "[DS]\n" \ #LABEL ":\n" \ ".llong ." #LABEL ", TOC[tc0], 0\n" \ V8_ASM_TEXT_SECTION \ "." #LABEL ":\n"); #define V8_EMBEDDED_RODATA_HEADER(LABEL) \ __asm__(V8_ASM_RODATA_SECTION \ V8_ASM_DECLARE(#LABEL) \ ".align 5\n" \ V8_ASM_LABEL(#LABEL)); #else #define V8_EMBEDDED_TEXT_HEADER(LABEL) \ __asm__(V8_ASM_TEXT_SECTION \ V8_ASM_DECLARE(#LABEL) \ V8_ASM_BALIGN32 \ V8_ASM_LABEL(#LABEL)); #define V8_EMBEDDED_RODATA_HEADER(LABEL) \ __asm__(V8_ASM_RODATA_SECTION \ V8_ASM_DECLARE(#LABEL) \ V8_ASM_BALIGN32 \ V8_ASM_LABEL(#LABEL)); #endif // #if defined(V8_OS_AIX) #endif // V8_SNAPSHOT_MACROS_H_