Add microblazeel target support to bfd, gas and ld.
authorMichael Eager <eager@eagercon.com>
Fri, 9 Nov 2012 16:25:12 +0000 (16:25 +0000)
committerMichael Eager <eager@eagercon.com>
Fri, 9 Nov 2012 16:25:12 +0000 (16:25 +0000)
binutils/bfd/Changelog

 2012-11-09  Edgar E. Iglesias <edgar.iglesias@gmail.com>

          * config.bfd: Add microblazeel-*-*
          * configure.in: Likewise.
          * configure: Regenerate.
          * elf32-microblaze.c (microblaze_elf_relocate_section):
            Add endian awareness.
            (microblaze_elf_merge_private_bfd_data): New.
            (microblaze_bfd_write_imm_value_32): New.
            (microblaze_bfd_write_imm_value_64): New.
            (microblaze_elf_relax_section): Add endian awareness.
            (microblaze_elf_add_symbol_hook): Define TARGET_LITTLE_NAME,
            TARGET_LITTLE_SYM and bfd_elf32_bfd_merge_private_bfd_data.
          * targets.c: Add bfd target bfd_elf32_microblazeel_vec.

binutils/gas/Changelog

 2012-11-09  Edgar E. Iglesias <edgar.iglesias@gmail.com>

          * tc-microblaze.c (md_longopts): Define OPTION_EB and
            OPTION_EL for target.
            (md_parse_option): Likewise.
          * tc-microblaze.h: Set elf32-microblazeel if not
            target_big_endian for TARGET_FORMAT.
          * configure.tgt: Add microblazeel and set endian per target.

binutils/gas/testsuite/Changelog

 2012-11-09  David Holsgrove  <david.holsgrove@xilinx.com>

          * gas/microblaze/endian.exp: New file - endian
            testcase for microblaze / microblazeel.
          * gas/microblaze/endian.s: Likewise.
          * gas/microblaze/endian_be.d: Likewise.
          * gas/microblaze/endian_le.d: Likewise.
          * gas/microblaze/endian_le_elf.d: Likewise.
          * gas/microblaze/reloc_sym.d: Update to accept targets
            other than elf32-microblaze.
          * gas/microblaze/special_reg.d: Likewise.

binutils/ld/Changelog

 2012-11-09  Edgar E. Iglesias <edgar.iglesias@gmail.com>

          * Makefile.am: Add eelf32microblazeel.c and eelf32mbel_linux.c.
          * Makefile.in: Regenerated.
          * configure.tgt: Add microblazeel and set endian per target.
          * emulparams/elf32mb_linux.sh: Add OUTPUT_FORMAT.
          * emulparams/elf32microblaze.sh: Likewise.
          * emulparams/elf32mbel_linux.sh: New file.
          * emulparams/elf32microblazeel.sh: Likewise.

19 files changed:
bfd/ChangeLog
bfd/config.bfd
bfd/configure
bfd/configure.in
bfd/elf32-microblaze.c
bfd/targets.c
gas/ChangeLog
gas/config/tc-microblaze.c
gas/config/tc-microblaze.h
gas/configure.tgt
gas/testsuite/ChangeLog
gas/testsuite/gas/microblaze/reloc_sym.d
gas/testsuite/gas/microblaze/special_reg.d
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure.tgt
ld/emulparams/elf32mb_linux.sh
ld/emulparams/elf32microblaze.sh

