Fri Oct 23 08:15:56 1992 Ian Lance Taylor (ian@cygnus.com)

* changes to support i386-sysv with shared libraries:
	* coffcode.h (sec_to_styp_flags): if TWO_DATA_SECS is defined,
	check for .data2; if _LIB is defined, check for it; map
	SEC_NEVER_LOAD to STYP_NOLOAD.
	(styp_to_sec_flags): map STYP_NOLOAD to SEC_NEVER_LOAD.
	(make_a_section_from_file): if TWO_DATA_SECS, accept .data2.
	(coff_write_object_contents): force vaddr of .lib to 0; set scnptr
	if section has contents, not just if it is loadable; if
	TWO_DATA_SECS, check for .data2
	(coff_set_section_contents): set vma of .lib section to number of
	.lib sections.
	* coff-i386.c: define TWO_DATA_SECS; use a special CALC_ADDEND;
	don't define coff_write_armap to bsd_write_armap.
	* hosts/i386v.h: don't include <utime.h>, since it is not provided
	by SVR3.2.
This commit is contained in:
Ian Lance Taylor 1992-10-23 15:28:15 +00:00
parent bccaecc63b
commit b26059aa44
3 changed files with 81 additions and 8 deletions

View File

@ -1,3 +1,30 @@
Fri Oct 23 08:15:56 1992 Ian Lance Taylor (ian@cygnus.com)
* changes to support i386-sysv with shared libraries:
* coffcode.h (sec_to_styp_flags): if TWO_DATA_SECS is defined,
check for .data2; if _LIB is defined, check for it; map
SEC_NEVER_LOAD to STYP_NOLOAD.
(styp_to_sec_flags): map STYP_NOLOAD to SEC_NEVER_LOAD.
(make_a_section_from_file): if TWO_DATA_SECS, accept .data2.
(coff_write_object_contents): force vaddr of .lib to 0; set scnptr
if section has contents, not just if it is loadable; if
TWO_DATA_SECS, check for .data2
(coff_set_section_contents): set vma of .lib section to number of
.lib sections.
* coff-i386.c: define TWO_DATA_SECS; use a special CALC_ADDEND;
don't define coff_write_armap to bsd_write_armap.
* hosts/i386v.h: don't include <utime.h>, since it is not provided
by SVR3.2.
Thu Oct 22 22:40:20 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
* solaris2.h: Get the definition of alloca from alloca.h if we
aren't using gcc.
Thu Oct 22 03:07:28 1992 John Gilmore (gnu@cygnus.com)
* configure.in (i960-*-{aout,bout}): Support these.
Wed Oct 21 03:46:34 1992 John Gilmore (gnu@cygnus.com)
* config/a29k-aout.mt (DEFAULT_TARGET): Set to one that exists.

View File

