1// Copyright 2017 The Fuchsia 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#pragma once 6 7#ifndef __has_feature 8#define __has_feature(x) 0 9#endif 10 11#define ENTRY(name) \ 12 .globl name; \ 13 .type name, %function; \ 14name: \ 15 .cfi_startproc 16 17#define END(name) \ 18 .cfi_endproc; \ 19 .size name, . - name 20 21// This copies the .type and .size info as well as the value. 22#define ALIAS(old, new) \ 23 new = old; \ 24 .globl new 25 26#define WEAK_ALIAS(old, new) \ 27 new = old; \ 28 .weak new 29 30// See __asan_weak_alias in asan_impl.h. 31#if __has_feature(address_sanitizer) 32#define ASAN_WEAK_ALIAS(name) WEAK_ALIAS(name, __asan_##name) 33#else // !__has_feature(address_sanitizer) 34#define ASAN_WEAK_ALIAS(name) // Don't define __asan_##name. 35#endif // __has_feature(address_sanitizer) 36 37#ifdef __aarch64__ 38.macro push_regs reg1, reg2 39 stp \reg1, \reg2, [sp, #-16]! 40 .cfi_adjust_cfa_offset 16 41 .cfi_rel_offset \reg1, 0 42 .cfi_rel_offset \reg2, 8 43.endm 44.macro pop_regs reg1, reg2 45 ldp \reg1, \reg2, [sp], #16 46 .cfi_adjust_cfa_offset -16 47 .cfi_same_value \reg1 48 .cfi_same_value \reg2 49.endm 50#endif 51 52#ifdef __x86_64__ 53.macro push_reg reg 54 push \reg 55 .cfi_adjust_cfa_offset 8 56 .cfi_rel_offset \reg, 0 57.endm 58.macro pop_reg reg 59 pop \reg 60 .cfi_adjust_cfa_offset -8 61 .cfi_same_value \reg 62.endm 63#endif 64