index 85e94b9b5b09b6372c86e0ffe165f2a725a9e5d5..2e91b69543f6528ccbfed97fc054b791728e9cd2 100644 (file)
@@ -1,3 +1,17 @@
+2012-11-09  Edgar E. Iglesias <edgar.iglesias@gmail.com>
+
+       * config.bfd: Add microblazeel-*-*
+       * configure.in: Likewise.
+       * configure: Regenerate.
+       * elf32-microblaze.c (microblaze_elf_relocate_section): Add endian awareness.
+       (microblaze_elf_merge_private_bfd_data): New.
+       (microblaze_bfd_write_imm_value_32): New.
+       (microblaze_bfd_write_imm_value_64): New.
+       (microblaze_elf_relax_section): Add endian awareness.
+       (microblaze_elf_add_symbol_hook): Define TARGET_LITTLE_NAME,
+       TARGET_LITTLE_SYM and bfd_elf32_bfd_merge_private_bfd_data.
+       * targets.c: Add bfd target bfd_elf32_microblazeel_vec.
+
 2012-11-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * aout-tic30.c (MY_final_link_callback): Remove trailing
index 7def642eb875309f94657b88b9dfa9746602a83a..e59ab251531b8f0c5860917f7b96be9e47797ec4 100644 (file)
@@ -916,8 +916,14 @@ case "${targ}" in
     targ_selvecs=bfd_elf32_mep_little_vec
     ;;
 
+  microblazeel*-*)
+    targ_defvec=bfd_elf32_microblazeel_vec
+    targ_selvecs=bfd_elf32_microblaze_vec
+    ;;
+
   microblaze*-*)
     targ_defvec=bfd_elf32_microblaze_vec
+    targ_selvecs=bfd_elf32_microblazeel_vec
     ;;
 
   mips*-big-*)
index 43bff03f0045c66d92fbadc0f3455b51dc84d726..7b073cc1b015519edf0f0cb82848c4894d5eb43e 100755 (executable)
@@ -15283,6 +15283,7 @@ do
     bfd_elf32_mcore_little_vec)        tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
     bfd_elf32_mep_vec)         tb="$tb elf32-mep.lo elf32.lo $elf" ;;
     bfd_elf32_mep_little_vec)  tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+    bfd_elf32_microblazeel_vec)        tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
     bfd_elf32_microblaze_vec)  tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
     bfd_elf32_mn10200_vec)     tb="$tb elf-m10200.lo elf32.lo $elf" ;;
     bfd_elf32_mn10300_vec)     tb="$tb elf-m10300.lo elf32.lo $elf" ;;
index f7e3929b12094c714c66a2f33c015a0fe663bec8..78f274439a8875572e375dbd057b2b7cea130fae 100644 (file)
@@ -764,6 +764,7 @@ do
     bfd_elf32_mcore_little_vec)        tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
     bfd_elf32_mep_vec)         tb="$tb elf32-mep.lo elf32.lo $elf" ;;
     bfd_elf32_mep_little_vec)  tb="$tb elf32-mep.lo elf32.lo $elf" ;;
+    bfd_elf32_microblazeel_vec)        tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
     bfd_elf32_microblaze_vec)  tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
     bfd_elf32_mn10200_vec)     tb="$tb elf-m10200.lo elf32.lo $elf" ;;
     bfd_elf32_mn10300_vec)     tb="$tb elf-m10300.lo elf32.lo $elf" ;;
index c0004248a269f6aaf1b9b4fc5d16b61f181a9324..be2de134255c813186dcd541a390951619341912 100644 (file)
@@ -702,6 +702,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
   Elf_Internal_Rela *rel, *relend;
+  int endian = (bfd_little_endian (output_bfd)) ? 0 : 2;
   /* Assume success.  */
   bfd_boolean ret = TRUE;
   asection *sreloc;
@@ -933,9 +934,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                             + offset + INST_WORD_SIZE);
              relocation += addend;
              bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-                         contents + offset + 2);
+                         contents + offset + endian);
              bfd_put_16 (input_bfd, relocation & 0xffff,
-                         contents + offset + 2 + INST_WORD_SIZE);
+                         contents + offset + endian + INST_WORD_SIZE);
              break;
 
            case (int) R_MICROBLAZE_PLT_64:
@@ -952,9 +953,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                                              + input_section->output_offset
                                              + offset + INST_WORD_SIZE);
                    bfd_put_16 (input_bfd, (immediate >> 16) & 0xffff,
-                               contents + offset + 2);
+                               contents + offset + endian);
                    bfd_put_16 (input_bfd, immediate & 0xffff,
-                               contents + offset + 2 + INST_WORD_SIZE);
+                               contents + offset + endian + INST_WORD_SIZE);
                  }
                else
                  {
@@ -963,9 +964,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                                   + offset + INST_WORD_SIZE);
                    immediate = relocation;
                    bfd_put_16 (input_bfd, (immediate >> 16) & 0xffff,
-                               contents + offset + 2);
+                               contents + offset + endian);
                    bfd_put_16 (input_bfd, immediate & 0xffff,
-                               contents + offset + 2 + INST_WORD_SIZE);
+                               contents + offset + endian + INST_WORD_SIZE);
                  }
                break;
              }
@@ -1031,9 +1032,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                      abort (); /* ??? */
                  }
                bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-                           contents + offset + 2);
+                           contents + offset + endian);
                bfd_put_16 (input_bfd, relocation & 0xffff,
-                           contents + offset + 2 + INST_WORD_SIZE);
+                           contents + offset + endian + INST_WORD_SIZE);
                break;
              }
 
@@ -1048,8 +1049,8 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                immediate = relocation;
                lo = immediate & 0x0000ffff;
                high = (immediate >> 16) & 0x0000ffff;
-               bfd_put_16 (input_bfd, high, contents + offset + 2);
-               bfd_put_16 (input_bfd, lo, contents + offset + INST_WORD_SIZE + 2);
+               bfd_put_16 (input_bfd, high, contents + offset + endian);
+               bfd_put_16 (input_bfd, lo, contents + offset + INST_WORD_SIZE + endian);
                break;
              }
 
@@ -1082,9 +1083,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                                         + input_section->output_offset
                                         + offset + INST_WORD_SIZE);
                        bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-                                   contents + offset + 2);
+                                   contents + offset + endian);
                        bfd_put_16 (input_bfd, relocation & 0xffff,
-                                   contents + offset + 2 + INST_WORD_SIZE);
+                                   contents + offset + endian + INST_WORD_SIZE);
                      }
                    break;
                  }
@@ -1176,9 +1177,9 @@ microblaze_elf_relocate_section (bfd *output_bfd,
                                         + input_section->output_offset
                                         + offset + INST_WORD_SIZE);
                        bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff,
-                                   contents + offset + 2);
+                                   contents + offset + endian);
                        bfd_put_16 (input_bfd, relocation & 0xffff,
-                                   contents + offset + 2 + INST_WORD_SIZE);
+                                   contents + offset + endian + INST_WORD_SIZE);
                      }
                    break;
                  }
@@ -1253,6 +1254,21 @@ microblaze_elf_relocate_section (bfd *output_bfd,
 
   return ret;
 }
+
+/* Merge backend specific data from an object file to the output
+   object file when linking.
+
+   Note: We only use this hook to catch endian mismatches.  */
+static bfd_boolean
+microblaze_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+{
+  /* Check if we have the same endianess.  */
+  if (! _bfd_generic_verify_endian_match (ibfd, obfd))
+    return FALSE;
+
+  return TRUE;
+}
+
 \f
 /* Calculate fixup value for reference.  */
 
@@ -1275,6 +1291,36 @@ calc_fixup (bfd_vma addr, asection *sec)
   return fixup;
 }
 
