forked from Imagelibrary/binutils-gdb
include/ChangeLog
2011-07-11 Catherine Moore <clm@codesourcery.com> * bfdlink.h (flag_type): New enumeration. (flag_info_list): New structure. (flag_info): New structure. bfd/ChangeLog 2011-07-11 Catherine Moore <clm@codesourcery.com> * aout-adobe.c (aout_32_bfd_lookup_section_flags): New definition. * aout-target.h (MY_bfd_lookup_section_flags): New definition. * aout-tic30.c (MY_bfd_lookup_section_flags): New definition. * bfd-in2.h: Regenerated. * bfd.c (bfd_lookup_section_flags): New definition. * binary.c (binary_bfd_lookup_section_flags): New definition. * bout.c (b_out_bfd_lookup_section_flags): New definition. * coff-alpha.c (_bfd_ecoff_bfd_lookup_section_flags): New definition. * coff-mips.c (_bfd_ecoff_bfd_lookup_section_flags): New definition. * coff-rs6000.c (rs6000coff_vec): Include bfd_generic_lookup_section_flags. (pmac_xcoff_vec): Likewise. * coffcode.h (coff_bfd_lookup_section_flags): New definition. * coff64-rs6000.c (rs6000coff64_vec): Include bfd_generic_lookup_section_flags. (aix5coff64_vec): Likewise. * ecoff.c (bfd_debug_section): Initialize flag_info field. * elf-bfd.h (elf_backend_lookup_section_flags_hook): Declare. (bfd_elf_lookup_section_flags): Declare. * elflink.c (bfd_elf_lookup_section_flags): New function. * elfxx-target.h (bfd_elfNN_bfd_lookup_section_flags): Define. (elf_backend_lookup_section_flags_hook): Define. (elf_backend_data): Add elf_backend_lookup_section_flags_hook. * i386msdos.c (msdos_bfd_lookup_section_flags): New define. * i386os9k.c (os9k_bfd_lookup_section_flags): New define. * ieee.c (ieee_bfd_lookup_section_flags): New define. * ihex.c (ihex_bfd_lookup_section_flags): New define. * libbfd-in.h (_bfd_nolink_bfd_lookup_section_flags): Declare. (bfd_generic_lookup_section_flags): Declare. * libbfd.h: Regenerated. * mach-o-target.c (bfd_mach_o_bfd_lookup_section_flags): New. * mmo.c (mmo_bfd_lookup_section_flags): New definition. * nlm-target.h (nlm_bfd_lookup_section_flags): New definition. * oasys.c (oasys_bfd_lookup_section_flags): New definition. * pef.c (bfd_pef_bfd_lookup_section_flags): New definition. * plugin.c (bfd_plugin_bfd_lookup_section_flags): New definition. * ppcboot.c (ppcboot_bfd_lookup_section_flags): New definition. * reloc.c (bfd_generic_lookup_section_flags): New function. * som.c (som_bfd_lookup_section_flags): New definition. * srec.c (srec_bfd_lookup_section_flags): New definition. * targets.c (flag_info): Declare. (NAME##_bfd_lookup_section_flags): Add to LINK jump table. (_bfd_lookup_section_flags): New. * tekhex.c (tekhex_bfd_lookup_section_flags): New definition. * versados.c (versados_bfd_lookup_section_flags): New definition. * vms-alpha.c (alpha_vms_bfd_lookup_section_flag): New definition. * xsym.c (bfd_sym_bfd_lookup_section_flags): New definition. ld/ChangeLog 2011-07-11 Catherine Moore <clm@codesourcery.com> * ld.h (section_flag_list): Add field to struct wildcard_spec. * ld.texinfo (INPUT_SECTION_FLAGS): Document. * ldgram.y (flag_info_list, flag_info): Add to union. (INPUT_SECTION_FLAGS): New token. (wildcard_spec): Initialize section_flag_list to NULL for each alternative. (sect_flag_list, sect_flags): New rules. (input_section_spec_no_keep): Add alternatives to recognize sect_flags. * ldlang.c (walk_wild_consider_section): Initialize section_flag_info field of the section struct. (lang_add_section): Check input section flags. (lang_add_wild): Initialize section_flag_list field of the statement struct. * ldlang.h (lang_input_statement_struct): Add section_flag_list field. (lang_wild_statement_struct): Likewise. * ldlex.l (INPUT_SECTION_FLAGS): New token. * mri.c (mri_draw_tree): Initialize section_flag_list to NULL. * NEWS: Announce INPUT_SECTION_FLAGS enhancement. ld/testsuite/ChangeLog 2011-07-11 Catherine Moore <clm@cm00re.com> * ld-scripts/section-flags-1.s: New. * ld-scripts/section-flags-1.t: New. * ld-scripts/section-flags-2.s: New. * ld-scripts/section-flags-2.t: New. * ld-scripts/section-flags.exp: New.
This commit is contained in:
@@ -12167,6 +12167,83 @@ bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Map an ELF section header flag to its corresponding string. */
|
||||
typedef struct
|
||||
{
|
||||
char *flag_name;
|
||||
flagword flag_value;
|
||||
} elf_flags_to_name_table;
|
||||
|
||||
static elf_flags_to_name_table elf_flags_to_names [] =
|
||||
{
|
||||
{ "SHF_WRITE", SHF_WRITE },
|
||||
{ "SHF_ALLOC", SHF_ALLOC },
|
||||
{ "SHF_EXECINSTR", SHF_EXECINSTR },
|
||||
{ "SHF_MERGE", SHF_MERGE },
|
||||
{ "SHF_STRINGS", SHF_STRINGS },
|
||||
{ "SHF_INFO_LINK", SHF_INFO_LINK},
|
||||
{ "SHF_LINK_ORDER", SHF_LINK_ORDER},
|
||||
{ "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
|
||||
{ "SHF_GROUP", SHF_GROUP },
|
||||
{ "SHF_TLS", SHF_TLS },
|
||||
{ "SHF_MASKOS", SHF_MASKOS },
|
||||
{ "SHF_EXCLUDE", SHF_EXCLUDE },
|
||||
};
|
||||
|
||||
void
|
||||
bfd_elf_lookup_section_flags (struct bfd_link_info *info,
|
||||
struct flag_info *finfo)
|
||||
{
|
||||
bfd *output_bfd = info->output_bfd;
|
||||
const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
|
||||
struct flag_info_list *tf = finfo->flag_list;
|
||||
int with_hex = 0;
|
||||
int without_hex = 0;
|
||||
|
||||
for (tf = finfo->flag_list; tf != NULL; tf = tf->next)
|
||||
{
|
||||
int i;
|
||||
if (bed->elf_backend_lookup_section_flags_hook)
|
||||
{
|
||||
flagword hexval =
|
||||
(*bed->elf_backend_lookup_section_flags_hook) ((char *) tf->name);
|
||||
|
||||
if (hexval != 0)
|
||||
{
|
||||
if (tf->with == with_flags)
|
||||
with_hex |= hexval;
|
||||
else if (tf->with == without_flags)
|
||||
without_hex |= hexval;
|
||||
tf->valid = TRUE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 12; i++)
|
||||
{
|
||||
if (!strcmp (tf->name, elf_flags_to_names[i].flag_name))
|
||||
{
|
||||
if (tf->with == with_flags)
|
||||
with_hex |= elf_flags_to_names[i].flag_value;
|
||||
else if (tf->with == without_flags)
|
||||
without_hex |= elf_flags_to_names[i].flag_value;
|
||||
tf->valid = TRUE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (tf->valid == FALSE)
|
||||
{
|
||||
info->callbacks->einfo
|
||||
(_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
finfo->flags_initialized = TRUE;
|
||||
finfo->only_with_flags |= with_hex;
|
||||
finfo->not_with_flags |= without_hex;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
struct alloc_got_off_arg {
|
||||
bfd_vma gotoff;
|
||||
struct bfd_link_info *info;
|
||||
|
||||
Reference in New Issue
Block a user