1 /*- 2 * SPDX-License-Identifier: BSD-1-Clause 3 * 4 * Copyright 2018 Andrew Turner 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 13 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 14 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 15 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 16 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 17 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 18 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 19 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 20 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 21 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 */ 23 24 #ifndef _CRT_H_ 25 #define _CRT_H_ 26 27 #define HAVE_CTORS 28 #define CTORS_CONSTRUCTORS 29 #ifdef __mips_o32 30 #define INIT_CALL_SEQ(func) \ 31 ".set push \n" \ 32 ".set noreorder \n" \ 33 "bal 1f \n" \ 34 "nop \n" \ 35 "1: \n" \ 36 ".cpload $ra \n" \ 37 "addu $sp, $sp, -8 \n" \ 38 ".cprestore 4 \n" \ 39 ".local " __STRING(func) "\n" \ 40 "jal " __STRING(func) "\n" \ 41 "nop \n" \ 42 "addu $sp, $sp, 8 \n" \ 43 ".set pop\n" 44 #else 45 #define INIT_CALL_SEQ(func) \ 46 ".set push \n" \ 47 ".set noreorder \n" \ 48 "bal 1f \n" \ 49 "nop \n" \ 50 "1: \n" \ 51 ".cpsetup $ra, $zero, 1b \n" \ 52 ".local " __STRING(func) "\n" \ 53 "jal " __STRING(func) "\n" \ 54 "nop \n" \ 55 ".set pop\n" 56 #endif 57 58 #endif 59