case bfd_error_system_call:
if (info != NULL)
{
- info->callbacks->einfo
- (_("%F%P: %pB(%s): error opening thin archive member: %E\n"),
+ info->callbacks->fatal
+ (_("%P: %pB(%s): error opening thin archive member: %E\n"),
archive, filename);
break;
}
}
default:
- info->callbacks->einfo (_("%F%P: Unhandled relocation type %u\n"),
+ info->callbacks->fatal (_("%P: Unhandled relocation type %u\n"),
rel->r_type);
- BFD_FAIL ();
- return false;
}
}
/* This is the first section with this name. Record it. */
if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
- info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
+ info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
return false;
}
|| info->export_dynamic)
&& h->pointer_equality_needed)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer "
+ (_("%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer "
"equality in `%pB' can not be used when making an "
"executable; recompile with -fPIE and relink with -pie\n"),
h->root.root.string,
bfd_vma align_gap_adjustment;
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
/* Assume nothing changes. */
*again = false;
| SEC_HAS_CONTENTS
| SEC_DATA));
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create GNU property section\n"));
+ info->callbacks->fatal (_("%P: failed to create GNU property section\n"));
if (!bfd_set_section_alignment (sec,
elfclass == ELFCLASS64 ? 3 : 2))
- info->callbacks->einfo (_("%F%pA: failed to align section\n"),
+ info->callbacks->fatal (_("%pA: failed to align section\n"),
sec);
elf_section_type (sec) = SHT_NOTE;
&& need_layout != NULL
&& bed->size_relative_relocs
&& !bed->size_relative_relocs (info, need_layout))
- info->callbacks->einfo
- (_("%F%P: failed to size relative relocations\n"));
+ info->callbacks->fatal
+ (_("%P: failed to size relative relocations\n"));
}
if (no_user_phdrs && bfd_count_sections (abfd) != 0)
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->target_section);
shrinkable = false;
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
htab = avr_link_hash_table (link_info);
if (htab == NULL)
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->target_section);
struct _frvfdpic_dynamic_got_plt_info gpinfo;
if (bfd_link_relocatable (info))
- (*info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
/* If we return early, we didn't change anything. */
*again = false;
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output "
"section. Retry without "
"--enable-non-contiguous-regions.\n"),
hsh->target_section);
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output "
"section. Retry without "
"--enable-non-contiguous-regions.\n"),
hsh->target_section);
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output "
"section. Retry without "
"--enable-non-contiguous-regions.\n"),
hsh->target_section);
{
if (bfd_is_abs_section (htab->elf.splt->output_section))
{
- info->callbacks->einfo
- (_("%F%P: discarded output section: `%pA'\n"),
+ info->callbacks->fatal
+ (_("%P: discarded output section: `%pA'\n"),
htab->elf.splt);
return false;
}
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->target_section);
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->target_section);
section. The user should fix his linker script. */
if (hsh->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
hsh->target_section);
file_err:
bfd_set_error (bfd_error_system_call);
err_exit:
- info->callbacks->einfo (_("%F%P: auto overlay error: %E\n"));
- xexit (1);
+ info->callbacks->fatal (_("%P: auto overlay error: %E\n"));
}
/* Provide an estimate of total stack required. */
info->callbacks->einfo (_("%X%P: stack/lrlive analysis error: %E\n"));
if (!spu_elf_build_stubs (info))
- info->callbacks->einfo (_("%F%P: can not build overlay stubs: %E\n"));
+ info->callbacks->fatal (_("%P: can not build overlay stubs: %E\n"));
return bfd_elf_final_link (output_bfd, info);
}
*again = false;
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
/* Don't even try to relax for non-ELF outputs. */
if (!is_elf_hash_table (link_info->hash))
if (stub_entry->target_section != NULL
&& stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->target_section);
if (stub_entry->group->stub_sec != NULL
&& stub_entry->group->stub_sec->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
stub_entry->group->stub_sec);
|| (roff - 3 + 22) > input_section->size)
{
corrupt_input:
- info->callbacks->einfo
- (_("%F%P: corrupt input: %pB\n"),
+ info->callbacks->fatal
+ (_("%P: corrupt input: %pB\n"),
input_bfd);
return false;
}
/* Check PC-relative offset overflow in PLT entry. */
if ((plt_got_pcrel_offset + 0x80000000) > 0xffffffff)
/* xgettext:c-format */
- info->callbacks->einfo (_("%F%pB: PC-relative offset overflow in PLT entry for `%s'\n"),
+ info->callbacks->fatal (_("%pB: PC-relative offset overflow in PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
bfd_put_32 (output_bfd, plt_got_pcrel_offset,
will overflow first. */
if (plt0_offset > 0x80000000)
/* xgettext:c-format */
- info->callbacks->einfo (_("%F%pB: branch displacement overflow in PLT entry for `%s'\n"),
+ info->callbacks->fatal (_("%pB: branch displacement overflow in PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
bfd_put_32 (output_bfd, - plt0_offset,
(plt->contents + h->plt.offset
if ((got_after_plt && got_pcrel_offset < 0)
|| (!got_after_plt && got_pcrel_offset > 0))
/* xgettext:c-format */
- info->callbacks->einfo (_("%F%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"),
+ info->callbacks->fatal (_("%pB: PC-relative offset overflow in GOT PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
bfd_put_32 (output_bfd, got_pcrel_offset,
generate an error instead of a reloc. cf PR 32638. */
if (relgot == NULL || relgot->size == 0)
{
- info->callbacks->einfo (_("%F%pB: Unable to generate dynamic relocs because a suitable section does not exist\n"),
- output_bfd);
+ info->callbacks->fatal (_("%pB: Unable to generate dynamic relocs because a suitable section does not exist\n"),
+ output_bfd);
return false;
}
{
if (bfd_is_abs_section (htab->elf.splt->output_section))
{
- info->callbacks->einfo
- (_("%F%P: discarded output section: `%pA'\n"),
+ info->callbacks->fatal
+ (_("%P: discarded output section: `%pA'\n"),
htab->elf.splt);
return false;
}
= ((struct elf_link_first_hash_entry *)
bfd_hash_lookup (htab->first_hash, name, true, copy));
if (e == NULL)
- info->callbacks->einfo
- (_("%F%P: %pB: failed to add %s to first hash\n"), abfd, name);
+ info->callbacks->fatal
+ (_("%P: %pB: failed to add %s to first hash\n"), abfd, name);
if (e->abfd == NULL)
/* Store ABFD in abfd. */
|| !bfd_hash_table_init
(htab->first_hash, elf_link_first_hash_newfunc,
sizeof (struct elf_link_first_hash_entry)))
- info->callbacks->einfo
- (_("%F%P: first_hash failed to create: %E\n"));
+ info->callbacks->fatal
+ (_("%P: first_hash failed to create: %E\n"));
}
}
else
if (info->enable_dt_relr
&& bed->finish_relative_relocs
&& !bed->finish_relative_relocs (info))
- info->callbacks->einfo
- (_("%F%P: %pB: failed to finish relative relocations\n"), abfd);
+ info->callbacks->fatal
+ (_("%P: %pB: failed to finish relative relocations\n"), abfd);
/* Since ELF permits relocations to be against local symbols, we
must have the local symbols available when we do the relocations.
else if (strcmp (bfd_section_name (isec),
"__patchable_function_entries") == 0
&& elf_linked_to_section (isec) == NULL)
- info->callbacks->einfo (_("%F%P: %pB(%pA): error: "
+ info->callbacks->fatal (_("%P: %pB(%pA): error: "
"need linked-to section "
"for --gc-sections\n"),
isec->owner, isec);
/* This is the first section with this name. Record it. */
if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
- info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
+ info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
return sec->output_section == bfd_abs_section_ptr;
}
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without "
"--enable-non-contiguous-regions.\n"),
stub_entry->target_section);
asection *s = p->sec->output_section;
if (s != NULL && (s->flags & SEC_READONLY) != 0)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_ ("%F%P: %pB: copy relocation against non-copyable "
+ (_ ("%P: %pB: copy relocation against non-copyable "
"protected symbol `%s'\n"),
p->sec->owner, h->root.root.string);
return false;
*again = false;
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
/* Don't even try to relax for non-ELF outputs. */
if (!is_elf_hash_table (link_info->hash))
section. The user should fix his linker script. */
if (stub_entry->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign '%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign '%pA' to an output section. "
"Retry without "
"--enable-non-contiguous-regions.\n"),
stub_entry->target_section);
|| info->export_dynamic)
&& h->pointer_equality_needed)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format. */
- (_("%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer "
+ (_("%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer "
"equality in `%pB' can not be used when making an "
"executable; recompile with -fPIE and relink with -pie\n"),
h->root.root.string,
| SEC_HAS_CONTENTS
| SEC_DATA));
if (sec == NULL)
- info->callbacks->einfo (
- _("%F%P: failed to create GNU property section\n"));
+ info->callbacks->fatal (_("%P: failed to create GNU property section\n"));
unsigned align = (bfd_get_mach (ebfd) & bfd_mach_aarch64_ilp32) ? 2 : 3;
if (!bfd_set_section_alignment (sec, align))
- info->callbacks->einfo (_("%F%pA: failed to align section\n"),
- sec);
+ info->callbacks->fatal (_("%pA: failed to align section\n"), sec);
elf_section_type (sec) = SHT_NOTE;
}
bool *again)
{
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
*again = false;
sec_do_relax (section) = 1;
asection *s = p->sec->output_section;
if (s != NULL && (s->flags & SEC_READONLY) != 0)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: copy relocation against non-copyable "
+ (_("%P: %pB: copy relocation against non-copyable "
"protected symbol `%s' in %pB\n"),
p->sec->owner, h->root.root.string,
h->root.u.def.section->owner);
if (relative_reloc->data == NULL)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: failed to allocate relative reloc record\n"),
+ (_("%P: %pB: failed to allocate relative reloc record\n"),
info->output_bfd);
return false;
}
if (bitmap->u.elf64 == NULL)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"),
+ (_("%P: %pB: failed to allocate 64-bit DT_RELR bitmap\n"),
info->output_bfd);
}
if (bitmap->u.elf32 == NULL)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"),
+ (_("%P: %pB: failed to allocate 32-bit DT_RELR bitmap\n"),
info->output_bfd);
}
if (!_bfd_elf_mmap_section_contents (sec->owner,
sec,
&contents))
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: failed to allocate memory for section `%pA'\n"),
+ (_("%P: %pB: failed to allocate memory for section `%pA'\n"),
info->output_bfd, sec);
/* Cache the section contents for
*need_layout = true;
}
else
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: size of compact relative reloc section is "
+ (_("%P: %pB: size of compact relative reloc section is "
"changed: new (%lu) != old (%lu)\n"),
info->output_bfd, htab->dt_relr_bitmap.count,
dt_relr_bitmap_count);
contents = (unsigned char *) bfd_alloc (sec->owner, size);
if (contents == NULL)
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: failed to allocate compact relative reloc section\n"),
+ (_("%P: %pB: failed to allocate compact relative reloc section\n"),
info->output_bfd);
/* Cache the section contents for elf_link_input_bfd. */
else
name = bfd_elf_sym_name (input_section->owner, symtab_hdr,
sym, NULL);
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: relocation %s against absolute symbol "
+ (_("%P: %pB: relocation %s against absolute symbol "
"`%s' in section `%pA' is disallowed\n"),
input_section->owner, internal_reloc.howto->name, name,
input_section);
s = p->sec->output_section;
if (s != NULL && (s->flags & SEC_READONLY) != 0)
{
- info->callbacks->einfo
+ info->callbacks->fatal
/* xgettext:c-format */
- (_("%F%P: %pB: copy relocation against non-copyable "
+ (_("%P: %pB: copy relocation against non-copyable "
"protected symbol `%s' in %pB\n"),
p->sec->owner, h->root.root.string,
h->root.u.def.section->owner);
| SEC_HAS_CONTENTS
| SEC_DATA));
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create GNU property section\n"));
+ info->callbacks->fatal (_("%P: failed to create GNU property section\n"));
if (!bfd_set_section_alignment (sec, class_align))
{
error_alignment:
- info->callbacks->einfo (_("%F%pA: failed to align section\n"),
+ info->callbacks->fatal (_("%pA: failed to align section\n"),
sec);
}
&& !elf_vxworks_create_dynamic_sections (dynobj, info,
&htab->srelplt2))
{
- info->callbacks->einfo (_("%F%P: failed to create VxWorks dynamic sections\n"));
+ info->callbacks->fatal (_("%P: failed to create VxWorks dynamic sections\n"));
return pbfd;
}
don't need to do it in check_relocs. */
if (htab->elf.sgot == NULL
&& !_bfd_elf_create_got_section (dynobj, info))
- info->callbacks->einfo (_("%F%P: failed to create GOT sections\n"));
+ info->callbacks->fatal (_("%P: failed to create GOT sections\n"));
got_align = (bed->target_id == X86_64_ELF_DATA) ? 3 : 2;
/* Create the ifunc sections here so that check_relocs can be
simplified. */
if (!_bfd_elf_create_ifunc_sections (dynobj, info))
- info->callbacks->einfo (_("%F%P: failed to create ifunc sections\n"));
+ info->callbacks->fatal (_("%P: failed to create ifunc sections\n"));
plt_alignment = bfd_log2 (htab->plt.plt_entry_size);
".plt.got",
pltflags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create GOT PLT section\n"));
+ info->callbacks->fatal (_("%P: failed to create GOT PLT section\n"));
if (!bfd_set_section_alignment (sec, non_lazy_plt_alignment))
goto error_alignment;
".plt.sec",
pltflags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create IBT-enabled PLT section\n"));
+ info->callbacks->fatal (_("%P: failed to create IBT-enabled PLT section\n"));
if (!bfd_set_section_alignment (sec, plt_alignment))
goto error_alignment;
".eh_frame",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create PLT .eh_frame section\n"));
+ info->callbacks->fatal (_("%P: failed to create PLT .eh_frame section\n"));
if (!bfd_set_section_alignment (sec, class_align))
goto error_alignment;
".eh_frame",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create GOT PLT .eh_frame section\n"));
+ info->callbacks->fatal (_("%P: failed to create GOT PLT .eh_frame section\n"));
if (!bfd_set_section_alignment (sec, class_align))
goto error_alignment;
".eh_frame",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create the second PLT .eh_frame section\n"));
+ info->callbacks->fatal (_("%P: failed to create the second PLT .eh_frame section\n"));
if (!bfd_set_section_alignment (sec, class_align))
goto error_alignment;
".sframe",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create PLT .sframe section\n"));
+ info->callbacks->fatal (_("%P: failed to create PLT .sframe section\n"));
// FIXME check this
// if (!bfd_set_section_alignment (sec, class_align))
".sframe",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create second PLT .sframe section\n"));
+ info->callbacks->fatal (_("%P: failed to create second PLT .sframe section\n"));
htab->plt_second_sframe = sec;
}
".sframe",
flags);
if (sec == NULL)
- info->callbacks->einfo (_("%F%P: failed to create PLT GOT .sframe section\n"));
+ info->callbacks->fatal (_("%P: failed to create PLT GOT .sframe section\n"));
htab->plt_got_sframe = sec;
}
/* This is the first section with this name. Record it. */
if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
- info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
+ info->callbacks->fatal (_("%P: already_linked_table: %E\n"));
return false;
}
bool *again)
{
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
*again = false;
return true;
long reloc_count;
if (bfd_link_relocatable (link_info))
- (*link_info->callbacks->einfo)
- (_("%P%F: --relax and -r may not be used together\n"));
+ link_info->callbacks->fatal
+ (_("%P: --relax and -r may not be used together\n"));
/* We only do global relaxation once. It is not safe to do it multiple
times (see discussion of the "shrinks" array below). */
if (hstub->target_section != NULL
&& hstub->target_section->output_section == NULL
&& info->non_contiguous_regions)
- info->callbacks->einfo (_("%F%P: Could not assign `%pA' to an output section. "
+ info->callbacks->fatal (_("%P: Could not assign `%pA' to an output section. "
"Retry without --enable-non-contiguous-regions.\n"),
hstub->target_section);
(struct bfd_link_info *, struct bfd_link_hash_entry *h,
struct bfd_link_hash_entry *inh,
bfd *abfd, asection *section, bfd_vma address, flagword flags);
+ /* Fatal error. */
+ void (*fatal)
+ (const char *fmt, ...) ATTRIBUTE_NORETURN;
/* Error or warning link info message. */
void (*einfo)
(const char *fmt, ...);
reloc_dangerous,
unattached_reloc,
notice,
+ fatal,
einfo,
info_msg,
minfo,