From e9b63852ca0c0ddd181a8d76de06329a7380deda Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 19 Oct 1992 16:53:41 +0000 Subject: [PATCH] Mon Oct 19 09:45:38 1992 Ian Lance Taylor (ian@cygnus.com) * Support for i386-sysv. configure.in: check for i386-*-sysv* and i386-*-sco*. i386coff.sc-sh: rewrote to support SVR3 by default. ldctor.c (find_constructors): preserve stat_ptr. ldlang.c (wild_doit): initialize vma and size of new output section to corresponding input section. This is required for shared library support. (lang_size_sections): don't modify vma and size of sections which are never loaded (for shared libraries). ldwrite.c (copy_and_relocate): copy the contents of any section which has contents, not just sections which are loaded (for shared libraries). --- ld/ChangeLog | 15 +++++++++++++++ ld/i386coff.sc-sh | 46 ++++++++++++++++++---------------------------- ld/ldlang.c | 14 ++++++++++++++ 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 5a9b0b5b7cc..e652bee0122 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,18 @@ +Mon Oct 19 09:45:38 1992 Ian Lance Taylor (ian@cygnus.com) + + * Support for i386-sysv. + configure.in: check for i386-*-sysv* and i386-*-sco*. + i386coff.sc-sh: rewrote to support SVR3 by default. + ldctor.c (find_constructors): preserve stat_ptr. + ldlang.c (wild_doit): initialize vma and size of new output + section to corresponding input section. This is required for + shared library support. + (lang_size_sections): don't modify vma and size of sections which + are never loaded (for shared libraries). + ldwrite.c (copy_and_relocate): copy the contents of any section + which has contents, not just sections which are loaded (for shared + libraries). + Thu Oct 15 15:20:26 1992 Steve Chamberlain (sac@thepub.cygnus.com) * ldlang.c (size_input_section): count the sizes of all sections diff --git a/ld/i386coff.sc-sh b/ld/i386coff.sc-sh index 485f3bb8ed1..d18fd24c055 100644 --- a/ld/i386coff.sc-sh +++ b/ld/i386coff.sc-sh @@ -1,39 +1,29 @@ -# This is totally made up, from the a29k stuff. If you know better, -# tell us about it. +# Linker script for 386 COFF. This works on SVR3.2 and SCO Unix 3.2.2. +# .data2 handles SCO, which uses two data sections. +# Ian Taylor . cat < text} - .shbss SIZEOF(.text) + ADDR(.text) : { - *(.shbss) - } - .talias : { } ${RELOCATING+ > talias} - .data : { - *(.data) - ${RELOCATING+ _edata = .}; - } ${RELOCATING+ > data} - .bss SIZEOF(.data) + ADDR(.data) : + *(.fini) + ${RELOCATING+ etext = .}; + } + .data ${RELOCATING+ 0x400000 + (. & 0xffc00fff)} : { + *(.data .data2) + ${RELOCATING+ edata = .}; + } + .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} : { - *(.bss) - *(COMMON) - ${RELOCATING+ _end = ALIGN(0x8)}; + *(.bss) + *(COMMON) + ${RELOCATING+ end = .}; } - .mstack : { } ${RELOCATING+ > mstack} - .rstack : { } ${RELOCATING+ > rstack} } EOF diff --git a/ld/ldlang.c b/ld/ldlang.c index ed152ab24fb..a968dd0a9dc 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -591,6 +591,15 @@ DEFUN (wild_doit, (ptr, section, output, file), if (output->bfd_section == (asection *) NULL) { init_os (output); + /* Initialize the vma and size to the existing section. This will + be overriden in lang_size_sections unless SEC_NEVER_LOAD gets + set. */ + if (section != (asection *) NULL) + { + bfd_set_section_vma (0, output->bfd_section, + bfd_section_vma (0, section)); + output->bfd_section->_raw_size = section->_raw_size; + } } if (section != (asection *) NULL @@ -1486,6 +1495,11 @@ DEFUN (lang_size_sections, (s, output_section_statement, prev, fill, bfd_vma after; lang_output_section_statement_type *os = &s->output_section_statement; + /* If this section is never loaded, don't change the size and + address. */ + if (os->bfd_section->flags & SEC_NEVER_LOAD) + break; + if (os->bfd_section == &bfd_abs_section) { /* No matter what happens, an abs section starts at zero */ -- 2.30.2