PATCH: Add ELFOSABI_QNX

H. J. Lu hjl@lucon.org
Sun Oct 27 21:51:00 GMT 2002


This patch adds the support for ELFOSABI_QNX. David, I also fixed a
FreeBSD bug. elf32-i386-freebsd shouldn't match ELFOSABI_NONE unless
elf32-i386 is not configured. You may want to disallow that even if
elf32-i386 is not configured.

Please give it a try.


H.J.
-------------- next part --------------
bfd/
2002-10-27  H.J. Lu <hjl@gnu.org>

	* Makefile.am (INCLUDES): Add $(TDEFAULTS).
	(targets.lo): Remove $(TDEFAULTS).
	(archures.lo): Likewise.
	* 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	Sun Oct 27 20:09:13 2002
@@ -542,7 +542,9 @@ BFD_LIBS = @bfd_libs@
 BFD_MACHINES = @bfd_machines@
 TDEFAULTS = @tdefaults@
 
-INCLUDES = -D_GNU_SOURCE @HDEFINES@ @COREFLAG@ @TDEFINES@ $(CSEARCH) $(CSWITCHES) -I$(srcdir)/../intl -I../intl
+INCLUDES = -D_GNU_SOURCE @HDEFINES@ @COREFLAG@ @TDEFINES@ \
+	   $(TDEFAULTS) $(CSEARCH) $(CSWITCHES) \
+	   -I$(srcdir)/../intl -I../intl
 
 # C source files that correspond to .o's.
 SOURCE_CFILES = \
@@ -655,10 +657,10 @@ targmatch.h: config.bfd targmatch.sed
 # info from configure.
 
 targets.lo: targets.c config.status
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/targets.c
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $(srcdir)/targets.c
 
 archures.lo: archures.c config.status
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $(srcdir)/archures.c
 
 elf32-target.h : elfxx-target.h
 	rm -f elf32-target.h
--- 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"] {


More information about the Binutils mailing list