aboutsummaryrefslogtreecommitdiff
path: root/devel/mipsel-linux-binutils/files/patch-aa-mips-1
diff options
context:
space:
mode:
Diffstat (limited to 'devel/mipsel-linux-binutils/files/patch-aa-mips-1')
-rw-r--r--devel/mipsel-linux-binutils/files/patch-aa-mips-1272
1 files changed, 272 insertions, 0 deletions
diff --git a/devel/mipsel-linux-binutils/files/patch-aa-mips-1 b/devel/mipsel-linux-binutils/files/patch-aa-mips-1
new file mode 100644
index 000000000000..6e0c57212c15
--- /dev/null
+++ b/devel/mipsel-linux-binutils/files/patch-aa-mips-1
@@ -0,0 +1,272 @@
+diff -urN binutils-2.8.1.orig/bfd/elf32-mips.c binutils-2.8.1/bfd/elf32-mips.c
+--- binutils-2.8.1.orig/bfd/elf32-mips.c Mon May 26 19:34:03 1997
++++ binutils-2.8.1/bfd/elf32-mips.c Sat Jun 5 12:43:09 1999
+@@ -5103,36 +5103,43 @@
+ }
+ else
+ {
+- long indx;
+-
+- if (h == NULL)
+- sec = local_sections[r_symndx];
+- else
+- {
+- BFD_ASSERT (h->root.type == bfd_link_hash_defined
+- || (h->root.type
+- == bfd_link_hash_defweak));
+- sec = h->root.u.def.section;
+- }
+- if (sec != NULL && bfd_is_abs_section (sec))
+- indx = 0;
+- else if (sec == NULL || sec->owner == NULL)
++ if (r_type == R_MIPS_32)
+ {
+- bfd_set_error (bfd_error_bad_value);
+- return false;
++ outrel.r_info = ELF32_R_INFO (0, R_MIPS_REL32);
++ addend += relocation;
+ }
+- else
+- {
+- asection *osec;
++ else
++ {
++ long indx;
+
+- osec = sec->output_section;
+- indx = elf_section_data (osec)->dynindx;
+- if (indx == 0)
+- abort ();
+- }
++ if (h == NULL)
++ sec = local_sections[r_symndx];
++ else
++ {
++ BFD_ASSERT (h->root.type == bfd_link_hash_defined
++ || (h->root.type
++ == bfd_link_hash_defweak));
++ sec = h->root.u.def.section;
++ }
++ if (sec != NULL && bfd_is_abs_section (sec))
++ indx = 0;
++ else if (sec == NULL || sec->owner == NULL)
++ {
++ bfd_set_error (bfd_error_bad_value);
++ return false;
++ }
++ else
++ {
++ asection *osec;
+
+- outrel.r_info = ELF32_R_INFO (indx, R_MIPS_REL32);
+- addend += relocation;
++ osec = sec->output_section;
++ indx = elf_section_data (osec)->dynindx;
++ if (indx == 0)
++ abort ();
++ }
++ outrel.r_info = ELF32_R_INFO (indx, R_MIPS_REL32);
++ addend += relocation;
++ }
+ }
+
+ if (! skip)
+diff -urN binutils-2.8.1.orig/gas/ChangeLog binutils-2.8.1/gas/ChangeLog
+--- binutils-2.8.1.orig/gas/ChangeLog Mon May 26 19:32:45 1997
++++ binutils-2.8.1/gas/ChangeLog Sat Jun 5 12:43:09 1999
+@@ -1,3 +1,10 @@
++Tue Oct 21 03:23:59 1997 Ralf Baechle <ralf@gnu.ai.mit.edu>
++
++ * config/tc-mips.c (macro): Only emit a BFD_RELOC_MIPS_LITERAL
++ when the symbol is in the .lit section. Required for a.out
++ support.
++ (mips_ip): Fix %HI, %hi and %lo operators.
++
+ Mon May 26 13:24:25 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * doc/as.texinfo: Don't use @value in section names or index
+diff -urN binutils-2.8.1.orig/gas/config/obj-elf.c binutils-2.8.1/gas/config/obj-elf.c
+--- binutils-2.8.1.orig/gas/config/obj-elf.c Mon May 26 19:32:36 1997
++++ binutils-2.8.1/gas/config/obj-elf.c Sat Jun 5 13:03:43 1999
+@@ -58,7 +58,6 @@
+ void obj_elf_version PARAMS ((int));
+ static void obj_elf_size PARAMS ((int));
+ static void obj_elf_type PARAMS ((int));
+-static void obj_elf_ident PARAMS ((int));
+ static void obj_elf_weak PARAMS ((int));
+ static void obj_elf_local PARAMS ((int));
+ static void obj_elf_common PARAMS ((int));
+@@ -1132,7 +1131,7 @@
+ demand_empty_rest_of_line ();
+ }
+
+-static void
++void
+ obj_elf_ident (ignore)
+ int ignore;
+ {
+diff -urN binutils-2.8.1.orig/gas/config/obj-elf.h binutils-2.8.1/gas/config/obj-elf.h
+--- binutils-2.8.1.orig/gas/config/obj-elf.h Mon May 26 19:32:36 1997
++++ binutils-2.8.1/gas/config/obj-elf.h Sat Jun 5 13:09:46 1999
+@@ -94,6 +94,8 @@
+ #define obj_app_file elf_file_symbol
+ extern void elf_file_symbol PARAMS ((char *));
+
++extern void obj_elf_ident PARAMS ((int));
++
+ extern void obj_elf_section_change_hook PARAMS ((void));
+
+ extern void obj_elf_section PARAMS ((int));
+diff -urN binutils-2.8.1.orig/gas/config/tc-mips.c binutils-2.8.1/gas/config/tc-mips.c
+--- binutils-2.8.1.orig/gas/config/tc-mips.c Mon May 26 19:32:40 1997
++++ binutils-2.8.1/gas/config/tc-mips.c Sat Jun 5 13:08:28 1999
+@@ -598,6 +598,7 @@
+ static void s_align PARAMS ((int));
+ static void s_change_sec PARAMS ((int));
+ static void s_cons PARAMS ((int));
++static void s_ident PARAMS ((int));
+ static void s_float_cons PARAMS ((int));
+ static void s_mips_globl PARAMS ((int));
+ static void s_option PARAMS ((int));
+@@ -668,6 +669,7 @@
+ {"globl", s_mips_globl, 0},
+ {"global", s_mips_globl, 0},
+ {"hword", s_cons, 1},
++ {"ident", s_ident, 1},
+ {"int", s_cons, 2},
+ {"long", s_cons, 2},
+ {"octa", s_cons, 4},
+@@ -4863,13 +4865,22 @@
+ else
+ {
+ assert (offset_expr.X_op == O_symbol
+- && strcmp (segment_name (S_GET_SEGMENT
+- (offset_expr.X_add_symbol)),
+- ".lit4") == 0
+ && offset_expr.X_add_number == 0);
+- macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
+- treg, (int) BFD_RELOC_MIPS_LITERAL, GP);
+- return;
++ s = segment_name (S_GET_SEGMENT (offset_expr.X_add_symbol));
++ if (strcmp (s, ".lit4") == 0)
++ {
++ macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
++ treg, (int) BFD_RELOC_MIPS_LITERAL, GP);
++ return;
++ }
++ else
++ {
++ /* FIXME: This won't work for a 64 bit address. */
++ macro_build_lui ((char *) NULL, &icnt, &offset_expr, AT);
++ macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
++ treg, (int) BFD_RELOC_LO16, AT);
++ return;
++ }
+ }
+
+ case M_LI_D:
+@@ -6965,11 +6976,23 @@
+ c = my_getSmallExpression (&imm_expr, s);
+ if (c != '\0')
+ {
+- if (c != 'l')
++ if (c == 'l')
+ {
+ if (imm_expr.X_op == O_constant)
+- imm_expr.X_add_number =
+- (imm_expr.X_add_number >> 16) & 0xffff;
++ {
++ imm_expr.X_add_number &= 0xffff;
++ imm_reloc = BFD_RELOC_LO16;
++ }
++ }
++ else
++ {
++ if (imm_expr.X_op == O_constant)
++ {
++ if (c == 'h' && (imm_expr.X_add_number & 0x8000))
++ imm_expr.X_add_number += 0x1000;
++ imm_expr.X_add_number =
++ (imm_expr.X_add_number >> 16) & 0xffff;
++ }
+ else if (c == 'h')
+ {
+ imm_reloc = BFD_RELOC_HI16_S;
+@@ -7064,11 +7087,22 @@
+ break;
+
+ offset_reloc = BFD_RELOC_LO16;
+- if (c == 'h' || c == 'H')
++ if (c)
+ {
+- assert (offset_expr.X_op == O_constant);
+- offset_expr.X_add_number =
+- (offset_expr.X_add_number >> 16) & 0xffff;
++ if (c != 'l')
++ {
++ if (offset_expr.X_op == O_constant)
++ {
++ if (c == 'h' && (offset_expr.X_add_number & 0x8000))
++ offset_expr.X_add_number += 0x1000;
++ offset_expr.X_add_number =
++ (offset_expr.X_add_number >> 16) & 0xffff;
++ }
++ else if (c == 'h')
++ offset_reloc = BFD_RELOC_HI16_S;
++ else
++ offset_reloc = BFD_RELOC_HI16;
++ }
+ }
+ s = expr_end;
+ continue;
+@@ -7081,10 +7115,13 @@
+
+ case 'u': /* upper 16 bits */
+ c = my_getSmallExpression (&imm_expr, s);
+- if (imm_expr.X_op == O_constant
+- && (imm_expr.X_add_number < 0
+- || imm_expr.X_add_number >= 0x10000))
+- as_bad ("lui expression not in range 0..65535");
++ if (!c)
++ {
++ if (imm_expr.X_op == O_constant
++ && (imm_expr.X_add_number < 0
++ || imm_expr.X_add_number >= 0x10000))
++ as_bad ("lui expression not in range 0..65535");
++ }
+ imm_reloc = BFD_RELOC_LO16;
+ if (c)
+ {
+@@ -9150,6 +9187,14 @@
+ mips_enable_auto_align ()
+ {
+ auto_align = 1;
++}
++
++static void
++s_ident (ignore)
++ int ignore;
++{
++ mips_emit_delays (true);
++ obj_elf_ident(0);
+ }
+
+ static void
+diff -urN binutils-2.8.1.orig/opcodes/mips-opc.c binutils-2.8.1/opcodes/mips-opc.c
+--- binutils-2.8.1.orig/opcodes/mips-opc.c Mon May 26 21:34:19 1997
++++ binutils-2.8.1/opcodes/mips-opc.c Wed Oct 7 14:16:21 1998
+@@ -655,10 +655,10 @@
+ {"tgeu", "s,t", 0x00000031, 0xfc00003f, RD_s|RD_t|I2|TRAP },
+ {"tgeu", "s,j", 0x04090000, 0xfc1f0000, RD_s|I2|TRAP }, /* tgeiu */
+ {"tgeu", "s,I", 2, (int) M_TGEU_I, INSN_MACRO },
+-{"tlbp", "", 0x42000008, 0xffffffff, INSN_TLB },
+-{"tlbr", "", 0x42000001, 0xffffffff, INSN_TLB },
+-{"tlbwi", "", 0x42000002, 0xffffffff, INSN_TLB },
+-{"tlbwr", "", 0x42000006, 0xffffffff, INSN_TLB },
++{"tlbp", "", 0x42000008, 0xffffffff, INSN_TLB|INSN_COP|COD },
++{"tlbr", "", 0x42000001, 0xffffffff, INSN_TLB|INSN_COP|COD },
++{"tlbwi", "", 0x42000002, 0xffffffff, INSN_TLB|INSN_COP|COD },
++{"tlbwr", "", 0x42000006, 0xffffffff, INSN_TLB|INSN_COP|COD },
+ {"tlti", "s,j", 0x040a0000, 0xfc1f0000, RD_s|I2|TRAP },
+ {"tlt", "s,t", 0x00000032, 0xfc00003f, RD_s|RD_t|I2|TRAP },
+ {"tlt", "s,j", 0x040a0000, 0xfc1f0000, RD_s|I2|TRAP }, /* tlti */