Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
elf.h
Go to the documentation of this file.
00001 /*
00002 
00003   Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.
00004 
00005   This program is free software; you can redistribute it and/or modify it
00006   under the terms of version 2 of the GNU General Public License as
00007   published by the Free Software Foundation.
00008 
00009   This program is distributed in the hope that it would be useful, but
00010   WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
00012 
00013   Further, this software is distributed without any warranty that it is
00014   free of the rightful claim of any third person regarding infringement 
00015   or the like.  Any license provided herein, whether implied or 
00016   otherwise, applies only to this software file.  Patent licenses, if 
00017   any, provided herein do not apply to combinations of this program with 
00018   other software, or any other product whatsoever.  
00019 
00020   You should have received a copy of the GNU General Public License along
00021   with this program; if not, write the Free Software Foundation, Inc., 59
00022   Temple Place - Suite 330, Boston MA 02111-1307, USA.
00023 
00024   Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pky,
00025   Mountain View, CA 94043, or:
00026 
00027   http://www.sgi.com
00028 
00029   For further information regarding this notice, see:
00030 
00031   http://oss.sgi.com/projects/GenInfo/NoticeExplan
00032 
00033 */
00034 
00035 
00036 #ifndef __SYS_IA64_ELF_H__
00037 #define __SYS_IA64_ELF_H__
00038 
00039 /* WARNING:  This file is included in, and logically a part of,
00040  * /usr/include/elf.h.  The distribution of material between them
00041  * is artificial, generally reflecting the distinction between generic
00042  * and system-dependent, and may change.  Do not include this file
00043  * directly -- include /usr/include/elf.h instead.
00044  */
00045 
00046 /*
00047  *      NAMING CONVENTIONS
00048  *      ------------------
00049  *
00050  *      *_IRIX_*        -- symbols defined by SGI/IRIX that are valid 
00051  *                         on both mips and ia64 processors.
00052  *
00053  *      *_MIPS_*        -- mips specific symbols, defined by SGI/IRIX, 
00054  *                         and valid on mips processors only.
00055  *
00056  *      *_IA64_*        -- ia64 specific symbols, defined by SGI/IRIX,
00057  *                         and valid on ia64 processors only.
00058  *
00059  *      *_IA_64_*       -- ia64 specific symbols, defined by INTEL.
00060  *                         These symbols are NEVER used by SGI/IRIX
00061  *                         and are included here for documentation 
00062  *                         purposes only.  In general, for every
00063  *                         *_IA_64_*  symbol there is a corresponding
00064  *                         *_IA64_*   symobl, and whenever possible, they
00065  *                         have the identical binary values.
00066  *
00067  */
00068 
00069 
00070 #include <sys/elftypes.h> 
00071 
00072 /* 
00073  * Random constants
00074  */
00075 
00076 #define ELF_IA64_MAXPGSZ ELF_IRIX_MAXPGSZ
00077 #define ELF_IA64_MINPGSZ ELF_IRIX_MINPGSZ
00078 
00079 /* ====================================================================
00080  *
00081  * Elf header
00082  *
00083  * ====================================================================
00084  */
00085 
00086 /*
00087  * e_flags -- defined by Intel by not used on Irix/ia64
00088  *
00089  *      #define EF_IA_64_MASKOS         0x0000000f
00090  *              Reserved by Intel for OS specified features.
00091  *              Not currently used by Irix.
00092  *
00093  *      #define EF_IA_64_ABI64          0x00000010 
00094  *              If the bit is set   (1) then this is a 64bit ABI file
00095  *              If the bit is clear (0) then this is a 32bit ABI file.
00096  *
00097  *      #define EF_IA_64_ARCH           0xff000000
00098  *              Reserved by Intel for architecture version identifier.
00099  *              Intended to indicate the minimum level of the architecture
00100  *              required by the object code.  Currently, the only valid
00101  *              value for this field is 0x00 
00102  */
00103 
00104 /*
00105  * e_flags -- used by Irix on Intel
00106  */
00107 #define EF_IA64_PIC             0x00000002
00108         /* Uses PIC calling conventions.  This code can be part of
00109          * either an a.out or a dso.
00110          */
00111 
00112 #define EF_IA64_CPIC            0x00000004
00113         /* Uses CPIC (ie. Call PIC) calling conventions.  
00114          * This is not currently used in Irix/ia64, but we'll reserve
00115          * the bit for future use.
00116          */
00117 
00118 #define EF_IA64_ARCH            0xff000000
00119         /* Reserved by Intel for architecture version identifier.
00120          * Intended to indicate the minimum level of the architecture
00121          * required by the object code.  Currently, the only valid
00122          * value for this field is 0x00 
00123          */
00124 #define EF_IA64_ABI64           EF_IRIX_ABI64   /* 0x00000010           */
00125         /* If the bit is set   (1) then this is a 64bit ABI file
00126          * If the bit is clear (0) then this is a 32bit ABI file.
00127          * See explanation in /usr/include/sys/elf.h
00128          */
00129 /*
00130  *  Temporary version number for formats prior to formal release.
00131  *  e_ident[EI_TVERSION]
00132  */
00133 #define EI_TVERSION 15
00134 #define EV_T_CURRENT 1
00135 
00136 /* ====================================================================
00137  *
00138  * Program header
00139  *
00140  * ====================================================================
00141  */
00142 
00143 
00144 /* 
00145  * Program header types defined by Intel
00146  */
00147 
00148 #define PT_IA64_ARCHEXT                 (PT_LOPROC + 0)
00149         /* This segment contains SHT_IA64_EXT sections.  If this entry
00150          * is present, it must precede all entries of type PT_LOAD
00151          */
00152 #define PT_IA64_UNWIND                  (PT_LOPROC + 1)
00153         /* This segment contains stack unwind tables.
00154          */
00155 
00156 /*
00157  * Program header types defined by Irix/ia64
00158  */
00159 #define PT_IA64_OPTIONS                 (PT_LOPROC + 2)
00160         /* This segment contains the options section.  By putting
00161          * the option section into a special segment, it makes it
00162          * easy for the kernel, exec, and/or rld to quickly find
00163          * the option section.
00164          */
00165 
00166 /* 
00167  * special p_flags
00168  */
00169 
00170 #define PF_IA64_NORECOV         0x80000000
00171         /* This segment contains SHT_IA64_NORECOV sections 
00172          */
00173 /* #define PF_IA64_LOCAL                0x10000000 */
00174         /* This segment is local to a thread.
00175          * 
00176          * --------   WARNING:  DO NOT USE PF_IA64_LOCAL ------------
00177          *
00178          * Currently, it is only .data sections (and .bss ?)
00179          * that can marked as LOCAL.   Because of this, it
00180          * seems reasonable that we should not use a p_flag but,
00181          * rather, should create new p_types for any local sections.
00182          *
00183          * The decision has not yet be made on this issue.
00184          *
00185          * TBD: Should PF_IA64_LOCAL be a flag or new p_type ?
00186          *
00187          */
00188 
00189 /* ====================================================================
00190  *
00191  * Section Headers
00192  *
00193  * ====================================================================
00194  */
00195 
00196 /*
00197  * sh_type      -- defined by Intel but not used on Irix/ia64.
00198  *
00199  *      #define SHT_IA64_EXT            (SHT_LOPROC  + 0)       
00200  *      #define SHT_IA64_UNWIND         (SHT_LOPROC  + 1)
00201  */
00202 
00203 /*
00204  * sh_type      -- defined by Irix
00205  *
00206  *      Section Types are common to all Irix binaries. 
00207  *
00208  *      Those with the name SHT_IA64_* are valid on IA64
00209  *      
00210  *      
00211  *      
00212  */
00213 
00214 #define SHT_IA64_EXT            SHT_IRIX_EXT            
00215 #define SHT_IA64_UNWIND         SHT_IRIX_UNWIND         
00216 #define SHT_IA64_UNWIND_INFO    SHT_IRIX_UNWIND_INFO    
00217 #define SHT_IA64_PLT            SHT_IRIX_PLT            
00218 #define SHT_IA64_PLTOFF         SHT_IRIX_PLTOFF         
00219 
00220 #define SHT_IA64_LIBLIST        SHT_IRIX_LIBLIST        
00221 #define SHT_IA64_MSYM           SHT_IRIX_MSYM           
00222 #define SHT_IA64_CONFLICT       SHT_IRIX_CONFLICT       
00223 #define SHT_IA64_IFACE          SHT_IRIX_IFACE          
00224 #define SHT_IA64_OPTIONS        SHT_IRIX_OPTIONS        
00225 #define SHT_IA64_SYMBOL_LIB     SHT_IRIX_SYMBOL_LIB     
00226 #define SHT_IA64_EVENTS         SHT_IRIX_EVENTS         
00227 #define SHT_IA64_DWARF          SHT_IRIX_DWARF          
00228 #define SHT_IA64_CONTENT        SHT_IRIX_CONTENT        
00229 #define SHT_IA64_PIXIE          SHT_IRIX_PIXIE          
00230 #define SHT_IA64_XLATE          SHT_IRIX_XLATE          
00231 #define SHT_IA64_XLATE_DEBUG    SHT_IRIX_XLATE_DEBUG    
00232 #define SHT_IA64_WHIRL          SHT_IRIX_WHIRL          
00233 
00234 #define SHT_IA64_NUM            SHT_IRIX_NUM    /* obsolete. do not use */      
00235 
00236 /*
00237  * sh_flags     -- defined by Intel, but not used on Irix/ia64.
00238  *
00239  *      #define SHF_IA_64_SHORT         0x10000000
00240  *      #define SHF_IA_64_NORECOV       0x20000000
00241  */
00242 
00243 /*
00244  * sh_flags     -- defined by Irix/ia64
00245  */
00246 #define SHF_IA64_NORECOV        0x01000000
00247 #define SHF_IA64_SHORT          SHF_IRIX_GPREL  /* 0x10000000 */
00248 
00249 /*
00250  * special section names
00251  *
00252  *      These are the section names for those sections
00253  *      that exist in both Irix/mips and Irix/ia64 objects.
00254  */
00255 #define IA64_LIBLIST            ".liblist"
00256 #define IA64_MSYM               ".msym"
00257 #define IA64_CONFLICT           ".conflict"
00258 #define IA64_SDATA              ".sdata"
00259 #define IA64_REL_SDATA          ".rel.sdata"
00260 #define IA64_SRDATA             ".srdata"
00261 #define IA64_RDATA              ".rdata"
00262 #define IA64_SBSS               ".sbss"
00263 #define IA64_LIT4               ".lit4"
00264 #define IA64_LIT8               ".lit8"
00265 #define IA64_LIT16              ".lit16"
00266 #define IA64_EVENTS             ".IA64.events"
00267 #define IA64_INTERFACES         ".IA64.interfaces"
00268 #define IA64_OPTIONS            ".IA64.options"
00269 #define IA64_SYMBOL_LIB         ".IA64.symlib"
00270 #define IA64_DEBUG_INFO         ".debug_info"
00271 #define IA64_DEBUG_LINE         ".debug_line"
00272 #define IA64_DEBUG_ABBREV       ".debug_abbrev"
00273 #define IA64_DEBUG_FRAME        ".debug_frame"
00274 #define IA64_DEBUG_ARANGES      ".debug_aranges"
00275 #define IA64_DEBUG_PUBNAMES     ".debug_pubnames"
00276 #define IA64_DEBUG_STR          ".debug_str"
00277 #define IA64_DEBUG_FUNCNAMES    ".debug_funcnames"
00278 #define IA64_DEBUG_TYPENAMES    ".debug_typenames"
00279 #define IA64_DEBUG_VARNAMES     ".debug_varnames"
00280 #define IA64_DEBUG_WEAKNAMES    ".debug_weaknames"
00281 #define IA64_XLATE              ".IA64.Xlate"
00282 #define IA64_XLATE_DEBUG        ".IA64.Xlate_debug"
00283 #define IA64_WHIRL              ".IA64.WHIRL"
00284 #define IA64_CONTENT            ".IA64.content"
00285 
00286 
00287 #ifdef __osf__
00288 #define IA64_PACKAGE            ".package"
00289 #define IA64_PACKSYM            ".packsym"
00290 #endif /* __osf__ */
00291 
00292 /*
00293  * special section names
00294  *
00295  *      These are the section names for sections 
00296  *      defined by Intel that are unique to ia64.
00297  */
00298 #define IA64_ARCHEXT            ".IA_64.archext"
00299 #define IA64_PLTOFF             ".IA_64.pltoff"
00300 #define IA64_UNWIND             ".IA_64.unwind"
00301 #define IA64_UNWIND_INFO        ".IA_64.unwind_info"
00302 
00303 /* ====================================================================
00304  *
00305  * Symbol table
00306  *
00307  * ====================================================================
00308  */
00309 
00310 
00311 /* ====================================================================
00312  *
00313  * .IRIX.options Section
00314  *
00315  *      [ IA64 specific information documented in this file. ]
00316  *
00317  * ====================================================================
00318  */
00319 
00320 /*
00321  *      Elf_Options.kind == ODK_IA64_REGINFO
00322  *
00323  *      masks for Elf_Options.info
00324  */
00325 typedef struct 
00326 {
00327         Elf64_Addr      ri_gp_value;    /* initial value of gp          */
00328 
00329         /* TBD: define rest of Elf_IA64_RegInfo record  */
00330 
00331 }
00332 Elf_IA64_RegInfo;
00333 
00334 
00335 /*
00336  *      Elf_Options.kind == ODK_IA64_EXCEPTIONS
00337  *
00338  *      masks for Elf_Options.info
00339  */
00340 
00341 /*
00342  *      Elf_Options.kind == ODK_IA64_HWAND
00343  *
00344  *      masks for Elf_Options.info
00345  */
00346  /* #define OHWA0_... */
00347 
00348 /*
00349  *      Elf_Options.kind == ODK_IA64_HWAND
00350  *
00351  *      masks for following Elf_Options.hwp_flags1
00352  */
00353  /* #define OHWA1_... */
00354 
00355 /*
00356  *      Elf_Options.kind == ODK_IA64_HWAND
00357  *
00358  *      masks for following Elf_Options.hwp_flags2
00359  */
00360  /* #define OHWA2_... */
00361 
00362 /*
00363  *      Elf_Options.kind == ODK_IA64_HWOR
00364  *
00365  *      masks for Elf_Options.info
00366  */
00367  /* #define OHWO0_... */
00368 
00369 /*
00370  *      Elf_Options.kind == ODK_IA64_HWOR
00371  *
00372  *      masks for following Elf_Options.hwp_flags1
00373  */
00374  /* #define OHWO1_... */
00375 
00376 /*
00377  *      Elf_Options.kind == ODK_IA64_HWOR
00378  *
00379  *      masks for following Elf_Options.hwp_flags2
00380  */
00381  /* #define OHWO2_... */
00382 
00383 
00384 /* ====================================================================
00385  *
00386  * .rel, .rela Section
00387  *
00388  * ====================================================================
00389  */
00390 
00391 /*
00392  *----------------------------------------------------------------------------
00393  * The relocation types, defined below, use the following notations
00394  * in the description of their calculations/actions.
00395  *
00396  *      A               ADDEND  -- The addend used to compute the value of 
00397  *                      the relocatable field.
00398  *
00399  *      BD              BASE ADDRESS DIFFERENCE -- A constant that must be
00400  *                      applied to a virtual address.  This constant represents
00401  *                      the difference between the run-time virtual address 
00402  *                      and the link-time virtual address of a particular
00403  *                      segment.  This segment is implied by the value of the 
00404  *                      link-time virtual address.
00405  *
00406  *      C               CONTENTS -- The contents of the relocatable field.
00407  *
00408  *      P               PLACE    -- The section offset or address of the storage
00409  *                      unit being relocated (computed using r_offset).  If
00410  *                      the relocation applies to an instruction, this is the
00411  *                      address of the instruction bundle containing the
00412  *                      instruction.
00413  *
00414  *      S               SYMBOL  -- The value of the symbol whose index 
00415  *                      resides in the relocation entry.
00416  *
00417  *      @gprel(expr)    GP RELATIVE DISPLACEMENT        -- computes the
00418  *                      difference between the effective address specified
00419  *                      by 'expr'  and the value of $GP.
00420  *
00421  *      @ltoff(expr)    GOT ENTRY       -- requests creation of a GOT entry
00422  *                      that will hold the full value of the effective address
00423  *                      and computes the gp-relative displacement to the
00424  *                      GOT entry.
00425  *
00426  *      @pltoff(symbol) PLT ENTRY       -- requests creation of a function
00427  *                      descriptor entry for the given symbol and computes the
00428  *                      gp-relative displace to the function descriptor entry.
00429  *                      (function descriptors are kept in the GOT)
00430  *
00431  *      @segrel(expr)   SEGMENT RELATIVE        -- computes a segment relative
00432  *                      displacement: the difference between the effective
00433  *                      address of 'expr' and address of the (output) segment
00434  *                      containing the relocatable object.  This is designed
00435  *                      for data structures in read-only memory that contain
00436  *                      pointers.  The relocatable object and the effective
00437  *                      address must be contained within the same segment. 
00438  *                      Applications using these 'pointers' must be aware that
00439  *                      they are segment-relative and must adjust their
00440  *                      values at run-time, using the load address of the
00441  *                      containing segment. No output relocations are 
00442  *                      generated for @segrel's.
00443  *
00444  *      @secrel(expr)   SECTION RELATIVE        -- computes a section relative
00445  *                      displacement: the difference between the effective
00446  *                      address of 'expr' and address of the (output) section
00447  *                      containing the effective address.  This relocation
00448  *                      type is designed for references from one 
00449  *                      non-allocatable section to another.  Applications using
00450  *                      these values must be aware that the are section
00451  *                      relative and must adjust their values at run-time,
00452  *                      using the adjusted address of the target section.
00453  *                      No output relocations are generated for @secrel's.
00454  *
00455  *      @fptr(symbol)   FUNCTION PTR    -- evaluates to the address of
00456  *                      the "official" function descriptor for the given
00457  *                      symbol. 
00458  *
00459  *
00460  *      NOTE 1:         Relocation type values have been chosen so that the
00461  *                      expression type can be easily extracted by masking
00462  *                      off the lower three or four bits, and the data or
00463  *                      instruction format can be determined in most cases
00464  *                      by looking only at the lower four bits.
00465  *
00466  *      NOTE 2:         These relocations appear only in relocatable objects.
00467  *                      They behave identically their R_IA_64_DIR* 
00468  *                      counterparts, with the exception that no output
00469  *                      relocations are generated.  The runtime consumer
00470  *                      of the information is expected to relocate these
00471  *                      values at runtime.
00472  *
00473  *      NOTE 3:         These relocations appear only in dynamic executables
00474  *                      and shared objects.  They instruction RLD to
00475  *                      initialize the corresponding function descriptor
00476  *                      with the address and the GP value of the 
00477  *                      referenced function.
00478  *
00479  * 
00480  *----------------------------------------------------------------------------
00481  */
00482 
00483 enum {
00484 
00485 /*----------------------------------------------------------------------------
00486  *  Relocation TYPE     = value   Field                 Calculation
00487  *----------------------------------------------------------------------------
00488  */
00489 
00490     R_IA_64_NONE        = 0x00, /* None                 None            */
00491 
00492     /* unused:  0x01 .. 0x20                                            */
00493 
00494     R_IA_64_IMM14       = 0x21, /* instr: immediate14   S+A             */
00495     R_IA_64_IMM22       = 0x22, /* instr: immediate22   S+A             */
00496     R_IA_64_IMM64       = 0x23, /* instr: immediate64   S+A             */
00497     R_IA_64_DIR32MSB    = 0x24, /* word32 MSB           S+A             */
00498     R_IA_64_DIR32LSB    = 0x25, /* word32 LSB           S+A             */
00499     R_IA_64_DIR64MSB    = 0x26, /* word64 MSB           S+A             */
00500     R_IA_64_DIR64LSB    = 0x27, /* word64 LSB           S+A             */
00501 
00502     /* unused:  0x28 .. 0x29                                            */
00503 
00504     R_IA_64_GPREL22     = 0x2a, /* instr: immediate22   @gprel(S+A)     */
00505     R_IA_64_GPREL64I    = 0x2b, /* instr: immediate64   @gprel(S+A)     */
00506 
00507     /* unused:  0x2c .. 0x2d                                            */
00508 
00509     R_IA_64_GPREL64MSB  = 0x2e, /* word64 MSB           @gprel(S+A)     */
00510     R_IA_64_GPREL64LSB  = 0x2f, /* word64 LSB           @gprel(S+A)     */
00511 
00512     /* unused:  0x30 .. 0x31                                            */
00513 
00514     R_IA_64_LTOFF22     = 0x32, /* instr: immediate22   @ltoff(S+A)     */
00515     R_IA_64_LTOFF64I    = 0x33, /* instr: immediate64   @ltoff(S+A)     */
00516 
00517     /* unused:  0x34 .. 0x39                                            */
00518 
00519     R_IA_64_PLTOFF22    = 0x3a, /* instr: immediate22   @pltoff(S+A)    */
00520     R_IA_64_PLTOFF64I   = 0x3b, /* instr: immediate64   @pltoff(S+A)    */
00521 
00522     /* unused:  0x3c .. 0x3d                                            */
00523 
00524     R_IA_64_PLTOFF64MSB = 0x3e, /* word64 MSB           @pltoff(S+A)    */
00525     R_IA_64_PLTOFF64LSB = 0x3f, /* wordL4 MSB           @pltoff(S+A)    */
00526 
00527     /* unused:  0x40 .. 0x42                                            */
00528 
00529     R_IA_64_FPTR64I     = 0x43, /* instr: immediate64   @fptr(S+A)      */
00530     R_IA_64_FPTR32MSB   = 0x44, /* word32 MSB           @fptr(S+A)      */
00531     R_IA_64_FPTR32LSB   = 0x45, /* word32 LSB           @fptr(S+A)      */
00532     R_IA_64_FPTR64MSB   = 0x46, /* word64 MSB           @fptr(S+A)      */
00533     R_IA_64_FPTR64LSB   = 0x47, /* word64 LSB           @fptr(S+A)      */
00534 
00535     /* unused:  0x48 .. 0x48                                            */
00536 
00537     R_IA_64_PCREL21B    = 0x49, /* instr: imm21 (form1) S+A-P           */
00538     R_IA_64_PCREL21M    = 0x4a, /* instr: imm21 (form2) S+A-P           */
00539     R_IA_64_PCREL21F    = 0x4b, /* instr: imm21 (form3) S+A-P           */
00540     R_IA_64_PCREL32MSB  = 0x4c, /* word32 MSB           S+A-P           */
00541     R_IA_64_PCREL32LSB  = 0x4d, /* word32 LSB           S+A-P           */
00542     R_IA_64_PCREL64MSB  = 0x4e, /* word64 MSB           S+A-P           */
00543     R_IA_64_PCREL64LSB  = 0x4f, /* word64 LSB           S+A-P           */
00544 
00545     /* unused:  0x50 .. 0x51                                            */
00546 
00547     R_IA_64_LTOFF_FPTR22 = 0x52,/* instr: immediate22   @ltoff(@fptr(S+A)) */
00548     R_IA_64_LTOFF_FPTR64I= 0x53,/* instr: immediate64   @ltoff(@fptr(S+A)) */
00549 
00550     /* unused:  0x54 .. 0x5b                                            */
00551 
00552     R_IA_64_SEGREL32MSB = 0x5c, /* word32 MSB           @segrel(S+A)    */
00553     R_IA_64_SEGREL32LSB = 0x5d, /* word32 LSB           @segrel(S+A)    */
00554     R_IA_64_SEGREL64MSB = 0x5e, /* word64 MSB           @segrel(S+A)    */
00555     R_IA_64_SEGREL64LSB = 0x5f, /* word64 LSB           @segrel(S+A)    */
00556 
00557     /* unused:  0x60 .. 0x63                                            */
00558 
00559     R_IA_64_SECREL32MSB = 0x64, /* word32 MSB           @secrel(S+A)    */
00560     R_IA_64_SECREL32LSB = 0x65, /* word32 LSB           @secrel(S+A)    */
00561     R_IA_64_SECREL64MSB = 0x66, /* word64 MSB           @secrel(S+A)    */
00562     R_IA_64_SECREL64LSB = 0x67, /* word64 LSB           @secrel(S+A)    */
00563 
00564     /* unused:  0x68 .. 0x6b                                            */
00565 
00566     R_IA_64_REL32MSB    = 0x6c, /* word32 MSB           BD+C            */
00567     R_IA_64_REL32LSB    = 0x6d, /* word32 LSB           BD+C            */
00568     R_IA_64_REL64MSB    = 0x6e, /* word64 MSB           BD+C            */
00569     R_IA_64_REL64LSB    = 0x6f, /* word64 LSB           BD+C            */
00570     R_IA_64_LTV32MSB    = 0x70, /* word32 MSB           S+A [note 2]    */
00571     R_IA_64_LTV32LSB    = 0x71, /* word32 LSB           S+A [note 2]    */
00572     R_IA_64_LTV64MSB    = 0x72, /* word64 MSB           S+A [note 2]    */
00573     R_IA_64_LTV64LSB    = 0x73, /* word64 LSB           S+A [note 2]    */
00574 
00575     /* unused:  0x74 .. 0x7f                                            */
00576 
00577     R_IA_64_IPLTMSB     = 0x80, /* func desc MSB        [note 3]        */
00578     R_IA_64_IPLTLSB     = 0x81, /* func desc LSB        [note 3]        */
00579 
00580     /* unused:  0x82 .. 0xff                                            */
00581 
00582     R_IA_64_END_        = 0x82  /* R_IA_64_END_ is not a relocation type.
00583                                  * It marks the end of the list of types.
00584                                  */
00585 }; 
00586 
00587  
00588 /* ====================================================================
00589  *
00590  * .IA64.plt
00591  *
00592  * sh_type:     SHT_IA64_PLT
00593  * sh_link:     ?
00594  * sh_info:     ?
00595  * attributes:  SHF_ALLOC, SHF_IA64_NOSTRIP
00596  *
00597  *
00598  * --- WARNING ---- WARNING ---- WARNING ---- WARNING ---- WARNING ----
00599  *
00600  *      TBD:  The IA64.plt section has not yet been defined.
00601  *
00602  * ====================================================================
00603  */
00604 /* ====================================================================
00605  *
00606  * .IA64.content Section
00607  *
00608  * sh_type:     SHT_IA64_CONTENT
00609  * sh_link:     section header index of section classified
00610  * sh_info:     0
00611  * attributes:  SHF_ALLOC, SHF_IA64_NOSTRIP
00612  *
00613  *
00614  * --- WARNING ---- WARNING ---- WARNING ---- WARNING ---- WARNING ----
00615  *
00616  *      TBD:  The IA64.content section has not yet been defined.
00617  *      TBD:  Define Elf_IA64_Content_Kind
00618  *
00619  * ====================================================================
00620  */
00621 #if (defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS))
00622 typedef enum {
00623         CK_IA64_NULL    = 0x00          /* no valid information */
00624 } Elf_IA64_Content_Kind;
00625 
00626 #endif
00627 
00628 
00629 /* ====================================================================
00630  *
00631  * .IA64.events Section
00632  *
00633  * sh_type:     SHT_IA64_EVENTS
00634  * sh_link:     section header index of section whose events tracked
00635  * sh_info:     section header index of associated interface section
00636  * attributes:  SHF_ALLOC, SHF_IRIX_NOSTRIP
00637  *
00638  *
00639  * --- WARNING ---- WARNING ---- WARNING ---- WARNING ---- WARNING ----
00640  *
00641  *      TBD:  The IA64.events section has not yet been defined.
00642  *      TBD:  define Elf_IA64_Event_Kind
00643  *
00644  * ====================================================================
00645  */
00646 typedef enum {
00647         EK_IA64_NULL    = 0x00                  /* no valid information */
00648 } Elf_IA64_Event_Kind;
00649 
00650 /* ====================================================================
00651  *
00652  * .dynamic Section
00653  *
00654  * --- WARNING ---- WARNING ---- WARNING ---- WARNING ---- WARNING ----
00655  *
00656  *      TBD:  The .dynamic section has not yet been prepared for
00657  *            use in both Irix/mips and Irix/ia64
00658  *
00659  *      I believe that most of the tags will be the same in both
00660  *      Irix/mips and Irix/ia64, but it still needs to be reviewed.
00661  * 
00662  *      For now, we'll document them only in mips/elf.h
00663  * ====================================================================
00664  */
00665  
00666 #endif /* __SYS_IA64_ELF_H__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines