(linenum→info "unix/slp.c:2238")

binutils/2.18/ld/ldlang.h

    1: /* ldlang.h - linker command language support
    2:    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
    3:    2001, 2002, 2003, 2004, 2005, 2006, 2007
    4:    Free Software Foundation, Inc.
    5: 
    6:    This file is part of the GNU Binutils.
    7: 
    8:    This program 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 3 of the License, or
   11:    (at your option) any later version.
   12: 
   13:    This program 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 this program; if not, write to the Free Software
   20:    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   21:    MA 02110-1301, USA.  */
   22: 
   23: #ifndef LDLANG_H
   24: #define LDLANG_H
   25: 
   26: #define DEFAULT_MEMORY_REGION   "*default*"
   27: 
   28: typedef enum
   29: {
   30:   lang_input_file_is_l_enum,
   31:   lang_input_file_is_symbols_only_enum,
   32:   lang_input_file_is_marker_enum,
   33:   lang_input_file_is_fake_enum,
   34:   lang_input_file_is_search_file_enum,
   35:   lang_input_file_is_file_enum
   36: } lang_input_file_enum_type;
   37: 
   38: struct _fill_type
   39: {
   40:   size_t size;
   41:   unsigned char data[1];
   42: };
   43: 
   44: typedef struct statement_list
   45: {
   46:   union lang_statement_union *head;
   47:   union lang_statement_union **tail;
   48: } lang_statement_list_type;
   49: 
   50: typedef struct memory_region_struct
   51: {
   52:   char *name;
   53:   struct memory_region_struct *next;
   54:   bfd_vma origin;
   55:   bfd_size_type length;
   56:   bfd_vma current;
   57:   union lang_statement_union *last_os;
   58:   flagword flags;
   59:   flagword not_flags;
   60:   bfd_boolean had_full_message;
   61: } lang_memory_region_type;
   62: 
   63: typedef struct lang_statement_header_struct
   64: {
   65:   union lang_statement_union *next;
   66:   enum statement_enum
   67:   {
   68:     lang_output_section_statement_enum,
   69:     lang_assignment_statement_enum,
   70:     lang_input_statement_enum,
   71:     lang_address_statement_enum,
   72:     lang_wild_statement_enum,
   73:     lang_input_section_enum,
   74:     lang_object_symbols_statement_enum,
   75:     lang_fill_statement_enum,
   76:     lang_data_statement_enum,
   77:     lang_reloc_statement_enum,
   78:     lang_target_statement_enum,
   79:     lang_output_statement_enum,
   80:     lang_padding_statement_enum,
   81:     lang_group_statement_enum,
   82: 
   83:     lang_afile_asection_pair_statement_enum,
   84:     lang_constructors_statement_enum
   85:   } type;
   86: } lang_statement_header_type;
   87: 
   88: typedef struct
   89: {
   90:   lang_statement_header_type header;
   91:   union etree_union *exp;
   92: } lang_assignment_statement_type;
   93: 
   94: typedef struct lang_target_statement_struct
   95: {
   96:   lang_statement_header_type header;
   97:   const char *target;
   98: } lang_target_statement_type;
   99: 
  100: typedef struct lang_output_statement_struct
  101: {
  102:   lang_statement_header_type header;
  103:   const char *name;
  104: } lang_output_statement_type;
  105: 
  106: /* Section types specified in a linker script.  */
  107: 
  108: enum section_type
  109: {
  110:   normal_section,
  111:   overlay_section,
  112:   noload_section,
  113:   noalloc_section
  114: };
  115: 
  116: /* This structure holds a list of program headers describing
  117:    segments in which this section should be placed.  */
  118: 
  119: typedef struct lang_output_section_phdr_list
  120: {
  121:   struct lang_output_section_phdr_list *next;
  122:   const char *name;
  123:   bfd_boolean used;
  124: } lang_output_section_phdr_list;
  125: 
  126: typedef struct lang_output_section_statement_struct
  127: {
  128:   lang_statement_header_type header;
  129:   lang_statement_list_type children;
  130:   struct lang_output_section_statement_struct *next;
  131:   struct lang_output_section_statement_struct *prev;
  132:   const char *name;
  133:   asection *bfd_section;
  134:   lang_memory_region_type *region;
  135:   lang_memory_region_type *lma_region;
  136:   fill_type *fill;
  137:   union etree_union *addr_tree;
  138:   union etree_union *load_base;
  139: 
  140:   /* If non-null, an expression to evaluate after setting the section's
  141:      size.  The expression is evaluated inside REGION (above) with '.'
  142:      set to the end of the section.  Used in the last overlay section
  143:      to move '.' past all the overlaid sections.  */
  144:   union etree_union *update_dot_tree;
  145: 
  146:   lang_output_section_phdr_list *phdrs;
  147: 
  148:   unsigned int block_value;
  149:   int subsection_alignment;     /* Alignment of components.  */
  150:   int section_alignment;        /* Alignment of start of section.  */
  151:   int constraint;
  152:   flagword flags;
  153:   enum section_type sectype;
  154:   unsigned int processed_vma : 1;
  155:   unsigned int processed_lma : 1;
  156:   unsigned int all_input_readonly : 1;
  157:   /* If this section should be ignored.  */
  158:   unsigned int ignored : 1; 
  159:   /* If there is a symbol relative to this section.  */
  160:   unsigned int section_relative_symbol : 1; 
  161: } lang_output_section_statement_type;
  162: 
  163: typedef struct
  164: {
  165:   lang_statement_header_type header;
  166: } lang_common_statement_type;
  167: 
  168: typedef struct
  169: {
  170:   lang_statement_header_type header;
  171: } lang_object_symbols_statement_type;
  172: 
  173: typedef struct
  174: {
  175:   lang_statement_header_type header;
  176:   fill_type *fill;
  177:   int size;
  178:   asection *output_section;
  179: } lang_fill_statement_type;
  180: 
  181: typedef struct
  182: {
  183:   lang_statement_header_type header;
  184:   unsigned int type;
  185:   union etree_union *exp;
  186:   bfd_vma value;
  187:   asection *output_section;
  188:   bfd_vma output_offset;
  189: } lang_data_statement_type;
  190: 
  191: /* Generate a reloc in the output file.  */
  192: 
  193: typedef struct
  194: {
  195:   lang_statement_header_type header;
  196: 
  197:   /* Reloc to generate.  */
  198:   bfd_reloc_code_real_type reloc;
  199: 
  200:   /* Reloc howto structure.  */
  201:   reloc_howto_type *howto;
  202: 
  203:   /* Section to generate reloc against.
  204:      Exactly one of section and name must be NULL.  */
  205:   asection *section;
  206: 
  207:   /* Name of symbol to generate reloc against.
  208:      Exactly one of section and name must be NULL.  */
  209:   const char *name;
  210: 
  211:   /* Expression for addend.  */
  212:   union etree_union *addend_exp;
  213: 
  214:   /* Resolved addend.  */
  215:   bfd_vma addend_value;
  216: 
  217:   /* Output section where reloc should be performed.  */
  218:   asection *output_section;
  219: 
  220:   /* Offset within output section.  */
  221:   bfd_vma output_offset;
  222: } lang_reloc_statement_type;
  223: 
  224: typedef struct lang_input_statement_struct
  225: {
  226:   lang_statement_header_type header;
  227:   /* Name of this file.  */
  228:   const char *filename;
  229:   /* Name to use for the symbol giving address of text start.
  230:      Usually the same as filename, but for a file spec'd with
  231:      -l this is the -l switch itself rather than the filename.  */
  232:   const char *local_sym_name;
  233: 
  234:   bfd *the_bfd;
  235: 
  236:   file_ptr passive_position;
  237: 
  238:   /* Symbol table of the file.  */
  239:   asymbol **asymbols;
  240:   unsigned int symbol_count;
  241: 
  242:   /* Point to the next file - whatever it is, wanders up and down
  243:      archives */
  244:   union lang_statement_union *next;
  245: 
  246:   /* Point to the next file, but skips archive contents.  */
  247:   union lang_statement_union *next_real_file;
  248: 
  249:   const char *target;
  250: 
  251:   unsigned int closed : 1;
  252:   unsigned int is_archive : 1;
  253: 
  254:   /* 1 means search a set of directories for this file.  */
  255:   unsigned int search_dirs_flag : 1;
  256: 
  257:   /* 1 means this was found in a search directory marked as sysrooted,
  258:      if search_dirs_flag is false, otherwise, that it should be
  259:      searched in ld_sysroot before any other location, as long as it
  260:      starts with a slash.  */
  261:   unsigned int sysrooted : 1;
  262: 
  263:   /* 1 means this is base file of incremental load.
  264:      Do not load this file's text or data.
  265:      Also default text_start to after this file's bss.  */
  266:   unsigned int just_syms_flag : 1;
  267: 
  268:   /* Whether to search for this entry as a dynamic archive.  */
  269:   unsigned int dynamic : 1;
  270: 
  271:   /* Whether DT_NEEDED tags should be added for dynamic libraries in
  272:      DT_NEEDED tags from this entry.  */
  273:   unsigned int add_needed : 1;
  274: 
  275:   /* Whether this entry should cause a DT_NEEDED tag only when
  276:      satisfying references from regular files, or always.  */
  277:   unsigned int as_needed : 1;
  278: 
  279:   /* Whether to include the entire contents of an archive.  */
  280:   unsigned int whole_archive : 1;
  281: 
  282:   unsigned int loaded : 1;
  283: 
  284:   unsigned int real : 1;
  285: } lang_input_statement_type;
  286: 
  287: typedef struct
  288: {
  289:   lang_statement_header_type header;
  290:   asection *section;
  291: } lang_input_section_type;
  292: 
  293: typedef struct
  294: {
  295:   lang_statement_header_type header;
  296:   asection *section;
  297:   union lang_statement_union *file;
  298: } lang_afile_asection_pair_statement_type;
  299: 
  300: typedef struct lang_wild_statement_struct lang_wild_statement_type;
  301: 
  302: typedef void (*callback_t) (lang_wild_statement_type *, struct wildcard_list *,
  303:                             asection *, lang_input_statement_type *, void *);
  304: 
  305: typedef void (*walk_wild_section_handler_t) (lang_wild_statement_type *,
  306:                                              lang_input_statement_type *,
  307:                                              callback_t callback,
  308:                                              void *data);
  309: 
  310: typedef bfd_boolean (*lang_match_sec_type_func) (bfd *, const asection *,
  311:                                                  bfd *, const asection *);
  312: 
  313: /* Binary search tree structure to efficiently sort sections by
  314:    name.  */
  315: typedef struct lang_section_bst
  316: {
  317:   asection *section;
  318:   struct lang_section_bst *left;
  319:   struct lang_section_bst *right;
  320: } lang_section_bst_type;
  321: 
  322: struct lang_wild_statement_struct
  323: {
  324:   lang_statement_header_type header;
  325:   const char *filename;
  326:   bfd_boolean filenames_sorted;
  327:   struct wildcard_list *section_list;
  328:   bfd_boolean keep_sections;
  329:   lang_statement_list_type children;
  330: 
  331:   walk_wild_section_handler_t walk_wild_section_handler;
  332:   struct wildcard_list *handler_data[4];
  333:   lang_section_bst_type *tree;
  334: };
  335: 
  336: typedef struct lang_address_statement_struct
  337: {
  338:   lang_statement_header_type header;
  339:   const char *section_name;
  340:   union etree_union *address;
  341:   const segment_type *segment;
  342: } lang_address_statement_type;
  343: 
  344: typedef struct
  345: {
  346:   lang_statement_header_type header;
  347:   bfd_vma output_offset;
  348:   size_t size;
  349:   asection *output_section;
  350:   fill_type *fill;
  351: } lang_padding_statement_type;
  352: 
  353: /* A group statement collects a set of libraries together.  The
  354:    libraries are searched multiple times, until no new undefined
  355:    symbols are found.  The effect is to search a group of libraries as
  356:    though they were a single library.  */
  357: 
  358: typedef struct
  359: {
  360:   lang_statement_header_type header;
  361:   lang_statement_list_type children;
  362: } lang_group_statement_type;
  363: 
  364: typedef union lang_statement_union
  365: {
  366:   lang_statement_header_type header;
  367:   lang_wild_statement_type wild_statement;
  368:   lang_data_statement_type data_statement;
  369:   lang_reloc_statement_type reloc_statement;
  370:   lang_address_statement_type address_statement;
  371:   lang_output_section_statement_type output_section_statement;
  372:   lang_afile_asection_pair_statement_type afile_asection_pair_statement;
  373:   lang_assignment_statement_type assignment_statement;
  374:   lang_input_statement_type input_statement;
  375:   lang_target_statement_type target_statement;
  376:   lang_output_statement_type output_statement;
  377:   lang_input_section_type input_section;
  378:   lang_common_statement_type common_statement;
  379:   lang_object_symbols_statement_type object_symbols_statement;
  380:   lang_fill_statement_type fill_statement;
  381:   lang_padding_statement_type padding_statement;
  382:   lang_group_statement_type group_statement;
  383: } lang_statement_union_type;
  384: 
  385: /* This structure holds information about a program header, from the
  386:    PHDRS command in the linker script.  */
  387: 
  388: struct lang_phdr
  389: {
  390:   struct lang_phdr *next;
  391:   const char *name;
  392:   unsigned long type;
  393:   bfd_boolean filehdr;
  394:   bfd_boolean phdrs;
  395:   etree_type *at;
  396:   etree_type *flags;
  397: };
  398: 
  399: extern struct lang_phdr *lang_phdr_list;
  400: 
  401: /* This structure is used to hold a list of sections which may not
  402:    cross reference each other.  */
  403: 
  404: typedef struct lang_nocrossref
  405: {
  406:   struct lang_nocrossref *next;
  407:   const char *name;
  408: } lang_nocrossref_type;
  409: 
  410: /* The list of nocrossref lists.  */
  411: 
  412: struct lang_nocrossrefs
  413: {
  414:   struct lang_nocrossrefs *next;
  415:   lang_nocrossref_type *list;
  416: };
  417: 
  418: extern struct lang_nocrossrefs *nocrossref_list;
  419: 
  420: /* This structure is used to hold a list of input section names which
  421:    will not match an output section in the linker script.  */
  422: 
  423: struct unique_sections
  424: {
  425:   struct unique_sections *next;
  426:   const char *name;
  427: };
  428: 
  429: /* This structure records symbols for which we need to keep track of
  430:    definedness for use in the DEFINED () test.  */
  431: 
  432: struct lang_definedness_hash_entry
  433: {
  434:   struct bfd_hash_entry root;
  435:   int iteration;
  436: };
  437: 
  438: /* Used by place_orphan to keep track of orphan sections and statements.  */
  439: 
  440: struct orphan_save {
  441:   const char *name;
  442:   flagword flags;
  443:   lang_output_section_statement_type *os;
  444:   asection **section;
  445:   lang_statement_union_type **stmt;
  446:   lang_output_section_statement_type **os_tail;
  447: };
  448: 
  449: extern lang_output_section_statement_type *abs_output_section;
  450: extern lang_statement_list_type lang_output_section_statement;
  451: extern bfd_boolean lang_has_input_file;
  452: extern etree_type *base;
  453: extern lang_statement_list_type *stat_ptr;
  454: extern bfd_boolean delete_output_file_on_failure;
  455: 
  456: extern struct bfd_sym_chain entry_symbol;
  457: extern const char *entry_section;
  458: extern bfd_boolean entry_from_cmdline;
  459: extern lang_statement_list_type file_chain;
  460: extern lang_statement_list_type input_file_chain;
  461: 
  462: extern int lang_statement_iteration;
  463: 
  464: extern void lang_init
  465:   (void);
  466: extern void lang_finish
  467:   (void);
  468: extern lang_memory_region_type *lang_memory_region_lookup
  469:   (const char *const, bfd_boolean);
  470: extern lang_memory_region_type *lang_memory_region_default
  471:   (asection *);
  472: extern void lang_map
  473:   (void);
  474: extern void lang_set_flags
  475:   (lang_memory_region_type *, const char *, int);
  476: extern void lang_add_output
  477:   (const char *, int from_script);
  478: extern lang_output_section_statement_type *lang_enter_output_section_statement
  479:   (const char *output_section_statement_name,
  480:    etree_type *address_exp,
  481:    enum section_type sectype,
  482:    etree_type *align,
  483:    etree_type *subalign,
  484:    etree_type *, int);
  485: extern void lang_final
  486:   (void);
  487: extern void lang_process
  488:   (void);
  489: extern void lang_section_start
  490:   (const char *, union etree_union *, const segment_type *);
  491: extern void lang_add_entry
  492:   (const char *, bfd_boolean);
  493: extern void lang_default_entry
  494:   (const char *);
  495: extern void lang_add_target
  496:   (const char *);
  497: extern void lang_add_wild
  498:   (struct wildcard_spec *, struct wildcard_list *, bfd_boolean);
  499: extern void lang_add_map
  500:   (const char *);
  501: extern void lang_add_fill
  502:   (fill_type *);
  503: extern lang_assignment_statement_type *lang_add_assignment
  504:   (union etree_union *);
  505: extern void lang_add_attribute
  506:   (enum statement_enum);
  507: extern void lang_startup
  508:   (const char *);
  509: extern void lang_float
  510:   (bfd_boolean);
  511: extern void lang_leave_output_section_statement
  512:   (fill_type *, const char *, lang_output_section_phdr_list *,
  513:    const char *);
  514: extern void lang_abs_symbol_at_end_of
  515:   (const char *, const char *);
  516: extern void lang_abs_symbol_at_beginning_of
  517:   (const char *, const char *);
  518: extern void lang_statement_append
  519:   (lang_statement_list_type *, lang_statement_union_type *,
  520:    lang_statement_union_type **);
  521: extern void lang_for_each_input_file
  522:   (void (*dothis) (lang_input_statement_type *));
  523: extern void lang_for_each_file
  524:   (void (*dothis) (lang_input_statement_type *));
  525: extern void lang_reset_memory_regions
  526:   (void);
  527: extern void lang_do_assignments
  528:   (void);
  529: 
  530: #define LANG_FOR_EACH_INPUT_STATEMENT(statement)                        \
  531:   lang_input_statement_type *statement;                                 \
  532:   for (statement = (lang_input_statement_type *) file_chain.head;       \
  533:        statement != (lang_input_statement_type *) NULL;                 \
  534:        statement = (lang_input_statement_type *) statement->next)       \
  535: 
  536: extern void lang_process
  537:   (void);
  538: extern void ldlang_add_file
  539:   (lang_input_statement_type *);
  540: extern lang_output_section_statement_type *lang_output_section_find
  541:   (const char * const);
  542: extern lang_output_section_statement_type *lang_output_section_find_by_flags
  543:   (const asection *, lang_output_section_statement_type **,
  544:    lang_match_sec_type_func);
  545: extern lang_output_section_statement_type *lang_insert_orphan
  546:   (asection *, const char *, lang_output_section_statement_type *,
  547:    struct orphan_save *, etree_type *, lang_statement_list_type *);
  548: extern lang_input_statement_type *lang_add_input_file
  549:   (const char *, lang_input_file_enum_type, const char *);
  550: extern void lang_add_keepsyms_file
  551:   (const char *);
  552: extern lang_output_section_statement_type *
  553:   lang_output_section_statement_lookup
  554:   (const char *const);
  555: extern void ldlang_add_undef
  556:   (const char *const);
  557: extern void lang_add_output_format
  558:   (const char *, const char *, const char *, int);
  559: extern void lang_list_init
  560:   (lang_statement_list_type *);
  561: extern void lang_add_data
  562:   (int type, union etree_union *);
  563: extern void lang_add_reloc
  564:   (bfd_reloc_code_real_type, reloc_howto_type *, asection *, const char *,
  565:    union etree_union *);
  566: extern void lang_for_each_statement
  567:   (void (*) (lang_statement_union_type *));
  568: extern void *stat_alloc
  569:   (size_t);
  570: extern void strip_excluded_output_sections
  571:   (void);
  572: extern void dprint_statement
  573:   (lang_statement_union_type *, int);
  574: extern void lang_size_sections
  575:   (bfd_boolean *, bfd_boolean);
  576: extern void one_lang_size_sections_pass
  577:   (bfd_boolean *, bfd_boolean);
  578: extern void lang_enter_group
  579:   (void);
  580: extern void lang_leave_group
  581:   (void);
  582: extern void lang_add_section
  583:   (lang_statement_list_type *, asection *,
  584:    lang_output_section_statement_type *);
  585: extern void lang_new_phdr
  586:   (const char *, etree_type *, bfd_boolean, bfd_boolean, etree_type *,
  587:    etree_type *);
  588: extern void lang_add_nocrossref
  589:   (lang_nocrossref_type *);
  590: extern void lang_enter_overlay
  591:   (etree_type *, etree_type *);
  592: extern void lang_enter_overlay_section
  593:   (const char *);
  594: extern void lang_leave_overlay_section
  595:   (fill_type *, lang_output_section_phdr_list *);
  596: extern void lang_leave_overlay
  597:   (etree_type *, int, fill_type *, const char *,
  598:    lang_output_section_phdr_list *, const char *);
  599: 
  600: extern struct bfd_elf_version_tree *lang_elf_version_info;
  601: 
  602: extern struct bfd_elf_version_expr *lang_new_vers_pattern
  603:   (struct bfd_elf_version_expr *, const char *, const char *, bfd_boolean);
  604: extern struct bfd_elf_version_tree *lang_new_vers_node
  605:   (struct bfd_elf_version_expr *, struct bfd_elf_version_expr *);
  606: extern struct bfd_elf_version_deps *lang_add_vers_depend
  607:   (struct bfd_elf_version_deps *, const char *);
  608: extern void lang_register_vers_node
  609:   (const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
  610: extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
  611: extern void lang_append_dynamic_list_cpp_typeinfo (void);
  612: extern void lang_append_dynamic_list_cpp_new (void);
  613: bfd_boolean unique_section_p
  614:   (const asection *);
  615: extern void lang_add_unique