mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-28 10:00:51 +00:00
* ld.h (lang_phase_type): Move to..
* ldexp.h: ..here. Add lang_mark_phase_enum. (node_type): Remove etree_undef and etree_unspec. (exp_data_seg): Delete. (struct ldexp_control, expld): New. (invalid, exp_mark_used_section): Delete. (exp_fold_tree, exp_get_vma, exp_get_value_int, exp_get_fill, exp_get_abs_int): Update prototypes. * ldexp.c (assigning_to_dot): Delete. (expld): Define. (make_abs): Operate directly on expld.result. Update all callers. (new_abs): Likewise. Return void. (new_rel_from_abs): Rename from new_rel_from_section. (new_rel, new_rel_from_abs): Operate on expld.result and return void. Update all callers. (fold_unary): Operate on expld.result and return void. Remove "current_section", "allocation_done", "dot", "dotp" and "mark_used" params. Update all callers. (fold_binary, fold_trinary, fold_name, exp_fold_tree_1): Likewise. (fold_unary <ALIGN_K>): Ensure alignment is absolute. (fold_unary <ABSOLUTE>): Use make_abs. (fold_unary <DATA_SEGMENT_END>): Evaluate mark_phase as for allocating_phase. (fold_binary <DATA_SEGMENT_ALIGN, DATA_SEGMENT_RELRO_END, >): Ditto. (fold_binary <'%','/'>): Don't error if marking. (fold_name <SIZEOF_HEADERS>): Don't call bfd_sizeof_headers when marking. (fold_name <NAME>): Remove FIXME; -R is handled correctly. Don't error when marking. (fold_name <ADDR, LOADADDR, SIZEOF>): Don't set SEC_KEEP. (exp_fold_tree_1): Don't error when marking. (exp_fold_tree_1 <etree_rel>): Evaluate in all phases except first. (exp_fold_tree_1 <etree_assign to dot>): Don't check for NULL current section, instead check for NULL dotp. (exp_fold_tree_1 <etree_provide>): Don't evaluate the assignment source unless the symbol is referenced and undefined. (exp_fold_tree): Remove "allocation_done" and "dot" params. Save params to expld. (exp_fold_tree_no_dot): Remove "current_section", "allocation_done and "mark_used" params. Save params to expld. Update all callers. (exp_assop): Do without temp var. (exp_print_tree <etree_undef>): Delete code. (exp_get_vma): Remove "allocation_done" param. Correct error return. (exp_get_fill, exp_get_abs_int): Likewise. (exp_get_value_int): Remove "allocation_done" param. (exp_mark_used_section): Delete. * ldgram.y (fill_exp): Update exp_get_fill call. (origin_spec, length_spec): Update exp_get_vma call. * ldlang.c (lang_init): Don't bother clearing lang_statement_iteration. (lang_mark_used_section_1, lang_mark_used_section): Delete. (strip_excluded_output_sections): Call one_lang_size_sections_pass in marking mode. Merge old lang_mark_used_section code. Correct handling of output sections with excluded input sections and data statements. Don't drop non-zero sized sections. Don't zap os->bfd_section. Do set SEC_EXCLUDE when appropriate. (print_output_section_statement): Update for changed ldexp.c interface. (print_assignment, lang_size_sections_1): Likewise. (lang_do_assignments_1, lang_enter_output_section_statement): Likewise. (lang_new_phdr, lang_record_phdrs): Likewise. (lang_size_sections): Likewise. (insert_pad): Use following statement if it is a pad, rather than creating a new one. (lang_size_sections_1 <lang_output_section_statement_enum>): Do process ignored output section to set vma and lma, but don't update dot for these sections. Don't error if marking. (lang_size_sections_1 <lang_assignment_statement_enum>): Don't update dot for ignored sections. (lang_size_sections_1 <lang_data_statement_enum>): Don't mark absolute section with SEC_ALLOC. (one_lang_size_sections_pass): New function. (lang_size_sections): Remove first five params. Set expld.phase on entry and exit. Use one_lang_size_sections_pass. (lang_do_assignments): Remove all params. Update all callers. (lang_reset_memory_regions): Clear os->processed for all output section statements. * ldlang.h (lang_do_assignments): Update prototype. (lang_size_sections): Likewise. (one_lang_size_sections_pass): Declare. * pe-dll.c (pe_dll_fill_sections, pe_exe_fill_sections): Update lang_size_sections and lang_do_assignments calls. * emultempl/elf32.em (layout_sections_again): Likewise. * emultempl/ppc64elf.em (ppc_before_allocation): Use one_lang_size_sections_pass.
This commit is contained in:
67
ld/ldexp.h
67
ld/ldexp.h
@@ -40,8 +40,6 @@ typedef struct {
|
||||
etree_assign,
|
||||
etree_provide,
|
||||
etree_provided,
|
||||
etree_undef,
|
||||
etree_unspec,
|
||||
etree_value,
|
||||
etree_assert,
|
||||
etree_rel
|
||||
@@ -91,17 +89,44 @@ typedef union etree_union {
|
||||
} assert_s;
|
||||
} etree_type;
|
||||
|
||||
extern struct exp_data_seg {
|
||||
enum {
|
||||
exp_dataseg_none,
|
||||
exp_dataseg_align_seen,
|
||||
exp_dataseg_relro_seen,
|
||||
exp_dataseg_end_seen,
|
||||
exp_dataseg_relro_adjust,
|
||||
exp_dataseg_adjust
|
||||
} phase;
|
||||
bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
|
||||
} exp_data_seg;
|
||||
typedef enum {
|
||||
lang_first_phase_enum,
|
||||
lang_mark_phase_enum,
|
||||
lang_allocating_phase_enum,
|
||||
lang_final_phase_enum
|
||||
} lang_phase_type;
|
||||
|
||||
struct ldexp_control {
|
||||
/* Modify expression evaluation depending on this. */
|
||||
lang_phase_type phase;
|
||||
|
||||
/* Principally used for diagnostics. */
|
||||
bfd_boolean assigning_to_dot;
|
||||
|
||||
/* Working results. */
|
||||
etree_value_type result;
|
||||
bfd_vma dot;
|
||||
|
||||
/* Current dot and section passed to ldexp folder. */
|
||||
bfd_vma *dotp;
|
||||
asection *section;
|
||||
|
||||
/* State machine and results for DATASEG. */
|
||||
struct {
|
||||
enum {
|
||||
exp_dataseg_none,
|
||||
exp_dataseg_align_seen,
|
||||
exp_dataseg_relro_seen,
|
||||
exp_dataseg_end_seen,
|
||||
exp_dataseg_relro_adjust,
|
||||
exp_dataseg_adjust
|
||||
} phase;
|
||||
|
||||
bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
|
||||
} dataseg;
|
||||
};
|
||||
|
||||
extern struct ldexp_control expld;
|
||||
|
||||
/* A maps from a segment name to a base address. */
|
||||
typedef struct segment_struct {
|
||||
@@ -127,10 +152,8 @@ etree_type *exp_bigintop
|
||||
(bfd_vma, char *);
|
||||
etree_type *exp_relop
|
||||
(asection *, bfd_vma);
|
||||
etree_value_type invalid
|
||||
(void);
|
||||
etree_value_type exp_fold_tree
|
||||
(etree_type *, asection *, lang_phase_type, bfd_vma, bfd_vma *);
|
||||
void exp_fold_tree
|
||||
(etree_type *, asection *, bfd_vma *);
|
||||
etree_type *exp_binop
|
||||
(int, etree_type *, etree_type *);
|
||||
etree_type *exp_trinop
|
||||
@@ -148,14 +171,12 @@ etree_type *exp_assert
|
||||
void exp_print_tree
|
||||
(etree_type *);
|
||||
bfd_vma exp_get_vma
|
||||
(etree_type *, bfd_vma, char *, lang_phase_type);
|
||||
(etree_type *, bfd_vma, char *);
|
||||
int exp_get_value_int
|
||||
(etree_type *, int, char *, lang_phase_type);
|
||||
(etree_type *, int, char *);
|
||||
fill_type *exp_get_fill
|
||||
(etree_type *, fill_type *, char *, lang_phase_type);
|
||||
(etree_type *, fill_type *, char *);
|
||||
bfd_vma exp_get_abs_int
|
||||
(etree_type *, int, char *, lang_phase_type);
|
||||
void exp_mark_used_section
|
||||
(etree_type *, asection *);
|
||||
(etree_type *, int, char *);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user