Add support for IA-64 specific elf header flags.
authorJim Wilson <wilson@tuliptree.org>
Mon, 14 Aug 2000 20:13:39 +0000 (20:13 +0000)
committerJim Wilson <wilson@tuliptree.org>
Mon, 14 Aug 2000 20:13:39 +0000 (20:13 +0000)
bfd/
2000-08-14  Jim Wilson  <wilson@cygnus.com>
* elf64-ia64.c (elf64_ia64_merge_private_bfd_data): Handle
EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, and EF_IA_64_NOFUNCDESC_CONS_GP.
(elf64_ia64_print_private_bfd_data): Likewise.  Also handle
EF_IA_64_ABSOLUTE.
gas/
2000-08-14  Jim Wilson  <wilson@cygnus.com>
* config/tc-ia64.c (md_longopts): Add -mconstant-gp and -mauto-pic.
(md_parse_option):  Add OPTION_MCONSTANT_GP and OPTION_MAUTO_PIC.
(md_begin): Change assignment to md.flag to OR in the new bit.
include/elf/
2000-08-14  Jim Wilson  <wilson@cygnus.com>
* elf/ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP,
EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define.

bfd/ChangeLog
bfd/elf64-ia64.c
gas/ChangeLog
gas/config/tc-ia64.c
include/elf/ChangeLog
include/elf/ia64.h

index 5f3534cc2ed9d1222ace17a5ddeaf8644b09e0f7..f58853d55fda31ffa242a40137851a522809d0b4 100644 (file)
@@ -1,3 +1,10 @@
+2000-08-14  Jim Wilson  <wilson@cygnus.com>
+
+       * elf64-ia64.c (elf64_ia64_merge_private_bfd_data): Handle
+       EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, and EF_IA_64_NOFUNCDESC_CONS_GP.
+       (elf64_ia64_print_private_bfd_data): Likewise.  Also handle
+       EF_IA_64_ABSOLUTE.
+
 2000-08-11  Alexandre Oliva  <aoliva@redhat.com>
 
        * elf32-sh.c (sh_elf_set_mach_from_flags): Make it static.
index 11704e58b8d786c8c2804090855ef32788a44935..f1ea331b6c068c6ba29285e7b945f4e98e591a1c 100644 (file)
@@ -3974,6 +3974,10 @@ elf64_ia64_merge_private_bfd_data (ibfd, obfd)
   if (in_flags == out_flags)
     return true;
 
+  /* Output has EF_IA_64_REDUCEDFP set only if all inputs have it set.  */
+  if (!(in_flags & EF_IA_64_REDUCEDFP) && (out_flags & EF_IA_64_REDUCEDFP))
+    elf_elfheader (obfd)->e_flags &= ~EF_IA_64_REDUCEDFP;
+
   if ((in_flags & EF_IA_64_TRAPNIL) != (out_flags & EF_IA_64_TRAPNIL))
     {
       (*_bfd_error_handler)
@@ -4001,6 +4005,25 @@ elf64_ia64_merge_private_bfd_data (ibfd, obfd)
       bfd_set_error (bfd_error_bad_value);
       ok = false;
     }
+  if ((in_flags & EF_IA_64_CONS_GP) != (out_flags & EF_IA_64_CONS_GP))
+    {
+      (*_bfd_error_handler)
+       (_("%s: linking constant-gp files with non-constant-gp files"),
+        bfd_get_filename (ibfd));
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = false;
+    }
+  if ((in_flags & EF_IA_64_NOFUNCDESC_CONS_GP)
+      != (out_flags & EF_IA_64_NOFUNCDESC_CONS_GP))
+    {
+      (*_bfd_error_handler)
+       (_("%s: linking auto-pic files with non-auto-pic files"),
+        bfd_get_filename (ibfd));
+
+      bfd_set_error (bfd_error_bad_value);
+      ok = false;
+    }
 
   return ok;
 }
@@ -4015,11 +4038,16 @@ elf64_ia64_print_private_bfd_data (abfd, ptr)
 
   BFD_ASSERT (abfd != NULL && ptr != NULL);
 