@ -1,5 +1,5 @@
/* Support for the generic parts of most COFF variants, for BFD.
Copyright (C) 1990-1991 Free Software Foundation, Inc.
Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@ -343,12 +343,20 @@ DEFUN(sec_to_styp_flags, (sec_name, sec_flags),
return((long)STYP_TEXT);
} else if (!strcmp(sec_name, _DATA)) {
return((long)STYP_DATA);
#ifdef TWO_DATA_SECS
} else if (!strcmp(sec_name, ".data2")) {
return((long)STYP_DATA);
#endif /* TWO_DATA_SECS */
} else if (!strcmp(sec_name, _BSS)) {
return((long)STYP_BSS);
#ifdef _COMMENT
} else if (!strcmp(sec_name, _COMMENT)) {
return((long)STYP_INFO);
#endif /* _COMMENT */
#ifdef _LIB
} else if (!strcmp(sec_name, _LIB)) {
return((long)STYP_LIB);
#endif /* _LIB */
}
/* Try and figure out what it should be */
@ -364,6 +372,11 @@ DEFUN(sec_to_styp_flags, (sec_name, sec_flags),
if (styp_flags == 0) styp_flags = STYP_BSS;
#ifdef STYP_NOLOAD
if (sec_flags & SEC_NEVER_LOAD)
styp_flags |= STYP_NOLOAD;
#endif
return(styp_flags);
}
/*
@ -379,22 +392,30 @@ DEFUN(styp_to_sec_flags, (styp_flags),
{
flagword sec_flags=0;
#ifdef STYP_NOLOAD
if (styp_flags & STYP_NOLOAD)
{
sec_flags |= SEC_NEVER_LOAD;
}
#endif /* STYP_NOLOAD */
if ((styp_flags & STYP_TEXT) || (styp_flags & STYP_DATA))
{
sec_flags = SEC_LOAD | SEC_ALLOC;
sec_flags |= SEC_LOAD | SEC_ALLOC;
}
else if (styp_flags & STYP_BSS)
{
sec_flags = SEC_ALLOC;
sec_flags |= SEC_ALLOC;
}
else if (styp_flags & STYP_INFO)
{
sec_flags = SEC_NEVER_LOAD;
sec_flags |= SEC_NEVER_LOAD;
}
else
{
sec_flags = SEC_ALLOC | SEC_LOAD;
sec_flags |= SEC_ALLOC | SEC_LOAD;
}
#ifdef STYP_LIT /* A29k readonly text/data section type */
if ((styp_flags & STYP_LIT) == STYP_LIT)
{
@ -937,6 +958,12 @@ DEFUN(make_a_section_from_file,(abfd, hdr, target_index),
name[sizeof (hdr->s_name)] = 0;
return_section = bfd_make_section(abfd, name);
#ifdef TWO_DATA_SECS
/* On SCO a file created by the Microsoft assembler can have two
.data sections. We use .data2 for the second one. */
if (return_section == NULL && strcmp(name, _DATA) == 0)
return_section = bfd_make_section(abfd, ".data2");
#endif /* TWO_DATA_SECS */
if (return_section == NULL)
return false;
@ -2497,7 +2524,14 @@ DEFUN(coff_write_object_contents,(abfd),
{
internal_f.f_nscns ++;
strncpy(&(section.s_name[0]), current->name, 8);
section.s_vaddr = current->vma + pad;
#ifdef _LIB
/* Always set s_vaddr of .lib to 0. This is right for SVR3.2
Ian Taylor <ian@cygnus.com>. */
if (strcmp (current->name, _LIB) == 0)
section.s_vaddr = 0;
else
#endif
section.s_vaddr = current->vma + pad;
section.s_paddr = current->vma + pad;
section.s_size = current->_raw_size - pad;
/*
@ -2505,7 +2539,7 @@ DEFUN(coff_write_object_contents,(abfd),
will be 0 too
*/
if (current->_raw_size - pad == 0 ||
(current->flags & SEC_LOAD) == 0) {
(current->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0) {
section.s_scnptr = 0;
}
else {
@ -2526,6 +2560,10 @@ DEFUN(coff_write_object_contents,(abfd),
text_sec = current;
} else if (!strcmp(current->name, _DATA)) {
data_sec = current;
#ifdef TWO_DATA_SECS
} else if (!strcmp(current->name, ".data2")) {
data_sec = current;
#endif /* TWO_DATA_SECS */
} else if (!strcmp(current->name, _BSS)) {
bss_sec = current;
}
@ -2747,6 +2785,15 @@ DEFUN(coff_set_section_contents,(abfd, section, location, offset, count),
if (abfd->output_has_begun == false) /* set by bfd.c handler */
coff_compute_section_file_positions(abfd);
#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
right for SVR3.2. Shared libraries should probably get more
generic support. Ian Taylor <ian@cygnus.com>. */
if (strcmp (section->name, _LIB) == 0)
++section->vma;
#endif
bfd_seek(abfd, (file_ptr) (section->filepos + offset), SEEK_SET);
if (count != 0) {

View File

@ -3,7 +3,6 @@
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <utime.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>