This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Wrong dependencies in bfd (Re: PATCH: Add ELFOSABI_QNX)
- From: "Graeme Peterson" <gp at qnx dot com>
- To: hjl at lucon dot org (H. J. Lu)
- Cc: binutils at sources dot redhat dot com
- Date: Mon, 28 Oct 2002 13:16:12 -0500 (EST)
- Subject: Re: Wrong dependencies in bfd (Re: PATCH: Add ELFOSABI_QNX)
Perhaps this explains the invalid bfd target I am seeing.
I'll apply this and try again.
GP
>
>
> --7AUc2qLy4jB3hD7Z
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: inline
>
> While working on ELFOSABI_QNX, I found 2 incorrect dependencies in bfd:
>
> # When compiling archures.c and targets.c, supply the default target
> # info from configure.
>
> targets.lo: targets.c config.status
> $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/targets.c
>
> archures.lo: archures.c config.status
> $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c
>
> The problem is $(TDEFAULTS) comes from Makefile, not config.status.
> Makefile, including TDEFAULTS, can change when config.status is
> unchanged. This updated ELFOSABI_QNX patch also fixes it.
>
>
> H.J.
>
>
> --7AUc2qLy4jB3hD7Z
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: attachment; filename="binutils-qnx.patch"
>
> bfd/
> 2002-10-27 H.J. Lu <hjl@gnu.org>
>
> * Makefile.am (targets.lo): Depend on Makefile instead of
> config.status.
> (archures.lo): Likewise.
> (elf32-i386.lo): Compile with $(TDEFAULTS). Depend on Makefile.
> * Makefile.in: Regenerated.
>
> * configure.in (havevecs): Set to -DHAVE_bfd_all_target_vectors
> for --enable-targets=all.
> * configure: Regenerated.
>
> * elf32-i386.c (elf_i386_object_p): Check ELFOSABI_NONE,
> ELFOSABI_FREEBSD and ELFOSABI_QNX.
> Build elf32-i386 only if elf32-i386 or all targets are enabled.
> (elf_i386_post_process_headers): Renamed to ...
> (elf_i386_freebsd_post_process_headers): This.
> (elf_i386_qnx_post_process_headers): New.
>
> gas/
> 2002-10-27 H.J. Lu <hjl@gnu.org>
>
> * config/tc-i386.h (ELF_TARGET_FORMAT): Defined as
> "elf32-i386-nto" for QNX.
>
> * config/te-qnx.h: New.
>
> * configure.in (i386-*-nto-qnx*): Set em to qnx.
> * configure: Regenerated.
>
> include/elf/
> 2002-10-27 H.J. Lu <hjl@gnu.org>
>
> * common.h (ELFOSABI_QNX): New.
>
> ld/
> 2002-10-27 H.J. Lu <hjl@gnu.org>
>
> * emulparams/i386nto.sh (OUTPUT_FORMAT): Set to elf32-i386-nto.
>
> ld/testsuite/
> 2002-10-27 H.J. Lu <hjl@gnu.org>
>
> * ld-scripts/script.exp: Don't match "*-*-*-qnx" for "*-*-nt*".
>
> --- binutils/bfd/Makefile.am.qnx Sat Oct 19 14:20:14 2002
> +++ binutils/bfd/Makefile.am Mon Oct 28 10:02:26 2002
> @@ -654,12 +654,21 @@ targmatch.h: config.bfd targmatch.sed
> # When compiling archures.c and targets.c, supply the default target
> # info from configure.
>
> -targets.lo: targets.c config.status
> +targets.lo: targets.c Makefile
> $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/targets.c
>
> -archures.lo: archures.c config.status
> +archures.lo: archures.c Makefile
> $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c
>
> +# When compiling
> +#
> +# elf32-i386.c
> +#
> +# supply the configured targets info from configure.
> +
> +elf32-i386.lo: elf32-i386.c Makefile
> + $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/elf32-i386.c
> +
> elf32-target.h : elfxx-target.h
> rm -f elf32-target.h
> sed -e s/NN/32/g < $(srcdir)/elfxx-target.h > elf32-target.new
> --- binutils/bfd/configure.in.qnx Sat Oct 19 14:20:15 2002
> +++ binutils/bfd/configure.in Sun Oct 27 19:51:00 2002
> @@ -814,7 +814,7 @@ if test x${all_targets} = xtrue ; then
> bfd_backends="${bfd_backends}"' $(ALL_BACKENDS)'
> bfd_machines="${bfd_machines}"' $(ALL_MACHINES)'
> selvecs=
> - havevecs=
> + havevecs=-DHAVE_bfd_all_target_vectors
> selarchs=
> else # all_targets is true
> # Only set these if they will be nonempty, for the clever echo.
> --- binutils/bfd/elf32-i386.c.qnx Sun Oct 27 20:02:39 2002
> +++ binutils/bfd/elf32-i386.c Sun Oct 27 21:36:06 2002
> @@ -628,13 +628,38 @@ elf_i386_object_p (abfd)
> {
> /* Allocate our special target data. */
> struct elf_i386_obj_tdata *new_tdata;
> + Elf_Internal_Ehdr * i_ehdrp;
> +
> bfd_size_type amt = sizeof (struct elf_i386_obj_tdata);
> new_tdata = bfd_zalloc (abfd, amt);
> if (new_tdata == NULL)
> return false;
> new_tdata->root = *abfd->tdata.elf_obj_data;
> abfd->tdata.any = new_tdata;
> - return true;
> +
> + i_ehdrp = elf_elfheader (abfd);
> +
> + if (strcmp (bfd_get_target (abfd), "elf32-i386") == 0)
> + return i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE;
> +
> + /* If bfd is not configured for normal ELF/i386 nor all BFD targets
> + are enabled, we will always match ELFOSABI_NONE. */
> +#if !defined (HAVE_bfd_elf32_i386_vec) && !defined (HAVE_bfd_all_target_vectors)
> + if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
> + return true;
> +#endif
> +
> + if (strcmp (bfd_get_target (abfd), "elf32-i386-freebsd") == 0)
> + {
> + if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_FREEBSD)
> + return true;
> + }
> + else if (strcmp (bfd_get_target (abfd), "elf32-i386-nto") == 0)
> + {
> + if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_QNX)
> + return true;
> + }
> + return false;
> }
>
> /* i386 ELF linker hash table. */
> @@ -3387,7 +3412,9 @@ elf_i386_finish_dynamic_sections (output
> #define elf_backend_relocate_section elf_i386_relocate_section
> #define elf_backend_size_dynamic_sections elf_i386_size_dynamic_sections
>
> +#if defined (HAVE_bfd_elf32_i386_vec) || defined (HAVE_bfd_all_target_vectors)
> #include "elf32-target.h"
> +#endif
>
> /* FreeBSD support. */
>
> @@ -3400,11 +3427,11 @@ elf_i386_finish_dynamic_sections (output
> "FreeBSD" label in the ELF header. So we put this label on all
> executables and (for simplicity) also all other object files. */
>
> -static void elf_i386_post_process_headers
> +static void elf_i386_freebsd_post_process_headers
> PARAMS ((bfd *, struct bfd_link_info *));
>
> static void
> -elf_i386_post_process_headers (abfd, link_info)
> +elf_i386_freebsd_post_process_headers (abfd, link_info)
> bfd *abfd;
> struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
> {
> @@ -3421,7 +3448,7 @@ elf_i386_post_process_headers (abfd, lin
> }
>
> #undef elf_backend_post_process_headers
> -#define elf_backend_post_process_headers elf_i386_post_process_headers
> +#define elf_backend_post_process_headers elf_i386_freebsd_post_process_headers
>
> #define elf32_bed elf32_i386_fbsd_bed
>
> @@ -3433,6 +3460,23 @@ elf_i386_post_process_headers (abfd, lin
> /* QNX support. */
> #include "elf32-qnx.h"
>
> +static void elf_i386_qnx_post_process_headers
> + PARAMS ((bfd *, struct bfd_link_info *));
> +
> +static void
> +elf_i386_qnx_post_process_headers (abfd, link_info)
> + bfd *abfd;
> + struct bfd_link_info *link_info ATTRIBUTE_UNUSED;
> +{
> + Elf_Internal_Ehdr *i_ehdrp;
> +
> + i_ehdrp = elf_elfheader (abfd);
> + i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_QNX;
> +}
> +
> +#undef elf_backend_post_process_headers
> +#define elf_backend_post_process_headers elf_i386_qnx_post_process_headers
> +
> #undef TARGET_LITTLE_SYM
> #define TARGET_LITTLE_SYM bfd_elf32_i386qnx_vec
> #undef TARGET_LITTLE_NAME
> --- binutils/gas/config/tc-i386.h.qnx Mon Oct 14 21:24:22 2002
> +++ binutils/gas/config/tc-i386.h Sun Oct 27 20:59:47 2002
> @@ -63,6 +63,9 @@ extern unsigned long i386_mach PARAMS ((
> #ifdef TE_FreeBSD
> #define ELF_TARGET_FORMAT "elf32-i386-freebsd"
> #endif
> +#ifdef TE_QNX
> +#define ELF_TARGET_FORMAT "elf32-i386-nto"
> +#endif
> #ifndef ELF_TARGET_FORMAT
> #define ELF_TARGET_FORMAT "elf32-i386"
> #endif
> --- binutils/gas/config/te-qnx.h.qnx Sun Oct 27 20:57:56 2002
> +++ binutils/gas/config/te-qnx.h Sun Oct 27 20:58:09 2002
> @@ -0,0 +1,4 @@
> +#define TE_QNX
> +#define LOCAL_LABELS_FB 1
> +
> +#include "obj-format.h"
> --- binutils/gas/configure.in.qnx Sat Oct 19 14:20:25 2002
> +++ binutils/gas/configure.in Sun Oct 27 20:57:10 2002
> @@ -297,7 +297,7 @@ changequote([,])dnl
> i386-*-cygwin*) fmt=coff em=pe ;;
> i386-*-interix*) fmt=coff em=interix ;;
> i386-*-mingw32*) fmt=coff em=pe ;;
> - i386-*-nto-qnx*) fmt=elf ;;
> + i386-*-nto-qnx*) fmt=elf em=qnx;;
> i386-*-*nt*) fmt=coff em=pe ;;
> i386-*-vxworks*) fmt=aout ;;
> i386-*-chaos) fmt=elf ;;
> --- binutils/include/elf/common.h.qnx Wed Jul 17 10:17:34 2002
> +++ binutils/include/elf/common.h Sun Oct 27 19:22:49 2002
> @@ -71,6 +71,7 @@ Foundation, Inc., 59 Temple Place - Suit
> #define ELFOSABI_TRU64 10 /* TRU64 UNIX */
> #define ELFOSABI_MODESTO 11 /* Novell Modesto */
> #define ELFOSABI_OPENBSD 12 /* OpenBSD */
> +#define ELFOSABI_QNX 13 /* QNX */
> #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
> #define ELFOSABI_ARM 97 /* ARM */
>
> --- binutils/ld/emulparams/i386nto.sh.qnx Tue Jun 4 20:17:22 2002
> +++ binutils/ld/emulparams/i386nto.sh Sun Oct 27 21:38:24 2002
> @@ -1,5 +1,5 @@
> SCRIPT_NAME=elf
> -OUTPUT_FORMAT="elf32-i386"
> +OUTPUT_FORMAT="elf32-i386-nto"
> TEXT_START_ADDR=0x08048000
> TEXT_START_SYMBOLS='_btext = .;'
> MAXPAGESIZE=0x1000
> --- binutils/ld/testsuite/ld-scripts/script.exp.qnx Tue Jul 24 09:49:58 2001
> +++ binutils/ld/testsuite/ld-scripts/script.exp Sun Oct 27 21:27:10 2002
> @@ -79,7 +79,9 @@ if {[istarget "*-*-pe*"] \
> || [istarget "*-*-winnt*"] \
> || [istarget "*-*-nt*"] \
> || [istarget "*-*-interix*"] } then {
> - set flags "--image-base 0"
> + if {![istarget "*-*-*-qnx"]} then {
> + set flags "--image-base 0"
> + }
> }
>
> if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
>
> --7AUc2qLy4jB3hD7Z--
>