diff options
Diffstat (limited to 'contrib/binutils/ld/ldlang.h')
-rw-r--r-- | contrib/binutils/ld/ldlang.h | 200 |
1 files changed, 91 insertions, 109 deletions
diff --git a/contrib/binutils/ld/ldlang.h b/contrib/binutils/ld/ldlang.h index 553db4b..ac0fd28 100644 --- a/contrib/binutils/ld/ldlang.h +++ b/contrib/binutils/ld/ldlang.h @@ -1,19 +1,19 @@ /* ldlang.h - linker command language support - Copyright 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000 + Copyright 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc. - + This file is part of GLD, the Gnu Linker. - + GLD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. - + GLD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with GLD; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA @@ -22,8 +22,7 @@ #ifndef LDLANG_H #define LDLANG_H -typedef enum -{ +typedef enum { lang_input_file_is_l_enum, lang_input_file_is_symbols_only_enum, lang_input_file_is_marker_enum, @@ -33,15 +32,13 @@ typedef enum } lang_input_file_enum_type; typedef unsigned int fill_type; -typedef struct statement_list -{ + +typedef struct statement_list { union lang_statement_union *head; union lang_statement_union **tail; } lang_statement_list_type; - -typedef struct memory_region_struct -{ +typedef struct memory_region_struct { char *name; struct memory_region_struct *next; bfd_vma origin; @@ -51,58 +48,49 @@ typedef struct memory_region_struct flagword flags; flagword not_flags; boolean had_full_message; -} lang_memory_region_type ; - -typedef struct lang_statement_header_struct -{ - union lang_statement_union *next; - enum statement_enum - { - lang_output_section_statement_enum, - lang_assignment_statement_enum, - lang_input_statement_enum, - lang_address_statement_enum, - lang_wild_statement_enum, - lang_input_section_enum, - lang_object_symbols_statement_enum, - lang_fill_statement_enum, - lang_data_statement_enum, - lang_reloc_statement_enum, - lang_target_statement_enum, - lang_output_statement_enum, - lang_padding_statement_enum, - lang_group_statement_enum, - - lang_afile_asection_pair_statement_enum, - lang_constructors_statement_enum - } type; -} lang_statement_header_type; +} lang_memory_region_type; +typedef struct lang_statement_header_struct { + union lang_statement_union *next; + enum statement_enum { + lang_output_section_statement_enum, + lang_assignment_statement_enum, + lang_input_statement_enum, + lang_address_statement_enum, + lang_wild_statement_enum, + lang_input_section_enum, + lang_object_symbols_statement_enum, + lang_fill_statement_enum, + lang_data_statement_enum, + lang_reloc_statement_enum, + lang_target_statement_enum, + lang_output_statement_enum, + lang_padding_statement_enum, + lang_group_statement_enum, + + lang_afile_asection_pair_statement_enum, + lang_constructors_statement_enum + } type; +} lang_statement_header_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; union etree_union *exp; } lang_assignment_statement_type; - -typedef struct lang_target_statement_struct -{ +typedef struct lang_target_statement_struct { lang_statement_header_type header; const char *target; } lang_target_statement_type; - -typedef struct lang_output_statement_struct -{ +typedef struct lang_output_statement_struct { lang_statement_header_type header; const char *name; } lang_output_statement_type; /* Section types specified in a linker script. */ -enum section_type -{ +enum section_type { normal_section, dsect_section, copy_section, @@ -114,15 +102,13 @@ enum section_type /* This structure holds a list of program headers describing segments in which this section should be placed. */ -struct lang_output_section_phdr_list -{ +struct lang_output_section_phdr_list { struct lang_output_section_phdr_list *next; const char *name; boolean used; }; -typedef struct lang_output_section_statement_struct -{ +typedef struct lang_output_section_statement_struct { lang_statement_header_type header; union etree_union *addr_tree; lang_statement_list_type children; @@ -131,7 +117,7 @@ typedef struct lang_output_section_statement_struct const char *name; boolean processed; - + asection *bfd_section; flagword flags; /* Or together of all input sections */ enum section_type sectype; @@ -140,38 +126,33 @@ typedef struct lang_output_section_statement_struct size_t block_value; fill_type fill; - int subsection_alignment; /* alignment of components */ - int section_alignment; /* alignment of start of section */ + int subsection_alignment; /* alignment of components */ + int section_alignment; /* alignment of start of section */ union etree_union *load_base; struct lang_output_section_phdr_list *phdrs; } lang_output_section_statement_type; - -typedef struct -{ +typedef struct { lang_statement_header_type header; } lang_common_statement_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; } lang_object_symbols_statement_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; fill_type fill; int size; asection *output_section; } lang_fill_statement_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; unsigned int type; - union etree_union *exp; + union etree_union *exp; bfd_vma value; asection *output_section; bfd_vma output_vma; @@ -179,8 +160,7 @@ typedef struct /* Generate a reloc in the output file. */ -typedef struct -{ +typedef struct { lang_statement_header_type header; /* Reloc to generate. */ @@ -210,8 +190,7 @@ typedef struct bfd_vma output_vma; } lang_reloc_statement_type; -typedef struct lang_input_statement_struct -{ +typedef struct lang_input_statement_struct { lang_statement_header_type header; /* Name of this file. */ const char *filename; @@ -219,32 +198,32 @@ typedef struct lang_input_statement_struct /* Usually the same as filename, but for a file spec'd with -l this is the -l switch itself rather than the filename. */ const char *local_sym_name; - + bfd *the_bfd; - + boolean closed; file_ptr passive_position; - + /* Symbol table of the file. */ asymbol **asymbols; unsigned int symbol_count; - + /* Point to the next file - whatever it is, wanders up and down archives */ - - union lang_statement_union *next; + + union lang_statement_union *next; /* Point to the next file, but skips archive contents */ - union lang_statement_union *next_real_file; - + union lang_statement_union *next_real_file; + boolean is_archive; - + /* 1 means search a set of directories for this file. */ boolean search_dirs_flag; - + /* 1 means this is base file of incremental load. Do not load this file's text or data. - Also default text_start to after this file's bss. */ - + Also default text_start to after this file's bss. */ + boolean just_syms_flag; /* Whether to search for this entry as a dynamic archive. */ @@ -254,30 +233,28 @@ typedef struct lang_input_statement_struct boolean whole_archive; boolean loaded; - - /* unsigned int globals_in_this_file;*/ + +#if 0 + unsigned int globals_in_this_file; +#endif const char *target; boolean real; } lang_input_statement_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; asection *section; lang_input_statement_type *ifile; - -} lang_input_section_type; +} lang_input_section_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; asection *section; union lang_statement_union *file; } lang_afile_asection_pair_statement_type; -typedef struct lang_wild_statement_struct -{ +typedef struct lang_wild_statement_struct { lang_statement_header_type header; const char *section_name; boolean sections_sorted; @@ -288,15 +265,13 @@ typedef struct lang_wild_statement_struct lang_statement_list_type children; } lang_wild_statement_type; -typedef struct lang_address_statement_struct -{ +typedef struct lang_address_statement_struct { lang_statement_header_type header; - const char *section_name; - union etree_union *address; + const char *section_name; + union etree_union *address; } lang_address_statement_type; -typedef struct -{ +typedef struct { lang_statement_header_type header; bfd_vma output_offset; size_t size; @@ -309,14 +284,12 @@ typedef struct symbols are found. The effect is to search a group of libraries as though they were a single library. */ -typedef struct -{ +typedef struct { lang_statement_header_type header; lang_statement_list_type children; } lang_group_statement_type; -typedef union lang_statement_union -{ +typedef union lang_statement_union { lang_statement_header_type header; union lang_statement_union *next; lang_wild_statement_type wild_statement; @@ -340,8 +313,7 @@ typedef union lang_statement_union /* This structure holds information about a program header, from the PHDRS command in the linker script. */ -struct lang_phdr -{ +struct lang_phdr { struct lang_phdr *next; const char *name; unsigned long type; @@ -354,22 +326,30 @@ struct lang_phdr /* This structure is used to hold a list of sections which may not cross reference each other. */ -struct lang_nocrossref -{ +struct lang_nocrossref { struct lang_nocrossref *next; const char *name; }; /* The list of nocrossref lists. */ -struct lang_nocrossrefs -{ +struct lang_nocrossrefs { struct lang_nocrossrefs *next; struct lang_nocrossref *list; }; extern struct lang_nocrossrefs *nocrossref_list; +/* This structure is used to hold a list of input section names which + will not match an output section in the linker script. */ + +struct unique_sections { + struct unique_sections *next; + const char *name; +}; + +extern struct unique_sections *unique_section_list; + extern lang_output_section_statement_type *abs_output_section; extern lang_statement_list_type lang_output_section_statement; extern boolean lang_has_input_file; @@ -379,6 +359,7 @@ extern boolean delete_output_file_on_failure; extern const char *entry_symbol; extern boolean entry_from_cmdline; +extern lang_statement_list_type file_chain; extern void lang_init PARAMS ((void)); extern struct memory_region_struct *lang_memory_region_lookup @@ -430,12 +411,11 @@ extern bfd_vma lang_do_assignments bfd_vma dot)); #define LANG_FOR_EACH_INPUT_STATEMENT(statement) \ - extern lang_statement_list_type file_chain; \ lang_input_statement_type *statement; \ for (statement = (lang_input_statement_type *)file_chain.head;\ statement != (lang_input_statement_type *)NULL; \ statement = (lang_input_statement_type *)statement->next)\ - + extern void lang_process PARAMS ((void)); extern void ldlang_add_file PARAMS ((lang_input_statement_type *)); extern lang_output_section_statement_type *lang_output_section_find @@ -492,5 +472,7 @@ extern struct bfd_elf_version_deps *lang_add_vers_depend extern void lang_register_vers_node PARAMS ((const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *)); +boolean unique_section_p PARAMS ((const char *)); +extern void lang_add_unique PARAMS ((const char *)); #endif |