* 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>
|
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
|
* elf32-mips.c: Extensive changes for a start at dynamic linking
|
||||||
support, from Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
|
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
|
if ((abfd->flags & DYNAMIC) != 0
|
||||||
&& ! info->static_link)
|
&& ! info->static_link)
|
||||||
return xcoff_link_add_dynamic_symbols (abfd, info);
|
{
|
||||||
|
if (! xcoff_link_add_dynamic_symbols (abfd, info))
|
||||||
n_tmask = coff_data (abfd)->local_n_tmask;
|
return false;
|
||||||
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
|
|
||||||
|
|
||||||
/* We need to build a .loader section, so we do it here. This won't
|
/* 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
|
work if we're producing an XCOFF output file with no XCOFF input
|
||||||
XCOFF input files. FIXME. */
|
files. FIXME. */
|
||||||
if (xcoff_hash_table (info)->loader_section == NULL)
|
if (xcoff_hash_table (info)->loader_section == NULL)
|
||||||
{
|
{
|
||||||
asection *lsec;
|
asection *lsec;
|
||||||
|
@ -1023,6 +1019,17 @@ xcoff_link_add_symbols (abfd, info)
|
||||||
dsec->flags |= SEC_HAS_CONTENTS | SEC_IN_MEMORY;
|
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)
|
if (info->keep_memory)
|
||||||
default_copy = false;
|
default_copy = false;
|
||||||
else
|
else
|
||||||
|
@ -2535,6 +2542,8 @@ struct xcoff_loader_info
|
||||||
bfd *output_bfd;
|
bfd *output_bfd;
|
||||||
/* Link information structure. */
|
/* Link information structure. */
|
||||||
struct bfd_link_info *info;
|
struct bfd_link_info *info;
|
||||||
|
/* Whether all defined symbols should be exported. */
|
||||||
|
boolean export_defineds;
|
||||||
/* Number of ldsym structures. */
|
/* Number of ldsym structures. */
|
||||||
size_t ldsym_count;
|
size_t ldsym_count;
|
||||||
/* Size of string table. */
|
/* Size of string table. */
|
||||||
|
@ -2550,12 +2559,23 @@ struct xcoff_loader_info
|
||||||
.loader section before the linker lays out the output file.
|
.loader section before the linker lays out the output file.
|
||||||
LIBPATH is the library path to search for shared objects; this is
|
LIBPATH is the library path to search for shared objects; this is
|
||||||
normally built from the -L arguments passed to the linker. ENTRY
|
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
|
boolean
|
||||||
bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
||||||
file_align, maxstack, maxdata, gc,
|
file_align, maxstack, maxdata, gc,
|
||||||
modtype, textro, special_sections)
|
modtype, textro, export_defineds,
|
||||||
|
special_sections)
|
||||||
bfd *output_bfd;
|
bfd *output_bfd;
|
||||||
struct bfd_link_info *info;
|
struct bfd_link_info *info;
|
||||||
const char *libpath;
|
const char *libpath;
|
||||||
|
@ -2566,6 +2586,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
||||||
boolean gc;
|
boolean gc;
|
||||||
int modtype;
|
int modtype;
|
||||||
boolean textro;
|
boolean textro;
|
||||||
|
boolean export_defineds;
|
||||||
asection **special_sections;
|
asection **special_sections;
|
||||||
{
|
{
|
||||||
struct xcoff_link_hash_entry *hentry;
|
struct xcoff_link_hash_entry *hentry;
|
||||||
|
@ -2592,6 +2613,7 @@ bfd_xcoff_size_dynamic_sections (output_bfd, info, libpath, entry,
|
||||||
ldinfo.failed = false;
|
ldinfo.failed = false;
|
||||||
ldinfo.output_bfd = output_bfd;
|
ldinfo.output_bfd = output_bfd;
|
||||||
ldinfo.info = info;
|
ldinfo.info = info;
|
||||||
|
ldinfo.export_defineds = export_defineds;
|
||||||
ldinfo.ldsym_count = 0;
|
ldinfo.ldsym_count = 0;
|
||||||
ldinfo.string_size = 0;
|
ldinfo.string_size = 0;
|
||||||
ldinfo.strings = NULL;
|
ldinfo.strings = NULL;
|
||||||
|
@ -2902,6 +2924,11 @@ xcoff_build_ldsyms (h, p)
|
||||||
struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p;
|
struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p;
|
||||||
size_t len;
|
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
|
/* We don't want to garbage collect symbols which are not defined in
|
||||||
XCOFF files. This is a convenient place to mark them. */
|
XCOFF files. This is a convenient place to mark them. */
|
||||||
if (xcoff_hash_table (ldinfo->info)->gc
|
if (xcoff_hash_table (ldinfo->info)->gc
|
||||||
|
|
Loading…
Reference in New Issue