00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef em_elf_INCLUDED
00041 #define em_elf_INCLUDED
00042 #ifdef __cplusplus
00043 extern "C" {
00044 #endif
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 extern INT GP_DISP;
00065
00066 #define Roundup(_value,_align) ((_value+(_align-1)) & (~(_align-1)))
00067
00068 typedef struct section_info SCNINFO, *pSCNINFO;
00069
00070 extern pSCNINFO Symtab_Info;
00071 extern BOOL Sixtyfour_Bit;
00072 extern pSCNINFO Options_Scn;
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 extern INT
00083 Em_Begin_File (
00084 char *ofilename,
00085 BOOL update,
00086 BOOL elf64,
00087 BOOL old_abi,
00088 INT isa,
00089 BOOL big_endian,
00090 BOOL pic,
00091 BOOL cpic,
00092 BOOL xgot,
00093 BOOL gp_groups,
00094 BOOL elf_trace);
00095
00096
00097
00098 extern void
00099 Em_End_File (void);
00100
00101
00102
00103
00104
00105 extern pSCNINFO
00106 Em_New_Section (
00107 const char *scnname,
00108 Elf64_Word scntype,
00109 Elf64_Xword scnflags,
00110 Elf64_Xword scnentsize,
00111 Elf64_Xword scnalign);
00112
00113
00114
00115 extern void
00116 Em_End_Section (pSCNINFO scninfo);
00117
00118
00119
00120
00121
00122
00123
00124 extern void
00125 Em_New_Data_Buffer (pSCNINFO scninfo, Elf64_Xword size, INT alignment);
00126
00127
00128 extern Elf64_Word
00129 Em_Add_New_Symbol (
00130 char *symname,
00131 Elf64_Addr symvalue,
00132 Elf64_Xword symsize,
00133 unsigned char symbind,
00134 unsigned char symtype,
00135 unsigned char symother,
00136 Elf64_Half symshndx);
00137
00138
00139
00140
00141
00142 extern Elf64_Word
00143 Em_Add_New_Undef_Symbol (
00144 char *symname,
00145 unsigned char symbind,
00146 unsigned char symtype,
00147 unsigned char symother);
00148
00149
00150
00151
00152
00153 extern Elf64_Word
00154 Em_Add_New_Common_Symbol (
00155 char *symname,
00156 Elf64_Xword symsize,
00157 unsigned char symbind,
00158 unsigned char symother);
00159
00160
00161
00162
00163 extern Elf64_Word
00164 Em_Add_New_Weak_Symbol (
00165 char *weakname,
00166 unsigned char symtype,
00167 unsigned char symother,
00168 Elf64_Word symindex);
00169
00170
00171
00172
00173
00174
00175 extern void
00176 Em_Define_Symbol (
00177 Elf64_Word symindex,
00178 Elf64_Addr symvalue,
00179 Elf64_Xword symsize,
00180 pSCNINFO scninfo);
00181
00182
00183 extern void Em_Undefine_Symbol (Elf64_Word symindex);
00184
00185
00186 extern void Em_Set_Symbol_Binding (Elf64_Word symindex, unsigned char symbind);
00187
00188 extern Elf64_Addr
00189 Em_Get_Symbol_Value (Elf64_Word symindex);
00190
00191 extern char *
00192 Em_Get_Symbol_Name (Elf64_Word symindex);
00193
00194
00195 extern void
00196 Em_Add_New_Rel (
00197 Elf64_Word symindex,
00198 unsigned char reltype,
00199 Elf64_Addr reloffset,
00200 pSCNINFO scninfo);
00201
00202
00203
00204 extern void
00205 Em_Add_New_Rela (
00206 Elf64_Word symindex,
00207 unsigned char reltype,
00208 Elf64_Addr reloffset,
00209 Elf64_Sxword addend,
00210 pSCNINFO scninfo);
00211
00212
00213
00214
00215 extern void
00216 Em_Add_New_Composite_Rela ( Elf64_AltRela *preloc, pSCNINFO scninfo );
00217
00218
00219
00220
00221 extern void
00222 Em_Change_Section_Origin ( pSCNINFO scn, Elf64_Xword scn_ofst );
00223
00224
00225 extern void
00226 Em_Change_Section_Alignment ( pSCNINFO scn, Elf64_Word scn_align );
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237 extern Elf64_Xword
00238 Em_Add_Bytes_To_Scn (
00239 pSCNINFO scninfo,
00240 const void *input_buf,
00241 Elf64_Xword length,
00242 Elf64_Word align);
00243
00244
00245
00246
00247
00248 extern Elf64_Xword
00249 Em_Add_Zeros_To_Scn (
00250 pSCNINFO scninfo,
00251 Elf64_Word length,
00252 Elf64_Word align);
00253
00254
00255
00256
00257
00258
00259 extern Elf64_Xword
00260 Em_Add_Address_To_Scn (
00261 pSCNINFO scninfo,
00262 Elf64_Word symindex,
00263 Elf64_Sxword addend,
00264 Elf64_Word align);
00265
00266
00267
00268
00269
00270 extern Elf64_Xword
00271 Em_Add_Displacement_To_Scn (
00272 pSCNINFO scninfo,
00273 Elf64_Word symindex,
00274 Elf64_Sxword addend,
00275 Elf64_Word align);
00276
00277
00278 extern void Em_Set_sh_link (pSCNINFO scn, Elf64_Word link);
00279
00280
00281 extern void Em_Set_sh_info (pSCNINFO scn, Elf64_Word info);
00282
00283
00284 extern size_t Em_Get_Section_Index (pSCNINFO scn);
00285
00286
00287 extern Elf64_Xword Em_Get_Section_Offset (pSCNINFO scn);
00288
00289 extern char *Em_Get_Section_Name (pSCNINFO scn);
00290 extern Elf64_Word Em_Get_Section_Type (pSCNINFO scn);
00291 extern Elf64_Word Em_Get_Section_Flags (pSCNINFO scn);
00292 extern Elf64_Word Em_Get_Section_Entsize (pSCNINFO scn);
00293 extern Elf64_Word Em_Get_Section_Align (pSCNINFO scn);
00294 extern Elf64_Word Em_Get_Section_Info (pSCNINFO scn);
00295
00296
00297
00298 extern Elf64_Word Em_Create_Section_Symbol (pSCNINFO scninfo);
00299
00300 extern void
00301 Em_Write_Reginfo (
00302 Elf64_Addr gprvalue,
00303 Elf64_Word gprmask,
00304 Elf64_Word fprmask,
00305 BOOL pure_abi);
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 extern void
00324 Em_Add_New_Event (
00325 Elf64_Word ev_kind,
00326 Elf64_Word ev_ofst,
00327 Elf64_Word operand1,
00328 Elf64_Word operand2,
00329 Elf64_Word operand3,
00330 pSCNINFO scn);
00331
00332
00333 extern void
00334 Em_Add_New_Content (
00335 Elf64_Word con_kind,
00336 Elf64_Xword con_ofst,
00337 Elf64_Word operand1,
00338 Elf64_Word operand2,
00339 pSCNINFO scn);
00340
00341
00342 extern void
00343 Em_Add_New_Option (
00344 Elf32_Byte option_kind,
00345 Elf32_Section option_section,
00346 Elf32_Word option_info,
00347 void *buffer,
00348 Elf32_Byte length);
00349
00350
00351
00352 extern void
00353 Em_Add_New_Interface (
00354 Elf64_Word length,
00355 Elf64_Byte *data);
00356
00357
00358
00359
00360
00361
00362
00363 extern void Em_Add_Comment (char *s);
00364
00365
00366
00367
00368
00369 extern void Em_End_Unwind (FILE *trace_file, pSCNINFO text_scn);
00370
00371
00372 extern void Em_Cleanup_Unwind (void);
00373
00374 #ifdef __cplusplus
00375 }
00376 #endif
00377 #endif