forked from Imagelibrary/binutils-gdb
* ld.h (check_nocrossrefs): Declare.
* ldlang.h (struct lang_nocrossref): Define. (struct lang_nocrossrefs): Define. (nocrossref_list): Declare. (lang_add_nocrossref): Declare. * ldlex.l: Recognize NOCROSSREFS keyword. * ldgram.y (%union): Add nocrossref field. (NOCROSSREFS): New terminal. (ifile_p1): Recognize NOCROSSREFS. (nocrossref_list): New nonterminal. * ldlang.c (nocrossref_list): Define. (lang_add_nocrossref): New function. * ldmain.c (main): If nocrossref_list is not NULL, call check_nocrossrefs. (warning_callback): Free symbols if there is no place to store them. (notice): Call add_cref if nocrossref_list is not NULL. * ldcref.c: Include "ldexp.h" and "ldlang.h". (check_nocrossrefs): New function. (check_nocrossref): New static function. (struct check_refs_info): Define. (check_refs, check_reloc_refs): New static functions. * Makefile.in: Rebuild dependencies. * ld.texinfo (Option Commands): Document NOCROSSREFS.
This commit is contained in:
40
ld/ldlang.h
40
ld/ldlang.h
@@ -1,5 +1,5 @@
|
||||
/* ldlang.h - linker command language support
|
||||
Copyright 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GLD, the Gnu Linker.
|
||||
|
||||
@@ -96,6 +96,17 @@ typedef struct lang_output_statement_struct
|
||||
const char *name;
|
||||
} lang_output_statement_type;
|
||||
|
||||
/* Section types specified in a linker script. */
|
||||
|
||||
enum section_type
|
||||
{
|
||||
normal_section,
|
||||
dsect_section,
|
||||
copy_section,
|
||||
noload_section,
|
||||
info_section,
|
||||
overlay_section
|
||||
};
|
||||
|
||||
/* This structure holds a list of program headers describing segments
|
||||
in which this section should be placed. */
|
||||
@@ -120,7 +131,7 @@ typedef struct lang_output_section_statement_struct
|
||||
|
||||
asection *bfd_section;
|
||||
int flags; /* Or together of all input sections */
|
||||
int loadable; /* set from NOLOAD flag in script */
|
||||
enum section_type sectype;
|
||||
struct memory_region_struct *region;
|
||||
size_t block_value;
|
||||
fill_type fill;
|
||||
@@ -243,9 +254,6 @@ typedef struct lang_input_statement_struct
|
||||
/* unsigned int globals_in_this_file;*/
|
||||
const char *target;
|
||||
boolean real;
|
||||
asection *common_section;
|
||||
asection *common_output_section;
|
||||
boolean complained;
|
||||
} lang_input_statement_type;
|
||||
|
||||
typedef struct
|
||||
@@ -335,6 +343,25 @@ struct lang_phdr
|
||||
etree_type *flags;
|
||||
};
|
||||
|
||||
/* This structure is used to hold a list of sections which may not
|
||||
cross reference each other. */
|
||||
|
||||
struct lang_nocrossref
|
||||
{
|
||||
struct lang_nocrossref *next;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
/* The list of nocrossref lists. */
|
||||
|
||||
struct lang_nocrossrefs
|
||||
{
|
||||
struct lang_nocrossrefs *next;
|
||||
struct lang_nocrossref *list;
|
||||
};
|
||||
|
||||
extern struct lang_nocrossrefs *nocrossref_list;
|
||||
|
||||
extern lang_output_section_statement_type *abs_output_section;
|
||||
extern boolean lang_has_input_file;
|
||||
extern etree_type *base;
|
||||
@@ -353,7 +380,7 @@ extern void lang_add_output PARAMS ((const char *, int from_script));
|
||||
extern void lang_enter_output_section_statement
|
||||
PARAMS ((const char *output_section_statement_name,
|
||||
etree_type * address_exp,
|
||||
int flags,
|
||||
enum section_type sectype,
|
||||
bfd_vma block_value,
|
||||
etree_type *align,
|
||||
etree_type *subalign,
|
||||
@@ -431,5 +458,6 @@ extern void lang_new_phdr
|
||||
PARAMS ((const char *, etree_type *, boolean, boolean, etree_type *,
|
||||
etree_type *));
|
||||
extern void lang_section_in_phdr PARAMS ((const char *));
|
||||
extern void lang_add_nocrossref PARAMS ((struct lang_nocrossref *));
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user