+/* Read-modify-write into the bfd, an immediate value into appropriate fields of
+   a 32-bit instruction.  */
+static void
+microblaze_bfd_write_imm_value_32 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
+{
+    unsigned long instr = bfd_get_32 (abfd, bfd_addr);
+    instr &= ~0x0000ffff;
+    instr |= (val & 0x0000ffff);
+    bfd_put_32 (abfd, instr, bfd_addr);
+}
+
+/* Read-modify-write into the bfd, an immediate value into appropriate fields of
+   two consecutive 32-bit instructions.  */
+static void
+microblaze_bfd_write_imm_value_64 (bfd *abfd, bfd_byte *bfd_addr, bfd_vma val)
+{
+    unsigned long instr_hi;
+    unsigned long instr_lo;
+
+    instr_hi = bfd_get_32 (abfd, bfd_addr);
+    instr_hi &= ~0x0000ffff;
+    instr_hi |= ((val >> 16) & 0x0000ffff);
+    bfd_put_32 (abfd, instr_hi, bfd_addr);
+
+    instr_lo = bfd_get_32 (abfd, bfd_addr + INST_WORD_SIZE);
+    instr_lo &= ~0x0000ffff;
+    instr_lo |= (val & 0x0000ffff);
+    bfd_put_32 (abfd, instr_lo, bfd_addr + INST_WORD_SIZE);
+}
+
 static bfd_boolean
 microblaze_elf_relax_section (bfd *abfd,
                              asection *sec,
@@ -1305,7 +1351,8 @@ microblaze_elf_relax_section (bfd *abfd,
   /* Only do this for a text section.  */
   if (link_info->relocatable
       || (sec->flags & SEC_RELOC) == 0
-      || (sec->reloc_count == 0))
+      || (sec->reloc_count == 0)
+      || (sec->flags & SEC_CODE) == 0)
     return TRUE;
 
   BFD_ASSERT ((sec->size > 0) || (sec->rawsize > 0));
@@ -1485,7 +1532,8 @@ microblaze_elf_relax_section (bfd *abfd,
                efix = calc_fixup (target_address, sec);
                irel->r_addend -= (efix - sfix);
                /* Should use HOWTO.  */
-               bfd_put_16 (abfd, irel->r_addend, contents + irel->r_offset + 2);
+               microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset,
+                                                  irel->r_addend);
              }
              break;
            case R_MICROBLAZE_64_NONE:
@@ -1498,8 +1546,8 @@ microblaze_elf_relax_section (bfd *abfd,
                sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, sec);
                efix = calc_fixup (target_address, sec);
                irel->r_addend -= (efix - sfix);
-               bfd_put_16 (abfd, irel->r_addend, contents + irel->r_offset
-                           + INST_WORD_SIZE + 2);
+    microblaze_bfd_write_imm_value_32 (abfd, contents + irel->r_offset
+                                       + INST_WORD_SIZE, irel->r_addend);
              }
              break;
            }
@@ -1627,13 +1675,14 @@ microblaze_elf_relax_section (bfd *abfd,
                            }
                        }
 
-                     immediate = (unsigned short) bfd_get_16 (abfd, ocontents +
-                                                              irelscan->r_offset + 2);
+                     unsigned long instr = bfd_get_32 (abfd, ocontents + irelscan->r_offset);
+                     immediate = instr & 0x0000ffff;
                      target_address = immediate;
                      offset = calc_fixup (target_address, sec);
                      immediate -= offset;
                      irelscan->r_addend -= offset;
-                     bfd_put_16 (abfd, immediate, ocontents + irelscan->r_offset + 2);
+          microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
+                                             irelscan->r_addend);
                    }
                }
 
@@ -1669,15 +1718,13 @@ microblaze_elf_relax_section (bfd *abfd,
                              elf_section_data (o)->this_hdr.contents = ocontents;
                            }
                        }
-                     immediate = (unsigned short) (bfd_get_16 (abfd, ocontents
-                                                               + irelscan->r_offset
-                                                               + 2) << 16)
-                       & 0xffff0000;
-                     immediate += (unsigned short) (bfd_get_16 (abfd, ocontents
-                                                                + irelscan->r_offset
-                                                                + INST_WORD_SIZE + 2))
-                       & 0x0000ffff;
-
+          unsigned long instr_hi =  bfd_get_32 (abfd, ocontents
+                                                + irelscan->r_offset);
+          unsigned long instr_lo =  bfd_get_32 (abfd, ocontents
+                                                + irelscan->r_offset
+                                                + INST_WORD_SIZE);
+          immediate = (instr_hi & 0x0000ffff) << 16;
+          immediate |= (instr_lo & 0x0000ffff);
                      offset = calc_fixup (irelscan->r_addend, sec);
                      immediate -= offset;
                      irelscan->r_addend -= offset;
