/* ldlang.h - linker command language support
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of the GNU Binutils.
typedef struct statement_list
{
- union lang_statement_union *head;
- union lang_statement_union **tail;
+ union lang_statement_union * head;
+ union lang_statement_union ** tail;
} lang_statement_list_type;
+typedef struct memory_region_name_struct
+{
+ const char * name;
+ struct memory_region_name_struct * next;
+} lang_memory_region_name;
+
typedef struct memory_region_struct
{
- char *name;
+ lang_memory_region_name name_list;
struct memory_region_struct *next;
bfd_vma origin;
bfd_size_type length;
bfd_boolean had_full_message;
} lang_memory_region_type;
+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_insert_statement_enum,
+ lang_constructors_statement_enum
+};
+
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_insert_statement_enum,
- lang_constructors_statement_enum
- } type;
+ enum statement_enum type;
} lang_statement_header_type;
typedef struct
/* Whether DT_NEEDED tags should be added for dynamic libraries in
DT_NEEDED tags from this entry. */
- unsigned int add_needed : 1;
+ unsigned int add_DT_NEEDED_for_dynamic : 1;
/* Whether this entry should cause a DT_NEEDED tag only when
satisfying references from regular files, or always. */
- unsigned int as_needed : 1;
+ unsigned int add_DT_NEEDED_for_regular : 1;
/* Whether to include the entire contents of an archive. */
unsigned int whole_archive : 1;
+ /* Set when bfd opening is successful. */
unsigned int loaded : 1;
unsigned int real : 1;
+
+ /* Set if the file does not exist. */
+ unsigned int missing_file : 1;
} lang_input_statement_type;
typedef struct
/* Used by place_orphan to keep track of orphan sections and statements. */
-struct orphan_save {
+struct orphan_save
+{
const char *name;
flagword flags;
lang_output_section_statement_type *os;
lang_output_section_statement_type **os_tail;
};
+extern const char *output_target;
extern lang_output_section_statement_type *abs_output_section;
extern lang_statement_list_type lang_output_section_statement;
extern bfd_boolean lang_has_input_file;
extern lang_statement_list_type input_file_chain;
extern int lang_statement_iteration;
+extern bfd_boolean missing_file;
extern void lang_init
(void);
extern void lang_finish
(void);
-extern lang_memory_region_type *lang_memory_region_lookup
- (const char *const, bfd_boolean);
-extern lang_memory_region_type *lang_memory_region_default
- (asection *);
+extern lang_memory_region_type * lang_memory_region_lookup
+ (const char * const, bfd_boolean);
+extern void lang_memory_region_alias
+ (const char *, const char *);
extern void lang_map
(void);
extern void lang_set_flags
etree_type *, int);
extern void lang_final
(void);
+extern void lang_relax_sections
+ (bfd_boolean);
extern void lang_process
(void);
extern void lang_section_start
(const asection *, lang_output_section_statement_type **,
lang_match_sec_type_func);
extern lang_output_section_statement_type *lang_insert_orphan
- (asection *, const char *, lang_output_section_statement_type *,
+ (asection *, const char *, int, lang_output_section_statement_type *,
struct orphan_save *, etree_type *, lang_statement_list_type *);
extern lang_input_statement_type *lang_add_input_file
(const char *, lang_input_file_enum_type, const char *);
extern void lang_add_keepsyms_file
(const char *);
extern lang_output_section_statement_type *lang_output_section_statement_lookup
- (const char *const, int, bfd_boolean);
+ (const char *, int, bfd_boolean);
+extern lang_output_section_statement_type *next_matching_output_section_statement
+ (lang_output_section_statement_type *, int);
extern void ldlang_add_undef
(const char *const);
extern void lang_add_output_format
(const char *, const char *, const char *, int);
extern void lang_list_init
(lang_statement_list_type *);
+extern void push_stat_ptr
+ (lang_statement_list_type *);
+extern void pop_stat_ptr
+ (void);
extern void lang_add_data
(int type, union etree_union *);
extern void lang_add_reloc
extern void lang_append_dynamic_list (struct bfd_elf_version_expr *);
extern void lang_append_dynamic_list_cpp_typeinfo (void);
extern void lang_append_dynamic_list_cpp_new (void);
-bfd_boolean unique_section_p
- (const asection *);
extern void lang_add_unique
(const char *);
extern const char *lang_get_output_target