* 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 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
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,
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
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
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
${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
${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
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
${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
# \f
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
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
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
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
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);
+}
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.
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 {
#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
/* 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;
/* 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);
}
&& 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);
#define DEFAULT_MEMORY_REGION "*default*"
+#define SECTION_NAME_MAP_LENGTH (16)
+
typedef enum
{
lang_input_file_is_l_enum,
extern void
lang_add_gc_name (const char *);
+extern bfd_boolean
+print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr);
+
#endif