macros.h 2.64 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 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"
16
#define V8_ASM_DECLARE(NAME) ".private_extern " V8_ASM_MANGLE_LABEL NAME "\n"
17 18 19 20 21
#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"
22 23 24 25 26 27 28 29
#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"
30
#define V8_ASM_DECLARE(NAME)
31
#else  // !MACOSX && !WIN && !AIX
32 33
#define V8_ASM_MANGLE_LABEL ""
#define V8_ASM_RODATA_SECTION ".section .rodata\n"
34 35 36
#if defined(OS_CHROMEOS)  // ChromeOS
#define V8_ASM_TEXT_SECTION ".section .text.hot.embedded\n"
#else
37
#define V8_ASM_TEXT_SECTION ".section .text\n"
38
#endif
39 40 41
#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64)
#define V8_ASM_DECLARE(NAME) ".global " V8_ASM_MANGLE_LABEL NAME "\n"
#else
42
#define V8_ASM_DECLARE(NAME) ".global " V8_ASM_MANGLE_LABEL NAME "\n"
43
#endif
44 45 46 47 48 49 50
#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
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#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

69 70
#define V8_EMBEDDED_TEXT_HEADER(LABEL) \
  __asm__(V8_ASM_TEXT_SECTION          \
71
          V8_ASM_DECLARE(#LABEL)       \
72 73 74 75 76
          V8_ASM_BALIGN32              \
          V8_ASM_LABEL(#LABEL));

#define V8_EMBEDDED_RODATA_HEADER(LABEL) \
  __asm__(V8_ASM_RODATA_SECTION          \
77
          V8_ASM_DECLARE(#LABEL)         \
78 79 80
          V8_ASM_BALIGN32                \
          V8_ASM_LABEL(#LABEL));

81
#endif  // #if defined(V8_OS_AIX)
82
#endif  // V8_SNAPSHOT_MACROS_H_