@@ -1715,22 +1762,19 @@ microblaze_elf_relax_section (bfd *abfd,
                              elf_section_data (o)->this_hdr.contents = ocontents;
                            }
                        }
-
-                     immediate = (unsigned short)
-                       (bfd_get_16 (abfd, ocontents + irelscan->r_offset + 2) << 16)
-                       & 0xffff0000;
-                     immediate += (unsigned short)
-                       (bfd_get_16 (abfd, ocontents + irelscan->r_offset
-                                    + INST_WORD_SIZE + 2))
-                       & 0x0000ffff;
+          unsigned long instr_hi =  bfd_get_32 (abfd, ocontents
+                                                + irelscan->r_offset);
+          unsigned long instr_lo =  bfd_get_32 (abfd, ocontents
+                                                + irelscan->r_offset
+                                                + INST_WORD_SIZE);
+          immediate = (instr_hi & 0x0000ffff) << 16;
+          immediate |= (instr_lo & 0x0000ffff);
                      target_address = immediate;
                      offset = calc_fixup (target_address, sec);
                      immediate -= offset;
                      irelscan->r_addend -= offset;
-                     bfd_put_16 (abfd, ((immediate >> 16) & 0x0000ffff),
-                                 ocontents + irelscan->r_offset + 2);
-                     bfd_put_16 (abfd, (immediate & 0x0000ffff),
-                                 ocontents + irelscan->r_offset + INST_WORD_SIZE + 2);
+          microblaze_bfd_write_imm_value_64 (abfd, ocontents
+                                             + irelscan->r_offset, immediate);
                    }
                }
             }
@@ -1800,9 +1844,12 @@ microblaze_elf_relax_section (bfd *abfd,
 
   if (sec->relax_count == 0)
     {
+      *again = FALSE;
       free (sec->relax);
       sec->relax = NULL;
     }
+  else
+    *again = TRUE;
   return TRUE;
 
  error_return:
@@ -3016,6 +3063,8 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
   return TRUE;
 }
 
+#define TARGET_LITTLE_SYM      bfd_elf32_microblazeel_vec
+#define TARGET_LITTLE_NAME     "elf32-microblazeel"
 
 #define TARGET_BIG_SYM          bfd_elf32_microblaze_vec
 #define TARGET_BIG_NAME                "elf32-microblaze"
