* ldlang.h (lang_output_section_statement_type): Add after_end field.
	(lang_abs_symbol_at_beginning_of, lang_abs_symbol_at_end_of): Delete.
	(section_for_dot): Declare.
	* ldlang.c (lang_size_sections_1): Correct comment.
	(current_section): Move earlier.
	(current_assign, prefer_next_section): New static vars.
	(lang_do_assignments_1): Add found_end param.  Detect _end
	assignment to set found_end.  Set os->after_end.  Set above statics.
	(lang_do_assignments): Adjust lang_do_assignments_1 call.  Init
	vars.
	(section_for_dot): New function.
	(lang_set_startof): Don't make an absolute symbol.
	(lang_abs_symbol_at_beginning_of, lang_abs_symbol_at_end_of): Delete.
	* ldexp.c (new_rel_from_abs): Use section_for_dot.
	* emultempl/lnk960.em (symbol_at_beginning_of): New function.
	(symbol_at_end_of): Likewise.
	(lnk960_after_allocation): Use them.
	* scripttempl/elf.sc: Precede OTHER_GOT_SYMBOLS with . = .; and
	likewise before __bss_start.

ld/testsuite/
Update far too many tests.
This commit is contained in:
Alan Modra
2012-06-15 15:13:41 +00:00
parent 8e09ad05ed
commit d2667025dd
121 changed files with 747 additions and 565 deletions

View File

@ -165,6 +165,8 @@ typedef struct lang_output_section_statement_struct
unsigned int ignored : 1;
/* If this section should update "dot". Prevents section being ignored. */
unsigned int update_dot : 1;
/* If this section is after assignment to _end. */
unsigned int after_end : 1;
} lang_output_section_statement_type;
typedef struct
@ -537,10 +539,6 @@ extern void lang_float
extern void lang_leave_output_section_statement
(fill_type *, const char *, lang_output_section_phdr_list *,
const char *);
extern void lang_abs_symbol_at_end_of
(const char *, const char *);
extern void lang_abs_symbol_at_beginning_of
(const char *, const char *);
extern void lang_statement_append
(lang_statement_list_type *, lang_statement_union_type *,
lang_statement_union_type **);
@ -552,6 +550,8 @@ extern void lang_reset_memory_regions
(void);
extern void lang_do_assignments
(lang_phase_type);
extern asection *section_for_dot
(void);
#define LANG_FOR_EACH_INPUT_STATEMENT(statement) \
lang_input_statement_type *statement; \