Do not check sections without a LOAD attribute for overlap
This commit is contained in:
parent
96ac8957e8
commit
33275c22c0
|
@ -1,3 +1,9 @@
|
|||
1999-11-22 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* ldlang.c (lang_check_section_addresses): Fix test to determine
|
||||
if a section should be tested.
|
||||
(IGNORE_SECTION): New macro.
|
||||
|
||||
Wed Nov 3 23:31:19 1999 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
|
||||
|
|
85
ld/ldlang.c
85
ld/ldlang.c
|
@ -2608,6 +2608,10 @@ size_input_section (this_ptr, output_section_statement, fill, dot, relax)
|
|||
return dot;
|
||||
}
|
||||
|
||||
#define IGNORE_SECTION(bfd, s) \
|
||||
(((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) == 0) \
|
||||
|| bfd_section_size (bfd, s) == 0)
|
||||
|
||||
/* Check to see if any allocated sections overlap with other allocated
|
||||
sections. This can happen when the linker script specifically specifies
|
||||
the output section addresses of the two sections. */
|
||||
|
@ -2618,49 +2622,48 @@ lang_check_section_addresses ()
|
|||
|
||||
/* Scan all sections in the output list. */
|
||||
for (s = output_bfd->sections; s != NULL; s = s->next)
|
||||
/* Ignore sections which are not loaded or which have no contents. */
|
||||
if ((bfd_get_section_flags (output_bfd, s) & (SEC_ALLOC | SEC_LOAD))
|
||||
&& bfd_section_size (output_bfd, s) != 0)
|
||||
{
|
||||
asection * os;
|
||||
{
|
||||
asection * os;
|
||||
|
||||
/* Ignore sections which are not loaded or which have no contents. */
|
||||
if (IGNORE_SECTION (output_bfd, s))
|
||||
continue;
|
||||
|
||||
/* Once we reach section 's' stop our seach. This prevents two
|
||||
warning messages from being produced, one for 'section A overlaps
|
||||
section B' and one for 'section B overlaps section A'. */
|
||||
for (os = output_bfd->sections; os != s; os = os->next)
|
||||
{
|
||||
bfd_vma s_start;
|
||||
bfd_vma s_end;
|
||||
bfd_vma os_start;
|
||||
bfd_vma os_end;
|
||||
|
||||
/* Only consider loadable sections with real contents. */
|
||||
if (IGNORE_SECTION (output_bfd, os))
|
||||
continue;
|
||||
|
||||
/* Once we reach section 's' stop our seach. This prevents two
|
||||
warning messages from being produced, one for 'section A overlaps
|
||||
section B' and one for 'section B overlaps section A'. */
|
||||
for (os = output_bfd->sections; os != s; os = os->next)
|
||||
{
|
||||
bfd_vma s_start;
|
||||
bfd_vma s_end;
|
||||
bfd_vma os_start;
|
||||
bfd_vma os_end;
|
||||
|
||||
/* Only consider loadable sections with real contents. */
|
||||
if (((bfd_get_section_flags (output_bfd, os)
|
||||
& (SEC_ALLOC | SEC_LOAD)) == 0)
|
||||
|| bfd_section_size (output_bfd, os) == 0)
|
||||
continue;
|
||||
|
||||
/* We must check the sections' LMA addresses not their
|
||||
VMA addresses because overlay sections can have
|
||||
overlapping VMAs but they must have distinct LMAs. */
|
||||
s_start = bfd_section_lma (output_bfd, s);
|
||||
os_start = bfd_section_lma (output_bfd, os);
|
||||
s_end = s_start + bfd_section_size (output_bfd, s) - 1;
|
||||
os_end = os_start + bfd_section_size (output_bfd, os) - 1;
|
||||
|
||||
/* Look for an overlap. */
|
||||
if ((s_end < os_start) || (s_start > os_end))
|
||||
continue;
|
||||
|
||||
einfo (
|
||||
/* We must check the sections' LMA addresses not their
|
||||
VMA addresses because overlay sections can have
|
||||
overlapping VMAs but they must have distinct LMAs. */
|
||||
s_start = bfd_section_lma (output_bfd, s);
|
||||
os_start = bfd_section_lma (output_bfd, os);
|
||||
s_end = s_start + bfd_section_size (output_bfd, s) - 1;
|
||||
os_end = os_start + bfd_section_size (output_bfd, os) - 1;
|
||||
|
||||
/* Look for an overlap. */
|
||||
if ((s_end < os_start) || (s_start > os_end))
|
||||
continue;
|
||||
|
||||
einfo (
|
||||
_("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
|
||||
s->name, s_start, s_end, os->name, os_start, os_end);
|
||||
|
||||
/* Once we have found one overlap for this section,
|
||||
stop looking for others. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
s->name, s_start, s_end, os->name, os_start, os_end);
|
||||
|
||||
/* Once we have found one overlap for this section,
|
||||
stop looking for others. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* This variable indicates whether bfd_relax_section should be called
|
||||
|
|
Loading…
Reference in New Issue