@@ -3032,6 +3081,7 @@ microblaze_elf_add_symbol_hook (bfd *abfd,
 #define bfd_elf32_bfd_is_local_label_name       microblaze_elf_is_local_label_name
 #define elf_backend_relocate_section           microblaze_elf_relocate_section
 #define bfd_elf32_bfd_relax_section             microblaze_elf_relax_section
+#define bfd_elf32_bfd_merge_private_bfd_data    microblaze_elf_merge_private_bfd_data
 #define bfd_elf32_bfd_reloc_name_lookup                microblaze_elf_reloc_name_lookup
 
 #define elf_backend_gc_mark_hook               microblaze_elf_gc_mark_hook
index 621bf8d5f5db6498bd7aaedbd7d1c3b761a2d5c8..442cb8f5d4a5936de702e4d47ac64a2b2710370a 100644 (file)
@@ -659,6 +659,7 @@ extern const bfd_target bfd_elf32_mcore_big_vec;
 extern const bfd_target bfd_elf32_mcore_little_vec;
 extern const bfd_target bfd_elf32_mep_vec;
 extern const bfd_target bfd_elf32_mep_little_vec;
+extern const bfd_target bfd_elf32_microblazeel_vec;
 extern const bfd_target bfd_elf32_microblaze_vec;
 extern const bfd_target bfd_elf32_mn10200_vec;
 extern const bfd_target bfd_elf32_mn10300_vec;
index a029fbe64301b7f58d6c7cd2e874f3a81b1f10c2..ddf1a1ed7ad7355a0d5c390974c6ca52ba219faa 100644 (file)
@@ -1,3 +1,13 @@
+2012-11-09  David Holsgrove  <david.holsgrove@xilinx.com>
+
+       * gas/microblaze/endian.exp: New file - endian testcase for microblaze / microblazeel.
+       * gas/microblaze/endian.s: Likewise.
+       * gas/microblaze/endian_be.d: Likewise.
+       * gas/microblaze/endian_le.d: Likewise.
+       * gas/microblaze/endian_le_elf.d: Likewise.
+       * gas/microblaze/reloc_sym.d: Update to accept targets other than elf32-microblaze.
+       * gas/microblaze/special_reg.d: Likewise.
+
 2012-11-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/atof-ieee.c (gen_to_words): Remove trailing redundant
index de0efda7c5d5f8a3c5c37bde1380a80498ffa98d..04dfa1ef987caa4927bbfed9a7b6914c82958ab5 100644 (file)
@@ -35,6 +35,9 @@
 #define streq(a,b) (strcmp (a, b) == 0)
 #endif
 
+#define OPTION_EB (OPTION_MD_BASE + 0)
+#define OPTION_EL (OPTION_MD_BASE + 1)
+
 void microblaze_generate_symbol (char *sym);
 static bfd_boolean check_spl_reg (unsigned *);
 
@@ -1707,6 +1710,8 @@ const char * md_shortopts = "";
 
 struct option md_longopts[] =
 {
+  {"EB", no_argument, NULL, OPTION_EB},
+  {"EL", no_argument, NULL, OPTION_EL},
   { NULL,          no_argument, NULL, 0}
 };
 
@@ -2304,6 +2309,12 @@ md_parse_option (int c, char * arg ATTRIBUTE_UNUSED)
 {
   switch (c)
     {
+    case OPTION_EB:
+      target_big_endian = 1;
+      break;
+    case OPTION_EL:
+      target_big_endian = 0;
+      break;
     default:
       return 0;
     }
index db8d22773e4418665269bde74a3f67e288f1957f..06510400380b3e7bda1c44971627ed454327de6c 100644 (file)
 #define TC_MICROBLAZE 1
 
 #define TARGET_ARCH    bfd_arch_microblaze
+#ifndef TARGET_BYTES_BIG_ENDIAN
 /* Used to initialise target_big_endian.  */
 #define TARGET_BYTES_BIG_ENDIAN 1
+#endif
 
 #define IGNORE_NONSTANDARD_ESCAPES
 
@@ -75,7 +77,7 @@ extern const struct relax_type md_relax_table[];
 
 #ifdef OBJ_ELF
 
-#define TARGET_FORMAT (target_big_endian ? "elf32-microblaze" : "elf32-microblaze-little")
+#define TARGET_FORMAT (target_big_endian ? "elf32-microblaze" : "elf32-microblazeel")
 
 #define ELF_TC_SPECIAL_SECTIONS \
   { ".sdata",          SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE }, \
index ff4cb3f47d6317fa016c7518e408be19a95098cc..774031ec4dc1d9f589254376d3f738d00ba1810c 100644 (file)
@@ -57,7 +57,8 @@ case ${cpu} in
   m6811|m6812|m68hc12) cpu_type=m68hc11 ;;
   m683??)              cpu_type=m68k ;;
   mep)                 cpu_type=mep endian=little ;;
-  microblaze*)         cpu_type=microblaze ;;
+  microblazeel*)       cpu_type=microblaze endian=little;;
+  microblaze*)         cpu_type=microblaze endian=big;;
   mips*el)             cpu_type=mips endian=little ;;
   mips*)               cpu_type=mips endian=big ;;
   mt)                  cpu_type=mt endian=big ;;
