* xcofflink.c (xcoff_link_add_symbols): Create the special
sections if we see a DYNAMIC object, in case that is the only XCOFF input object we see. PR 8788.
This commit is contained in:
parent
f22d1530fc
commit
c9746fb695
|
@ -13,6 +13,10 @@ Thu Jan 11 17:06:14 1996 Michael Meissner <meissner@tiktok.cygnus.com>
|
|||
|
||||
Thu Jan 11 11:23:30 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* xcofflink.c (xcoff_link_add_symbols): Create the special
|
||||
sections if we see a DYNAMIC object, in case that is the only
|
||||
XCOFF input object we see.
|
||||
|
||||
* elf32-mips.c: Extensive changes for a start at dynamic linking
|
||||
support, from Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
|
||||
|
||||
|
|
|
@ -953,18 +953,14 @@ xcoff_link_add_symbols (abfd, info)
|
|||
|
||||
if ((abfd->flags & DYNAMIC) != 0
|
||||
&& ! info->static_link)
|
||||
return xcoff_link_add_dynamic_symbols (abfd, info);
|
||||
|
||||
n_tmask = coff_data (abfd)->local_n_tmask;
|
||||
n_btshft = coff_data (abfd)->local_n_btshft;
|
||||
|
||||
/* Define macros so that ISFCN, et. al., macros work correctly. */
|
||||
#define N_TMASK n_tmask
|
||||
#define N_BTSHFT n_btshft
|
||||
{
|
||||
if (! xcoff_link_add_dynamic_symbols (abfd, info))
|
||||
return false;
|
||||
}
|
||||
|
||||
/* We need to build a .loader section, so we do it here. This won't
|
||||
work if we're producing an XCOFF output file with no non dynamic
|
||||
XCOFF input files. FIXME. */
|
||||
work if we're producing an XCOFF output file with no XCOFF input
|
||||
files. FIXME. */
|
||||
if (xcoff_hash_table (info)->loader_section == NULL)
|
||||
{
|
||||
asection *lsec;
|
||||
|
@ -1023,6 +1019,17 @@ xcoff_link_add_symbols (abfd, info)
|
|||
dsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
|
||||
}
|
||||
|
||||
if ((abfd->flags & DYNAMIC) != 0
|
||||
&& ! info->static_link)
|
||||
return true;
|
||||
|
||||
n_tmask = coff_data (abfd)->local_n_tmask;
|
||||
n_btshft = coff_data (abfd)->local_n_btshft;
|
||||
|
||||
/* Define macros so that ISFCN, et. al., macros work correctly. */
|
||||
#define N_TMASK n_tmask
|
||||
#define N_BTSHFT n_btshft
|
||||
|
||||
if (info->keep_memory)
|
||||
default_copy = false;
|
||||
else
|
||||
|
@ -2535,6 +2542,8 @@ struct xcoff_loader_info
|
|||
bfd *output_bfd;
|
||||
/* Link information structure. */
|
||||
struct bfd_link_info *info;
|
||||
/* Whether all defined symbols should be exported. */
|
||||
boolean export_defineds;
|
||||
/* Number of ldsym structures. */
|
||||
size_t ldsym_count;
|
||||
/* Size of string table. */
|
||||
|
@ -2550,12 +2559,23 @@ struct xcoff_loader_info
|
|||
.loader section before the linker lays out the output file.
|
||||
LIBPATH is the library path to search for shared objects; this is
|
||||
normally built from the -L arguments passed to the linker. ENTRY
|
||||
is the name of the entry point symbol. */
|
||||
is the name of the entry point symbol (the -e linker option).
|
||||
FILE_ALIGN is the alignment to use for sections within the file
|
||||
(the -H linker option). MAXSTACK is the maximum stack size (the
|
||||
-bmaxstack linker option). MAXDATA is the maximum data size (the
|
||||
-bmaxdata linker option). GC is whether to do garbage collection
|
||||
(the -bgc linker option). MODTYPE is the module type (the
|
||||
-bmodtype linker option). TEXTRO is whether the text section must
|
||||
be read only (the -btextro linker option). EXPORT_DEFINEDS is
|
||||
whether all defined symbols should be exported (the -unix linker
|
||||
option). SPECIAL_SECTIONS is set by this routine to csects with
|
||||
magic names like _end. */
|
||||
|
||||
boolean
|
||||
bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
||||
file_align, maxstack, maxdata, gc,
|
||||
modtype, textro, special_sections)
|
||||
modtype, textro, export_defineds,
|
||||
special_sections)
|
||||
bfd *output_bfd;
|
||||
struct bfd_link_info *info;
|
||||
const char *libpath;
|
||||
|
@ -2566,6 +2586,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
|||
boolean gc;
|
||||
int modtype;
|
||||
boolean textro;
|
||||
boolean export_defineds;
|
||||
asection **special_sections;
|
||||
{
|
||||
struct xcoff_link_hash_entry *hentry;
|
||||
|
@ -2592,6 +2613,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
|||
ldinfo.failed = false;
|
||||
ldinfo.output_bfd = output_bfd;
|
||||
ldinfo.info = info;
|
||||
ldinfo.export_defineds = export_defineds;
|
||||
ldinfo.ldsym_count = 0;
|
||||
ldinfo.string_size = 0;
|
||||
ldinfo.strings = NULL;
|
||||
|
@ -2902,6 +2924,11 @@ xcoff_build_ldsyms (h, p)
|
|||
struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p;
|
||||
size_t len;
|
||||
|
||||
/* If all defined symbols should be exported, mark them now. */
|
||||
if (ldinfo->export_defineds
|
||||
&& (h->flags & XCOFF_DEF_REGULAR) != 0)
|
||||
h->flags |= XCOFF_EXPORT;
|
||||
|
||||
/* We don't want to garbage collect symbols which are not defined in
|
||||
XCOFF files. This is a convenient place to mark them. */
|
||||
if (xcoff_hash_table (ldinfo->info)->gc
|
||||
|
|
Loading…
Reference in New Issue