* ldlang.c (entry_symbol): Make static.

(lang_add_entry): Add cmdline argument.
	* ldlang.h (lang_add_entry): Change prototype.
	* ldgram.y (statement_anywhere): Change lang_add_entry call.
	* lexsup.c (parse_args): Likewise.
This commit is contained in:
Ian Lance Taylor 1994-05-27 15:39:11 +00:00
parent 29371b1feb
commit 60e8a53407
5 changed files with 65 additions and 42 deletions

View File

@ -1,7 +1,10 @@
Fri May 27 01:08:14 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* ldlang.c (lang_add_entry): Only set the entry symbol if it has
not been set already.
* ldlang.c (entry_symbol): Make static.
(lang_add_entry): Add cmdline argument.
* ldlang.h (lang_add_entry): Change prototype.
* ldgram.y (statement_anywhere): Change lang_add_entry call.
* lexsup.c (parse_args): Likewise.
Tue May 24 16:13:43 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)

View File

@ -155,7 +155,6 @@ mri_script_command:
einfo("%P%F: unrecognised keyword in MRI style script '%s'\n",$1);
}
| LIST {
write_map = true;
config.map_filename = "-";
}
| ORDER ordernamelist
@ -282,7 +281,7 @@ sec_or_group_p1:
statement_anywhere:
ENTRY '(' NAME ')'
{ lang_add_entry($3); }
{ lang_add_entry ($3, 0); }
| assignment end
;

View File

@ -143,7 +143,7 @@ lang_output_section_statement_type *abs_output_section;
lang_statement_list_type *stat_ptr = &statement_list;
lang_statement_list_type file_chain =
{0};
CONST char *entry_symbol = 0;
static const char *entry_symbol = 0;
boolean lang_has_input_file = false;
boolean had_output_filename = false;
boolean lang_float_flag = false;
@ -2621,12 +2621,25 @@ lang_section_start (name, address)
ad->address = address;
}
/* Set the start symbol to NAME. CMDLINE is nonzero if this is called
because of a -e argument on the command line, or zero if this is
called by ENTRY in a linker script. Command line arguments take
precedence. */
void
lang_add_entry (name)
lang_add_entry (name, cmdline)
CONST char *name;
int cmdline;
{
if (entry_symbol == NULL)
entry_symbol = name;
static int from_cmdline;
if (entry_symbol == NULL
|| cmdline
|| ! from_cmdline)
{
entry_symbol = name;
from_cmdline = cmdline;
}
}
void

View File

@ -64,6 +64,7 @@ typedef struct lang_statement_header_struct
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,
@ -148,8 +149,38 @@ typedef struct
bfd_vma output_vma;
} lang_data_statement_type;
/* Generate a reloc in the output file. */
typedef struct
{
lang_statement_header_type header;
/* Reloc to generate. */
bfd_reloc_code_real_type reloc;
/* Reloc howto structure. */
const reloc_howto_type *howto;
/* Section to generate reloc against. Exactly one of section and
name must be NULL. */
asection *section;
/* Name of symbol to generate reloc against. Exactly one of section
and name must be NULL. */
const char *name;
/* Expression for addend. */
union etree_union *addend_exp;
/* Resolved addend. */
bfd_vma addend_value;
/* Output section where reloc should be performed. */
asection *output_section;
/* VMA within output section. */
bfd_vma output_vma;
} lang_reloc_statement_type;
typedef struct lang_input_statement_struct
{
@ -259,6 +290,7 @@ typedef union lang_statement_union
union lang_statement_union *next;
lang_wild_statement_type wild_statement;
lang_data_statement_type data_statement;
lang_reloc_statement_type reloc_statement;
lang_address_statement_type address_statement;
lang_output_section_statement_type output_section_statement;
lang_afile_asection_pair_statement_type afile_asection_pair_statement;
@ -273,7 +305,6 @@ typedef union lang_statement_union
lang_padding_statement_type padding_statement;
} lang_statement_union_type;
extern bfd_size_type largest_section;
extern lang_output_section_statement_type *abs_output_section;
extern boolean lang_has_input_file;
extern etree_type *base;
@ -297,7 +328,7 @@ extern void lang_enter_output_section_statement
extern void lang_final PARAMS ((void));
extern void lang_process PARAMS ((void));
extern void lang_section_start PARAMS ((const char *, union etree_union *));
extern void lang_add_entry PARAMS ((const char *));
extern void lang_add_entry PARAMS ((const char *, int));
extern void lang_add_target PARAMS ((const char *));
extern void lang_add_wild PARAMS ((const char *const , const char *const));
extern void lang_add_map PARAMS ((const char *));
@ -324,37 +355,6 @@ extern void lang_for_each_file
statement != (lang_input_statement_type *)NULL; \
statement = (lang_input_statement_type *)statement->next)\
#define LANG_FOR_EACH_INPUT_SECTION(statement, abfd, section, x) \
{ \
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) \
{ \
asection *section; \
bfd *abfd = statement->the_bfd; \
for (section = abfd->sections; \
section != (asection *)NULL; \
section = section->next) \
{ \
x; \
} \
} \
}
#define LANG_FOR_EACH_OUTPUT_SECTION(section, x) \
{ \
extern bfd *output_bfd; \
asection *section; \
for (section = output_bfd->sections; \
section != (asection *)NULL; \
section = section->next) \
{ \
x; \
} \
}
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
@ -369,8 +369,16 @@ extern void ldlang_add_undef PARAMS ((const char *const name));
extern void lang_add_output_format PARAMS ((const char *, int from_script));
extern void lang_list_init PARAMS ((lang_statement_list_type*));
extern void lang_add_data PARAMS ((int type, union etree_union *));
extern void lang_add_reloc
PARAMS ((bfd_reloc_code_real_type reloc, const reloc_howto_type *howto,
asection *section, const char *name, union etree_union *addend));
extern void lang_for_each_statement
PARAMS ((void (*func) (lang_statement_union_type *)));
extern PTR stat_alloc PARAMS ((size_t size));
extern bfd_vma lang_size_sections
PARAMS ((lang_statement_union_type *s,
lang_output_section_statement_type *output_section_statement,
lang_statement_union_type **prev, fill_type fill,
bfd_vma dot, boolean relax));
#endif

View File

@ -168,7 +168,7 @@ parse_args (argc, argv)
be used to select an output format. */
break;
case 'e':
lang_add_entry (optarg);
lang_add_entry (optarg, 1);
break;
case 'F':
/* Ignore. */