index b007717ae528c4da0f9a86898c379d4d7f8dffab..7797e19ab0e7fa339be430be59d59b2a040c17c0 100644 (file)
@@ -1,3 +1,13 @@
+2012-11-09  David Holsgrove  <david.holsgrove@xilinx.com>
+
+       * gas/microblaze/endian.exp: New file - endian testcase for microblaze / microblazeel.
+       * gas/microblaze/endian.s: Likewise.
+       * gas/microblaze/endian_be.d: Likewise.
+       * gas/microblaze/endian_le.d: Likewise.
+       * gas/microblaze/endian_le_elf.d: Likewise.
+       * gas/microblaze/reloc_sym.d: Update to accept targets other than elf32-microblaze.
+       * gas/microblaze/special_reg.d: Likewise.
+
 2012-11-08  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * gas/mips/lui.d: New test.
index 212d0bb35bf79d75f5101fe4d58753f192c06b9c..571ffe1bba87a90923b08269939fab74b5c95589 100644 (file)
@@ -1,6 +1,5 @@
 
-reloc_sym.x:     file format elf32-microblaze
-
+.*: +file format .*
 
 Disassembly of section .text:
 
index aad0131899936b11f691279e9f11a66c915540cc..c2041fdcdb848a64e03872b549c4c87c87d720ae 100644 (file)
@@ -1,10 +1,7 @@
 #as:
-#objdump: -ds
+#objdump: -d
 
-.*:     file format .*
-
-Contents of section .text:
- 0000 9409d000 6c00d000 001ff800           ....l.......    
+.*: +file format .*
 
 Disassembly of section .text:
 
