1 /* coff object file format 2 Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 4 Free Software Foundation, Inc. 5 6 This file is part of GAS. 7 8 GAS is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2, or (at your option) 11 any later version. 12 13 GAS is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GAS; see the file COPYING. If not, write to the Free 20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 21 02110-1301, USA. */ 22 23 #ifndef OBJ_FORMAT_H 24 #define OBJ_FORMAT_H 25 26 #define OBJ_COFF 1 27 28 #ifndef BFD_ASSEMBLER 29 30 #define WORKING_DOT_WORD 31 #define WARN_SIGNED_OVERFLOW_WORD 32 #define OBJ_COFF_OMIT_OPTIONAL_HEADER 33 #define BFD_HEADERS 34 #define BFD 35 36 #endif 37 38 #include "targ-cpu.h" 39 40 #include "bfd.h" 41 42 /* This internal_lineno crap is to stop namespace pollution from the 43 bfd internal coff headerfile. */ 44 #define internal_lineno bfd_internal_lineno 45 #include "coff/internal.h" 46 #undef internal_lineno 47 48 /* CPU-specific setup: */ 49 50 #ifdef TC_ARM 51 #include "coff/arm.h" 52 #ifndef TARGET_FORMAT 53 #define TARGET_FORMAT "coff-arm" 54 #endif 55 #endif 56 57 #ifdef TC_PPC 58 #ifdef TE_PE 59 #include "coff/powerpc.h" 60 #else 61 #include "coff/rs6000.h" 62 #endif 63 #endif 64 65 #ifdef TC_SPARC 66 #include "coff/sparc.h" 67 #endif 68 69 #ifdef TC_I386 70 #include "coff/i386.h" 71 72 #ifdef TE_PE 73 #define TARGET_FORMAT "pe-i386" 74 #endif 75 76 #ifndef TARGET_FORMAT 77 #define TARGET_FORMAT "coff-i386" 78 #endif 79 #endif 80 81 #ifdef TC_M68K 82 #include "coff/m68k.h" 83 #ifndef TARGET_FORMAT 84 #define TARGET_FORMAT "coff-m68k" 85 #endif 86 #endif 87 88 #ifdef TC_A29K 89 #include "coff/a29k.h" 90 #define TARGET_FORMAT "coff-a29k-big" 91 #endif 92 93 #ifdef TC_OR32 94 #include "coff/or32.h" 95 #define TARGET_FORMAT "coff-or32-big" 96 #endif 97 98 #ifdef TC_I960 99 #include "coff/i960.h" 100 #define TARGET_FORMAT "coff-Intel-little" 101 #endif 102 103 #ifdef TC_Z8K 104 #include "coff/z8k.h" 105 #define TARGET_FORMAT "coff-z8k" 106 #endif 107 108 #ifdef TC_H8300 109 #include "coff/h8300.h" 110 #define TARGET_FORMAT "coff-h8300" 111 #endif 112 113 #ifdef TC_H8500 114 #include "coff/h8500.h" 115 #define TARGET_FORMAT "coff-h8500" 116 #endif 117 118 #ifdef TC_MAXQ20 119 #include "coff/maxq.h" 120 #define TARGET_FORMAT "coff-maxq" 121 #endif 122 123 #ifdef TC_SH 124 125 #ifdef TE_PE 126 #define COFF_WITH_PE 127 #endif 128 129 #include "coff/sh.h" 130 131 #ifdef TE_PE 132 #define TARGET_FORMAT "pe-shl" 133 #else 134 135 #define TARGET_FORMAT \ 136 (!target_big_endian \ 137 ? (sh_small ? "coff-shl-small" : "coff-shl") \ 138 : (sh_small ? "coff-sh-small" : "coff-sh")) 139 140 #endif 141 #endif 142 143 #ifdef TC_MIPS 144 #define COFF_WITH_PE 145 #include "coff/mipspe.h" 146 #undef TARGET_FORMAT 147 #define TARGET_FORMAT "pe-mips" 148 #endif 149 150 #ifdef TC_M88K 151 #include "coff/m88k.h" 152 #define TARGET_FORMAT "coff-m88kbcs" 153 #endif 154 155 #ifdef TC_W65 156 #include "coff/w65.h" 157 #define TARGET_FORMAT "coff-w65" 158 #endif 159 160 #ifdef TC_TIC30 161 #include "coff/tic30.h" 162 #define TARGET_FORMAT "coff-tic30" 163 #endif 164 165 #ifdef TC_TIC4X 166 #include "coff/tic4x.h" 167 #define TARGET_FORMAT "coff2-tic4x" 168 #endif 169 170 #ifdef TC_TIC54X 171 #include "coff/tic54x.h" 172 #define TARGET_FORMAT "coff1-c54x" 173 #endif 174 175 #ifdef TC_TIC80 176 #include "coff/tic80.h" 177 #define TARGET_FORMAT "coff-tic80" 178 #define ALIGNMENT_IN_S_FLAGS 1 179 #endif 180 181 #ifdef TC_MCORE 182 #include "coff/mcore.h" 183 #ifndef TARGET_FORMAT 184 #define TARGET_FORMAT "pe-mcore" 185 #endif 186 #endif 187 188 #ifdef TE_PE 189 /* PE weak symbols need USE_UNIQUE. */ 190 #define USE_UNIQUE 1 191 #endif 192 193 /* Targets may also set this. Also, if BFD_ASSEMBLER is defined, this 194 will already have been defined. */ 195 #undef SYMBOLS_NEED_BACKPOINTERS 196 #define SYMBOLS_NEED_BACKPOINTERS 1 197 198 #ifndef OBJ_COFF_MAX_AUXENTRIES 199 #define OBJ_COFF_MAX_AUXENTRIES 1 200 #endif 201 202 #define obj_symbol_new_hook coff_obj_symbol_new_hook 203 #define obj_read_begin_hook coff_obj_read_begin_hook 204 205 /* This file really contains two implementations of the COFF back end. 206 They are in the process of being merged, but this is only a 207 preliminary, mechanical merging. Many definitions that are 208 identical between the two are still found in both versions. 209 210 The first version, with BFD_ASSEMBLER defined, uses high-level BFD 211 interfaces and data structures. The second version, with 212 BFD_ASSEMBLER not defined, also uses BFD, but mostly for swapping 213 data structures and for doing the actual I/O. The latter defines 214 the preprocessor symbols BFD and BFD_HEADERS. Try not to let this 215 confuse you. 216 217 These two are in the process of being merged, and eventually the 218 BFD_ASSEMBLER version should take over completely. Release timing 219 issues and namespace problems convinced me to merge the two 220 together in this fashion, a little sooner than I would have liked. 221 The real merge should be much better done by the time the next 222 release comes out. 223 224 For now, the structure of this file is: 225 <common> 226 #ifdef BFD_ASSEMBLER 227 <one version> 228 #else 229 <other version> 230 #endif 231 <common> 232 Unfortunately, the common portions are very small at the moment, 233 and many declarations or definitions are duplicated. The structure 234 of obj-coff.c is similar. 235 236 See doc/internals.texi for a brief discussion of the history, if 237 you care. 238 239 Ken Raeburn, 5 May 1994. */ 240 241 #ifdef BFD_ASSEMBLER 242 243 #include "bfd/libcoff.h" 244 245 #define OUTPUT_FLAVOR bfd_target_coff_flavour 246 247 /* Alter the field names, for now, until we've fixed up the other 248 references to use the new name. */ 249 #ifdef TC_I960 250 #define TC_SYMFIELD_TYPE symbolS * 251 #define sy_tc bal 252 #endif 253 254 #define OBJ_SYMFIELD_TYPE unsigned long 255 #define sy_obj sy_flags 256 257 /* We can't use the predefined section symbols in bfd/section.c, as 258 COFF symbols have extra fields. See bfd/libcoff.h:coff_symbol_type. */ 259 #ifndef obj_sec_sym_ok_for_reloc 260 #define obj_sec_sym_ok_for_reloc(SEC) ((SEC)->owner != 0) 261 #endif 262 263 #define SYM_AUXENT(S) \ 264 (&coffsymbol (symbol_get_bfdsym (S))->native[1].u.auxent) 265 #define SYM_AUXINFO(S) \ 266 (&coffsymbol (symbol_get_bfdsym (S))->native[1]) 267 268 /* The number of auxiliary entries. */ 269 #define S_GET_NUMBER_AUXILIARY(s) \ 270 (coffsymbol (symbol_get_bfdsym (s))->native->u.syment.n_numaux) 271 /* The number of auxiliary entries. */ 272 #define S_SET_NUMBER_AUXILIARY(s, v) (S_GET_NUMBER_AUXILIARY (s) = (v)) 273 274 /* True if a symbol name is in the string table, i.e. its length is > 8. */ 275 #define S_IS_STRING(s) (strlen (S_GET_NAME (s)) > 8 ? 1 : 0) 276 277 /* Auxiliary entry macros. SA_ stands for symbol auxiliary. */ 278 /* Omit the tv related fields. */ 279 /* Accessors. */ 280 281 #define SA_GET_SYM_TAGNDX(s) (SYM_AUXENT (s)->x_sym.x_tagndx.l) 282 #define SA_GET_SYM_LNNO(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno) 283 #define SA_GET_SYM_SIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size) 284 #define SA_GET_SYM_FSIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize) 285 #define SA_GET_SYM_LNNOPTR(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr) 286 #define SA_GET_SYM_ENDNDX(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx) 287 #define SA_GET_SYM_DIMEN(s,i) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)]) 288 #define SA_GET_FILE_FNAME(s) (SYM_AUXENT (s)->x_file.x_fname) 289 #define SA_GET_SCN_SCNLEN(s) (SYM_AUXENT (s)->x_scn.x_scnlen) 290 #define SA_GET_SCN_NRELOC(s) (SYM_AUXENT (s)->x_scn.x_nreloc) 291 #define SA_GET_SCN_NLINNO(s) (SYM_AUXENT (s)->x_scn.x_nlinno) 292 293 #define SA_SET_SYM_LNNO(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno = (v)) 294 #define SA_SET_SYM_SIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size = (v)) 295 #define SA_SET_SYM_FSIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize = (v)) 296 #define SA_SET_SYM_LNNOPTR(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr = (v)) 297 #define SA_SET_SYM_DIMEN(s,i,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)] = (v)) 298 #define SA_SET_FILE_FNAME(s,v) strncpy (SYM_AUXENT (s)->x_file.x_fname, (v), FILNMLEN) 299 #define SA_SET_SCN_SCNLEN(s,v) (SYM_AUXENT (s)->x_scn.x_scnlen = (v)) 300 #define SA_SET_SCN_NRELOC(s,v) (SYM_AUXENT (s)->x_scn.x_nreloc = (v)) 301 #define SA_SET_SCN_NLINNO(s,v) (SYM_AUXENT (s)->x_scn.x_nlinno = (v)) 302 303 /* Internal use only definitions. SF_ stands for symbol flags. 304 305 These values can be assigned to sy_symbol.ost_flags field of a symbolS. 306 307 You'll break i960 if you shift the SYSPROC bits anywhere else. for 308 more on the balname/callname hack, see tc-i960.h. b.out is done 309 differently. */ 310 311 #define SF_I960_MASK 0x000001ff /* Bits 0-8 are used by the i960 port. */ 312 #define SF_SYSPROC 0x0000003f /* bits 0-5 are used to store the sysproc number. */ 313 #define SF_IS_SYSPROC 0x00000040 /* bit 6 marks symbols that are sysprocs. */ 314 #define SF_BALNAME 0x00000080 /* bit 7 marks BALNAME symbols. */ 315 #define SF_CALLNAME 0x00000100 /* bit 8 marks CALLNAME symbols. */ 316 317 #define SF_NORMAL_MASK 0x0000ffff /* bits 12-15 are general purpose. */ 318 319 #define SF_STATICS 0x00001000 /* Mark the .text & all symbols. */ 320 #define SF_DEFINED 0x00002000 /* Symbol is defined in this file. */ 321 #define SF_STRING 0x00004000 /* Symbol name length > 8. */ 322 #define SF_LOCAL 0x00008000 /* Symbol must not be emitted. */ 323 324 #define SF_DEBUG_MASK 0xffff0000 /* bits 16-31 are debug info. */ 325 326 #define SF_FUNCTION 0x00010000 /* The symbol is a function. */ 327 #define SF_PROCESS 0x00020000 /* Process symbol before write. */ 328 #define SF_TAGGED 0x00040000 /* Is associated with a tag. */ 329 #define SF_TAG 0x00080000 /* Is a tag. */ 330 #define SF_DEBUG 0x00100000 /* Is in debug or abs section. */ 331 #define SF_GET_SEGMENT 0x00200000 /* Get the section of the forward symbol. */ 332 /* All other bits are unused. */ 333 334 /* Accessors. */ 335 #define SF_GET(s) (* symbol_get_obj (s)) 336 #define SF_GET_DEBUG(s) (symbol_get_bfdsym (s)->flags & BSF_DEBUGGING) 337 #define SF_SET_DEBUG(s) (symbol_get_bfdsym (s)->flags |= BSF_DEBUGGING) 338 #define SF_GET_NORMAL_FIELD(s) (SF_GET (s) & SF_NORMAL_MASK) 339 #define SF_GET_DEBUG_FIELD(s) (SF_GET (s) & SF_DEBUG_MASK) 340 #define SF_GET_FILE(s) (SF_GET (s) & SF_FILE) 341 #define SF_GET_STATICS(s) (SF_GET (s) & SF_STATICS) 342 #define SF_GET_DEFINED(s) (SF_GET (s) & SF_DEFINED) 343 #define SF_GET_STRING(s) (SF_GET (s) & SF_STRING) 344 #define SF_GET_LOCAL(s) (SF_GET (s) & SF_LOCAL) 345 #define SF_GET_FUNCTION(s) (SF_GET (s) & SF_FUNCTION) 346 #define SF_GET_PROCESS(s) (SF_GET (s) & SF_PROCESS) 347 #define SF_GET_TAGGED(s) (SF_GET (s) & SF_TAGGED) 348 #define SF_GET_TAG(s) (SF_GET (s) & SF_TAG) 349 #define SF_GET_GET_SEGMENT(s) (SF_GET (s) & SF_GET_SEGMENT) 350 #define SF_GET_I960(s) (SF_GET (s) & SF_I960_MASK) /* Used by i960. */ 351 #define SF_GET_BALNAME(s) (SF_GET (s) & SF_BALNAME) /* Used by i960. */ 352 #define SF_GET_CALLNAME(s) (SF_GET (s) & SF_CALLNAME) /* Used by i960. */ 353 #define SF_GET_IS_SYSPROC(s) (SF_GET (s) & SF_IS_SYSPROC) /* Used by i960. */ 354 #define SF_GET_SYSPROC(s) (SF_GET (s) & SF_SYSPROC) /* Used by i960. */ 355 356 /* Modifiers. */ 357 #define SF_SET(s,v) (SF_GET (s) = (v)) 358 #define SF_SET_NORMAL_FIELD(s,v)(SF_GET (s) |= ((v) & SF_NORMAL_MASK)) 359 #define SF_SET_DEBUG_FIELD(s,v) (SF_GET (s) |= ((v) & SF_DEBUG_MASK)) 360 #define SF_SET_FILE(s) (SF_GET (s) |= SF_FILE) 361 #define SF_SET_STATICS(s) (SF_GET (s) |= SF_STATICS) 362 #define SF_SET_DEFINED(s) (SF_GET (s) |= SF_DEFINED) 363 #define SF_SET_STRING(s) (SF_GET (s) |= SF_STRING) 364 #define SF_SET_LOCAL(s) (SF_GET (s) |= SF_LOCAL) 365 #define SF_CLEAR_LOCAL(s) (SF_GET (s) &= ~SF_LOCAL) 366 #define SF_SET_FUNCTION(s) (SF_GET (s) |= SF_FUNCTION) 367 #define SF_SET_PROCESS(s) (SF_GET (s) |= SF_PROCESS) 368 #define SF_SET_TAGGED(s) (SF_GET (s) |= SF_TAGGED) 369 #define SF_SET_TAG(s) (SF_GET (s) |= SF_TAG) 370 #define SF_SET_GET_SEGMENT(s) (SF_GET (s) |= SF_GET_SEGMENT) 371 #define SF_SET_I960(s,v) (SF_GET (s) |= ((v) & SF_I960_MASK)) /* Used by i960. */ 372 #define SF_SET_BALNAME(s) (SF_GET (s) |= SF_BALNAME) /* Used by i960. */ 373 #define SF_SET_CALLNAME(s) (SF_GET (s) |= SF_CALLNAME) /* Used by i960. */ 374 #define SF_SET_IS_SYSPROC(s) (SF_GET (s) |= SF_IS_SYSPROC) /* Used by i960. */ 375 #define SF_SET_SYSPROC(s,v) (SF_GET (s) |= ((v) & SF_SYSPROC)) /* Used by i960. */ 376 377 378 /* Line number handling. */ 379 extern int text_lineno_number; 380 extern int coff_line_base; 381 extern int coff_n_line_nos; 382 extern symbolS *coff_last_function; 383 384 #define obj_emit_lineno(WHERE, LINE, FILE_START) abort () 385 #define obj_app_file(name, app) c_dot_file_symbol (name, app) 386 #define obj_frob_symbol(S,P) coff_frob_symbol (S, & P) 387 #define obj_frob_section(S) coff_frob_section (S) 388 #define obj_frob_file_after_relocs() coff_frob_file_after_relocs () 389 #ifndef obj_adjust_symtab 390 #define obj_adjust_symtab() coff_adjust_symtab () 391 #endif 392 393 /* Forward the segment of a forwarded symbol, handle assignments that 394 just copy symbol values, etc. */ 395 #ifndef OBJ_COPY_SYMBOL_ATTRIBUTES 396 #ifndef TE_I386AIX 397 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest, src) \ 398 (SF_GET_GET_SEGMENT (dest) \ 399 ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \ 400 : 0) 401 #else 402 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest, src) \ 403 (SF_GET_GET_SEGMENT (dest) && S_GET_SEGMENT (dest) == SEG_UNKNOWN \ 404 ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \ 405 : 0) 406 #endif 407 #endif 408 409 /* Sanity check. */ 410 411 #ifdef TC_I960 412 #ifndef C_LEAFSTAT 413 hey ! Where is the C_LEAFSTAT definition ? i960 - coff support is depending on it. 414 #endif /* no C_LEAFSTAT */ 415 #endif /* TC_I960 */ 416 417 #else /* not BFD_ASSEMBLER */ 418 419 #if defined TC_A29K || defined TC_OR32 420 /* Allow translate from aout relocs to coff relocs. */ 421 #define NO_RELOC 20 422 #define RELOC_32 1 423 #define RELOC_8 2 424 #define RELOC_CONST 3 425 #define RELOC_CONSTH 4 426 #define RELOC_JUMPTARG 5 427 #define RELOC_BASE22 6 428 #define RELOC_HI22 7 429 #define RELOC_LO10 8 430 #define RELOC_BASE13 9 431 #define RELOC_WDISP22 10 432 #define RELOC_WDISP30 11 433 #endif 434 435 extern const segT N_TYPE_seg[]; 436 437 /* Magic number of paged executable. */ 438 #define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE 0x8300 439 440 /* SYMBOL TABLE */ 441 442 /* Symbol table entry data type. */ 443 444 typedef struct 445 { 446 /* Basic symbol. */ 447 struct internal_syment ost_entry; 448 /* Auxiliary entry. */ 449 union internal_auxent ost_auxent[OBJ_COFF_MAX_AUXENTRIES]; 450 /* obj_coff internal use only flags. */ 451 unsigned int ost_flags; 452 } obj_symbol_type; 453 454 /* Symbol table macros and constants. */ 455 456 /* Possible and useful section number in symbol table 457 The values of TEXT, DATA and BSS may not be portable. */ 458 459 #define C_ABS_SECTION N_ABS 460 #define C_UNDEF_SECTION N_UNDEF 461 #define C_DEBUG_SECTION N_DEBUG 462 #define C_NTV_SECTION N_TV 463 #define C_PTV_SECTION P_TV 464 #define C_REGISTER_SECTION 50 465 466 /* Macros to extract information from a symbol table entry. 467 This syntactic indirection allows independence regarding a.out or coff. 468 The argument (s) of all these macros is a pointer to a symbol table entry. */ 469 470 /* Predicates. */ 471 /* True if the symbol is external. */ 472 #define S_IS_EXTERNAL(s) \ 473 ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION) 474 475 /* True if symbol has been defined, ie : 476 section > 0 (DATA, TEXT or BSS) 477 section == 0 and value > 0 (external bss symbol). */ 478 #define S_IS_DEFINED(s) \ 479 ((s)->sy_symbol.ost_entry.n_scnum > C_UNDEF_SECTION \ 480 || ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION \ 481 && S_GET_VALUE (s) > 0) \ 482 || ((s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION)) 483 484 /* Return true for symbols that should not be reduced to section 485 symbols or eliminated from expressions, because they may be 486 overridden by the linker. */ 487 #define S_FORCE_RELOC(s, strict) \ 488 (!SEG_NORMAL (S_GET_SEGMENT (s)) || (strict && S_IS_WEAK (s))) 489 490 /* True if a debug special symbol entry. */ 491 #define S_IS_DEBUG(s) \ 492 ((s)->sy_symbol.ost_entry.n_scnum == C_DEBUG_SECTION) 493 494 /* True if a symbol is local symbol name. */ 495 /* A symbol name whose name includes ^A is a gas internal pseudo symbol. */ 496 #define S_IS_LOCAL(s) \ 497 ((s)->sy_symbol.ost_entry.n_scnum == C_REGISTER_SECTION \ 498 || (S_LOCAL_NAME(s) && ! flag_keep_locals && ! S_IS_DEBUG (s)) \ 499 || strchr (S_GET_NAME (s), '\001') != NULL \ 500 || strchr (S_GET_NAME (s), '\002') != NULL \ 501 || (flag_strip_local_absolute \ 502 && !S_IS_EXTERNAL (s) \ 503 && (s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION)) 504 505 /* True if a symbol can be multiply defined (bss symbols have this def 506 though it is bad practice). */ 507 #define S_IS_COMMON(s) ((s)->sy_symbol.ost_entry.n_scnum == 0 \ 508 && S_GET_VALUE (s) != 0) 509 510 /* True if a symbol name is in the string table, i.e. its length is > 8. */ 511 #define S_IS_STRING(s) (strlen (S_GET_NAME (s)) > 8 ? 1 : 0) 512 513 /* True if a symbol is defined as weak. */ 514 #ifdef TE_PE 515 #define S_IS_WEAK(s) \ 516 ( (s)->sy_symbol.ost_entry.n_sclass == C_NT_WEAK \ 517 || (s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT) 518 #else 519 #define S_IS_WEAK(s) \ 520 ((s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT) 521 #endif 522 523 /* Accessors. */ 524 /* The name of the symbol. */ 525 #define S_GET_NAME(s) ((char *) (s)->sy_symbol.ost_entry.n_offset) 526 527 /* The pointer to the string table. */ 528 #define S_GET_OFFSET(s) ((s)->sy_symbol.ost_entry.n_offset) 529 530 /* The numeric value of the segment. */ 531 #define S_GET_SEGMENT(s) s_get_segment (s) 532 533 /* The data type. */ 534 #define S_GET_DATA_TYPE(s) ((s)->sy_symbol.ost_entry.n_type) 535 536 /* The storage class. */ 537 #define S_GET_STORAGE_CLASS(s) ((s)->sy_symbol.ost_entry.n_sclass) 538 539 /* The number of auxiliary entries. */ 540 #define S_GET_NUMBER_AUXILIARY(s) ((s)->sy_symbol.ost_entry.n_numaux) 541 542 /* Modifiers. */ 543 /* Set the name of the symbol. */ 544 #define S_SET_NAME(s, v) \ 545 ((s)->sy_symbol.ost_entry.n_offset = (unsigned long) (v)) 546 547 /* Set the offset of the symbol. */ 548 #define S_SET_OFFSET(s, v) \ 549 ((s)->sy_symbol.ost_entry.n_offset = (v)) 550 551 /* The numeric value of the segment. */ 552 #define S_SET_SEGMENT(s, v) \ 553 ((s)->sy_symbol.ost_entry.n_scnum = SEGMENT_TO_SYMBOL_TYPE (v)) 554 555 /* The data type. */ 556 #define S_SET_DATA_TYPE(s, v) \ 557 ((s)->sy_symbol.ost_entry.n_type = (v)) 558 559 /* The storage class. */ 560 #define S_SET_STORAGE_CLASS(s, v) \ 561 ((s)->sy_symbol.ost_entry.n_sclass = (v)) 562 563 /* The number of auxiliary entries. */ 564 #define S_SET_NUMBER_AUXILIARY(s, v) \ 565 ((s)->sy_symbol.ost_entry.n_numaux = (v)) 566 567 /* Additional modifiers. */ 568 /* The symbol is external (does not mean undefined). */ 569 #define S_SET_EXTERNAL(s) \ 570 do \ 571 { \ 572 S_SET_STORAGE_CLASS (s, C_EXT); \ 573 SF_CLEAR_LOCAL (s); \ 574 } \ 575 while (0) 576 577 /* Auxiliary entry macros. SA_ stands for symbol auxiliary. */ 578 /* Omit the tv related fields. */ 579 /* Accessors. */ 580 #define SYM_AUXENT(S) (&(S)->sy_symbol.ost_auxent[0]) 581 582 #define SA_GET_SYM_TAGNDX(s) (SYM_AUXENT (s)->x_sym.x_tagndx.l) 583 #define SA_GET_SYM_LNNO(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno) 584 #define SA_GET_SYM_SIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size) 585 #define SA_GET_SYM_FSIZE(s) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize) 586 #define SA_GET_SYM_LNNOPTR(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr) 587 #define SA_GET_SYM_ENDNDX(s) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l) 588 #define SA_GET_SYM_DIMEN(s,i) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)]) 589 #define SA_GET_FILE_FNAME(s) (SYM_AUXENT (s)->x_file.x_fname) 590 #define SA_GET_FILE_FNAME_OFFSET(s) (SYM_AUXENT (s)->x_file.x_n.x_offset) 591 #define SA_GET_FILE_FNAME_ZEROS(s) (SYM_AUXENT (s)->x_file.x_n.x_zeroes) 592 #define SA_GET_SCN_SCNLEN(s) (SYM_AUXENT (s)->x_scn.x_scnlen) 593 #define SA_GET_SCN_NRELOC(s) (SYM_AUXENT (s)->x_scn.x_nreloc) 594 #define SA_GET_SCN_NLINNO(s) (SYM_AUXENT (s)->x_scn.x_nlinno) 595 596 /* Modifiers. */ 597 #define SA_SET_SYM_TAGNDX(s,v) (SYM_AUXENT (s)->x_sym.x_tagndx.l = (v)) 598 #define SA_SET_SYM_LNNO(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno = (v)) 599 #define SA_SET_SYM_SIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size = (v)) 600 #define SA_SET_SYM_FSIZE(s,v) (SYM_AUXENT (s)->x_sym.x_misc.x_fsize = (v)) 601 #define SA_SET_SYM_LNNOPTR(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr = (v)) 602 #define SA_SET_SYM_ENDNDX(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l = (v)) 603 #define SA_SET_SYM_DIMEN(s,i,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)] = (v)) 604 #define SA_SET_FILE_FNAME(s,v) strncpy (SYM_AUXENT (s)->x_file.x_fname,(v),FILNMLEN) 605 #define SA_SET_FILE_FNAME_OFFSET(s,v) (SYM_AUXENT (s)->x_file.x_n.x_offset = (v)) 606 #define SA_SET_FILE_FNAME_ZEROS(s,v) (SYM_AUXENT (s)->x_file.x_n.x_zeroes = (v)) 607 #define SA_SET_SCN_SCNLEN(s,v) (SYM_AUXENT (s)->x_scn.x_scnlen = (v)) 608 #define SA_SET_SCN_NRELOC(s,v) (SYM_AUXENT (s)->x_scn.x_nreloc = (v)) 609 #define SA_SET_SCN_NLINNO(s,v) (SYM_AUXENT (s)->x_scn.x_nlinno = (v)) 610 611 /* Internal use only definitions. SF_ stands for symbol flags. 612 613 These values can be assigned to sy_symbol.ost_flags field of a symbolS. 614 615 You'll break i960 if you shift the SYSPROC bits anywhere else. for 616 more on the balname/callname hack, see tc-i960.h. b.out is done 617 differently. */ 618 619 #define SF_I960_MASK 0x000001ff /* Bits 0-8 are used by the i960 port. */ 620 #define SF_SYSPROC 0x0000003f /* bits 0-5 are used to store the sysproc number. */ 621 #define SF_IS_SYSPROC 0x00000040 /* bit 6 marks symbols that are sysprocs. */ 622 #define SF_BALNAME 0x00000080 /* bit 7 marks BALNAME symbols. */ 623 #define SF_CALLNAME 0x00000100 /* bit 8 marks CALLNAME symbols. */ 624 625 #define SF_NORMAL_MASK 0x0000ffff /* bits 12-15 are general purpose. */ 626 627 #define SF_STATICS 0x00001000 /* Mark the .text & all symbols. */ 628 #define SF_DEFINED 0x00002000 /* Symbol is defined in this file. */ 629 #define SF_STRING 0x00004000 /* Symbol name length > 8. */ 630 #define SF_LOCAL 0x00008000 /* Symbol must not be emitted. */ 631 632 #define SF_DEBUG_MASK 0xffff0000 /* bits 16-31 are debug info. */ 633 634 #define SF_FUNCTION 0x00010000 /* The symbol is a function. */ 635 #define SF_PROCESS 0x00020000 /* Process symbol before write. */ 636 #define SF_TAGGED 0x00040000 /* Is associated with a tag. */ 637 #define SF_TAG 0x00080000 /* Is a tag. */ 638 #define SF_DEBUG 0x00100000 /* Is in debug or abs section. */ 639 #define SF_GET_SEGMENT 0x00200000 /* Get the section of the forward symbol. */ 640 #define SF_ADJ_LNNOPTR 0x00400000 /* Has a lnnoptr. */ 641 /* All other bits are unused. */ 642 643 /* Accessors. */ 644 #define SF_GET(s) ((s)->sy_symbol.ost_flags) 645 #define SF_GET_NORMAL_FIELD(s) (SF_GET (s) & SF_NORMAL_MASK) 646 #define SF_GET_DEBUG_FIELD(s) (SF_GET (s) & SF_DEBUG_MASK) 647 #define SF_GET_FILE(s) (SF_GET (s) & SF_FILE) 648 #define SF_GET_STATICS(s) (SF_GET (s) & SF_STATICS) 649 #define SF_GET_DEFINED(s) (SF_GET (s) & SF_DEFINED) 650 #define SF_GET_STRING(s) (SF_GET (s) & SF_STRING) 651 #define SF_GET_LOCAL(s) (SF_GET (s) & SF_LOCAL) 652 #define SF_GET_FUNCTION(s) (SF_GET (s) & SF_FUNCTION) 653 #define SF_GET_PROCESS(s) (SF_GET (s) & SF_PROCESS) 654 #define SF_GET_DEBUG(s) (SF_GET (s) & SF_DEBUG) 655 #define SF_GET_TAGGED(s) (SF_GET (s) & SF_TAGGED) 656 #define SF_GET_TAG(s) (SF_GET (s) & SF_TAG) 657 #define SF_GET_GET_SEGMENT(s) (SF_GET (s) & SF_GET_SEGMENT) 658 #define SF_GET_ADJ_LNNOPTR(s) (SF_GET (s) & SF_ADJ_LNNOPTR) 659 #define SF_GET_I960(s) (SF_GET (s) & SF_I960_MASK) /* Used by i960. */ 660 #define SF_GET_BALNAME(s) (SF_GET (s) & SF_BALNAME) /* Used by i960. */ 661 #define SF_GET_CALLNAME(s) (SF_GET (s) & SF_CALLNAME) /* Used by i960. */ 662 #define SF_GET_IS_SYSPROC(s) (SF_GET (s) & SF_IS_SYSPROC) /* Used by i960. */ 663 #define SF_GET_SYSPROC(s) (SF_GET (s) & SF_SYSPROC) /* Used by i960. */ 664 665 /* Modifiers. */ 666 #define SF_SET(s,v) (SF_GET (s) = (v)) 667 #define SF_SET_NORMAL_FIELD(s,v)(SF_GET (s) |= ((v) & SF_NORMAL_MASK)) 668 #define SF_SET_DEBUG_FIELD(s,v) (SF_GET (s) |= ((v) & SF_DEBUG_MASK)) 669 #define SF_SET_FILE(s) (SF_GET (s) |= SF_FILE) 670 #define SF_SET_STATICS(s) (SF_GET (s) |= SF_STATICS) 671 #define SF_SET_DEFINED(s) (SF_GET (s) |= SF_DEFINED) 672 #define SF_SET_STRING(s) (SF_GET (s) |= SF_STRING) 673 #define SF_SET_LOCAL(s) (SF_GET (s) |= SF_LOCAL) 674 #define SF_CLEAR_LOCAL(s) (SF_GET (s) &= ~SF_LOCAL) 675 #define SF_SET_FUNCTION(s) (SF_GET (s) |= SF_FUNCTION) 676 #define SF_SET_PROCESS(s) (SF_GET (s) |= SF_PROCESS) 677 #define SF_SET_DEBUG(s) (SF_GET (s) |= SF_DEBUG) 678 #define SF_SET_TAGGED(s) (SF_GET (s) |= SF_TAGGED) 679 #define SF_SET_TAG(s) (SF_GET (s) |= SF_TAG) 680 #define SF_SET_GET_SEGMENT(s) (SF_GET (s) |= SF_GET_SEGMENT) 681 #define SF_SET_ADJ_LNNOPTR(s) (SF_GET (s) |= SF_ADJ_LNNOPTR) 682 #define SF_SET_I960(s,v) (SF_GET (s) |= ((v) & SF_I960_MASK)) /* Used by i960. */ 683 #define SF_SET_BALNAME(s) (SF_GET (s) |= SF_BALNAME) /* Used by i960. */ 684 #define SF_SET_CALLNAME(s) (SF_GET (s) |= SF_CALLNAME) /* Used by i960. */ 685 #define SF_SET_IS_SYSPROC(s) (SF_GET (s) |= SF_IS_SYSPROC) /* Used by i960. */ 686 #define SF_SET_SYSPROC(s,v) (SF_GET (s) |= ((v) & SF_SYSPROC)) /* Used by i960. */ 687 688 /* File header macro and type definition. */ 689 690 /* File position calculators. Beware to use them when all the 691 appropriate fields are set in the header. */ 692 693 #ifdef OBJ_COFF_OMIT_OPTIONAL_HEADER 694 #define OBJ_COFF_AOUTHDRSZ (0) 695 #else 696 #define OBJ_COFF_AOUTHDRSZ (AOUTHDRSZ) 697 #endif 698 699 #define H_GET_TEXT_FILE_OFFSET(h) \ 700 (long) (FILHSZ \ 701 + OBJ_COFF_AOUTHDRSZ \ 702 + H_GET_NUMBER_OF_SECTIONS (h) * SCNHSZ) 703 704 #define H_GET_DATA_FILE_OFFSET(h) \ 705 (long) (H_GET_TEXT_FILE_OFFSET (h) \ 706 + H_GET_TEXT_SIZE (h)) 707 708 #define H_GET_BSS_FILE_OFFSET(h) 0 709 710 #define H_GET_RELOCATION_FILE_OFFSET(h) \ 711 (long) (H_GET_DATA_FILE_OFFSET (h) \ 712 + H_GET_DATA_SIZE (h)) 713 714 #define H_GET_LINENO_FILE_OFFSET(h) \ 715 (long) (H_GET_RELOCATION_FILE_OFFSET (h) \ 716 + H_GET_RELOCATION_SIZE (h)) 717 718 #define H_GET_SYMBOL_TABLE_FILE_OFFSET(h) \ 719 (long) (H_GET_LINENO_FILE_OFFSET (h) \ 720 + H_GET_LINENO_SIZE (h)) 721 722 #define H_GET_FILE_SIZE(h) \ 723 (long) (H_GET_SYMBOL_TABLE_FILE_OFFSET (h) \ 724 + H_GET_SYMBOL_TABLE_SIZE (h) \ 725 + (h)->string_table_size) 726 727 /* Accessors. */ 728 /* aouthdr. */ 729 #define H_GET_MAGIC_NUMBER(h) ((h)->aouthdr.magic) 730 #define H_GET_VERSION_STAMP(h) ((h)->aouthdr.vstamp) 731 #define H_GET_TEXT_SIZE(h) ((h)->aouthdr.tsize) 732 #define H_GET_DATA_SIZE(h) ((h)->aouthdr.dsize) 733 #define H_GET_BSS_SIZE(h) ((h)->aouthdr.bsize) 734 #define H_GET_ENTRY_POINT(h) ((h)->aouthdr.entry) 735 #define H_GET_TEXT_START(h) ((h)->aouthdr.text_start) 736 #define H_GET_DATA_START(h) ((h)->aouthdr.data_start) 737 /* filehdr. */ 738 #define H_GET_FILE_MAGIC_NUMBER(h) ((h)->filehdr.f_magic) 739 #define H_GET_NUMBER_OF_SECTIONS(h) ((h)->filehdr.f_nscns) 740 #define H_GET_TIME_STAMP(h) ((h)->filehdr.f_timdat) 741 #define H_GET_SYMBOL_TABLE_POINTER(h) ((h)->filehdr.f_symptr) 742 #define H_GET_SYMBOL_COUNT(h) ((h)->filehdr.f_nsyms) 743 #define H_GET_SYMBOL_TABLE_SIZE(h) (H_GET_SYMBOL_COUNT(h) * SYMESZ) 744 #define H_GET_SIZEOF_OPTIONAL_HEADER(h) ((h)->filehdr.f_opthdr) 745 #define H_GET_FLAGS(h) ((h)->filehdr.f_flags) 746 /* Extra fields to achieve bsd a.out compatibility and for convenience. */ 747 #define H_GET_RELOCATION_SIZE(h) ((h)->relocation_size) 748 #define H_GET_STRING_SIZE(h) ((h)->string_table_size) 749 #define H_GET_LINENO_SIZE(h) ((h)->lineno_size) 750 751 #ifndef OBJ_COFF_OMIT_OPTIONAL_HEADER 752 #define H_GET_HEADER_SIZE(h) (sizeof (FILHDR) \ 753 + sizeof (AOUTHDR)\ 754 + (H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ)) 755 #else /* OBJ_COFF_OMIT_OPTIONAL_HEADER */ 756 #define H_GET_HEADER_SIZE(h) (sizeof (FILHDR) \ 757 + (H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ)) 758 #endif /* OBJ_COFF_OMIT_OPTIONAL_HEADER */ 759 760 #define H_GET_TEXT_RELOCATION_SIZE(h) (text_section_header.s_nreloc * RELSZ) 761 #define H_GET_DATA_RELOCATION_SIZE(h) (data_section_header.s_nreloc * RELSZ) 762 763 /* Modifiers. */ 764 /* aouthdr. */ 765 #define H_SET_MAGIC_NUMBER(h,v) ((h)->aouthdr.magic = (v)) 766 #define H_SET_VERSION_STAMP(h,v) ((h)->aouthdr.vstamp = (v)) 767 #define H_SET_TEXT_SIZE(h,v) ((h)->aouthdr.tsize = (v)) 768 #define H_SET_DATA_SIZE(h,v) ((h)->aouthdr.dsize = (v)) 769 #define H_SET_BSS_SIZE(h,v) ((h)->aouthdr.bsize = (v)) 770 #define H_SET_ENTRY_POINT(h,v) ((h)->aouthdr.entry = (v)) 771 #define H_SET_TEXT_START(h,v) ((h)->aouthdr.text_start = (v)) 772 #define H_SET_DATA_START(h,v) ((h)->aouthdr.data_start = (v)) 773 /* filehdr. */ 774 #define H_SET_FILE_MAGIC_NUMBER(h,v) ((h)->filehdr.f_magic = (v)) 775 #define H_SET_NUMBER_OF_SECTIONS(h,v) ((h)->filehdr.f_nscns = (v)) 776 #define H_SET_TIME_STAMP(h,v) ((h)->filehdr.f_timdat = (v)) 777 #define H_SET_SYMBOL_TABLE_POINTER(h,v) ((h)->filehdr.f_symptr = (v)) 778 #define H_SET_SYMBOL_TABLE_SIZE(h,v) ((h)->filehdr.f_nsyms = (v)) 779 #define H_SET_SIZEOF_OPTIONAL_HEADER(h,v) ((h)->filehdr.f_opthdr = (v)) 780 #define H_SET_FLAGS(h,v) ((h)->filehdr.f_flags = (v)) 781 /* Extra fields to achieve bsd a.out compatibility and for convenience. */ 782 #define H_SET_RELOCATION_SIZE(h,t,d) ((h)->relocation_size = (t)+(d)) 783 #define H_SET_STRING_SIZE(h,v) ((h)->string_table_size = (v)) 784 #define H_SET_LINENO_SIZE(h,v) ((h)->lineno_size = (v)) 785 786 /* Segment flipping. */ 787 788 typedef struct 789 { 790 struct internal_aouthdr aouthdr; /* a.out header. */ 791 struct internal_filehdr filehdr; /* File header, not machine dep. */ 792 long string_table_size; /* names + '\0' + sizeof (int). */ 793 long relocation_size; /* Cumulated size of relocation 794 information for all sections in 795 bytes. */ 796 long lineno_size; /* Size of the line number information 797 table in bytes. */ 798 } object_headers; 799 800 struct lineno_list 801 { 802 struct bfd_internal_lineno line; 803 char *frag; /* Frag to which the line number is related. */ 804 struct lineno_list *next; /* Forward chain pointer. */ 805 }; 806 807 #define obj_segment_name(i) (segment_info[(int) (i)].scnhdr.s_name) 808 809 #define obj_add_segment(s) obj_coff_add_segment (s) 810 811 /* Sanity check. */ 812 #ifdef TC_I960 813 #ifndef C_LEAFSTAT 814 hey ! Where is the C_LEAFSTAT definition ? i960 - coff support is depending on it. 815 #endif /* no C_LEAFSTAT */ 816 #endif /* TC_I960 */ 817 818 extern struct internal_scnhdr data_section_header; 819 extern struct internal_scnhdr text_section_header; 820 821 /* Forward the segment of a forwarded symbol. */ 822 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \ 823 (SF_GET_GET_SEGMENT (dest) \ 824 ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \ 825 : 0) 826 827 #ifdef TE_PE 828 #define obj_handle_link_once(t) obj_coff_pe_handle_link_once (t) 829 #endif 830 831 #endif /* not BFD_ASSEMBLER */ 832 833 extern const pseudo_typeS coff_pseudo_table[]; 834 835 #ifndef obj_pop_insert 836 #define obj_pop_insert() pop_insert (coff_pseudo_table) 837 #endif 838 839 /* In COFF, if a symbol is defined using .def/.val SYM/.endef, it's OK 840 to redefine the symbol later on. This can happen if C symbols use 841 a prefix, and a symbol is defined both with and without the prefix, 842 as in start/_start/__start in gcc/libgcc1-test.c. */ 843 #define RESOLVE_SYMBOL_REDEFINITION(sym) \ 844 (SF_GET_GET_SEGMENT (sym) \ 845 ? (sym->sy_frag = frag_now, \ 846 S_SET_VALUE (sym, frag_now_fix ()), \ 847 S_SET_SEGMENT (sym, now_seg), \ 848 0) \ 849 : 0) 850 851 /* Stabs in a coff file go into their own section. */ 852 #define SEPARATE_STAB_SECTIONS 1 853 854 /* We need 12 bytes at the start of the section to hold some initial 855 information. */ 856 #define INIT_STAB_SECTION(seg) obj_coff_init_stab_section (seg) 857 858 /* Store the number of relocations in the section aux entry. */ 859 #define SET_SECTION_RELOCS(sec, relocs, n) \ 860 SA_SET_SCN_NRELOC (section_symbol (sec), n) 861 862 #define obj_app_file(name, app) c_dot_file_symbol (name, app) 863 864 #ifdef BFD_ASSEMBLER 865 extern int S_SET_DATA_TYPE (symbolS *, int); 866 extern int S_SET_STORAGE_CLASS (symbolS *, int); 867 extern int S_GET_STORAGE_CLASS (symbolS *); 868 extern void SA_SET_SYM_ENDNDX (symbolS *, symbolS *); 869 extern void coff_add_linesym (symbolS *); 870 extern void c_dot_file_symbol (const char *, int); 871 extern void coff_frob_symbol (symbolS *, int *); 872 extern void coff_adjust_symtab (void); 873 extern void coff_frob_section (segT); 874 extern void coff_adjust_section_syms (bfd *, asection *, void *); 875 extern void coff_frob_file_after_relocs (void); 876 #else 877 extern void obj_extra_stuff (object_headers *); 878 #endif 879 extern void coff_obj_symbol_new_hook (symbolS *); 880 extern void coff_obj_read_begin_hook (void); 881 extern void obj_coff_section (int); 882 extern segT obj_coff_add_segment (const char *); 883 extern void obj_coff_section (int); 884 extern void c_dot_file_symbol (const char *, int); 885 extern segT s_get_segment (symbolS *); 886 #ifndef tc_coff_symbol_emit_hook 887 extern void tc_coff_symbol_emit_hook (symbolS *); 888 #endif 889 extern void obj_coff_pe_handle_link_once (void); 890 extern void obj_coff_init_stab_section (segT); 891 extern void c_section_header (struct internal_scnhdr *, 892 char *, long, long, long, long, 893 long, long, long, long); 894 #endif /* OBJ_FORMAT_H */ 895