175fd0b74Schristos /* MSP430 ELF support for BFD. 2*e992f068Schristos Copyright (C) 2002-2022 Free Software Foundation, Inc. 375fd0b74Schristos Contributed by Dmitry Diky <diwil@mail.ru> 475fd0b74Schristos 575fd0b74Schristos This file is part of BFD, the Binary File Descriptor library. 675fd0b74Schristos 775fd0b74Schristos This program is free software; you can redistribute it and/or modify 875fd0b74Schristos it under the terms of the GNU General Public License as published by 975fd0b74Schristos the Free Software Foundation; either version 3 of the License, or 1075fd0b74Schristos (at your option) any later version. 1175fd0b74Schristos 1275fd0b74Schristos This program is distributed in the hope that it will be useful, 1375fd0b74Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 1475fd0b74Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1575fd0b74Schristos GNU General Public License for more details. 1675fd0b74Schristos 1775fd0b74Schristos You should have received a copy of the GNU General Public License 1875fd0b74Schristos along with this program; if not, write to the Free Software Foundation, 1975fd0b74Schristos Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 2075fd0b74Schristos 2175fd0b74Schristos #ifndef _ELF_MSP430_H 2275fd0b74Schristos #define _ELF_MSP430_H 2375fd0b74Schristos 2475fd0b74Schristos #include "elf/reloc-macros.h" 2575fd0b74Schristos 2675fd0b74Schristos /* Processor specific flags for the ELF header e_flags field. */ 2775fd0b74Schristos #define EF_MSP430_MACH 0xff 2875fd0b74Schristos 2975fd0b74Schristos #define E_MSP430_MACH_MSP430x11 11 3075fd0b74Schristos #define E_MSP430_MACH_MSP430x11x1 110 3175fd0b74Schristos #define E_MSP430_MACH_MSP430x12 12 3275fd0b74Schristos #define E_MSP430_MACH_MSP430x13 13 3375fd0b74Schristos #define E_MSP430_MACH_MSP430x14 14 3475fd0b74Schristos #define E_MSP430_MACH_MSP430x15 15 3575fd0b74Schristos #define E_MSP430_MACH_MSP430x16 16 3675fd0b74Schristos #define E_MSP430_MACH_MSP430x20 20 3775fd0b74Schristos #define E_MSP430_MACH_MSP430x22 22 3875fd0b74Schristos #define E_MSP430_MACH_MSP430x23 23 3975fd0b74Schristos #define E_MSP430_MACH_MSP430x24 24 4075fd0b74Schristos #define E_MSP430_MACH_MSP430x26 26 4175fd0b74Schristos #define E_MSP430_MACH_MSP430x31 31 4275fd0b74Schristos #define E_MSP430_MACH_MSP430x32 32 4375fd0b74Schristos #define E_MSP430_MACH_MSP430x33 33 4475fd0b74Schristos #define E_MSP430_MACH_MSP430x41 41 4575fd0b74Schristos #define E_MSP430_MACH_MSP430x42 42 4675fd0b74Schristos #define E_MSP430_MACH_MSP430x43 43 4775fd0b74Schristos #define E_MSP430_MACH_MSP430x44 44 4875fd0b74Schristos #define E_MSP430_MACH_MSP430X 45 4975fd0b74Schristos #define E_MSP430_MACH_MSP430x46 46 5075fd0b74Schristos #define E_MSP430_MACH_MSP430x47 47 5175fd0b74Schristos #define E_MSP430_MACH_MSP430x54 54 5275fd0b74Schristos 5375fd0b74Schristos #define SHT_MSP430_ATTRIBUTES 0x70000003 /* Section holds ABI attributes. */ 5475fd0b74Schristos #define SHT_MSP430_SEC_FLAGS 0x7f000005 /* Holds TI compiler's section flags. */ 5575fd0b74Schristos #define SHT_MSP430_SYM_ALIASES 0x7f000006 /* Holds TI compiler's symbol aliases. */ 5675fd0b74Schristos 5775fd0b74Schristos /* Tag values for an attribute section. */ 5875fd0b74Schristos #define OFBA_MSPABI_Tag_ISA 4 5975fd0b74Schristos #define OFBA_MSPABI_Tag_Code_Model 6 6075fd0b74Schristos #define OFBA_MSPABI_Tag_Data_Model 8 61012573ebSchristos #define OFBA_MSPABI_Tag_enum_size 10 /* Unused by GNU. */ 62012573ebSchristos 63012573ebSchristos /* GNU Object attribute tags. */ 64012573ebSchristos enum 65012573ebSchristos { 66012573ebSchristos /* 0-3 are generic. */ 67012573ebSchristos 68012573ebSchristos /* Define a GNU attribute for keeping track of whether the compiler has 69012573ebSchristos generated code assuming that the upper region could be in use. 70012573ebSchristos Added by the assembler based on the -mdata-region option. 71012573ebSchristos This tag is ignored unless the large memory model is in use. */ 72012573ebSchristos Tag_GNU_MSP430_Data_Region = 4, 73012573ebSchristos }; 74012573ebSchristos 75012573ebSchristos /* Object attribute values. */ 76012573ebSchristos enum 77012573ebSchristos { 78012573ebSchristos /* Values defined for OFBA_MSPABI_Tag_ISA. */ 79012573ebSchristos OFBA_MSPABI_Val_ISA_NONE = 0, 80012573ebSchristos OFBA_MSPABI_Val_ISA_MSP430 = 1, 81012573ebSchristos OFBA_MSPABI_Val_ISA_MSP430X = 2, 82012573ebSchristos 83012573ebSchristos /* Values defined for OFBA_MSPABI_Tag_Code_Model. */ 84012573ebSchristos OFBA_MSPABI_Val_Code_Model_NONE = 0, 85012573ebSchristos OFBA_MSPABI_Val_Code_Model_SMALL = 1, 86012573ebSchristos OFBA_MSPABI_Val_Code_Model_LARGE = 2, 87012573ebSchristos 88012573ebSchristos /* Values defined for OFBA_MSPABI_Tag_Data_Model. */ 89012573ebSchristos OFBA_MSPABI_Val_Data_Model_NONE = 0, 90012573ebSchristos OFBA_MSPABI_Val_Data_Model_SMALL = 1, 91012573ebSchristos OFBA_MSPABI_Val_Data_Model_LARGE = 2, 92012573ebSchristos OFBA_MSPABI_Val_Data_Model_RESTRICTED = 3, /* Unused by GNU. */ 93012573ebSchristos 94012573ebSchristos /* Values defined for Tag_GNU_MSP430_Data_Region. */ 95012573ebSchristos Val_GNU_MSP430_Data_Region_NONE = 0, 96012573ebSchristos /* The default data region. Assumes all data is below address 0x10000. */ 97012573ebSchristos Val_GNU_MSP430_Data_Region_Lower = 1, 98012573ebSchristos /* Set if -mdata-region={none,upper,either}. Assumes 99012573ebSchristos data could be placed at or above address 0x10000. */ 100012573ebSchristos Val_GNU_MSP430_Data_Region_Any = 2, 101012573ebSchristos }; 10275fd0b74Schristos 10375fd0b74Schristos /* Relocations. */ 10475fd0b74Schristos START_RELOC_NUMBERS (elf_msp430_reloc_type) 10575fd0b74Schristos RELOC_NUMBER (R_MSP430_NONE, 0) 10675fd0b74Schristos RELOC_NUMBER (R_MSP430_32, 1) 10775fd0b74Schristos RELOC_NUMBER (R_MSP430_10_PCREL, 2) 10875fd0b74Schristos RELOC_NUMBER (R_MSP430_16, 3) 10975fd0b74Schristos RELOC_NUMBER (R_MSP430_16_PCREL, 4) 11075fd0b74Schristos RELOC_NUMBER (R_MSP430_16_BYTE, 5) 11175fd0b74Schristos RELOC_NUMBER (R_MSP430_16_PCREL_BYTE, 6) 11275fd0b74Schristos RELOC_NUMBER (R_MSP430_2X_PCREL, 7) 11375fd0b74Schristos RELOC_NUMBER (R_MSP430_RL_PCREL, 8) 11475fd0b74Schristos RELOC_NUMBER (R_MSP430_8, 9) 11575fd0b74Schristos RELOC_NUMBER (R_MSP430_SYM_DIFF, 10) 116*e992f068Schristos RELOC_NUMBER (R_MSP430_GNU_SET_ULEB128, 11) /* GNU only. */ 117*e992f068Schristos RELOC_NUMBER (R_MSP430_GNU_SUB_ULEB128, 12) /* GNU only. */ 11875fd0b74Schristos END_RELOC_NUMBERS (R_MSP430_max) 11975fd0b74Schristos 12075fd0b74Schristos START_RELOC_NUMBERS (elf_msp430x_reloc_type) 12175fd0b74Schristos RELOC_NUMBER (R_MSP430_ABS32, 1) /* aka R_MSP430_32 */ 12275fd0b74Schristos RELOC_NUMBER (R_MSP430_ABS16, 2) /* aka R_MSP430_16 */ 12375fd0b74Schristos RELOC_NUMBER (R_MSP430_ABS8, 3) 12475fd0b74Schristos RELOC_NUMBER (R_MSP430_PCR16, 4) /* aka R_MSP430_16_PCREL */ 12575fd0b74Schristos RELOC_NUMBER (R_MSP430X_PCR20_EXT_SRC, 5) 12675fd0b74Schristos RELOC_NUMBER (R_MSP430X_PCR20_EXT_DST, 6) 12775fd0b74Schristos RELOC_NUMBER (R_MSP430X_PCR20_EXT_ODST, 7) 12875fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS20_EXT_SRC, 8) 12975fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS20_EXT_DST, 9) 13075fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS20_EXT_ODST, 10) 13175fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS20_ADR_SRC, 11) 13275fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS20_ADR_DST, 12) 13375fd0b74Schristos RELOC_NUMBER (R_MSP430X_PCR16, 13) /* Like R_MSP430_PCR16 but with overflow checking. */ 13475fd0b74Schristos RELOC_NUMBER (R_MSP430X_PCR20_CALL, 14) 13575fd0b74Schristos RELOC_NUMBER (R_MSP430X_ABS16, 15) /* Like R_MSP430_ABS16 but with overflow checking. */ 13675fd0b74Schristos RELOC_NUMBER (R_MSP430_ABS_HI16, 16) 13775fd0b74Schristos RELOC_NUMBER (R_MSP430_PREL31, 17) 13875fd0b74Schristos RELOC_NUMBER (R_MSP430_EHTYPE, 18) /* Mentioned in ABI. */ 13975fd0b74Schristos RELOC_NUMBER (R_MSP430X_10_PCREL, 19) /* Red Hat invention. Used for Jump instructions. */ 14075fd0b74Schristos RELOC_NUMBER (R_MSP430X_2X_PCREL, 20) /* Red Hat invention. Used for relaxing jumps. */ 14175fd0b74Schristos RELOC_NUMBER (R_MSP430X_SYM_DIFF, 21) /* Red Hat invention. Used for relaxing debug info. */ 142*e992f068Schristos RELOC_NUMBER (R_MSP430X_GNU_SET_ULEB128, 22) /* GNU only. */ 143*e992f068Schristos RELOC_NUMBER (R_MSP430X_GNU_SUB_ULEB128, 23) /* GNU only. */ 14475fd0b74Schristos END_RELOC_NUMBERS (R_MSP430x_max) 14575fd0b74Schristos 14675fd0b74Schristos #endif /* _ELF_MSP430_H */ 147