gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

a.out.go (6714B)


      1 // Inferno utils/6c/6.out.h
      2 // https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6c/6.out.h
      3 //
      4 //	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
      5 //	Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
      6 //	Portions Copyright © 1997-1999 Vita Nuova Limited
      7 //	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
      8 //	Portions Copyright © 2004,2006 Bruce Ellis
      9 //	Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
     10 //	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
     11 //	Portions Copyright © 2009 The Go Authors. All rights reserved.
     12 //
     13 // Permission is hereby granted, free of charge, to any person obtaining a copy
     14 // of this software and associated documentation files (the "Software"), to deal
     15 // in the Software without restriction, including without limitation the rights
     16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     17 // copies of the Software, and to permit persons to whom the Software is
     18 // furnished to do so, subject to the following conditions:
     19 //
     20 // The above copyright notice and this permission notice shall be included in
     21 // all copies or substantial portions of the Software.
     22 //
     23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     29 // THE SOFTWARE.
     30 
     31 package x86
     32 
     33 import "github.com/twitchyliquid64/golang-asm/obj"
     34 
     35 const (
     36 	REG_NONE = 0
     37 )
     38 
     39 const (
     40 	REG_AL = obj.RBaseAMD64 + iota
     41 	REG_CL
     42 	REG_DL
     43 	REG_BL
     44 	REG_SPB
     45 	REG_BPB
     46 	REG_SIB
     47 	REG_DIB
     48 	REG_R8B
     49 	REG_R9B
     50 	REG_R10B
     51 	REG_R11B
     52 	REG_R12B
     53 	REG_R13B
     54 	REG_R14B
     55 	REG_R15B
     56 
     57 	REG_AX
     58 	REG_CX
     59 	REG_DX
     60 	REG_BX
     61 	REG_SP
     62 	REG_BP
     63 	REG_SI
     64 	REG_DI
     65 	REG_R8
     66 	REG_R9
     67 	REG_R10
     68 	REG_R11
     69 	REG_R12
     70 	REG_R13
     71 	REG_R14
     72 	REG_R15
     73 
     74 	REG_AH
     75 	REG_CH
     76 	REG_DH
     77 	REG_BH
     78 
     79 	REG_F0
     80 	REG_F1
     81 	REG_F2
     82 	REG_F3
     83 	REG_F4
     84 	REG_F5
     85 	REG_F6
     86 	REG_F7
     87 
     88 	REG_M0
     89 	REG_M1
     90 	REG_M2
     91 	REG_M3
     92 	REG_M4
     93 	REG_M5
     94 	REG_M6
     95 	REG_M7
     96 
     97 	REG_K0
     98 	REG_K1
     99 	REG_K2
    100 	REG_K3
    101 	REG_K4
    102 	REG_K5
    103 	REG_K6
    104 	REG_K7
    105 
    106 	REG_X0
    107 	REG_X1
    108 	REG_X2
    109 	REG_X3
    110 	REG_X4
    111 	REG_X5
    112 	REG_X6
    113 	REG_X7
    114 	REG_X8
    115 	REG_X9
    116 	REG_X10
    117 	REG_X11
    118 	REG_X12
    119 	REG_X13
    120 	REG_X14
    121 	REG_X15
    122 	REG_X16
    123 	REG_X17
    124 	REG_X18
    125 	REG_X19
    126 	REG_X20
    127 	REG_X21
    128 	REG_X22
    129 	REG_X23
    130 	REG_X24
    131 	REG_X25
    132 	REG_X26
    133 	REG_X27
    134 	REG_X28
    135 	REG_X29
    136 	REG_X30
    137 	REG_X31
    138 
    139 	REG_Y0
    140 	REG_Y1
    141 	REG_Y2
    142 	REG_Y3
    143 	REG_Y4
    144 	REG_Y5
    145 	REG_Y6
    146 	REG_Y7
    147 	REG_Y8
    148 	REG_Y9
    149 	REG_Y10
    150 	REG_Y11
    151 	REG_Y12
    152 	REG_Y13
    153 	REG_Y14
    154 	REG_Y15
    155 	REG_Y16
    156 	REG_Y17
    157 	REG_Y18
    158 	REG_Y19
    159 	REG_Y20
    160 	REG_Y21
    161 	REG_Y22
    162 	REG_Y23
    163 	REG_Y24
    164 	REG_Y25
    165 	REG_Y26
    166 	REG_Y27
    167 	REG_Y28
    168 	REG_Y29
    169 	REG_Y30
    170 	REG_Y31
    171 
    172 	REG_Z0
    173 	REG_Z1
    174 	REG_Z2
    175 	REG_Z3
    176 	REG_Z4
    177 	REG_Z5
    178 	REG_Z6
    179 	REG_Z7
    180 	REG_Z8
    181 	REG_Z9
    182 	REG_Z10
    183 	REG_Z11
    184 	REG_Z12
    185 	REG_Z13
    186 	REG_Z14
    187 	REG_Z15
    188 	REG_Z16
    189 	REG_Z17
    190 	REG_Z18
    191 	REG_Z19
    192 	REG_Z20
    193 	REG_Z21
    194 	REG_Z22
    195 	REG_Z23
    196 	REG_Z24
    197 	REG_Z25
    198 	REG_Z26
    199 	REG_Z27
    200 	REG_Z28
    201 	REG_Z29
    202 	REG_Z30
    203 	REG_Z31
    204 
    205 	REG_CS
    206 	REG_SS
    207 	REG_DS
    208 	REG_ES
    209 	REG_FS
    210 	REG_GS
    211 
    212 	REG_GDTR // global descriptor table register
    213 	REG_IDTR // interrupt descriptor table register
    214 	REG_LDTR // local descriptor table register
    215 	REG_MSW  // machine status word
    216 	REG_TASK // task register
    217 
    218 	REG_CR0
    219 	REG_CR1
    220 	REG_CR2
    221 	REG_CR3
    222 	REG_CR4
    223 	REG_CR5
    224 	REG_CR6
    225 	REG_CR7
    226 	REG_CR8
    227 	REG_CR9
    228 	REG_CR10
    229 	REG_CR11
    230 	REG_CR12
    231 	REG_CR13
    232 	REG_CR14
    233 	REG_CR15
    234 
    235 	REG_DR0
    236 	REG_DR1
    237 	REG_DR2
    238 	REG_DR3
    239 	REG_DR4
    240 	REG_DR5
    241 	REG_DR6
    242 	REG_DR7
    243 
    244 	REG_TR0
    245 	REG_TR1
    246 	REG_TR2
    247 	REG_TR3
    248 	REG_TR4
    249 	REG_TR5
    250 	REG_TR6
    251 	REG_TR7
    252 
    253 	REG_TLS
    254 
    255 	MAXREG
    256 
    257 	REG_CR = REG_CR0
    258 	REG_DR = REG_DR0
    259 	REG_TR = REG_TR0
    260 
    261 	REGARG   = -1
    262 	REGRET   = REG_AX
    263 	FREGRET  = REG_X0
    264 	REGSP    = REG_SP
    265 	REGCTXT  = REG_DX
    266 	REGEXT   = REG_R15     // compiler allocates external registers R15 down
    267 	FREGMIN  = REG_X0 + 5  // first register variable
    268 	FREGEXT  = REG_X0 + 15 // first external register
    269 	T_TYPE   = 1 << 0
    270 	T_INDEX  = 1 << 1
    271 	T_OFFSET = 1 << 2
    272 	T_FCONST = 1 << 3
    273 	T_SYM    = 1 << 4
    274 	T_SCONST = 1 << 5
    275 	T_64     = 1 << 6
    276 	T_GOTYPE = 1 << 7
    277 )
    278 
    279 // https://www.uclibc.org/docs/psABI-x86_64.pdf, figure 3.36
    280 var AMD64DWARFRegisters = map[int16]int16{
    281 	REG_AX:  0,
    282 	REG_DX:  1,
    283 	REG_CX:  2,
    284 	REG_BX:  3,
    285 	REG_SI:  4,
    286 	REG_DI:  5,
    287 	REG_BP:  6,
    288 	REG_SP:  7,
    289 	REG_R8:  8,
    290 	REG_R9:  9,
    291 	REG_R10: 10,
    292 	REG_R11: 11,
    293 	REG_R12: 12,
    294 	REG_R13: 13,
    295 	REG_R14: 14,
    296 	REG_R15: 15,
    297 	// 16 is "Return Address RA", whatever that is.
    298 	// 17-24 vector registers (X/Y/Z).
    299 	REG_X0: 17,
    300 	REG_X1: 18,
    301 	REG_X2: 19,
    302 	REG_X3: 20,
    303 	REG_X4: 21,
    304 	REG_X5: 22,
    305 	REG_X6: 23,
    306 	REG_X7: 24,
    307 	// 25-32 extended vector registers (X/Y/Z).
    308 	REG_X8:  25,
    309 	REG_X9:  26,
    310 	REG_X10: 27,
    311 	REG_X11: 28,
    312 	REG_X12: 29,
    313 	REG_X13: 30,
    314 	REG_X14: 31,
    315 	REG_X15: 32,
    316 	// ST registers. %stN => FN.
    317 	REG_F0: 33,
    318 	REG_F1: 34,
    319 	REG_F2: 35,
    320 	REG_F3: 36,
    321 	REG_F4: 37,
    322 	REG_F5: 38,
    323 	REG_F6: 39,
    324 	REG_F7: 40,
    325 	// MMX registers. %mmN => MN.
    326 	REG_M0: 41,
    327 	REG_M1: 42,
    328 	REG_M2: 43,
    329 	REG_M3: 44,
    330 	REG_M4: 45,
    331 	REG_M5: 46,
    332 	REG_M6: 47,
    333 	REG_M7: 48,
    334 	// 48 is flags, which doesn't have a name.
    335 	REG_ES: 50,
    336 	REG_CS: 51,
    337 	REG_SS: 52,
    338 	REG_DS: 53,
    339 	REG_FS: 54,
    340 	REG_GS: 55,
    341 	// 58 and 59 are {fs,gs}base, which don't have names.
    342 	REG_TR:   62,
    343 	REG_LDTR: 63,
    344 	// 64-66 are mxcsr, fcw, fsw, which don't have names.
    345 
    346 	// 67-82 upper vector registers (X/Y/Z).
    347 	REG_X16: 67,
    348 	REG_X17: 68,
    349 	REG_X18: 69,
    350 	REG_X19: 70,
    351 	REG_X20: 71,
    352 	REG_X21: 72,
    353 	REG_X22: 73,
    354 	REG_X23: 74,
    355 	REG_X24: 75,
    356 	REG_X25: 76,
    357 	REG_X26: 77,
    358 	REG_X27: 78,
    359 	REG_X28: 79,
    360 	REG_X29: 80,
    361 	REG_X30: 81,
    362 	REG_X31: 82,
    363 
    364 	// 118-125 vector mask registers. %kN => KN.
    365 	REG_K0: 118,
    366 	REG_K1: 119,
    367 	REG_K2: 120,
    368 	REG_K3: 121,
    369 	REG_K4: 122,
    370 	REG_K5: 123,
    371 	REG_K6: 124,
    372 	REG_K7: 125,
    373 }
    374 
    375 // https://www.uclibc.org/docs/psABI-i386.pdf, table 2.14
    376 var X86DWARFRegisters = map[int16]int16{
    377 	REG_AX: 0,
    378 	REG_CX: 1,
    379 	REG_DX: 2,
    380 	REG_BX: 3,
    381 	REG_SP: 4,
    382 	REG_BP: 5,
    383 	REG_SI: 6,
    384 	REG_DI: 7,
    385 	// 8 is "Return Address RA", whatever that is.
    386 	// 9 is flags, which doesn't have a name.
    387 	// ST registers. %stN => FN.
    388 	REG_F0: 11,
    389 	REG_F1: 12,
    390 	REG_F2: 13,
    391 	REG_F3: 14,
    392 	REG_F4: 15,
    393 	REG_F5: 16,
    394 	REG_F6: 17,
    395 	REG_F7: 18,
    396 	// XMM registers. %xmmN => XN.
    397 	REG_X0: 21,
    398 	REG_X1: 22,
    399 	REG_X2: 23,
    400 	REG_X3: 24,
    401 	REG_X4: 25,
    402 	REG_X5: 26,
    403 	REG_X6: 27,
    404 	REG_X7: 28,
    405 	// MMX registers. %mmN => MN.
    406 	REG_M0: 29,
    407 	REG_M1: 30,
    408 	REG_M2: 31,
    409 	REG_M3: 32,
    410 	REG_M4: 33,
    411 	REG_M5: 34,
    412 	REG_M6: 35,
    413 	REG_M7: 36,
    414 	// 39 is mxcsr, which doesn't have a name.
    415 	REG_ES:   40,
    416 	REG_CS:   41,
    417 	REG_SS:   42,
    418 	REG_DS:   43,
    419 	REG_FS:   44,
    420 	REG_GS:   45,
    421 	REG_TR:   48,
    422 	REG_LDTR: 49,
    423 }