[BACK]Return to powerpc.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils / dist / elfcpp

Annotation of src/external/gpl3/binutils/dist/elfcpp/powerpc.h, Revision 1.1.1.4

1.1       skrll       1: // powerpc.h -- ELF definitions specific to EM_PPC and EM_PPC64  -*- C++ -*-
                      2:
1.1.1.4 ! christos    3: // Copyright (C) 2008-2016 Free Software Foundation, Inc.
1.1       skrll       4: // Written by David S. Miller <davem@davemloft.net>.
                      5:
                      6: // This file is part of elfcpp.
                      7:
                      8: // This program is free software; you can redistribute it and/or
                      9: // modify it under the terms of the GNU Library General Public License
                     10: // as published by the Free Software Foundation; either version 2, or
                     11: // (at your option) any later version.
                     12:
                     13: // In addition to the permissions in the GNU Library General Public
                     14: // License, the Free Software Foundation gives you unlimited
                     15: // permission to link the compiled version of this file into
                     16: // combinations with other programs, and to distribute those
                     17: // combinations without any restriction coming from the use of this
                     18: // file.  (The Library Public License restrictions do apply in other
                     19: // respects; for example, they cover modification of the file, and
                     20: /// distribution when not linked into a combined executable.)
                     21:
                     22: // This program is distributed in the hope that it will be useful, but
                     23: // WITHOUT ANY WARRANTY; without even the implied warranty of
                     24: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     25: // Library General Public License for more details.
                     26:
                     27: // You should have received a copy of the GNU Library General Public
                     28: // License along with this program; if not, write to the Free Software
                     29: // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
                     30: // 02110-1301, USA.
                     31:
                     32: #ifndef ELFCPP_POWERPC_H
                     33: #define ELFCPP_POWERPC_H
                     34:
                     35: namespace elfcpp
                     36: {
                     37:
                     38: // The relocation numbers for 32-bit and 64-bit powerpc are nearly
                     39: // identical.  Therefore I've adopted the convention of using
                     40: // R_POWERPC_foo for values which are the same in R_PPC_* and R_PPC64_*.
                     41: // For relocations which are specific to the word size I will use
                     42: // R_PPC_foo or R_PPC64_foo.
                     43: enum
                     44: {
                     45:   R_POWERPC_NONE = 0,
                     46:   R_POWERPC_ADDR32 = 1,
                     47:   R_POWERPC_ADDR24 = 2,
                     48:   R_POWERPC_ADDR16 = 3,
                     49:   R_POWERPC_ADDR16_LO = 4,
                     50:   R_POWERPC_ADDR16_HI = 5,
                     51:   R_POWERPC_ADDR16_HA = 6,
                     52:   R_POWERPC_ADDR14 = 7,
                     53:   R_POWERPC_ADDR14_BRTAKEN = 8,
                     54:   R_POWERPC_ADDR14_BRNTAKEN = 9,
                     55:   R_POWERPC_REL24 = 10,
                     56:   R_POWERPC_REL14 = 11,
                     57:   R_POWERPC_REL14_BRTAKEN = 12,
                     58:   R_POWERPC_REL14_BRNTAKEN = 13,
                     59:   R_POWERPC_GOT16 = 14,
                     60:   R_POWERPC_GOT16_LO = 15,
                     61:   R_POWERPC_GOT16_HI = 16,
                     62:   R_POWERPC_GOT16_HA = 17,
                     63:   R_PPC_PLTREL24 = 18,
                     64:   R_POWERPC_COPY = 19,
                     65:   R_POWERPC_GLOB_DAT = 20,
                     66:   R_POWERPC_JMP_SLOT = 21,
                     67:   R_POWERPC_RELATIVE = 22,
                     68:   R_PPC_LOCAL24PC = 23,
                     69:   R_POWERPC_UADDR32 = 24,
                     70:   R_POWERPC_UADDR16 = 25,
                     71:   R_POWERPC_REL32 = 26,
                     72:   R_POWERPC_PLT32 = 27,
                     73:   R_POWERPC_PLTREL32 = 28,
                     74:   R_POWERPC_PLT16_LO = 29,
                     75:   R_POWERPC_PLT16_HI = 30,
                     76:   R_POWERPC_PLT16_HA = 31,
                     77:   R_PPC_SDAREL16 = 32,
                     78:   R_POWERPC_SECTOFF = 33,
                     79:   R_POWERPC_SECTOFF_LO = 34,
                     80:   R_POWERPC_SECTOFF_HI = 35,
                     81:   R_POWERPC_SECTOFF_HA = 36,
                     82:   R_POWERPC_ADDR30 = 37,
                     83:   R_PPC64_ADDR64 = 38,
                     84:   R_PPC64_ADDR16_HIGHER = 39,
                     85:   R_PPC64_ADDR16_HIGHERA = 40,
                     86:   R_PPC64_ADDR16_HIGHEST = 41,
                     87:   R_PPC64_ADDR16_HIGHESTA = 42,
                     88:   R_PPC64_UADDR64 = 43,
                     89:   R_PPC64_REL64 = 44,
                     90:   R_PPC64_PLT64 = 45,
                     91:   R_PPC64_PLTREL64 = 46,
                     92:   R_PPC64_TOC16 = 47,
                     93:   R_PPC64_TOC16_LO = 48,
                     94:   R_PPC64_TOC16_HI = 49,
                     95:   R_PPC64_TOC16_HA = 50,
                     96:   R_PPC64_TOC = 51,
                     97:   R_PPC64_PLTGOT16 = 52,
                     98:   R_PPC64_PLTGOT16_LO = 53,
                     99:   R_PPC64_PLTGOT16_HI = 54,
                    100:   R_PPC64_PLTGOT16_HA = 55,
                    101:   R_PPC64_ADDR16_DS = 56,
                    102:   R_PPC64_ADDR16_LO_DS = 57,
                    103:   R_PPC64_GOT16_DS = 58,
                    104:   R_PPC64_GOT16_LO_DS = 59,
                    105:   R_PPC64_PLT16_LO_DS = 60,
                    106:   R_PPC64_SECTOFF_DS = 61,
                    107:   R_PPC64_SECTOFF_LO_DS = 62,
                    108:   R_PPC64_TOC16_DS = 63,
                    109:   R_PPC64_TOC16_LO_DS = 64,
                    110:   R_PPC64_PLTGOT16_DS = 65,
                    111:   R_PPC64_PLTGOT16_LO_DS = 66,
                    112:   R_POWERPC_TLS = 67,
                    113:   R_POWERPC_DTPMOD = 68,
                    114:   R_POWERPC_TPREL16 = 69,
                    115:   R_POWERPC_TPREL16_LO = 70,
                    116:   R_POWERPC_TPREL16_HI = 71,
                    117:   R_POWERPC_TPREL16_HA = 72,
                    118:   R_POWERPC_TPREL = 73,
                    119:   R_POWERPC_DTPREL16 = 74,
                    120:   R_POWERPC_DTPREL16_LO = 75,
                    121:   R_POWERPC_DTPREL16_HI = 76,
                    122:   R_POWERPC_DTPREL16_HA = 77,
                    123:   R_POWERPC_DTPREL = 78,
                    124:   R_POWERPC_GOT_TLSGD16 = 79,
                    125:   R_POWERPC_GOT_TLSGD16_LO = 80,
                    126:   R_POWERPC_GOT_TLSGD16_HI = 81,
                    127:   R_POWERPC_GOT_TLSGD16_HA = 82,
                    128:   R_POWERPC_GOT_TLSLD16 = 83,
                    129:   R_POWERPC_GOT_TLSLD16_LO = 84,
                    130:   R_POWERPC_GOT_TLSLD16_HI = 85,
                    131:   R_POWERPC_GOT_TLSLD16_HA = 86,
                    132:   R_POWERPC_GOT_TPREL16 = 87,
                    133:   R_POWERPC_GOT_TPREL16_LO = 88,
                    134:   R_POWERPC_GOT_TPREL16_HI = 89,
                    135:   R_POWERPC_GOT_TPREL16_HA = 90,
                    136:   R_POWERPC_GOT_DTPREL16 = 91,
                    137:   R_POWERPC_GOT_DTPREL16_LO = 92,
                    138:   R_POWERPC_GOT_DTPREL16_HI = 93,
                    139:   R_POWERPC_GOT_DTPREL16_HA = 94,
1.1.1.3   christos  140:   R_PPC_TLSGD = 95,
1.1       skrll     141:   R_PPC64_TPREL16_DS = 95,
1.1.1.3   christos  142:   R_PPC_TLSLD = 96,
1.1       skrll     143:   R_PPC64_TPREL16_LO_DS = 96,
                    144:   R_PPC64_TPREL16_HIGHER = 97,
                    145:   R_PPC64_TPREL16_HIGHERA = 98,
                    146:   R_PPC64_TPREL16_HIGHEST = 99,
                    147:   R_PPC64_TPREL16_HIGHESTA = 100,
                    148:   R_PPC_EMB_NADDR32 = 101,
1.1.1.3   christos  149:   R_PPC64_DTPREL16_DS = 101,
1.1       skrll     150:   R_PPC_EMB_NADDR16 = 102,
1.1.1.3   christos  151:   R_PPC64_DTPREL16_LO_DS = 102,
1.1       skrll     152:   R_PPC_EMB_NADDR16_LO = 103,
1.1.1.3   christos  153:   R_PPC64_DTPREL16_HIGHER = 103,
1.1       skrll     154:   R_PPC_EMB_NADDR16_HI = 104,
1.1.1.3   christos  155:   R_PPC64_DTPREL16_HIGHERA = 104,
1.1       skrll     156:   R_PPC_EMB_NADDR16_HA = 105,
1.1.1.3   christos  157:   R_PPC64_DTPREL16_HIGHEST = 105,
1.1       skrll     158:   R_PPC_EMB_SDAI16 = 106,
1.1.1.3   christos  159:   R_PPC64_DTPREL16_HIGHESTA = 106,
1.1       skrll     160:   R_PPC_EMB_SDA2I16 = 107,
1.1.1.3   christos  161:   R_PPC64_TLSGD = 107,
1.1       skrll     162:   R_PPC_EMB_SDA2REL = 108,
1.1.1.3   christos  163:   R_PPC64_TLSLD = 108,
1.1       skrll     164:   R_PPC_EMB_SDA21 = 109,
1.1.1.3   christos  165:   R_PPC64_TOCSAVE = 109,
1.1       skrll     166:   R_PPC_EMB_MRKREF = 110,
1.1.1.3   christos  167:   R_PPC64_ADDR16_HIGH = 110,
1.1       skrll     168:   R_PPC_EMB_RELSEC16 = 111,
1.1.1.3   christos  169:   R_PPC64_ADDR16_HIGHA = 111,
1.1       skrll     170:   R_PPC_EMB_RELST_LO = 112,
1.1.1.3   christos  171:   R_PPC64_TPREL16_HIGH = 112,
1.1       skrll     172:   R_PPC_EMB_RELST_HI = 113,
1.1.1.3   christos  173:   R_PPC64_TPREL16_HIGHA = 113,
1.1       skrll     174:   R_PPC_EMB_RELST_HA = 114,
1.1.1.3   christos  175:   R_PPC64_DTPREL16_HIGH = 114,
1.1       skrll     176:   R_PPC_EMB_BIT_FLD = 115,
1.1.1.3   christos  177:   R_PPC64_DTPREL16_HIGHA = 115,
1.1       skrll     178:   R_PPC_EMB_RELSDA = 116,
1.1.1.3   christos  179:   R_PPC64_REL24_NOTOC = 116,
                    180:   R_PPC64_ADDR64_LOCAL = 117,
                    181:   R_PPC64_ENTRY = 118,
                    182:
                    183:   R_PPC_VLE_REL8 = 216,
                    184:   R_PPC_VLE_REL15 = 217,
                    185:   R_PPC_VLE_REL24 = 218,
                    186:   R_PPC_VLE_LO16A = 219,
                    187:   R_PPC_VLE_LO16D = 220,
                    188:   R_PPC_VLE_HI16A = 221,
                    189:   R_PPC_VLE_HI16D = 222,
                    190:   R_PPC_VLE_HA16A = 223,
                    191:   R_PPC_VLE_HA16D = 224,
                    192:   R_PPC_VLE_SDA21 = 225,
                    193:   R_PPC_VLE_SDA21_LO = 226,
                    194:   R_PPC_VLE_SDAREL_LO16A = 227,
                    195:   R_PPC_VLE_SDAREL_LO16D = 228,
                    196:   R_PPC_VLE_SDAREL_HI16A = 229,
                    197:   R_PPC_VLE_SDAREL_HI16D = 230,
                    198:   R_PPC_VLE_SDAREL_HA16A = 231,
                    199:   R_PPC_VLE_SDAREL_HA16D = 232,
1.1.1.2   christos  200:
1.1.1.3   christos  201:   R_POWERPC_REL16DX_HA = 246,
                    202:   R_PPC64_JMP_IREL = 247,
1.1.1.2   christos  203:   R_POWERPC_IRELATIVE = 248,
1.1.1.3   christos  204:   R_POWERPC_REL16 = 249,
                    205:   R_POWERPC_REL16_LO = 250,
                    206:   R_POWERPC_REL16_HI = 251,
                    207:   R_POWERPC_REL16_HA = 252,
1.1       skrll     208:   R_POWERPC_GNU_VTINHERIT = 253,
                    209:   R_POWERPC_GNU_VTENTRY = 254,
                    210:   R_PPC_TOC16 = 255,
                    211: };
                    212:
                    213: // e_flags values defined for powerpc
                    214: enum
                    215: {
                    216:   EF_PPC_EMB = 0x80000000,             // PowerPC embedded flag.
                    217:   EF_PPC_RELOCATABLE = 0x00010000,     // PowerPC -mrelocatable flag.  */
                    218:   EF_PPC_RELOCATABLE_LIB = 0x00008000, // PowerPC -mrelocatable-lib flag.  */
                    219: };
                    220:
1.1.1.3   christos  221: // e_flags values defined for powerpc64
                    222: enum
                    223: {
                    224:   // ABI version
                    225:   // 1 for original function descriptor using ABI,
                    226:   // 2 for revised ABI without function descriptors,
                    227:   // 0 for unspecified or not using any features affected by the differences.
                    228:   EF_PPC64_ABI = 3
                    229: };
                    230:
                    231: enum
                    232: {
                    233:   // The ELFv2 ABI uses three bits in the symbol st_other field of a
                    234:   // function definition to specify the number of instructions between a
                    235:   // function's global entry point and local entry point.
                    236:   // The global entry point is used when it is necessary to set up the
                    237:   // toc pointer (r2) for the function.  Callers must enter the global
                    238:   // entry point with r12 set to the global entry point address.  On
                    239:   // return from the function, r2 may have a different value to that
                    240:   // which it had on entry.
                    241:   // The local entry point is used when r2 is known to already be valid
                    242:   // for the function.  There is no requirement on r12 when using the
                    243:   // local entry point, and on return r2 will contain the same value as
                    244:   // at entry.
                    245:   // A value of zero in these bits means that the function has a single
                    246:   // entry point with no requirement on r12 or r2, and that on return r2
                    247:   // will contain the same value as at entry.
                    248:   // Values of one and seven are reserved.
                    249:
                    250:   STO_PPC64_LOCAL_BIT = 5,
                    251:   STO_PPC64_LOCAL_MASK = 0xE0
                    252: };
                    253:
                    254: // 3 bit other field to bytes.
                    255: static inline unsigned int
                    256: ppc64_decode_local_entry(unsigned int other)
                    257: {
                    258:   return ((1 << other) >> 2) << 2;
                    259: }
                    260:
                    261: // bytes to field value.
                    262: static inline unsigned int
                    263: ppc64_encode_local_entry(unsigned int val)
                    264: {
                    265:   return (val >= 4 * 4
                    266:          ? (val >= 8 * 4
                    267:             ? (val >= 16 * 4 ? 6 : 5)
                    268:             : 4)
                    269:          : (val >= 2 * 4
                    270:             ? 3
                    271:             : (val >= 1 * 4 ? 2 : 0)));
                    272: }
                    273:
1.1       skrll     274: } // End namespace elfcpp.
                    275:
                    276: #endif // !defined(ELFCPP_POWERPC_H)

CVSweb <webmaster@jp.NetBSD.org>