mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-24 01:51:54 +08:00
* Patch for PR 18607.
1999-01-26 Frank Ch. Eigler <fche@cygnus.com> * binary.c (binary_set_section_contents): Emit warning for huge file offsets due to widely-dispersed section LMAs.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
1999-01-26 Frank Ch. Eigler <fche@cygnus.com>
|
||||||
|
|
||||||
|
* binary.c (binary_set_section_contents): Emit warning for
|
||||||
|
huge file offsets due to widely-dispersed section LMAs.
|
||||||
|
|
||||||
Mon Jan 18 03:35:35 1999 Ian Lance Taylor <ian@cygnus.com>
|
Mon Jan 18 03:35:35 1999 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
* elf.c (assign_file_positions_for_segments): If not D_PAGED,
|
* elf.c (assign_file_positions_for_segments): If not D_PAGED,
|
||||||
|
54
bfd/binary.c
54
bfd/binary.c
@ -1,5 +1,5 @@
|
|||||||
/* BFD back-end for binary objects.
|
/* BFD back-end for binary objects.
|
||||||
Copyright 1994 Free Software Foundation, Inc.
|
Copyright 1994, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||||
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
|
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
@ -155,7 +155,7 @@ mangle_name (abfd, suffix)
|
|||||||
|
|
||||||
/* Change any non-alphanumeric characters to underscores. */
|
/* Change any non-alphanumeric characters to underscores. */
|
||||||
for (p = buf; *p; p++)
|
for (p = buf; *p; p++)
|
||||||
if (! isalnum (*p))
|
if (! isalnum ((unsigned char) *p))
|
||||||
*p = '_';
|
*p = '_';
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
@ -229,7 +229,7 @@ binary_get_symbol_info (ignore_abfd, symbol, ret)
|
|||||||
bfd_symbol_info (symbol, ret);
|
bfd_symbol_info (symbol, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define binary_bfd_is_local_label bfd_generic_is_local_label
|
#define binary_bfd_is_local_label_name bfd_generic_is_local_label_name
|
||||||
#define binary_get_lineno _bfd_nosymbols_get_lineno
|
#define binary_get_lineno _bfd_nosymbols_get_lineno
|
||||||
#define binary_find_nearest_line _bfd_nosymbols_find_nearest_line
|
#define binary_find_nearest_line _bfd_nosymbols_find_nearest_line
|
||||||
#define binary_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
|
#define binary_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
|
||||||
@ -255,21 +255,50 @@ binary_set_section_contents (abfd, sec, data, offset, size)
|
|||||||
file_ptr offset;
|
file_ptr offset;
|
||||||
bfd_size_type size;
|
bfd_size_type size;
|
||||||
{
|
{
|
||||||
|
/* We don't want to output anything for a section that is neither
|
||||||
|
loaded nor allocated. The contents of such a section are not
|
||||||
|
meaningful in the binary format. */
|
||||||
|
if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
|
||||||
|
return true;
|
||||||
|
if ((sec->flags & SEC_NEVER_LOAD) != 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (! abfd->output_has_begun)
|
if (! abfd->output_has_begun)
|
||||||
{
|
{
|
||||||
|
boolean found_low;
|
||||||
bfd_vma low;
|
bfd_vma low;
|
||||||
asection *s;
|
asection *s;
|
||||||
|
|
||||||
/* The lowest section VMA sets the virtual address of the start
|
/* The lowest section LMA sets the virtual address of the start
|
||||||
of the file. We use the set the file position of all the
|
of the file. We use this to set the file position of all the
|
||||||
sections. */
|
sections. */
|
||||||
low = abfd->sections->vma;
|
found_low = false;
|
||||||
for (s = abfd->sections->next; s != NULL; s = s->next)
|
low = 0;
|
||||||
if (s->vma < low)
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
low = s->vma;
|
if (((s->flags & (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC))
|
||||||
|
== (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC))
|
||||||
|
&& (! found_low || s->lma < low))
|
||||||
|
{
|
||||||
|
low = s->lma;
|
||||||
|
found_low = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (s = abfd->sections; s != NULL; s = s->next)
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
s->filepos = s->vma - low;
|
{
|
||||||
|
s->filepos = s->lma - low;
|
||||||
|
|
||||||
|
/* If attempting to generate a binary file from a bfd with
|
||||||
|
LMA's all over the place, huge (sparse?) binary files may
|
||||||
|
result. This condition attempts to detect this situation
|
||||||
|
and print a warning. Better heuristics would be nice to
|
||||||
|
have. */
|
||||||
|
|
||||||
|
if (s->filepos < 0)
|
||||||
|
(*_bfd_error_handler)
|
||||||
|
(_("Warning: Writing section `%s' to huge offset %lu."),
|
||||||
|
bfd_get_section_name (abfd, s),
|
||||||
|
(unsigned long) s->filepos);
|
||||||
|
}
|
||||||
|
|
||||||
abfd->output_has_begun = true;
|
abfd->output_has_begun = true;
|
||||||
}
|
}
|
||||||
@ -290,6 +319,7 @@ binary_sizeof_headers (abfd, exec)
|
|||||||
#define binary_bfd_get_relocated_section_contents \
|
#define binary_bfd_get_relocated_section_contents \
|
||||||
bfd_generic_get_relocated_section_contents
|
bfd_generic_get_relocated_section_contents
|
||||||
#define binary_bfd_relax_section bfd_generic_relax_section
|
#define binary_bfd_relax_section bfd_generic_relax_section
|
||||||
|
#define binary_bfd_gc_sections bfd_generic_gc_sections
|
||||||
#define binary_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
|
#define binary_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
|
||||||
#define binary_bfd_link_add_symbols _bfd_generic_link_add_symbols
|
#define binary_bfd_link_add_symbols _bfd_generic_link_add_symbols
|
||||||
#define binary_bfd_final_link _bfd_generic_final_link
|
#define binary_bfd_final_link _bfd_generic_final_link
|
||||||
@ -301,8 +331,8 @@ const bfd_target binary_vec =
|
|||||||
{
|
{
|
||||||
"binary", /* name */
|
"binary", /* name */
|
||||||
bfd_target_unknown_flavour, /* flavour */
|
bfd_target_unknown_flavour, /* flavour */
|
||||||
true, /* byteorder_big_p */
|
BFD_ENDIAN_UNKNOWN, /* byteorder */
|
||||||
true, /* header_byteorder_big_p */
|
BFD_ENDIAN_UNKNOWN, /* header_byteorder */
|
||||||
EXEC_P, /* object_flags */
|
EXEC_P, /* object_flags */
|
||||||
(SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA
|
(SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA
|
||||||
| SEC_ROM | SEC_HAS_CONTENTS), /* section_flags */
|
| SEC_ROM | SEC_HAS_CONTENTS), /* section_flags */
|
||||||
|
Reference in New Issue
Block a user