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