add -mrelocatable-lib, -memb support
authorMichael Meissner <gnu@the-meissners.org>
Thu, 21 Sep 1995 20:23:15 +0000 (20:23 +0000)
committerMichael Meissner <gnu@the-meissners.org>
Thu, 21 Sep 1995 20:23:15 +0000 (20:23 +0000)
gas/ChangeLog
gas/config/tc-ppc.c

index 7e7014775bfc55913c29939df18c4f782ca980e0..2729b8409d20d7574f7388729d11c9eb5ebcac8b 100644 (file)
@@ -1,3 +1,18 @@
+Thu Sep 21 14:11:49 1995  Michael Meissner  <meissner@cygnus.com>
+
+       * config/tc-ppc.c (ppc_flags): New variable to hold the flag bits
+       to set in the ELF header.
+       (md_parse_option): Add support for -mrelocatable-lib.  Make both
+       -mrelocatable and -mrelocatable-lib set ppc_flags.
+       (md_begin): Set ELF flags with ppc_flags.
+
+Wed Sep 20 13:01:52 1995  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Makefile.in (maintainer-clean): New target, synonym for
+       realclean.  Add GNU standard maintainer-clean echos.
+       * doc/Makefile.in (maintainer-clean): New target, synonym for
+       realclean.
+
 Tue Sep 19 11:31:31 1995  Ian Lance Taylor  <ian@cygnus.com>
 
        * config/tc-m68k.c (m68k_ip): Reject immediate operands for '%'.
index c8af6e61ef3ebc5df7e3090629a87d9c67948052..5c2b1a654b6162f274fa6780fb4389c6b19ec4d5 100644 (file)
 
 /* This is the assembler for the PowerPC or POWER (RS/6000) chips.  */
 
-/* FIXME: This should be handled in a different way.  */
+/* Tell the main code what the endianness is.  */
 extern int target_big_endian;
 
+/* Whether or not, we've set target_big_endian.  */
+static int set_target_endian = 0;
+
 static void ppc_set_cpu PARAMS ((void));
 static unsigned long ppc_insert_operand
   PARAMS ((unsigned long insn, const struct powerpc_operand *operand,
@@ -148,6 +151,9 @@ static struct hash_control *ppc_macro_hash;
 /* Whether to warn about non PC relative relocations that aren't
    in the .got2 section. */
 static boolean mrelocatable = false;
+
+/* Flags to set in the elf header */
+static flagword ppc_flags = 0;
 #endif
 
 #ifdef OBJ_COFF
@@ -265,16 +271,35 @@ md_parse_option (c, arg)
        ppc_cpu = PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_PPC;
 
 #ifdef OBJ_ELF
-      /* -mrelocatable -- warn about initializations that require relocation */
+      /* -mrelocatable/-mrelocatable-lib -- warn about initializations that require relocation */
       else if (strcmp (arg, "relocatable") == 0)
-       mrelocatable = true;
+       {
+         mrelocatable = true;
+         ppc_flags |= EF_PPC_RELOCATABLE;
+       }
+
+      else if (strcmp (arg, "relocatable-lib") == 0)
+       {
+         mrelocatable = true;
+         ppc_flags |= EF_PPC_RELOCATABLE | EF_PPC_RELOCATABLE_LIB;
+       }
+
+      /* -memb, set embedded bit */
+      else if (strcmp (arg, "emb") == 0)
+       ppc_flags |= EF_PPC_EMB;
 
       /* -mlittle/-mbig set the endianess */
       else if (strcmp (arg, "little") == 0 || strcmp (arg, "little-endian") == 0)
-       target_big_endian = 0;
+       {
+         target_big_endian = 0;
+         set_target_endian = 1;
+       }
 
       else if (strcmp (arg, "big") == 0 || strcmp (arg, "big-endian") == 0)
-       target_big_endian = 1;
+       {
+         target_big_endian = 1;
+         set_target_endian = 1;
+       }
 #endif
       else
        {
@@ -319,6 +344,8 @@ PowerPC options:\n\
 #ifdef OBJ_ELF
   fprintf(stream, "\
 -mrelocatable          support for GCC's -mrelocatble option\n\
+-mrelocatable-lib      support for GCC's -mrelocatble-lib option\n\
+-memb                  set PPC_EMB bit in ELF flags\n\
 -mlittle, -mlittle-endian\n\
                        generate code for a little endian machine\n\
 -mbig, -mbig-endian    generate code for a big endian machine\n\
@@ -376,9 +403,9 @@ md_begin ()
   ppc_set_cpu ();
 
 #ifdef OBJ_ELF
-  /* Set  the -mrelocatable flag bit */
-  if (mrelocatable)
-    bfd_set_private_flags (stdoutput, EF_PPC_RELOCATABLE);
+  /* Set the ELF flags if desired. */
+  if (ppc_flags)
+    bfd_set_private_flags (stdoutput, ppc_flags);
 #endif
 
   /* Insert the opcodes into a hash table.  */
@@ -436,8 +463,12 @@ md_begin ()
        }
     }
 
-  /* Tell the main code what the endianness is.  */
-  target_big_endian = PPC_BIG_ENDIAN;
+  /* Tell the main code what the endianness is if it is not overidden by the user.  */
+  if (!set_target_endian)
+    {
+      set_target_endian = 1;
+      target_big_endian = PPC_BIG_ENDIAN;
+    }
 
 #ifdef OBJ_COFF
   ppc_coff_debug_section = coff_section_from_bfd_index (stdoutput, N_DEBUG);