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 + -
显示快捷键?