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 #ifndef __IPA_LD_H__
00036 #define __IPA_LD_H__
00037
00038 #define BCOPY(src, dst, len) \
00039 bcopy((const void *)(src), (void *)(dst), (int)(len))
00040
00041 #define FREE(ptr) \
00042 free((void *) (ptr))
00043
00044 #define MALLOC_ASSERT(addr) \
00045 if (addr == 0) { perror("malloc failed: "); exit(1);}
00046
00047 #define MALLOC(nbytes) \
00048 malloc((size_t)(nbytes))
00049
00050 #define REALLOC(ptr, size) \
00051 realloc((void *)(ptr), (size_t)(size))
00052
00053 #define UNLINK(path) \
00054 unlink((const char *)(path))
00055
00056 #define MKDIR(path, mode) \
00057 mkdir((const char *)(path), (mode_t)(mode))
00058
00059 #define RMDIR(path) \
00060 rmdir((const char *)(path))
00061
00062 #define OPEN(path, oflag, mode) \
00063 open((char *)(path), (int)(oflag), (int)(mode))
00064
00065 #define CLOSE(fid) \
00066 close((int)(fid))
00067
00068 #define READ(fildes, buf, nbyte) \
00069 read((int) (fildes), (void *)(buf), (size_t) (nbyte))
00070
00071 #define ALLOCA(size) \
00072 alloca((unsigned int)(size))
00073
00074 #define FCHMOD(fid, mode) \
00075 fchmod((int)(fid), (mode_t)(mode))
00076
00077 #define MMAP(addr, len, prot, flags, fd, off) \
00078 mmap((void *)(addr), (int)(len), (int)(prot), (int)(flags), (int)(fd), \
00079 (off_t)(off))
00080
00081 #define MUNMAP(addr, len) \
00082 munmap((void *)(addr), (int)(len))
00083
00084 #define MEMCPY(s1, s2, n) \
00085 memcpy((void *)(s1), (void *)(s2), (size_t)(n))
00086
00087 #define ELF_WORD int
00088
00089 #define OBJ_ASSERT(EX, obj, str) \
00090 if (!(EX)) {fprintf(stderr,"%s: %s\n", obj->filename, str); exit(1);}
00091
00092 #define DEFAULT_TMP_LIST_SIZE 32
00093 #define DEFAULT_TMPDIR "./ldtmp"
00094 #define DEFAULT_COMPILATION_FLAGS { "cc", "-c", 0}
00095 #define DEFAULT_COMPILATION_ARGC 2
00096 #define WT_COMP_FLAGS 0x3
00097
00098 #define arch_eltdata(bfd) ((struct areltdata *)((bfd)->arelt_data))
00099 #define arch_hdr(_bfd) ((struct ar_hdr *)arch_eltdata(_bfd)->arch_header)
00100
00101 #define FALSE 0
00102 #define TRUE 1
00103
00104 typedef void *pointer;
00105 typedef char *string;
00106
00107
00108
00109 enum AUX_ST_FLAG
00110 {
00111
00112
00113 USED_IN_OBJ = 0x00000001,
00114 USED_IN_DSO = 0x00000002,
00115 DEF_IN_OBJ = 0x00000004,
00116 DEF_IN_DSO = 0x00000008,
00117 OBJ_COMMON = 0x00000010,
00118 ADDR_TAKEN_IN_OBJ = 0x00000020,
00119
00120
00121 OBJ_ATTR_MASK = 0x0000003f,
00122
00123
00124
00125 COMMON_USED_IN_IO = 0x00000040,
00126 IGNORE_REFCOUNTS = 0x00000080
00127
00128 };
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 typedef enum{
00142 LD_IPA_SHARABLE,
00143 LD_IPA_DEMANGLE,
00144 LD_IPA_SHOW,
00145 LD_IPA_HIDES,
00146 LD_IPA_TARGOS,
00147 LD_IPA_VERBOSE,
00148 LD_IPA_KEEP_TEMPS,
00149 LD_IPA_ISA,
00150 LD_IPA_XXXX,
00151 #ifdef TARG_SL
00152 LD_IPA_IPISR,
00153 #endif
00154 MAX_LD_IPA
00155 }ld_ipa_option_enum;
00156
00157 typedef struct ld_ipa_option {
00158 ld_ipa_option_enum opt_ndx;
00159 unsigned flag : 4;
00160 unsigned set : 4;
00161 } LD_IPA_OPTION;
00162
00163 extern LD_IPA_OPTION ld_ipa_opt[MAX_LD_IPA];
00164
00165 #define HS_DEFAULT 0
00166 #define HS_HIDES 1
00167 #define HS_EXPORTS 2
00168 #define HS_IGNORE 3
00169
00170
00171
00172
00173
00174
00175 typedef struct {
00176 char **sym;
00177 int num;
00178 int max;
00179 } OPTION_SYM;
00180
00181
00182
00183
00184 #define F_RELOCATABLE 1
00185 #define F_NON_SHARED 2
00186 #define F_CALL_SHARED 4
00187 #define F_MAKE_SHARABLE 8
00188 #define F_STATIC (F_NON_SHARED | F_RELOCATABLE)
00189 #define F_DYNAMIC (~(F_STATIC))
00190 #define F_MAIN (F_NON_SHARED | F_CALL_SHARED)
00191 #define F_EXEC (~F_RELOCATABLE)
00192 #define F_ALL (F_STATIC | F_DYNAMIC)
00193 #define F_CALL_SHARED_RELOC (F_RELOCATABLE | F_CALL_SHARED)
00194
00195 typedef enum {
00196 TOS_IA64_64,
00197 TOS_IA64_32,
00198 TOS_MAX
00199 }targos_enum;
00200
00201 extern string tos_string[TOS_MAX];
00202 extern string WB_flags;
00203 extern string Y_flags;
00204 extern string toolroot;
00205 extern string tmpdir;
00206 extern string outfilename;
00207 extern string WB_flags;
00208 extern string Y_flags;
00209 extern char * __Release_ID;
00210
00211 extern void *(*p_ipa_open_input)(char *, off_t *);
00212 extern void (*p_ipa_init_link_line)(int, char **);
00213 extern void (*p_ipa_add_link_flag)(const char*);
00214 extern void (*p_ipa_modify_link_flag)(char*, char*);
00215 extern void (*p_ipa_driver)(int, char **);
00216 #ifdef OSP_OPT
00217 extern void (*p_process_whirl64)(void *, off_t, void *, int, const char *, off_t, bfd_boolean);
00218 extern void (*p_process_whirl32)(void *, off_t, void *, int, const char *, off_t, bfd_boolean);
00219 #else
00220 extern void (*p_process_whirl64)(void *, off_t, void *, int, const char *, off_t);
00221 extern void (*p_process_whirl32)(void *, off_t, void *, int, const char *, off_t);
00222 #endif
00223 extern void (*p_ipa_insert_whirl_marker)(void);
00224 #ifdef KEY
00225 extern void (*p_ipa_erase_link_flag)(const char*);
00226 extern void (*p_Ipalink_Set_Error_Phase)(char *);
00227 extern void (*p_Ipalink_ErrMsg_EC_Outfile)(char *);
00228 #endif
00229
00230
00231
00232
00233 extern char *
00234 always_demangle(char *, char );
00235
00236
00237 extern void read_one_section(int , void *);
00238
00239 extern void
00240 merge_ext(void *, char *, int , void *) ;
00241
00242 extern void
00243 msg (int , int , ...);
00244
00245 extern char *
00246 ipa_copy_of(char *);
00247
00248 extern string
00249 concat_names(const string, const string);
00250
00251 extern int
00252 do_compile (string *);
00253
00254 extern void
00255 add_to_tmp_file_list (string);
00256
00257 extern void
00258 cleanup_all_files (void);
00259
00260 extern int
00261 create_tmpdir ( int);
00262
00263 extern string
00264 create_unique_file (const string, char);
00265
00266 extern string *
00267 get_command_line(bfd *, string , string , int *);
00268
00269 extern int
00270 make_link (const string dest, const string src);
00271
00272 extern string
00273 ld_compile (bfd *abfd);
00274
00275 extern void *
00276 ld_slookup_mext(char *, bfd_boolean);
00277
00278 extern void
00279 ld_set_st_idx (void *, int);
00280
00281 extern int
00282 ld_get_st_idx (void *);
00283
00284 extern int
00285 ipa_set_ndx (bfd *);
00286
00287 extern bfd_boolean
00288 ld_resolved_to_obj (void *, void *);
00289
00290 extern char *
00291 ld_get_section_base (void *, int );
00292
00293 extern unsigned long long
00294 ld_get_section_size(void *, int );
00295
00296 extern char *
00297 ld_get_section_name(void *, int );
00298
00299 extern void *
00300 ld_get_mmap_addr(void *);
00301
00302 extern void
00303 ld_set_section_data(void *,int );
00304
00305 extern void
00306 ld_release_section_data(void *,int );
00307
00308 extern void
00309 ld_set_cur_obj(bfd *);
00310
00311 void *
00312 ld_get_cur_obj(void);
00313
00314 extern bfd_boolean
00315 ipa_is_whirl(bfd *);
00316
00317 extern void
00318 ipa_process_whirl ( bfd *);
00319
00320 extern void
00321 ipa_process_whirl_in_archive ( bfd *, bfd *);
00322
00323 extern int
00324 Count_elf_external_gots (void);
00325
00326 extern void
00327 ipa_set_syms (void);
00328
00329 #ifdef OSP_OPT
00330 extern char *
00331 ipa_mmap_file_in_archive ( bfd *, int, off_t);
00332 #endif
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346 #define WHIRL_ST_IDX_UNINITIALIZED (0)
00347 #define WHIRL_ST_IDX_NOT_AVAILABLE (-1)
00348
00349
00350
00351 #endif