-  fprintf (file, "private flags = %s%s%s%s\n",
+  fprintf (file, "private flags = %s%s%s%s%s%s%s%s\n",
           (flags & EF_IA_64_TRAPNIL) ? "TRAPNIL, " : "",
           (flags & EF_IA_64_EXT) ? "EXT, " : "",
           (flags & EF_IA_64_BE) ? "BE, " : "LE, ",
+          (flags & EF_IA_64_REDUCEDFP) ? "REDUCEDFP, " : "",
+          (flags & EF_IA_64_CONS_GP) ? "CONS_GP, " : "",
+          (flags & EF_IA_64_NOFUNCDESC_CONS_GP) ? "NOFUNCDESC_CONS_GP, " : "",
+          (flags & EF_IA_64_ABSOLUTE) ? "ABSOLUTE, " : "",
           (flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
+  
   _bfd_elf_print_private_bfd_data (abfd, ptr);
   return true;
 }
index e3871b78dd2a644b8eddff719062adeab6a10a2e..1deb66c8e1a206a8d5e380f6ccb786d8391c98b6 100644 (file)
@@ -1,3 +1,9 @@
+2000-08-14  Jim Wilson  <wilson@cygnus.com>
+
+       * config/tc-ia64.c (md_longopts): Add -mconstant-gp and -mauto-pic.
+       (md_parse_option):  Add OPTION_MCONSTANT_GP and OPTION_MAUTO_PIC.
+       (md_begin): Change assignment to md.flag to OR in the new bit.
+
 2000-08-14  Mark Elbrecht  <snowball3@bigfoot.com>
 
        * config/obj-coff.c (obj_coff_endef) [BFD_ASSEMBLER]: Set the debug
index d941fdb6a286c4855c91f435026be58465d1e907..297b0dadc79166e1729dadf95675a214a50188eb 100644 (file)
@@ -160,7 +160,10 @@ const char *md_shortopts = "M:N:x::";
 
 struct option md_longopts[] =
   {
-    { NULL, no_argument, NULL, 0}
+#define OPTION_MCONSTANT_GP (OPTION_MD_BASE + 1)
+    {"mconstant-gp", no_argument, NULL, OPTION_MCONSTANT_GP},
+#define OPTION_MAUTO_PIC (OPTION_MD_BASE + 2)
+    {"mauto-pic", no_argument, NULL, OPTION_MAUTO_PIC}
   };
 
 size_t md_longopts_size = sizeof (md_longopts);
@@ -5534,9 +5537,9 @@ md_parse_option (c, arg)
      int c;
      char *arg;
 {
-  /* Switches from the Intel assembler.  */
   switch (c)
     {
+    /* Switches from the Intel assembler.  */
     case 'M':
       if (strcmp (arg, "ilp64") == 0
          || strcmp (arg, "lp64") == 0
@@ -5629,6 +5632,15 @@ md_parse_option (c, arg)
       /* nops          Print nops statistics.  */
       break;
 
+    /* GNU specific switches for gcc.  */
+    case OPTION_MCONSTANT_GP:
+      md.flags |= EF_IA_64_CONS_GP;
+      break;
+
+    case OPTION_MAUTO_PIC:
+      md.flags |= EF_IA_64_NOFUNCDESC_CONS_GP;
+      break;
+
     default:
       return 0;
     }
@@ -5880,7 +5892,8 @@ md_begin ()
     }
 
   /* Default to 64-bit mode.  */
-  md.flags = EF_IA_64_ABI64;
+  /* ??? This overrides the -M options, but they aren't working anyways.  */
+  md.flags |= EF_IA_64_ABI64;
 
   md.mem_offset.hint = 0;
   md.path = 0;
index 84ac1b12ef7f623d9b8b15c09a6cd6274f3122eb..b1f69f6e4d810d02b9dc62eeb04006639d124bb7 100644 (file)
@@ -1,3 +1,8 @@
+2000-08-14  Jim Wilson  <wilson@cygnus.com>
+
+       * elf/ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP,
+       EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define.
+
 2000-08-07  Nick Clifton  <nickc@cygnus.com>
 
        * ppc.h: Remove spurious CYGNUS LOCAL comments.
index 15847c80f8477d281cf751348d8e2af5f2f3bf11..bd7dae50c603b7bc997a93520fa52101f21bce6e 100644 (file)
@@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Bits in the e_flags field of the Elf64_Ehdr:  */
 
 #define EF_IA_64_MASKOS         0x0000000f     /* os-specific flags */
-#define EF_IA_64_ABI64  (1 << 4)       /* 64-bit ABI */
 #define EF_IA_64_ARCH   0xff000000     /* arch. version mask */
 
 /* ??? These four definitions are not part of the SVR4 ABI.
@@ -36,6 +35,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define EF_IA_64_BE     (1 << 3)       /* PSR BE bit set (big-endian) */
 #define EFA_IA_64_EAS2_3 0x23000000    /* ia64 EAS 2.3 */
 
+#define EF_IA_64_ABI64             (1 << 4) /* 64-bit ABI */
+/* Not used yet.  */
+#define EF_IA_64_REDUCEDFP         (1 << 5) /* Only FP6-FP11 used.  */
+#define EF_IA_64_CONS_GP           (1 << 6) /* gp as program wide constant. */
+#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */
+/* Not used yet.  */
+#define EF_IA_64_ABSOLUTE          (1 << 8) /* Load at absolute addresses.  */
+
 #define ELF_STRING_ia64_archext                ".IA_64.archext"
 #define ELF_STRING_ia64_pltoff         ".IA_64.pltoff"
 #define ELF_STRING_ia64_unwind         ".IA_64.unwind"