/* Create a dummy BFD. */ bfd * plugin_get_ir_dummy_bfd (const char *name, bfd *srctemplate) { bfd *abfd; bfd_use_reserved_id = 1; abfd = bfd_create (concat (name, IRONLY_SUFFIX, (const char *) NULL), srctemplate); if (abfd != NULL) { abfd->flags |= BFD_LINKER_CREATED | BFD_PLUGIN; bfd_set_arch_info (abfd, bfd_get_arch_info (srctemplate)); bfd_set_gp_size (abfd, bfd_get_gp_size (srctemplate)); if (bfd_make_writable (abfd) && bfd_copy_private_bfd_data (srctemplate, abfd)) { flagword flags; /* Create section to own the symbols. */ flags = (SEC_CODE | SEC_HAS_CONTENTS | SEC_READONLY | SEC_ALLOC | SEC_LOAD | SEC_KEEP | SEC_EXCLUDE); if (bfd_make_section_anyway_with_flags (abfd, ".text", flags)) return abfd; } } einfo (_("could not create dummy IR bfd: %F%E\n")); return NULL; }
void md_begin (void) { /* Initialize the `cgen' interface. */ /* Set the machine number and endian. */ gas_cgen_cpu_desc = frv_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0, CGEN_CPU_OPEN_ENDIAN, CGEN_ENDIAN_BIG, CGEN_CPU_OPEN_END); frv_cgen_init_asm (gas_cgen_cpu_desc); /* This is a callback from cgen to gas to parse operands. */ cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand); /* Set the ELF flags if desired. */ if (frv_flags) bfd_set_private_flags (stdoutput, frv_flags); /* Set the machine type */ bfd_default_set_arch_mach (stdoutput, bfd_arch_frv, frv_mach); /* Set up gp size so we can put local common items in .sbss */ bfd_set_gp_size (stdoutput, g_switch_value); frv_vliw_reset (& vliw, frv_mach, frv_flags); }