obj-coff.h
来自「基于4个mips核的noc设计」· C头文件 代码 · 共 873 行 · 第 1/3 页
H
873 行
/* * Internal use only definitions. SF_ stands for symbol flags. * * These values can be assigned to sy_symbol.ost_flags field of a symbolS. * * You'll break i960 if you shift the SYSPROC bits anywhere else. for * more on the balname/callname hack, see tc-i960.h. b.out is done * differently. */#define SF_I960_MASK (0x000001ff) /* Bits 0-8 are used by the i960 port. */#define SF_SYSPROC (0x0000003f) /* bits 0-5 are used to store the sysproc number */#define SF_IS_SYSPROC (0x00000040) /* bit 6 marks symbols that are sysprocs */#define SF_BALNAME (0x00000080) /* bit 7 marks BALNAME symbols */#define SF_CALLNAME (0x00000100) /* bit 8 marks CALLNAME symbols */#define SF_NORMAL_MASK (0x0000ffff) /* bits 12-15 are general purpose. */#define SF_STATICS (0x00001000) /* Mark the .text & all symbols */#define SF_DEFINED (0x00002000) /* Symbol is defined in this file */#define SF_STRING (0x00004000) /* Symbol name length > 8 */#define SF_LOCAL (0x00008000) /* Symbol must not be emitted */#define SF_DEBUG_MASK (0xffff0000) /* bits 16-31 are debug info */#define SF_FUNCTION (0x00010000) /* The symbol is a function */#define SF_PROCESS (0x00020000) /* Process symbol before write */#define SF_TAGGED (0x00040000) /* Is associated with a tag */#define SF_TAG (0x00080000) /* Is a tag */#define SF_DEBUG (0x00100000) /* Is in debug or abs section */#define SF_GET_SEGMENT (0x00200000) /* Get the section of the forward symbol. *//* All other bits are unused. *//* Accessors */#define SF_GET(s) (*symbol_get_obj (s))#define SF_GET_DEBUG(s) (symbol_get_bfdsym (s)->flags & BSF_DEBUGGING)#define SF_SET_DEBUG(s) (symbol_get_bfdsym (s)->flags |= BSF_DEBUGGING)#define SF_GET_NORMAL_FIELD(s) (SF_GET (s) & SF_NORMAL_MASK)#define SF_GET_DEBUG_FIELD(s) (SF_GET (s) & SF_DEBUG_MASK)#define SF_GET_FILE(s) (SF_GET (s) & SF_FILE)#define SF_GET_STATICS(s) (SF_GET (s) & SF_STATICS)#define SF_GET_DEFINED(s) (SF_GET (s) & SF_DEFINED)#define SF_GET_STRING(s) (SF_GET (s) & SF_STRING)#define SF_GET_LOCAL(s) (SF_GET (s) & SF_LOCAL)#define SF_GET_FUNCTION(s) (SF_GET (s) & SF_FUNCTION)#define SF_GET_PROCESS(s) (SF_GET (s) & SF_PROCESS)#define SF_GET_TAGGED(s) (SF_GET (s) & SF_TAGGED)#define SF_GET_TAG(s) (SF_GET (s) & SF_TAG)#define SF_GET_GET_SEGMENT(s) (SF_GET (s) & SF_GET_SEGMENT)#define SF_GET_I960(s) (SF_GET (s) & SF_I960_MASK) /* used by i960 */#define SF_GET_BALNAME(s) (SF_GET (s) & SF_BALNAME) /* used by i960 */#define SF_GET_CALLNAME(s) (SF_GET (s) & SF_CALLNAME) /* used by i960 */#define SF_GET_IS_SYSPROC(s) (SF_GET (s) & SF_IS_SYSPROC) /* used by i960 */#define SF_GET_SYSPROC(s) (SF_GET (s) & SF_SYSPROC) /* used by i960 *//* Modifiers */#define SF_SET(s,v) (SF_GET (s) = (v))#define SF_SET_NORMAL_FIELD(s,v) (SF_GET (s) |= ((v) & SF_NORMAL_MASK))#define SF_SET_DEBUG_FIELD(s,v) (SF_GET (s) |= ((v) & SF_DEBUG_MASK))#define SF_SET_FILE(s) (SF_GET (s) |= SF_FILE)#define SF_SET_STATICS(s) (SF_GET (s) |= SF_STATICS)#define SF_SET_DEFINED(s) (SF_GET (s) |= SF_DEFINED)#define SF_SET_STRING(s) (SF_GET (s) |= SF_STRING)#define SF_SET_LOCAL(s) (SF_GET (s) |= SF_LOCAL)#define SF_CLEAR_LOCAL(s) (SF_GET (s) &= ~SF_LOCAL)#define SF_SET_FUNCTION(s) (SF_GET (s) |= SF_FUNCTION)#define SF_SET_PROCESS(s) (SF_GET (s) |= SF_PROCESS)#define SF_SET_TAGGED(s) (SF_GET (s) |= SF_TAGGED)#define SF_SET_TAG(s) (SF_GET (s) |= SF_TAG)#define SF_SET_GET_SEGMENT(s) (SF_GET (s) |= SF_GET_SEGMENT)#define SF_SET_I960(s,v) (SF_GET (s) |= ((v) & SF_I960_MASK)) /* used by i960 */#define SF_SET_BALNAME(s) (SF_GET (s) |= SF_BALNAME) /* used by i960 */#define SF_SET_CALLNAME(s) (SF_GET (s) |= SF_CALLNAME) /* used by i960 */#define SF_SET_IS_SYSPROC(s) (SF_GET (s) |= SF_IS_SYSPROC) /* used by i960 */#define SF_SET_SYSPROC(s,v) (SF_GET (s) |= ((v) & SF_SYSPROC)) /* used by i960 *//* -------------- Line number handling ------- */extern int text_lineno_number;extern int coff_line_base;extern int coff_n_line_nos;#define obj_emit_lineno(WHERE,LINE,FILE_START) abort ()extern void coff_add_linesym PARAMS ((symbolS *));void c_dot_file_symbol PARAMS ((const char *filename));#define obj_app_file c_dot_file_symbolextern void coff_frob_symbol PARAMS ((symbolS *, int *));extern void coff_adjust_symtab PARAMS ((void));extern void coff_frob_section PARAMS ((segT));extern void coff_adjust_section_syms PARAMS ((bfd *, asection *, PTR));extern void coff_frob_file_after_relocs PARAMS ((void));#define obj_frob_symbol(S,P) coff_frob_symbol(S,&P)#ifndef obj_adjust_symtab#define obj_adjust_symtab() coff_adjust_symtab()#endif#define obj_frob_section(S) coff_frob_section (S)#define obj_frob_file_after_relocs() coff_frob_file_after_relocs ()extern symbolS *coff_last_function;/* Forward the segment of a forwarded symbol, handle assignments that just copy symbol values, etc. */#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES#ifndef TE_I386AIX#define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \ (SF_GET_GET_SEGMENT (dest) \ ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \ : 0)#else#define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \ (SF_GET_GET_SEGMENT (dest) && S_GET_SEGMENT (dest) == SEG_UNKNOWN \ ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \ : 0)#endif#endif/* sanity check */#ifdef TC_I960#ifndef C_LEAFSTAThey ! Where is the C_LEAFSTAT definition ? i960 - coff support is depending on it.#endif /* no C_LEAFSTAT */#endif /* TC_I960 */#else /* not BFD_ASSEMBLER */#ifdef TC_A29K/* Allow translate from aout relocs to coff relocs */#define NO_RELOC 20#define RELOC_32 1#define RELOC_8 2#define RELOC_CONST 3#define RELOC_CONSTH 4#define RELOC_JUMPTARG 5#define RELOC_BASE22 6#define RELOC_HI22 7#define RELOC_LO10 8#define RELOC_BASE13 9#define RELOC_WDISP22 10#define RELOC_WDISP30 11#endifextern const segT N_TYPE_seg[];/* Magic number of paged executable. */#define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE 0x8300/* SYMBOL TABLE *//* Symbol table entry data type */typedef struct{ /* Basic symbol */ struct internal_syment ost_entry; /* Auxiliary entry. */ union internal_auxent ost_auxent[OBJ_COFF_MAX_AUXENTRIES]; /* obj_coff internal use only flags */ unsigned int ost_flags;} obj_symbol_type;#ifndef DO_NOT_STRIP#define DO_NOT_STRIP 0#endif/* Symbol table macros and constants *//* Possible and usefull section number in symbol table * The values of TEXT, DATA and BSS may not be portable. */#define C_ABS_SECTION N_ABS#define C_UNDEF_SECTION N_UNDEF#define C_DEBUG_SECTION N_DEBUG#define C_NTV_SECTION N_TV#define C_PTV_SECTION P_TV#define C_REGISTER_SECTION 50/* * Macros to extract information from a symbol table entry. * This syntaxic indirection allows independence regarding a.out or coff. * The argument (s) of all these macros is a pointer to a symbol table entry. *//* Predicates *//* True if the symbol is external */#define S_IS_EXTERNAL(s) ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION)/* True if symbol has been defined, ie : section > 0 (DATA, TEXT or BSS) section == 0 and value > 0 (external bss symbol) */#define S_IS_DEFINED(s) \ ((s)->sy_symbol.ost_entry.n_scnum > C_UNDEF_SECTION \ || ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION \ && S_GET_VALUE (s) > 0) \ || ((s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION))/* True if a debug special symbol entry */#define S_IS_DEBUG(s) ((s)->sy_symbol.ost_entry.n_scnum == C_DEBUG_SECTION)/* True if a symbol is local symbol name *//* A symbol name whose name includes ^A is a gas internal pseudo symbol */#define S_IS_LOCAL(s) \ ((s)->sy_symbol.ost_entry.n_scnum == C_REGISTER_SECTION \ || (S_LOCAL_NAME(s) && ! flag_keep_locals && ! S_IS_DEBUG (s)) \ || strchr (S_GET_NAME (s), '\001') != NULL \ || strchr (S_GET_NAME (s), '\002') != NULL \ || (flag_strip_local_absolute \ && !S_IS_EXTERNAL(s) \ && (s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION))/* True if a symbol is not defined in this file */#define S_IS_EXTERN(s) ((s)->sy_symbol.ost_entry.n_scnum == 0 \ && S_GET_VALUE (s) == 0)/* * True if a symbol can be multiply defined (bss symbols have this def * though it is bad practice) */#define S_IS_COMMON(s) ((s)->sy_symbol.ost_entry.n_scnum == 0 \ && S_GET_VALUE (s) != 0)/* True if a symbol name is in the string table, i.e. its length is > 8. */#define S_IS_STRING(s) (strlen(S_GET_NAME(s)) > 8 ? 1 : 0)/* True if a symbol is defined as weak. */#ifdef TE_PE#define S_IS_WEAK(s) \ ((s)->sy_symbol.ost_entry.n_sclass == C_NT_WEAK \ || (s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT)#else#define S_IS_WEAK(s) \ ((s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT)#endif/* Accessors *//* The name of the symbol */#define S_GET_NAME(s) ((char*) (s)->sy_symbol.ost_entry.n_offset)/* The pointer to the string table */#define S_GET_OFFSET(s) ((s)->sy_symbol.ost_entry.n_offset)/* The numeric value of the segment */#define S_GET_SEGMENT(s) s_get_segment(s)/* The data type */#define S_GET_DATA_TYPE(s) ((s)->sy_symbol.ost_entry.n_type)/* The storage class */#define S_GET_STORAGE_CLASS(s) ((s)->sy_symbol.ost_entry.n_sclass)/* The number of auxiliary entries */#define S_GET_NUMBER_AUXILIARY(s) ((s)->sy_symbol.ost_entry.n_numaux)/* Modifiers *//* Set the name of the symbol */#define S_SET_NAME(s,v) ((s)->sy_symbol.ost_entry.n_offset = (unsigned long) (v))/* Set the offset of the symbol */#define S_SET_OFFSET(s,v) ((s)->sy_symbol.ost_entry.n_offset = (v))/* The numeric value of the segment */#define S_SET_SEGMENT(s,v) ((s)->sy_symbol.ost_entry.n_scnum = SEGMENT_TO_SYMBOL_TYPE(v))/* The data type */#define S_SET_DATA_TYPE(s,v) ((s)->sy_symbol.ost_entry.n_type = (v))/* The storage class */#define S_SET_STORAGE_CLASS(s,v) ((s)->sy_symbol.ost_entry.n_sclass = (v))/* The number of auxiliary entries */#define S_SET_NUMBER_AUXILIARY(s,v) ((s)->sy_symbol.ost_entry.n_numaux = (v))/* Additional modifiers *//* The symbol is external (does not mean undefined) */#define S_SET_EXTERNAL(s) { S_SET_STORAGE_CLASS(s, C_EXT) ; SF_CLEAR_LOCAL(s); }/* Auxiliary entry macros. SA_ stands for symbol auxiliary *//* Omit the tv related fields *//* Accessors */#define SYM_AUXENT(S) (&(S)->sy_symbol.ost_auxent[0])#define SA_GET_SYM_TAGNDX(s) (SYM_AUXENT (s)->x_sym.x_tagndx.l)#define SA_GET_SYM_LNNO(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno)#define SA_GET_SYM_SIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size)#define SA_GET_SYM_FSIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize)#define SA_GET_SYM_LNNOPTR(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr)#define SA_GET_SYM_ENDNDX(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l)#define SA_GET_SYM_DIMEN(s,i) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)])#define SA_GET_FILE_FNAME(s) (SYM_AUXENT (s)->x_file.x_fname)#define SA_GET_FILE_FNAME_OFFSET(s) (SYM_AUXENT (s)->x_file.x_n.x_offset)#define SA_GET_FILE_FNAME_ZEROS(s) (SYM_AUXENT (s)->x_file.x_n.x_zeroes)#define SA_GET_SCN_SCNLEN(s) (SYM_AUXENT (s)->x_scn.x_scnlen)#define SA_GET_SCN_NRELOC(s) (SYM_AUXENT (s)->x_scn.x_nreloc)#define SA_GET_SCN_NLINNO(s) (SYM_AUXENT (s)->x_scn.x_nlinno)/* Modifiers */#define SA_SET_SYM_TAGNDX(s,v) (SYM_AUXENT (s)->x_sym.x_tagndx.l=(v))#define SA_SET_SYM_LNNO(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno=(v))#define SA_SET_SYM_SIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size=(v))#define SA_SET_SYM_FSIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize=(v))#define SA_SET_SYM_LNNOPTR(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr=(v))#define SA_SET_SYM_ENDNDX(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l=(v))#define SA_SET_SYM_DIMEN(s,i,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)]=(v))#define SA_SET_FILE_FNAME(s,v) strncpy(SYM_AUXENT (s)->x_file.x_fname,(v),FILNMLEN)#define SA_SET_FILE_FNAME_OFFSET(s,v) (SYM_AUXENT (s)->x_file.x_n.x_offset=(v))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?