diff options
Diffstat (limited to 'sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-sparc-cfi.patch')
-rw-r--r-- | sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-sparc-cfi.patch | 367 |
1 files changed, 0 insertions, 367 deletions
diff --git a/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-sparc-cfi.patch b/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-sparc-cfi.patch deleted file mode 100644 index 94342cc65633..000000000000 --- a/sys-devel/binutils/files/2.14/binutils-2.14.90.0.6-sparc-cfi.patch +++ /dev/null @@ -1,367 +0,0 @@ -2003-08-29 Jakub Jelinek <jakub@redhat.com> - - * dw2gencfi.c (cfi_pseudo_table): Add cfi_window_save. - (dot_cfi, output_cfi_insn): Handle DW_CFA_GNU_window_save. - (output_cie): Don't use DW_EH_PE_pcrel if neither DIFF_EXPR_OK - nor tc_cfi_emit_pcrel_expr are defined. - (output_fde): Use tc_cfi_emit_pcrel_expr if available and - DIFF_EXPR_OK is not defined. - * config/tc-sparc.h (TARGET_USE_CFIPOP): Define. - (tc_cfi_frame_initial_instructions, tc_regname_to_dw2regnum, - tc_cfi_emit_pcrel_expr): Define. - (sparc_cfi_frame_initial_instructions, sparc_regname_to_dw2regnum, - sparc_cfi_emit_pcrel_expr): New prototypes. - (sparc_cie_data_alignment): New decl. - (DWARF2_DEFAULT_RETURN_COLUMN, DWARF2_CIE_DATA_ALIGNMENT): Define. - * config/tc-sparc.c: Include dw2gencfi.h. - (sparc_cie_data_alignment): New variable. - (md_begin): Initialize it. - (sparc_cfi_frame_initial_instructions): New function. - (sparc_regname_to_dw2regnum): Likewise. - (sparc_cfi_emit_pcrel_expr): Likewise. - * doc/as.texinfo: Document .cfi_window_save. - - * config/tc-sparc.c (s_common): Cast last argument to long and - change format string to shut up warning. -testsuite/ - * gas/cfi/cfi-sparc-1.s: New test. - * gas/cfi/cfi-sparc-1.d: New test. - * gas/cfi/cfi-sparc64-1.s: New test. - * gas/cfi/cfi-sparc64-1.d: New test. - * gas/cfi/cfi.exp: Run them. - ---- gas/dw2gencfi.c.jj 2003-06-18 13:57:59.000000000 -0400 -+++ gas/dw2gencfi.c 2003-08-29 14:00:41.000000000 -0400 -@@ -374,6 +374,7 @@ const pseudo_typeS cfi_pseudo_table[] = - { "cfi_same_value", dot_cfi, DW_CFA_same_value }, - { "cfi_remember_state", dot_cfi, DW_CFA_remember_state }, - { "cfi_restore_state", dot_cfi, DW_CFA_restore_state }, -+ { "cfi_window_save", dot_cfi, DW_CFA_GNU_window_save }, - { "cfi_escape", dot_cfi_escape, 0 }, - { NULL, NULL, 0 } - }; -@@ -529,6 +530,10 @@ dot_cfi (int arg) - cfi_add_CFA_restore_state (); - break; - -+ case DW_CFA_GNU_window_save: -+ cfi_add_CFA_insn (DW_CFA_GNU_window_save); -+ break; -+ - default: - abort (); - } -@@ -798,6 +803,10 @@ output_cfi_insn (struct cfi_insn_data *i - out_one (insn->insn); - break; - -+ case DW_CFA_GNU_window_save: -+ out_one (DW_CFA_GNU_window_save); -+ break; -+ - case CFI_escape: - { - struct cfi_escape_data *e; -@@ -838,7 +847,11 @@ output_cie (struct cie_entry *cie) - out_sleb128 (DWARF2_CIE_DATA_ALIGNMENT); /* Data alignment */ - out_one (cie->return_column); /* Return column */ - out_uleb128 (1); /* Augmentation size */ -+#if defined DIFF_EXPR_OK || defined tc_cfi_emit_pcrel_expr - out_one (DW_EH_PE_pcrel | DW_EH_PE_sdata4); -+#else -+ out_one (DW_EH_PE_sdata4); -+#endif - - if (cie->first) - for (i = cie->first; i != cie->last; i = i->next) -@@ -867,10 +880,22 @@ output_fde (struct fde_entry *fde, struc - exp.X_add_symbol = after_size_address; - exp.X_op_symbol = cie->start_address; - emit_expr (&exp, 4); /* CIE offset */ -- -+ -+#ifdef DIFF_EXPR_OK - exp.X_add_symbol = fde->start_address; - exp.X_op_symbol = symbol_temp_new_now (); - emit_expr (&exp, 4); /* Code offset */ -+#else -+ exp.X_op = O_symbol; -+ exp.X_add_symbol = fde->start_address; -+ exp.X_op_symbol = NULL; -+#ifdef tc_cfi_emit_pcrel_expr -+ tc_cfi_emit_pcrel_expr (&exp, 4); /* Code offset */ -+#else -+ emit_expr (&exp, 4); /* Code offset */ -+#endif -+ exp.X_op = O_subtract; -+#endif - - exp.X_add_symbol = fde->end_address; - exp.X_op_symbol = fde->start_address; /* Code length */ ---- gas/config/tc-sparc.h.jj 2003-01-24 18:37:51.000000000 -0500 -+++ gas/config/tc-sparc.h 2003-08-29 15:38:47.000000000 -0400 -@@ -174,6 +174,21 @@ extern void cons_fix_new_sparc - } \ - while (0) - --#define DWARF2_LINE_MIN_INSN_LENGTH 4 -+#define TARGET_USE_CFIPOP 1 -+ -+#define tc_cfi_frame_initial_instructions sparc_cfi_frame_initial_instructions -+extern void sparc_cfi_frame_initial_instructions PARAMS ((void)); -+ -+#define tc_regname_to_dw2regnum sparc_regname_to_dw2regnum -+extern int sparc_regname_to_dw2regnum PARAMS ((const char *regname)); -+ -+#define tc_cfi_emit_pcrel_expr sparc_cfi_emit_pcrel_expr -+extern void sparc_cfi_emit_pcrel_expr PARAMS ((expressionS *, unsigned int)); -+ -+extern int sparc_cie_data_alignment; -+ -+#define DWARF2_LINE_MIN_INSN_LENGTH 4 -+#define DWARF2_DEFAULT_RETURN_COLUMN 15 -+#define DWARF2_CIE_DATA_ALIGNMENT sparc_cie_data_alignment - - /* end of tc-sparc.h */ ---- gas/config/tc-sparc.c.jj 2003-07-02 11:01:56.000000000 -0400 -+++ gas/config/tc-sparc.c 2003-08-29 15:39:10.000000000 -0400 -@@ -26,6 +26,7 @@ - #include "subsegs.h" - - #include "opcode/sparc.h" -+#include "dw2gencfi.h" - - #ifdef OBJ_ELF - #include "elf/sparc.h" -@@ -116,6 +117,9 @@ static int target_little_endian_data; - /* Symbols for global registers on v9. */ - static symbolS *globals[8]; - -+/* The dwarf2 data alignment, adjusted for 32 or 64 bit. */ -+int sparc_cie_data_alignment; -+ - /* V9 and 86x have big and little endian data, but instructions are always big - endian. The sparclet has bi-endian support but both data and insns have - the same endianness. Global `target_big_endian' is used for data. -@@ -798,6 +802,7 @@ md_begin () - if (! default_init_p) - init_default_arch (); - -+ sparc_cie_data_alignment = sparc_arch_size == 64 ? -8 : -4; - op_hash = hash_new (); - - while (i < (unsigned int) sparc_num_opcodes) -@@ -3804,8 +3809,8 @@ s_common (ignore) - { - if (S_GET_VALUE (symbolP) != (valueT) size) - { -- as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %d."), -- S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), size); -+ as_warn (_("Length of .comm \"%s\" is already %ld. Not changed to %ld."), -+ S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), (long) size); - } - } - else -@@ -4482,4 +4487,63 @@ cons_fix_new_sparc (frag, where, nbytes, - } - - fix_new_exp (frag, where, (int) nbytes, exp, 0, r); -+ sparc_cons_special_reloc = NULL; -+} -+ -+void -+sparc_cfi_frame_initial_instructions () -+{ -+ cfi_add_CFA_def_cfa (14, sparc_arch_size == 64 ? 0x7ff : 0); -+} -+ -+int -+sparc_regname_to_dw2regnum (const char *regname) -+{ -+ char *p, *q; -+ -+ if (!regname[0]) -+ return -1; -+ -+ q = "goli"; -+ p = strchr (q, regname[0]); -+ if (p) -+ { -+ if (regname[1] < '0' || regname[1] > '8' || regname[2]) -+ return -1; -+ return (p - q) * 8 + regname[1] - '0'; -+ } -+ if (regname[0] == 's' && regname[1] == 'p' && !regname[2]) -+ return 14; -+ if (regname[0] == 'f' && regname[1] == 'p' && !regname[2]) -+ return 30; -+ if (regname[0] == 'f' || regname[0] == 'r') -+ { -+ unsigned int regnum; -+ -+ regnum = strtoul (regname + 1, &q, 10); -+ if (p == q || *q) -+ return -1; -+ if (regnum >= ((regname[0] == 'f' -+ && SPARC_OPCODE_ARCH_V9_P (max_architecture)) -+ ? 64 : 32)) -+ return -1; -+ if (regname[0] == 'f') -+ { -+ regnum += 32; -+ if (regnum >= 64 && (regnum & 1)) -+ return -1; -+ } -+ return regnum; -+ } -+ return -1; -+} -+ -+void -+sparc_cfi_emit_pcrel_expr (expressionS *exp, unsigned int nbytes) -+{ -+ sparc_cons_special_reloc = "disp"; -+ sparc_no_align_cons = 1; -+ emit_expr (exp, nbytes); -+ sparc_no_align_cons = 0; -+ sparc_cons_special_reloc = NULL; - } ---- gas/doc/as.texinfo.jj 2003-07-29 05:40:36.000000000 -0400 -+++ gas/doc/as.texinfo 2003-08-29 15:29:21.000000000 -0400 -@@ -4050,6 +4050,9 @@ using the known displacement of the CFA - This is often easier to use, because the number will match the - code it's annotating. - -+@section @code{.cfi_window_save} -+SPARC register window has been saved. -+ - @section @code{.cfi_escape} @var{expression}[, @dots{}] - Allows the user to add arbitrary bytes to the unwind info. One - might use this to add OS-specific CFI opcodes, or generic CFI ---- gas/testsuite/gas/cfi/cfi-sparc-1.s.jj 2003-08-28 05:56:33.000000000 -0400 -+++ gas/testsuite/gas/cfi/cfi-sparc-1.s 2003-08-28 06:26:37.000000000 -0400 -@@ -0,0 +1,23 @@ -+#; $ as -o test.o -32 gas-cfi-test.s && gcc -m32 -nostdlib -o test test.o -+ -+ .file "a.c" -+ .text -+ .align 4 -+ .globl foo -+ .type foo, @function -+foo: -+ .cfi_startproc -+ save %sp, -104, %sp -+ .cfi_def_cfa_register %fp -+ .cfi_window_save -+ .cfi_register %o7, %i7 -+ add %i0, 1, %o0 -+ call bar, 0 -+ add %i0, 2, %i0 -+ call bar, 0 -+ mov %i0, %o0 -+ add %o0, 3, %o0 -+ ret -+ restore %g0, %o0, %o0 -+ .cfi_endproc -+ .size foo, .-foo ---- gas/testsuite/gas/cfi/cfi-sparc64-1.s.jj 2003-08-28 05:56:33.000000000 -0400 -+++ gas/testsuite/gas/cfi/cfi-sparc64-1.s 2003-08-28 06:26:44.000000000 -0400 -@@ -0,0 +1,26 @@ -+#; $ as -o test.o -64 gas-cfi-test.s && gcc -m64 -nostdlib -o test test.o -+ -+ .file "a.c" -+ .text -+ .align 4 -+ .globl foo -+ .type foo, @function -+foo: -+ .cfi_startproc -+ save %sp, -192, %sp -+ .cfi_def_cfa_register %fp -+ .cfi_window_save -+ .cfi_register %o7, %i7 -+ add %i0, 1, %o0 -+ add %i0, 2, %i0 -+ call bar, 0 -+ sra %o0, 0, %o0 -+ sra %i0, 0, %i0 -+ call bar, 0 -+ mov %i0, %o0 -+ add %o0, 3, %o0 -+ sra %o0, 0, %o0 -+ ret -+ restore %g0, %o0, %o0 -+ .cfi_endproc -+ .size foo, .-foo ---- gas/testsuite/gas/cfi/cfi-sparc-1.d.jj 2003-08-29 15:17:54.000000000 -0400 -+++ gas/testsuite/gas/cfi/cfi-sparc-1.d 2003-08-29 15:17:44.000000000 -0400 -@@ -0,0 +1,22 @@ -+#readelf: -wf -+#name: CFI on SPARC 32-bit -+#as: -32 -+ -+The section .eh_frame contains: -+ -+00000000 00000010 00000000 CIE -+ Version: 1 -+ Augmentation: "zR" -+ Code alignment factor: 4 -+ Data alignment factor: -4 -+ Return address column: 15 -+ Augmentation data: 1b -+ -+ DW_CFA_def_cfa: r14 ofs 0 -+ -+00000014 00000014 00000018 FDE cie=00000000 pc=0000001c..00000040 -+ DW_CFA_advance_loc: 4 to 00000020 -+ DW_CFA_def_cfa_reg: r30 -+ DW_CFA_GNU_window_save -+ DW_CFA_register: r15 in r31 -+ ---- gas/testsuite/gas/cfi/cfi-sparc64-1.d.jj 2003-08-29 15:17:51.000000000 -0400 -+++ gas/testsuite/gas/cfi/cfi-sparc64-1.d 2003-08-29 15:17:35.000000000 -0400 -@@ -0,0 +1,25 @@ -+#readelf: -wf -+#name: CFI on SPARC 64-bit -+#as: -64 -+ -+The section .eh_frame contains: -+ -+00000000 00000011 00000000 CIE -+ Version: 1 -+ Augmentation: "zR" -+ Code alignment factor: 4 -+ Data alignment factor: -8 -+ Return address column: 15 -+ Augmentation data: 1b -+ -+ DW_CFA_def_cfa: r14 ofs 2047 -+ -+00000015 00000017 00000019 FDE cie=00000000 pc=0000001d..0000004d -+ DW_CFA_advance_loc: 4 to 00000021 -+ DW_CFA_def_cfa_reg: r30 -+ DW_CFA_GNU_window_save -+ DW_CFA_register: r15 in r31 -+ DW_CFA_nop -+ DW_CFA_nop -+ DW_CFA_nop -+ ---- gas/testsuite/gas/cfi/cfi.exp.jj 2003-08-10 15:56:11.000000000 -0400 -+++ gas/testsuite/gas/cfi/cfi.exp 2003-08-29 15:23:29.000000000 -0400 -@@ -39,6 +39,16 @@ if [istarget "x86_64-*"] then { - } elseif { [istarget "m68*-*"] } then { - run_dump_test "cfi-m68k" - -+} elseif { [istarget sparc*-*-*] } then { -+ global NM -+ global NMFLAGS -+ global srcdir -+ -+ catch "exec $srcdir/lib/run $NM $NMFLAGS --help" nm_help -+ run_dump_test "cfi-sparc-1" -+ if { [regexp "elf64\[_-\]sparc" $nm_help] } then { -+ run_dump_test "cfi-sparc64-1" -+ } - } else { - return - } |