1 /* Assembler macros for m68k. 2 Copyright (C) 1998-2021 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library. If not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <sysdeps/generic/sysdep.h> 20 21 #ifdef __ASSEMBLER__ 22 23 /* Define an entry point visible from C. 24 25 There is currently a bug in gdb which prevents us from specifying 26 incomplete stabs information. Fake some entries here which specify 27 the current source file. */ 28 # define ENTRY(name) \ 29 .globl C_SYMBOL_NAME(name); \ 30 .type C_SYMBOL_NAME(name),@function; \ 31 .p2align 2; \ 32 C_LABEL(name) \ 33 cfi_startproc; \ 34 CALL_MCOUNT 35 36 # undef END 37 # define END(name) \ 38 cfi_endproc; \ 39 .size name,.-name 40 41 42 /* If compiled for profiling, call `_mcount' at the start of each function. */ 43 # ifdef PROF 44 /* The mcount code relies on a normal frame pointer being on the stack 45 to locate our caller, so push one just for its benefit. */ 46 # define CALL_MCOUNT \ 47 move.l %fp, -(%sp); \ 48 cfi_adjust_cfa_offset (4); cfi_rel_offset (%a6, 0); \ 49 move.l %sp, %fp; \ 50 jbsr JUMPTARGET (_mcount); \ 51 move.l (%sp)+, %fp; \ 52 cfi_adjust_cfa_offset (-4); cfi_restore (%a6); 53 # else 54 # define CALL_MCOUNT /* Do nothing. */ 55 # endif 56 57 # define PSEUDO(name, syscall_name, args) \ 58 .globl __syscall_error; \ 59 ENTRY (name) \ 60 DO_CALL (syscall_name, args); \ 61 jcc JUMPTARGET(__syscall_error) 62 63 # undef PSEUDO_END 64 # define PSEUDO_END(name) \ 65 END (name) 66 67 # undef JUMPTARGET 68 # ifdef PIC 69 # define JUMPTARGET(name) name##@PLTPC 70 # else 71 # define JUMPTARGET(name) name 72 # endif 73 74 #endif /* __ASSEMBLER__ */ 75