index fc5b81b3d562c085c9361f946021b0c3e1a8e6eb..bba2e84e01e50083b3f3893f382faf551ba303d3 100644 (file)
@@ -1,3 +1,13 @@
+2012-11-09  Edgar E. Iglesias <edgar.iglesias@gmail.com>
+
+       * Makefile.am: Add eelf32microblazeel.c and eelf32mbel_linux.c.
+       * Makefile.in: Regenerated.
+       * configure.tgt: Add microblazeel and set endian per target.
+       * emulparams/elf32mb_linux.sh: Add OUTPUT_FORMAT.
+       * emulparams/elf32microblaze.sh: Likewise.
+       * emulparams/elf32mbel_linux.sh: New file.
+       * emulparams/elf32microblazeel.sh: Likewise.
+
 2012-11-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * testplug.c (record_add_file): Remove trailing redundant `;'.
index 4c692ea289528d52db4a30d385bd68332ef09b19..f6f814fa05532cfa8e13062f8e6304ffa967f64c 100644 (file)
@@ -237,6 +237,7 @@ ALL_EMULATION_SOURCES = \
        eelf32mb_linux.c \
        eelf32mcore.c \
        eelf32mep.c \
+       eelf32microblazeel.c \
        eelf32microblaze.c \
        eelf32mipswindiss.c \
        eelf32moxie.c \
@@ -1107,6 +1108,9 @@ eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
   $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mbel_linux.c: $(srcdir)/emulparams/elf32mbel_linux.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} elf32mbel_linux "$(tdir_microblazeel)"
 eelf32mb_linux.c: $(srcdir)/emulparams/elf32mb_linux.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32mb_linux "$(tdir_microblaze)"
@@ -1116,6 +1120,9 @@ eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
 eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32mep "$(tdir_mep)"
+eelf32microblazeel.c: $(srcdir)/emulparams/elf32microblazeel.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} elf32microblazeel "$(tdir_microblazeel)"
 eelf32microblaze.c: $(srcdir)/emulparams/elf32microblaze.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32microblaze "$(tdir_microblaze)"
index a675d017505c76c7dd00cc42c308929e42c4fdee..fb0c21edc69a5eb7fc0a2f242cfa262d215609cd 100644 (file)
@@ -544,6 +544,7 @@ ALL_EMULATION_SOURCES = \
        eelf32mb_linux.c \
        eelf32mcore.c \
        eelf32mep.c \
+       eelf32microblazeel.c \
        eelf32microblaze.c \
        eelf32mipswindiss.c \
        eelf32moxie.c \
@@ -1166,6 +1167,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mcore.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mep.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32microblaze.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32microblazeel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mipswindiss.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32moxie.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mt.Po@am__quote@
@@ -2577,6 +2579,9 @@ eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
   $(ELF_DEPS) $(srcdir)/emultempl/needrelax.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mbel_linux.c: $(srcdir)/emulparams/elf32mbel_linux.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} elf32mbel_linux "$(tdir_microblazeel)"
 eelf32mb_linux.c: $(srcdir)/emulparams/elf32mb_linux.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32mb_linux "$(tdir_microblaze)"
@@ -2586,6 +2591,9 @@ eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
 eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32mep "$(tdir_mep)"
+eelf32microblazeel.c: $(srcdir)/emulparams/elf32microblazeel.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
+       ${GENSCRIPTS} elf32microblazeel "$(tdir_microblazeel)"
 eelf32microblaze.c: $(srcdir)/emulparams/elf32microblaze.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
        ${GENSCRIPTS} elf32microblaze "$(tdir_microblaze)"
index 0e62b52ab2bdf0480483c20e1fb52e5bbe2c3e0d..9f0025a996f2f185914e4c3a1826414552824935 100644 (file)
@@ -395,9 +395,18 @@ mcore-*-pe)                targ_emul=mcorepe ;
 mcore-*-elf)           targ_emul=elf32mcore
                        ;;
 mep-*-elf)             targ_emul=elf32mep ;;
-microblaze*-linux*)
-                       targ_emul="elf32mb_linux" ;;
-microblaze*)           targ_emul=elf32microblaze ;;
+microblazeel*-linux*)  targ_emul="elf32mbel_linux"
+                       targ_extra_emuls="elf32mb_linux"
+                       ;;
+microblaze*-linux*)    targ_emul="elf32mb_linux"
+                       targ_extra_emuls="elf32mbel_linux"
+                       ;;
+microblazeel*)         targ_emul=elf32microblazeel
+                       targ_extra_emuls=elf32microblaze
+                       ;;
+microblaze*)           targ_emul=elf32microblaze
+                       targ_extra_emuls=elf32microblazeel
+                       ;;
 mips*-*-pe)            targ_emul=mipspe ;
                        targ_extra_ofiles="deffilep.o pe-dll.o" ;;
 mips*-dec-ultrix*)     targ_emul=mipslit ;;
index f26f1a0c3a8e4af3f42ff96a2fb4dbadeffe93c9..bb60d1fee34d28d8484b03cca37d1b26e3d262b8 100644 (file)
@@ -1,5 +1,7 @@
 SCRIPT_NAME=elf
 OUTPUT_FORMAT="elf32-microblaze"
+BIG_OUTPUT_FORMAT="elf32-microblaze"
+LITTLE_OUTPUT_FORMAT="elf32-microblazeel"
 TEXT_START_ADDR=0x10000000
 NONPAGED_TEXT_START_ADDR=0x28
 ALIGNMENT=4
index ccc20d151964ad933790a31c180f26c3c8905608..1f804473faa61de9b5f21fa8a56fe8e53a13dd89 100644 (file)
@@ -1,5 +1,7 @@
 SCRIPT_NAME=elfmicroblaze
 OUTPUT_FORMAT="elf32-microblaze"
+BIG_OUTPUT_FORMAT="elf32-microblaze"
+LITTLE_OUTPUT_FORMAT="elf32-microblazeel"
 #TEXT_START_ADDR=0
 NONPAGED_TEXT_START_ADDR=0x28
 ALIGNMENT=4