* coffcode.h (coff_set_section_contents): Fix the handling of the
.lib section to work even if the entire section contents are written at once. From Gvran Uddeborg <gvran@uddeborg.pp.se> and Robert Lipe <robertl@arnet.com>.
This commit is contained in:
parent
38aa863c90
commit
5eb83edeab
|
@ -1,3 +1,10 @@
|
||||||
|
Tue Jan 23 14:22:45 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* coffcode.h (coff_set_section_contents): Fix the handling of the
|
||||||
|
.lib section to work even if the entire section contents are
|
||||||
|
written at once. From Gvran Uddeborg <gvran@uddeborg.pp.se> and
|
||||||
|
Robert Lipe <robertl@arnet.com>.
|
||||||
|
|
||||||
Mon Jan 22 18:45:51 1996 Michael Meissner <meissner@tiktok.cygnus.com>
|
Mon Jan 22 18:45:51 1996 Michael Meissner <meissner@tiktok.cygnus.com>
|
||||||
|
|
||||||
* elflink.h (elf_finish_pointer_linker_section): Don't allocate
|
* elflink.h (elf_finish_pointer_linker_section): Don't allocate
|
||||||
|
|
|
@ -2682,12 +2682,44 @@ coff_set_section_contents (abfd, section, location, offset, count)
|
||||||
coff_compute_section_file_positions (abfd);
|
coff_compute_section_file_positions (abfd);
|
||||||
|
|
||||||
#ifdef _LIB
|
#ifdef _LIB
|
||||||
/* If this is a .lib section, bump the vma address so that it
|
|
||||||
winds up being the number of .lib sections output. This is
|
/* The physical address field of a .lib section is used to hold the
|
||||||
right for SVR3.2. Shared libraries should probably get more
|
number of shared libraries in the section. This code counts the
|
||||||
generic support. Ian Taylor <ian@cygnus.com>. */
|
number of sections being written, and increments the lma field
|
||||||
if (strcmp (section->name, _LIB) == 0)
|
with the number.
|
||||||
++section->lma;
|
|
||||||
|
I have found no documentation on the contents of this section.
|
||||||
|
Experimentation indicates that the section contains zero or more
|
||||||
|
records, each of which has the following structure:
|
||||||
|
|
||||||
|
- a (four byte) word holding the length of this record, in words,
|
||||||
|
- a word that always seems to be set to "2",
|
||||||
|
- the path to a shared library, null-terminated and then padded
|
||||||
|
to a whole word boundary.
|
||||||
|
|
||||||
|
bfd_assert calls have been added to alert if an attempt is made
|
||||||
|
to write a section which doesn't follow these assumptions. The
|
||||||
|
code has been tested on ISC 4.1 by me, and on SCO by Robert Lipe
|
||||||
|
<robertl@arnet.com> (Thanks!).
|
||||||
|
|
||||||
|
Gvran Uddeborg <gvran@uddeborg.pp.se> */
|
||||||
|
|
||||||
|
if (strcmp (section->name, _LIB) == 0)
|
||||||
|
{
|
||||||
|
bfd_byte *rec, *recend;
|
||||||
|
|
||||||
|
rec = (bfd_byte *) location;
|
||||||
|
recend = rec + count;
|
||||||
|
while (rec < recend)
|
||||||
|
{
|
||||||
|
BFD_ASSERT (bfd_get_32 (abfd, rec + 4) == 2);
|
||||||
|
++section->lma;
|
||||||
|
rec += bfd_get_32 (abfd, rec) / 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
BFD_ASSERT (rec == recend);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Don't write out bss sections - one way to do this is to
|
/* Don't write out bss sections - one way to do this is to
|
||||||
|
|
Loading…
Reference in New Issue