1 // Copyright 2018 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_SNAPSHOT_MACROS_H_ 6 #define V8_SNAPSHOT_MACROS_H_ 7 8 #include "include/v8config.h" 9 10 // .byte portability macros. 11 12 #if defined(V8_OS_MACOSX) // MACOSX 13 #define V8_ASM_MANGLE_LABEL "_" 14 #define V8_ASM_RODATA_SECTION ".const_data\n" 15 #define V8_ASM_TEXT_SECTION ".text\n" 16 #define V8_ASM_DECLARE(NAME) ".private_extern " V8_ASM_MANGLE_LABEL NAME "\n" 17 #elif defined(V8_OS_AIX) // AIX 18 #define V8_ASM_RODATA_SECTION ".csect[RO]\n" 19 #define V8_ASM_TEXT_SECTION ".csect .text[PR]\n" 20 #define V8_ASM_MANGLE_LABEL "" 21 #define V8_ASM_DECLARE(NAME) ".globl " V8_ASM_MANGLE_LABEL NAME "\n" 22 #elif defined(V8_OS_WIN) // WIN 23 #if defined(V8_TARGET_ARCH_X64) 24 #define V8_ASM_MANGLE_LABEL "" 25 #else 26 #define V8_ASM_MANGLE_LABEL "_" 27 #endif 28 #define V8_ASM_RODATA_SECTION ".section .rodata\n" 29 #define V8_ASM_TEXT_SECTION ".section .text\n" 30 #define V8_ASM_DECLARE(NAME) 31 #else // !MACOSX && !WIN && !AIX 32 #define V8_ASM_MANGLE_LABEL "" 33 #define V8_ASM_RODATA_SECTION ".section .rodata\n" 34 #if defined(OS_CHROMEOS) // ChromeOS 35 #define V8_ASM_TEXT_SECTION ".section .text.hot.embedded\n" 36 #else 37 #define V8_ASM_TEXT_SECTION ".section .text\n" 38 #endif 39 #if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) 40 #define V8_ASM_DECLARE(NAME) ".global " V8_ASM_MANGLE_LABEL NAME "\n" 41 #else 42 #define V8_ASM_DECLARE(NAME) ".local " V8_ASM_MANGLE_LABEL NAME "\n" 43 #endif 44 #endif 45 46 // Align to kCodeAlignment. 47 #define V8_ASM_BALIGN32 ".balign 32\n" 48 #define V8_ASM_LABEL(NAME) V8_ASM_MANGLE_LABEL NAME ":\n" 49 50 // clang-format off 51 #if defined(V8_OS_AIX) 52 53 #define V8_EMBEDDED_TEXT_HEADER(LABEL) \ 54 __asm__(V8_ASM_DECLARE(#LABEL) \ 55 ".csect " #LABEL "[DS]\n" \ 56 #LABEL ":\n" \ 57 ".llong ." #LABEL ", TOC[tc0], 0\n" \ 58 V8_ASM_TEXT_SECTION \ 59 "." #LABEL ":\n"); 60 61 #define V8_EMBEDDED_RODATA_HEADER(LABEL) \ 62 __asm__(V8_ASM_RODATA_SECTION \ 63 V8_ASM_DECLARE(#LABEL) \ 64 ".align 5\n" \ 65 V8_ASM_LABEL(#LABEL)); 66 67 #else 68 69 #define V8_EMBEDDED_TEXT_HEADER(LABEL) \ 70 __asm__(V8_ASM_TEXT_SECTION \ 71 V8_ASM_DECLARE(#LABEL) \ 72 V8_ASM_BALIGN32 \ 73 V8_ASM_LABEL(#LABEL)); 74 75 #define V8_EMBEDDED_RODATA_HEADER(LABEL) \ 76 __asm__(V8_ASM_RODATA_SECTION \ 77 V8_ASM_DECLARE(#LABEL) \ 78 V8_ASM_BALIGN32 \ 79 V8_ASM_LABEL(#LABEL)); 80 81 #endif // #if defined(V8_OS_AIX) 82 #endif // V8_SNAPSHOT_MACROS_H_ 83