diff options
-rw-r--r-- | ld/ChangeLog | 24 | ||||
-rw-r--r-- | ld/emultempl/aix.em | 33 | ||||
-rw-r--r-- | ld/emultempl/armcoff.em | 3 | ||||
-rw-r--r-- | ld/emultempl/beos.em | 3 | ||||
-rw-r--r-- | ld/emultempl/elf.em | 3 | ||||
-rw-r--r-- | ld/emultempl/generic.em | 3 | ||||
-rw-r--r-- | ld/emultempl/linux.em | 3 | ||||
-rw-r--r-- | ld/emultempl/msp430.em | 3 | ||||
-rw-r--r-- | ld/emultempl/pe.em | 3 | ||||
-rw-r--r-- | ld/emultempl/pep.em | 3 | ||||
-rw-r--r-- | ld/emultempl/ticoff.em | 3 | ||||
-rw-r--r-- | ld/emultempl/vanilla.em | 3 | ||||
-rw-r--r-- | ld/ldemul.c | 8 | ||||
-rw-r--r-- | ld/ldemul.h | 8 | ||||
-rw-r--r-- | ld/ldlang.c | 8 | ||||
-rw-r--r-- | ld/ldlang.h | 5 |
16 files changed, 100 insertions, 16 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 2b30359..b719d45 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,27 @@ +2020-05-18 Douglas B Rupp <rupp@adacore.com> + + * ldemul.h (ldemul_print_symbol): New. + (ld_emulation_xfer_type) <print_symbol): Likewise. + * ldemul.c (ldemul_print_symbol): New. + * ldlang.c (SECTION_NAME_MAP_LANGTH): Move to ... + (print_one_symbol): Make global and move declaration to ... + (print_all_symbols): Rename print_one_symbol to ldemul_print_symbol + (print_input_section): Likewise + * ldlang.h: ... here. + * emultempl/aix.em (gld${EMULATION_NAME}_print_symbol): New. + (ld_emulation_xfer_struct): Use it. + * emultempl/armcoff.em (ld_emulation_xfer_struct): Add print_symbol + and default to NULL. + * emultempl/beos.em (ld_emulation_xfer_struct): Likewise + * emultempl/elf.em (ld_emulation_xfer_struct): Likewise + * emultempl/generic.em (ld_emulation_xfer_struct): Likewise + * emultempl/linux.em (ld_emulation_xfer_struct): Likewise + * emultempl/msp430.em (ld_emulation_xfer_struct): Likewise + * emultempl/pe.em (ld_emulation_xfer_struct): Likewise + * emultempl/pep.em (ld_emulation_xfer_struct): Likewise + * emultempl/ticoff.em (ld_emulation_xfer_struct): Likewise + * emultempl/vanilla.em (ld_emulation_xfer_struct): Likewise + 2020-05-18 Sergei Trofimovich <siarheit@google.com> * ldmain.c (add_archive_element): Fix s/claimi/claim/ typo diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index 5b73c3e..de313e1 100644 --- a/ld/emultempl/aix.em +++ b/ld/emultempl/aix.em @@ -1534,6 +1534,36 @@ gld${EMULATION_NAME}_open_dynamic_archive (const char *arch, return TRUE; } +static bfd_boolean +gld${EMULATION_NAME}_print_symbol (struct bfd_link_hash_entry *hash_entry, + void *ptr) +{ + asection *sec = (asection *) ptr; + + if ((hash_entry->type == bfd_link_hash_defined + || hash_entry->type == bfd_link_hash_defweak) + && sec == hash_entry->u.def.section) + { + int i; + struct xcoff_link_hash_entry *h; + + for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++) + print_space (); + minfo ("0x%V ", + (hash_entry->u.def.value + + hash_entry->u.def.section->output_offset + + hash_entry->u.def.section->output_section->vma)); + + /* Flag symbol if it has been garbage collected. */ + h = (struct xcoff_link_hash_entry *) hash_entry; + if ((h != NULL) && !(h->flags & XCOFF_MARK)) + minfo (" -->gc"); + minfo (" %pT\n", hash_entry->root.string); + } + + return TRUE; +} + struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = { gld${EMULATION_NAME}_before_parse, syslib_default, @@ -1564,6 +1594,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = { NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + gld${EMULATION_NAME}_print_symbol }; EOF diff --git a/ld/emultempl/armcoff.em b/ld/emultempl/armcoff.em index c539e2f..ff22af4 100644 --- a/ld/emultempl/armcoff.em +++ b/ld/emultempl/armcoff.em @@ -286,6 +286,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/beos.em b/ld/emultempl/beos.em index 2c3e5e5..442ff12 100644 --- a/ld/emultempl/beos.em +++ b/ld/emultempl/beos.em @@ -786,6 +786,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em index 8990300..eac2ce2 100644 --- a/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em @@ -903,6 +903,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_NEW_VERS_PATTERN-NULL}, ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}, ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/generic.em b/ld/emultempl/generic.em index a39c933..24d3c1d 100644 --- a/ld/emultempl/generic.em +++ b/ld/emultempl/generic.em @@ -161,6 +161,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_NEW_VERS_PATTERN-NULL}, ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}, ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em index f4ae6cf..e9d802c 100644 --- a/ld/emultempl/linux.em +++ b/ld/emultempl/linux.em @@ -213,6 +213,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/msp430.em b/ld/emultempl/msp430.em index 861c1dc..850c3a8 100644 --- a/ld/emultempl/msp430.em +++ b/ld/emultempl/msp430.em @@ -848,7 +848,8 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_NEW_VERS_PATTERN-NULL}, ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL}, ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF # diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em index ad5d65d..3dd36de 100644 --- a/ld/emultempl/pe.em +++ b/ld/emultempl/pe.em @@ -2394,6 +2394,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern. */ NULL, /* extra_map_file_text. */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index aa8bac5..39ddd8f 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -2192,6 +2192,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern. */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/ticoff.em b/ld/emultempl/ticoff.em index 60c0da9..11ddd0c 100644 --- a/ld/emultempl/ticoff.em +++ b/ld/emultempl/ticoff.em @@ -186,6 +186,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ ${LDEMUL_EMIT_CTF_EARLY-NULL}, - ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL} + ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}, + ${LDEMUL_PRINT_SYMBOL-NULL} }; EOF diff --git a/ld/emultempl/vanilla.em b/ld/emultempl/vanilla.em index ae6f6e4..70d193c 100644 --- a/ld/emultempl/vanilla.em +++ b/ld/emultempl/vanilla.em @@ -87,6 +87,7 @@ struct ld_emulation_xfer_struct ld_vanilla_emulation = NULL, /* new_vers_pattern */ NULL, /* extra_map_file_text */ NULL, /* emit_ctf_early */ - NULL /* examine_strtab_for_ctf */ + NULL, /* examine_strtab_for_ctf */ + NULL /* print_symbol */ }; EOF diff --git a/ld/ldemul.c b/ld/ldemul.c index fa6dfdd..00a6a5a 100644 --- a/ld/ldemul.c +++ b/ld/ldemul.c @@ -428,3 +428,11 @@ ldemul_examine_strtab_for_ctf (struct ctf_file *ctf_output, ld_emulation->examine_strtab_for_ctf (ctf_output, syms, symcount, symstrtab); } + +bfd_boolean +ldemul_print_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr) +{ + if (ld_emulation->print_symbol) + return ld_emulation->print_symbol (hash_entry, ptr); + return print_one_symbol (hash_entry, ptr); +} diff --git a/ld/ldemul.h b/ld/ldemul.h index 44e3a92..ca165ac 100644 --- a/ld/ldemul.h +++ b/ld/ldemul.h @@ -112,6 +112,8 @@ extern int ldemul_emit_ctf_early extern void ldemul_examine_strtab_for_ctf (struct ctf_file *, struct elf_sym_strtab *, bfd_size_type, struct elf_strtab_hash *); +extern bfd_boolean ldemul_print_symbol + (struct bfd_link_hash_entry *hash_entry, void *ptr); typedef struct ld_emulation_xfer_struct { /* Run before parsing the command line and script file. @@ -236,6 +238,12 @@ typedef struct ld_emulation_xfer_struct { bfd_link_callback is invoked by per-target code. */ void (*examine_strtab_for_ctf) (struct ctf_file *, struct elf_sym_strtab *, bfd_size_type, struct elf_strtab_hash *); + + /* Called when printing a symbol to the map file. AIX uses this + hook to flag gc'd symbols. */ + bfd_boolean (*print_symbol) + (struct bfd_link_hash_entry *hash_entry, void *ptr); + } ld_emulation_xfer_type; typedef enum { diff --git a/ld/ldlang.c b/ld/ldlang.c index b2cdb36..35791e4 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -155,8 +155,6 @@ static int lang_sizing_iteration = 0; #define outside_symbol_address(q) \ ((q)->value + outside_section_address (q->section)) -#define SECTION_NAME_MAP_LENGTH (16) - /* CTF sections smaller than this are not compressed: compression of dictionaries this small doesn't gain much, and this lets consumers mmap the sections directly out of the ELF file and use them with no decompression @@ -4619,7 +4617,7 @@ print_input_statement (lang_input_statement_type *statm) /* Print all symbols defined in a particular section. This is called via bfd_link_hash_traverse, or by print_all_symbols. */ -static bfd_boolean +bfd_boolean print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr) { asection *sec = (asection *) ptr; @@ -4683,7 +4681,7 @@ print_all_symbols (asection *sec) /* Print the symbols. */ for (i = 0; i < ud->map_symbol_def_count; i++) - print_one_symbol (entries[i], sec); + ldemul_print_symbol (entries[i], sec); obstack_free (&map_obstack, entries); } @@ -4747,7 +4745,7 @@ print_input_section (asection *i, bfd_boolean is_discarded) && i->output_section->owner == link_info.output_bfd) { if (link_info.reduce_memory_overheads) - bfd_link_hash_traverse (link_info.hash, print_one_symbol, i); + bfd_link_hash_traverse (link_info.hash, ldemul_print_symbol, i); else print_all_symbols (i); diff --git a/ld/ldlang.h b/ld/ldlang.h index 2aa3930..3018c3e 100644 --- a/ld/ldlang.h +++ b/ld/ldlang.h @@ -23,6 +23,8 @@ #define DEFAULT_MEMORY_REGION "*default*" +#define SECTION_NAME_MAP_LENGTH (16) + typedef enum { lang_input_file_is_l_enum, @@ -701,4 +703,7 @@ lang_print_memory_usage (void); extern void lang_add_gc_name (const char *); +extern bfd_boolean +print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr); + #endif |