diff options
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 3 | ||||
-rw-r--r-- | ld/configure.host | 103 | ||||
-rw-r--r-- | ld/ldlang.c | 19 |
3 files changed, 122 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 16ceb65..2177642 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,8 @@ Thu Sep 7 10:48:26 1995 Ian Lance Taylor <ian@cygnus.com> + * configure.host (sparc-*-sunos64*): Remove. + * ldlang.c (lang_map): Check BFD64, not HOST_64_BIT. + * ldexp.c (exp_fold_tree): Don't warn about moving the location counter backward in the absolute section. diff --git a/ld/configure.host b/ld/configure.host new file mode 100644 index 0000000..e16209d --- /dev/null +++ b/ld/configure.host @@ -0,0 +1,103 @@ +# This is the linker host specific file. This is invoked by the +# autoconf generated configure script. Putting it in a separate shell +# file lets us skip running autoconf when modifying host specific +# information. + +# This file sets the following shell variables: +# CC compiler to use (only if needed and not already set) +# HDEFINES host specific compiler flags +# HOSTING_CRT0 crt0.o file used for bootstrapping +# HOSTING_LIBS libraries used for bootstrapping +# NATIVE_LIB_DIRS library directories to search on this host + +HDEFINES= +HOSTING_CRT0=/lib/crt0.o +HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc' +NATIVE_LIB_DIRS= + +case "${host}" in + +alpha-*-*) + HOSTING_CRT0=/usr/ccs/lib/crt0.o + NATIVE_LIB_DIRS=/usr/ccs/lib + ;; + +i[345]86-*-bsd* | i[345]86-*-freebsd* | i[345]86-*-netbsd*) + # The new BSD `make' has a bug: it doesn't pass empty arguments in + # shell commands. So we need to make this value non-empty in order + # for the genscripts.sh call to work. There's nothing magic about + # the value `/lib'; it's just a dummy. + NATIVE_LIB_DIRS = /lib + ;; + +i[345]86-*-go32*) + test -z "${CC}" && CC="i386-go32-gcc -O2 -fno-omit-frame-pointer -Wl,-S" + ;; + +i[345]86-*-sysv4*) + HOSTING_CRT0='/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtbegin.o/'; fi`' + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtend.o/'; fi` /usr/ccs/lib/crtn.o' + NATIVE_LIB_DIRS=/usr/ccs/lib + ;; + +i[345]86-*-sysv*) + HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; fi`' + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; fi` /lib/crtn.o' + ;; + +i[345]86-*-solaris*) + HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crt1.o/'; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crti.o/'; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtbegin.o/'; fi`' + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtend.o/'; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtn.o/'; fi`' + NATIVE_LIB_DIRS=/usr/ccs/lib + ;; + +i[345]86-*-sco* | i[345]86-*-isc*) + HOSTING_CRT0='/lib/crt1.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtbegin.o/'; fi`' + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtend.o/'; fi` /lib/crtn.o' + ;; + +i[345]86-*-linux*) + HOSTING_CRT0=/usr/lib/crt0.o + ;; + +i[345]86-*-lynxos*) + HOSTING_CRT0=/lib/init1.o + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc -lm /lib/initn.o' + ;; + +mips-dec-bsd*) + HOSTING_CRT0=/usr/lib/crt0.o + ;; + +mips-sgi-irix4*) + HOSTING_CRT0=/usr/lib/crt1.o + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc /usr/lib/crtn.o' + ;; + +m68*-*-lynxos*) + HOSTING_CRT0=/lib/init1.o + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc -lm /lib/initn.o' + ;; + +m68*-sun-*) + HOSTING_CRT0='/usr/lib/crt0.o /usr/lib/Fcrt1.o -L/usr/lib/fsoft.o' + ;; + +m88*-*-dgux*) + HDEFINES = -D__using_DGUX + HOSTING_CRT0=/lib/crt0.o -X + HOSTING_LIBS=/usr/sde/m88kbcs/lib/libc.a + ;; + +romp-*-*) + HDEFINES=-DNO_VARARGS + CC=${CC-gcc} + ;; + +sparc-*-solaris2*) + HOSTING_CRT0='`if [ -f ../gcc/crt1.o ]; then echo ../gcc/crt1.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crt1.o/'; fi` `if [ -f ../gcc/crti.o ]; then echo ../gcc/crti.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crti.o/'; fi` /usr/ccs/lib/values-Xa.o `if [ -f ../gcc/crtbegin.o ]; then echo ../gcc/crtbegin.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtbegin.o/'; fi`' + HOSTING_LIBS='`if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else gcc -print-libgcc-file-name; fi` -lc `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtend.o/'; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else gcc -print-libgcc-file-name | sed -e 's/libgcc.a/crtn.o/'; fi`' + NATIVE_LIB_DIRS=/usr/ccs/lib + ;; + +esac diff --git a/ld/ldlang.c b/ld/ldlang.c index aaf4e84..212c9b6 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -440,14 +440,23 @@ lang_memory_region_lookup (name) return p; } } + +#if 0 + /* This code used to always use the first region in the list as the + default region. I changed it to instead use a region + encompassing all of memory as the default region. This permits + NOLOAD sections to work reasonably without requiring a region. + People should specify what region they mean, if they really want + a region. */ if (strcmp (name, "*default*") == 0) { - /* This is the default region, dig out first one on the list */ if (lang_memory_region_list != (lang_memory_region_type *) NULL) { return lang_memory_region_list; } } +#endif + { lang_memory_region_type *new = (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type)); @@ -549,7 +558,7 @@ lang_map () lang_memory_region_type *m; fprintf (config.map_file, "**MEMORY CONFIGURATION**\n\n"); -#ifdef HOST_64_BIT +#ifdef BFD64 fprintf (config.map_file, "name\t\torigin\t\tlength\t\tattributes\n"); #else fprintf (config.map_file, @@ -604,7 +613,6 @@ init_os (s) output_bfd->xvec->name, s->name); } s->bfd_section->output_section = s->bfd_section; -/* s->bfd_section->flags = s->flags;*/ /* We initialize an output sections output offset to minus its own */ /* vma to allow us to output a section through itself */ @@ -1874,7 +1882,12 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax) } dot += size; output_section_statement->bfd_section->_raw_size += size; + /* The output section gets contents, and then we inspect for + any flags set in the input script which override any ALLOC */ output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS; + if (!(output_section_statement->flags & SEC_NEVER_LOAD)) { + output_section_statement->bfd_section->flags |= SEC_ALLOC | SEC_LOAD; + } } break; |