From d1cfa5e1a4dfdaedde26115b8c43f1bfcf5918a8 Mon Sep 17 00:00:00 2001 From: Thomas Sailer Date: Mar 03 2017 13:00:51 +0000 Subject: start upgrading to gcc6 --- diff --git a/gcc49-aarch64-async-unw-tables.patch b/gcc49-aarch64-async-unw-tables.patch deleted file mode 100644 index feec149..0000000 --- a/gcc49-aarch64-async-unw-tables.patch +++ /dev/null @@ -1,35 +0,0 @@ -2014-04-07 Richard Henderson - - * common/config/aarch64/aarch64-common.c (TARGET_OPTION_INIT_STRUCT): - Define. - (aarch64_option_init_struct): New function. - ---- gcc/common/config/aarch64/aarch64-common.c -+++ gcc/common/config/aarch64/aarch64-common.c -@@ -39,6 +39,9 @@ - #undef TARGET_OPTION_OPTIMIZATION_TABLE - #define TARGET_OPTION_OPTIMIZATION_TABLE aarch_option_optimization_table - -+#undef TARGET_OPTION_INIT_STRUCT -+#define TARGET_OPTION_INIT_STRUCT aarch64_option_init_struct -+ - /* Set default optimization options. */ - static const struct default_options aarch_option_optimization_table[] = - { -@@ -47,6 +50,16 @@ static const struct default_options aarch_option_optimization_table[] = - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -+/* Implement TARGET_OPTION_INIT_STRUCT. */ -+ -+static void -+aarch64_option_init_struct (struct gcc_options *opts) -+{ -+ /* By default, always emit DWARF-2 unwind info. This allows debugging -+ without maintaining a stack frame back-chain. */ -+ opts->x_flag_asynchronous_unwind_tables = 1; -+} -+ - /* Implement TARGET_HANDLE_OPTION. - This function handles the target specific options for CPU/target selection. - diff --git a/gcc49-aarch64-unwind-opt.patch b/gcc49-aarch64-unwind-opt.patch deleted file mode 100644 index 3ad55ab..0000000 --- a/gcc49-aarch64-unwind-opt.patch +++ /dev/null @@ -1,338 +0,0 @@ -2014-08-08 Richard Henderson - - * config/aarch64/aarch64.c (aarch64_save_or_restore_fprs): Add - cfi_ops argument, for restore put REG_CFA_RESTORE notes into - *cfi_ops rather than on individual insns. Cleanup. - (aarch64_save_or_restore_callee_save_registers): Likewise. - (aarch64_expand_prologue): Adjust caller. - (aarch64_expand_epilogue): Likewise. Cleanup. Emit queued cfi_ops - on the stack restore insn. - ---- gcc/config/aarch64/aarch64.c.jj 2014-07-08 17:38:17.398231989 +0200 -+++ gcc/config/aarch64/aarch64.c 2014-08-13 10:02:45.599757706 +0200 -@@ -1810,8 +1810,7 @@ aarch64_register_saved_on_entry (int reg - - static void - aarch64_save_or_restore_fprs (int start_offset, int increment, -- bool restore, rtx base_rtx) -- -+ bool restore, rtx base_rtx, rtx *cfi_ops) - { - unsigned regno; - unsigned regno2; -@@ -1819,16 +1818,16 @@ aarch64_save_or_restore_fprs (int start_ - rtx (*gen_mem_ref)(enum machine_mode, rtx) - = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM; - -- - for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++) - { - if (aarch64_register_saved_on_entry (regno)) - { -- rtx mem; -+ rtx mem, reg1; - mem = gen_mem_ref (DFmode, - plus_constant (Pmode, - base_rtx, - start_offset)); -+ reg1 = gen_rtx_REG (DFmode, regno); - - for (regno2 = regno + 1; - regno2 <= V31_REGNUM -@@ -1840,56 +1839,51 @@ aarch64_save_or_restore_fprs (int start_ - if (regno2 <= V31_REGNUM && - aarch64_register_saved_on_entry (regno2)) - { -- rtx mem2; -+ rtx mem2, reg2; - /* Next highest register to be saved. */ - mem2 = gen_mem_ref (DFmode, - plus_constant - (Pmode, - base_rtx, - start_offset + increment)); -+ reg2 = gen_rtx_REG (DFmode, regno2); -+ - if (restore == false) - { -- insn = emit_insn -- ( gen_store_pairdf (mem, gen_rtx_REG (DFmode, regno), -- mem2, gen_rtx_REG (DFmode, regno2))); -- -+ insn = emit_insn (gen_store_pairdf (mem, reg1, mem2, reg2)); -+ /* The first part of a frame-related parallel insn -+ is always assumed to be relevant to the frame -+ calculations; subsequent parts, are only -+ frame-related if explicitly marked. */ -+ RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1; -+ RTX_FRAME_RELATED_P (insn) = 1; - } - else - { -- insn = emit_insn -- ( gen_load_pairdf (gen_rtx_REG (DFmode, regno), mem, -- gen_rtx_REG (DFmode, regno2), mem2)); -- -- add_reg_note (insn, REG_CFA_RESTORE, -- gen_rtx_REG (DFmode, regno)); -- add_reg_note (insn, REG_CFA_RESTORE, -- gen_rtx_REG (DFmode, regno2)); -+ emit_insn (gen_load_pairdf (reg1, mem, reg2, mem2)); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops); - } - -- /* The first part of a frame-related parallel insn -- is always assumed to be relevant to the frame -- calculations; subsequent parts, are only -- frame-related if explicitly marked. */ -- RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1; - regno = regno2; - start_offset += increment * 2; - } - else - { - if (restore == false) -- insn = emit_move_insn (mem, gen_rtx_REG (DFmode, regno)); -+ { -+ insn = emit_move_insn (mem, reg1); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ } - else - { -- insn = emit_move_insn (gen_rtx_REG (DFmode, regno), mem); -- add_reg_note (insn, REG_CFA_RESTORE, -- gen_rtx_REG (DImode, regno)); -+ emit_move_insn (reg1, mem); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops); - } - start_offset += increment; - } -- RTX_FRAME_RELATED_P (insn) = 1; - } - } -- - } - - -@@ -1897,13 +1891,14 @@ aarch64_save_or_restore_fprs (int start_ - restore's have to happen. */ - static void - aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset, -- bool restore) -+ bool restore, rtx *cfi_ops) - { - rtx insn; - rtx base_rtx = stack_pointer_rtx; - HOST_WIDE_INT start_offset = offset; - HOST_WIDE_INT increment = UNITS_PER_WORD; -- rtx (*gen_mem_ref)(enum machine_mode, rtx) = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM; -+ rtx (*gen_mem_ref)(enum machine_mode, rtx) -+ = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM; - unsigned limit = (frame_pointer_needed)? R28_REGNUM: R30_REGNUM; - unsigned regno; - unsigned regno2; -@@ -1912,11 +1907,13 @@ aarch64_save_or_restore_callee_save_regi - { - if (aarch64_register_saved_on_entry (regno)) - { -- rtx mem; -+ rtx mem, reg1; -+ - mem = gen_mem_ref (Pmode, - plus_constant (Pmode, - base_rtx, - start_offset)); -+ reg1 = gen_rtx_REG (DImode, regno); - - for (regno2 = regno + 1; - regno2 <= limit -@@ -1928,56 +1925,54 @@ aarch64_save_or_restore_callee_save_regi - if (regno2 <= limit && - aarch64_register_saved_on_entry (regno2)) - { -- rtx mem2; -+ rtx mem2, reg2; - /* Next highest register to be saved. */ - mem2 = gen_mem_ref (Pmode, - plus_constant - (Pmode, - base_rtx, - start_offset + increment)); -+ reg2 = gen_rtx_REG (DImode, regno2); -+ - if (restore == false) - { -- insn = emit_insn -- ( gen_store_pairdi (mem, gen_rtx_REG (DImode, regno), -- mem2, gen_rtx_REG (DImode, regno2))); -- -+ insn = emit_insn (gen_store_pairdi (mem, reg1, mem2, reg2)); -+ /* The first part of a frame-related parallel insn -+ is always assumed to be relevant to the frame -+ calculations; subsequent parts, are only -+ frame-related if explicitly marked. */ -+ RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1; -+ RTX_FRAME_RELATED_P (insn) = 1; - } - else - { -- insn = emit_insn -- ( gen_load_pairdi (gen_rtx_REG (DImode, regno), mem, -- gen_rtx_REG (DImode, regno2), mem2)); -- -- add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno)); -- add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno2)); -+ emit_insn (gen_load_pairdi (reg1, mem, reg2, mem2)); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops); - } - -- /* The first part of a frame-related parallel insn -- is always assumed to be relevant to the frame -- calculations; subsequent parts, are only -- frame-related if explicitly marked. */ -- RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, -- 1)) = 1; - regno = regno2; - start_offset += increment * 2; - } - else - { - if (restore == false) -- insn = emit_move_insn (mem, gen_rtx_REG (DImode, regno)); -+ { -+ insn = emit_move_insn (mem, reg1); -+ RTX_FRAME_RELATED_P (insn) = 1; -+ } - else - { -- insn = emit_move_insn (gen_rtx_REG (DImode, regno), mem); -- add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno)); -+ emit_move_insn (reg1, mem); -+ *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops); - } - start_offset += increment; - } -- RTX_FRAME_RELATED_P (insn) = 1; - } - } - -- aarch64_save_or_restore_fprs (start_offset, increment, restore, base_rtx); -- -+ aarch64_save_or_restore_fprs (start_offset, increment, restore, -+ base_rtx, cfi_ops); - } - - /* AArch64 stack frames generated by this compiler look like: -@@ -2179,7 +2174,7 @@ aarch64_expand_prologue (void) - } - - aarch64_save_or_restore_callee_save_registers -- (fp_offset + cfun->machine->frame.hardfp_offset, 0); -+ (fp_offset + cfun->machine->frame.hardfp_offset, 0, NULL); - } - - /* when offset >= 512, -@@ -2248,15 +2243,18 @@ aarch64_expand_epilogue (bool for_sibcal - insn = emit_insn (gen_add3_insn (stack_pointer_rtx, - hard_frame_pointer_rtx, - GEN_INT (- fp_offset))); -+ /* CFA should be calculated from the value of SP from now on. */ -+ add_reg_note (insn, REG_CFA_ADJUST_CFA, -+ gen_rtx_SET (VOIDmode, stack_pointer_rtx, -+ plus_constant (Pmode, hard_frame_pointer_rtx, -+ -fp_offset))); - RTX_FRAME_RELATED_P (insn) = 1; -- /* As SP is set to (FP - fp_offset), according to the rules in -- dwarf2cfi.c:dwarf2out_frame_debug_expr, CFA should be calculated -- from the value of SP from now on. */ - cfa_reg = stack_pointer_rtx; - } - -+ rtx cfi_ops = NULL; - aarch64_save_or_restore_callee_save_registers -- (fp_offset + cfun->machine->frame.hardfp_offset, 1); -+ (fp_offset + cfun->machine->frame.hardfp_offset, 1, &cfi_ops); - - /* Restore the frame pointer and lr if the frame pointer is needed. */ - if (offset > 0) -@@ -2264,6 +2262,8 @@ aarch64_expand_epilogue (bool for_sibcal - if (frame_pointer_needed) - { - rtx mem_fp, mem_lr; -+ rtx reg_fp = hard_frame_pointer_rtx; -+ rtx reg_lr = gen_rtx_REG (DImode, LR_REGNUM); - - if (fp_offset) - { -@@ -2276,52 +2276,36 @@ aarch64_expand_epilogue (bool for_sibcal - stack_pointer_rtx, - fp_offset - + UNITS_PER_WORD)); -- insn = emit_insn (gen_load_pairdi (hard_frame_pointer_rtx, -- mem_fp, -- gen_rtx_REG (DImode, -- LR_REGNUM), -- mem_lr)); -+ emit_insn (gen_load_pairdi (reg_fp, mem_fp, reg_lr, mem_lr)); -+ -+ insn = emit_insn (gen_add2_insn (stack_pointer_rtx, -+ GEN_INT (offset))); - } - else - { - insn = emit_insn (gen_loadwb_pairdi_di -- (stack_pointer_rtx, -- stack_pointer_rtx, -- hard_frame_pointer_rtx, -- gen_rtx_REG (DImode, LR_REGNUM), -- GEN_INT (offset), -+ (stack_pointer_rtx, stack_pointer_rtx, -+ reg_fp, reg_lr, GEN_INT (offset), - GEN_INT (GET_MODE_SIZE (DImode) + offset))); -- RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 2)) = 1; -- add_reg_note (insn, REG_CFA_ADJUST_CFA, -- (gen_rtx_SET (Pmode, stack_pointer_rtx, -- plus_constant (Pmode, cfa_reg, -- offset)))); -- } -- -- /* The first part of a frame-related parallel insn -- is always assumed to be relevant to the frame -- calculations; subsequent parts, are only -- frame-related if explicitly marked. */ -- RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1; -- RTX_FRAME_RELATED_P (insn) = 1; -- add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx); -- add_reg_note (insn, REG_CFA_RESTORE, -- gen_rtx_REG (DImode, LR_REGNUM)); -- -- if (fp_offset) -- { -- insn = emit_insn (gen_add2_insn (stack_pointer_rtx, -- GEN_INT (offset))); -- RTX_FRAME_RELATED_P (insn) = 1; - } -+ cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg_fp, cfi_ops); -+ cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg_lr, cfi_ops); - } - else - { - insn = emit_insn (gen_add2_insn (stack_pointer_rtx, - GEN_INT (offset))); -- RTX_FRAME_RELATED_P (insn) = 1; - } -+ cfi_ops = alloc_reg_note (REG_CFA_ADJUST_CFA, -+ gen_rtx_SET (VOIDmode, stack_pointer_rtx, -+ plus_constant (Pmode, cfa_reg, -+ offset)), -+ cfi_ops); -+ REG_NOTES (insn) = cfi_ops; -+ RTX_FRAME_RELATED_P (insn) = 1; - } -+ else -+ gcc_assert (cfi_ops == NULL); - - /* Stack adjustment for exception handler. */ - if (crtl->calls_eh_return) diff --git a/gcc49-cloog-dl.patch b/gcc49-cloog-dl.patch deleted file mode 100644 index 8a72509..0000000 --- a/gcc49-cloog-dl.patch +++ /dev/null @@ -1,476 +0,0 @@ ---- gcc/Makefile.in.jj 2012-12-13 17:09:20.000000000 +0100 -+++ gcc/Makefile.in 2012-12-14 11:45:22.585670055 +0100 -@@ -1006,7 +1006,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY) - # and the system's installed libraries. - LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ - $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) --BACKENDLIBS = $(CLOOGLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ -+BACKENDLIBS = $(if $(CLOOGLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ - $(ZLIB) - # Any system libraries needed just for GNAT. - SYSLIBS = @GNAT_LIBEXC@ -@@ -2011,6 +2011,15 @@ $(out_object_file): $(out_file) - $(common_out_object_file): $(common_out_file) - $(COMPILE) $< - $(POSTCOMPILE) -+ -+graphite%.o : \ -+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) -+graphite.o : \ -+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) -+graphite%.o : \ -+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) -+graphite.o : \ -+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) - # - # Generate header and source files from the machine description, - # and compile them. ---- gcc/graphite-poly.h.jj 2012-12-13 11:31:27.000000000 +0100 -+++ gcc/graphite-poly.h 2012-12-14 13:41:41.970800726 +0100 -@@ -22,6 +22,371 @@ along with GCC; see the file COPYING3. - #ifndef GCC_GRAPHITE_POLY_H - #define GCC_GRAPHITE_POLY_H - -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#define DYNSYMS \ -+ DYNSYM (clast_pprint); \ -+ DYNSYM (cloog_clast_create_from_input); \ -+ DYNSYM (cloog_clast_free); \ -+ DYNSYM (cloog_domain_from_isl_set); \ -+ DYNSYM (cloog_input_alloc); \ -+ DYNSYM (cloog_isl_state_malloc); \ -+ DYNSYM (cloog_options_free); \ -+ DYNSYM (cloog_options_malloc); \ -+ DYNSYM (cloog_scattering_from_isl_map); \ -+ DYNSYM (cloog_state_free); \ -+ DYNSYM (cloog_union_domain_add_domain); \ -+ DYNSYM (cloog_union_domain_alloc); \ -+ DYNSYM (cloog_union_domain_set_name); \ -+ DYNSYM (isl_aff_add_coefficient_si); \ -+ DYNSYM (isl_aff_add_constant); \ -+ DYNSYM (isl_aff_free); \ -+ DYNSYM (isl_aff_get_coefficient); \ -+ DYNSYM (isl_aff_get_space); \ -+ DYNSYM (isl_aff_mod); \ -+ DYNSYM (isl_aff_set_coefficient_si); \ -+ DYNSYM (isl_aff_set_constant_si); \ -+ DYNSYM (isl_aff_zero_on_domain); \ -+ DYNSYM (isl_band_free); \ -+ DYNSYM (isl_band_get_children); \ -+ DYNSYM (isl_band_get_partial_schedule); \ -+ DYNSYM (isl_band_has_children); \ -+ DYNSYM (isl_band_list_free); \ -+ DYNSYM (isl_band_list_get_band); \ -+ DYNSYM (isl_band_list_get_ctx); \ -+ DYNSYM (isl_band_list_n_band); \ -+ DYNSYM (isl_band_member_is_zero_distance); \ -+ DYNSYM (isl_band_n_member); \ -+ DYNSYM (isl_basic_map_add_constraint); \ -+ DYNSYM (isl_basic_map_project_out); \ -+ DYNSYM (isl_basic_map_universe); \ -+ DYNSYM (isl_constraint_set_coefficient); \ -+ DYNSYM (isl_constraint_set_coefficient_si); \ -+ DYNSYM (isl_constraint_set_constant); \ -+ DYNSYM (isl_constraint_set_constant_si); \ -+ DYNSYM (isl_ctx_alloc); \ -+ DYNSYM (isl_ctx_free); \ -+ DYNSYM (isl_equality_alloc); \ -+ DYNSYM (isl_id_alloc); \ -+ DYNSYM (isl_id_copy); \ -+ DYNSYM (isl_id_free); \ -+ DYNSYM (isl_inequality_alloc); \ -+ DYNSYM (isl_local_space_copy); \ -+ DYNSYM (isl_local_space_free); \ -+ DYNSYM (isl_local_space_from_space); \ -+ DYNSYM (isl_local_space_range); \ -+ DYNSYM (isl_map_add_constraint); \ -+ DYNSYM (isl_map_add_dims); \ -+ DYNSYM (isl_map_align_params); \ -+ DYNSYM (isl_map_apply_range); \ -+ DYNSYM (isl_map_copy); \ -+ DYNSYM (isl_map_dim); \ -+ DYNSYM (isl_map_dump); \ -+ DYNSYM (isl_map_equate); \ -+ DYNSYM (isl_map_fix_si); \ -+ DYNSYM (isl_map_flat_product); \ -+ DYNSYM (isl_map_flat_range_product); \ -+ DYNSYM (isl_map_free); \ -+ DYNSYM (isl_map_from_basic_map); \ -+ DYNSYM (isl_map_from_pw_aff); \ -+ DYNSYM (isl_map_from_union_map); \ -+ DYNSYM (isl_map_get_ctx); \ -+ DYNSYM (isl_map_get_space); \ -+ DYNSYM (isl_map_get_tuple_id); \ -+ DYNSYM (isl_map_insert_dims); \ -+ DYNSYM (isl_map_intersect); \ -+ DYNSYM (isl_map_intersect_domain); \ -+ DYNSYM (isl_map_intersect_range); \ -+ DYNSYM (isl_map_is_empty); \ -+ DYNSYM (isl_map_lex_ge); \ -+ DYNSYM (isl_map_lex_le); \ -+ DYNSYM (isl_map_n_out); \ -+ DYNSYM (isl_map_range); \ -+ DYNSYM (isl_map_set_tuple_id); \ -+ DYNSYM (isl_map_universe); \ -+ DYNSYM (isl_options_set_on_error); \ -+ DYNSYM (isl_options_set_schedule_fuse); \ -+ DYNSYM (isl_options_set_schedule_max_constant_term); \ -+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \ -+ DYNSYM (isl_printer_free); \ -+ DYNSYM (isl_printer_print_aff); \ -+ DYNSYM (isl_printer_print_constraint); \ -+ DYNSYM (isl_printer_print_map); \ -+ DYNSYM (isl_printer_print_set); \ -+ DYNSYM (isl_printer_to_file); \ -+ DYNSYM (isl_pw_aff_add); \ -+ DYNSYM (isl_pw_aff_alloc); \ -+ DYNSYM (isl_pw_aff_copy); \ -+ DYNSYM (isl_pw_aff_eq_set); \ -+ DYNSYM (isl_pw_aff_free); \ -+ DYNSYM (isl_pw_aff_from_aff); \ -+ DYNSYM (isl_pw_aff_ge_set); \ -+ DYNSYM (isl_pw_aff_gt_set); \ -+ DYNSYM (isl_pw_aff_is_cst); \ -+ DYNSYM (isl_pw_aff_le_set); \ -+ DYNSYM (isl_pw_aff_lt_set); \ -+ DYNSYM (isl_pw_aff_mod); \ -+ DYNSYM (isl_pw_aff_mul); \ -+ DYNSYM (isl_pw_aff_ne_set); \ -+ DYNSYM (isl_pw_aff_nonneg_set); \ -+ DYNSYM (isl_pw_aff_set_tuple_id); \ -+ DYNSYM (isl_pw_aff_sub); \ -+ DYNSYM (isl_pw_aff_zero_set); \ -+ DYNSYM (isl_schedule_free); \ -+ DYNSYM (isl_schedule_get_band_forest); \ -+ DYNSYM (isl_set_add_constraint); \ -+ DYNSYM (isl_set_add_dims); \ -+ DYNSYM (isl_set_apply); \ -+ DYNSYM (isl_set_coalesce); \ -+ DYNSYM (isl_set_copy); \ -+ DYNSYM (isl_set_dim); \ -+ DYNSYM (isl_set_fix_si); \ -+ DYNSYM (isl_set_free); \ -+ DYNSYM (isl_set_from_cloog_domain); \ -+ DYNSYM (isl_set_get_space); \ -+ DYNSYM (isl_set_get_tuple_id); \ -+ DYNSYM (isl_set_intersect); \ -+ DYNSYM (isl_set_is_empty); \ -+ DYNSYM (isl_set_max); \ -+ DYNSYM (isl_set_min); \ -+ DYNSYM (isl_set_n_dim); \ -+ DYNSYM (isl_set_nat_universe); \ -+ DYNSYM (isl_set_project_out); \ -+ DYNSYM (isl_set_set_tuple_id); \ -+ DYNSYM (isl_set_universe); \ -+ DYNSYM (isl_space_add_dims); \ -+ DYNSYM (isl_space_alloc); \ -+ DYNSYM (isl_space_copy); \ -+ DYNSYM (isl_space_dim); \ -+ DYNSYM (isl_space_domain); \ -+ DYNSYM (isl_space_find_dim_by_id); \ -+ DYNSYM (isl_space_free); \ -+ DYNSYM (isl_space_from_domain); \ -+ DYNSYM (isl_space_get_tuple_id); \ -+ DYNSYM (isl_space_params_alloc); \ -+ DYNSYM (isl_space_range); \ -+ DYNSYM (isl_space_set_alloc); \ -+ DYNSYM (isl_space_set_dim_id); \ -+ DYNSYM (isl_space_set_tuple_id); \ -+ DYNSYM (isl_union_map_add_map); \ -+ DYNSYM (isl_union_map_align_params); \ -+ DYNSYM (isl_union_map_apply_domain); \ -+ DYNSYM (isl_union_map_apply_range); \ -+ DYNSYM (isl_union_map_compute_flow); \ -+ DYNSYM (isl_union_map_copy); \ -+ DYNSYM (isl_union_map_empty); \ -+ DYNSYM (isl_union_map_flat_range_product); \ -+ DYNSYM (isl_union_map_foreach_map); \ -+ DYNSYM (isl_union_map_free); \ -+ DYNSYM (isl_union_map_from_map); \ -+ DYNSYM (isl_union_map_get_ctx); \ -+ DYNSYM (isl_union_map_get_space); \ -+ DYNSYM (isl_union_map_gist_domain); \ -+ DYNSYM (isl_union_map_gist_range); \ -+ DYNSYM (isl_union_map_intersect_domain); \ -+ DYNSYM (isl_union_map_is_empty); \ -+ DYNSYM (isl_union_map_subtract); \ -+ DYNSYM (isl_union_map_union); \ -+ DYNSYM (isl_union_set_add_set); \ -+ DYNSYM (isl_union_set_compute_schedule); \ -+ DYNSYM (isl_union_set_copy); \ -+ DYNSYM (isl_union_set_empty); \ -+ DYNSYM (isl_union_set_from_set); \ -+ DYNSYM (stmt_ass); \ -+ DYNSYM (stmt_block); \ -+ DYNSYM (stmt_for); \ -+ DYNSYM (stmt_guard); \ -+ DYNSYM (stmt_root); \ -+ DYNSYM (stmt_user); -+extern struct cloog_pointers_s__ -+{ -+ bool inited; -+ void *h; -+#define DYNSYM(x) __typeof (x) *p_##x -+ DYNSYMS -+#undef DYNSYM -+} cloog_pointers__; -+ -+#define cloog_block_alloc (*cloog_pointers__.p_cloog_block_alloc) -+#define clast_pprint (*cloog_pointers__.p_clast_pprint) -+#define cloog_clast_create_from_input (*cloog_pointers__.p_cloog_clast_create_from_input) -+#define cloog_clast_free (*cloog_pointers__.p_cloog_clast_free) -+#define cloog_domain_from_isl_set (*cloog_pointers__.p_cloog_domain_from_isl_set) -+#define cloog_input_alloc (*cloog_pointers__.p_cloog_input_alloc) -+#define cloog_isl_state_malloc (*cloog_pointers__.p_cloog_isl_state_malloc) -+#define cloog_options_free (*cloog_pointers__.p_cloog_options_free) -+#define cloog_options_malloc (*cloog_pointers__.p_cloog_options_malloc) -+#define cloog_scattering_from_isl_map (*cloog_pointers__.p_cloog_scattering_from_isl_map) -+#define cloog_state_free (*cloog_pointers__.p_cloog_state_free) -+#define cloog_union_domain_add_domain (*cloog_pointers__.p_cloog_union_domain_add_domain) -+#define cloog_union_domain_alloc (*cloog_pointers__.p_cloog_union_domain_alloc) -+#define cloog_union_domain_set_name (*cloog_pointers__.p_cloog_union_domain_set_name) -+#define isl_aff_add_coefficient_si (*cloog_pointers__.p_isl_aff_add_coefficient_si) -+#define isl_aff_add_constant (*cloog_pointers__.p_isl_aff_add_constant) -+#define isl_aff_free (*cloog_pointers__.p_isl_aff_free) -+#define isl_aff_get_coefficient (*cloog_pointers__.p_isl_aff_get_coefficient) -+#define isl_aff_get_space (*cloog_pointers__.p_isl_aff_get_space) -+#define isl_aff_mod (*cloog_pointers__.p_isl_aff_mod) -+#define isl_aff_set_coefficient_si (*cloog_pointers__.p_isl_aff_set_coefficient_si) -+#define isl_aff_set_constant_si (*cloog_pointers__.p_isl_aff_set_constant_si) -+#define isl_aff_zero_on_domain (*cloog_pointers__.p_isl_aff_zero_on_domain) -+#define isl_band_free (*cloog_pointers__.p_isl_band_free) -+#define isl_band_get_children (*cloog_pointers__.p_isl_band_get_children) -+#define isl_band_get_partial_schedule (*cloog_pointers__.p_isl_band_get_partial_schedule) -+#define isl_band_has_children (*cloog_pointers__.p_isl_band_has_children) -+#define isl_band_list_free (*cloog_pointers__.p_isl_band_list_free) -+#define isl_band_list_get_band (*cloog_pointers__.p_isl_band_list_get_band) -+#define isl_band_list_get_ctx (*cloog_pointers__.p_isl_band_list_get_ctx) -+#define isl_band_list_n_band (*cloog_pointers__.p_isl_band_list_n_band) -+#define isl_band_member_is_zero_distance (*cloog_pointers__.p_isl_band_member_is_zero_distance) -+#define isl_band_n_member (*cloog_pointers__.p_isl_band_n_member) -+#define isl_basic_map_add_constraint (*cloog_pointers__.p_isl_basic_map_add_constraint) -+#define isl_basic_map_project_out (*cloog_pointers__.p_isl_basic_map_project_out) -+#define isl_basic_map_universe (*cloog_pointers__.p_isl_basic_map_universe) -+#define isl_constraint_set_coefficient (*cloog_pointers__.p_isl_constraint_set_coefficient) -+#define isl_constraint_set_coefficient_si (*cloog_pointers__.p_isl_constraint_set_coefficient_si) -+#define isl_constraint_set_constant (*cloog_pointers__.p_isl_constraint_set_constant) -+#define isl_constraint_set_constant_si (*cloog_pointers__.p_isl_constraint_set_constant_si) -+#define isl_ctx_alloc (*cloog_pointers__.p_isl_ctx_alloc) -+#define isl_ctx_free (*cloog_pointers__.p_isl_ctx_free) -+#define isl_equality_alloc (*cloog_pointers__.p_isl_equality_alloc) -+#define isl_id_alloc (*cloog_pointers__.p_isl_id_alloc) -+#define isl_id_copy (*cloog_pointers__.p_isl_id_copy) -+#define isl_id_free (*cloog_pointers__.p_isl_id_free) -+#define isl_inequality_alloc (*cloog_pointers__.p_isl_inequality_alloc) -+#define isl_local_space_copy (*cloog_pointers__.p_isl_local_space_copy) -+#define isl_local_space_free (*cloog_pointers__.p_isl_local_space_free) -+#define isl_local_space_from_space (*cloog_pointers__.p_isl_local_space_from_space) -+#define isl_local_space_range (*cloog_pointers__.p_isl_local_space_range) -+#define isl_map_add_constraint (*cloog_pointers__.p_isl_map_add_constraint) -+#define isl_map_add_dims (*cloog_pointers__.p_isl_map_add_dims) -+#define isl_map_align_params (*cloog_pointers__.p_isl_map_align_params) -+#define isl_map_apply_range (*cloog_pointers__.p_isl_map_apply_range) -+#define isl_map_copy (*cloog_pointers__.p_isl_map_copy) -+#define isl_map_dim (*cloog_pointers__.p_isl_map_dim) -+#define isl_map_dump (*cloog_pointers__.p_isl_map_dump) -+#define isl_map_equate (*cloog_pointers__.p_isl_map_equate) -+#define isl_map_fix_si (*cloog_pointers__.p_isl_map_fix_si) -+#define isl_map_flat_product (*cloog_pointers__.p_isl_map_flat_product) -+#define isl_map_flat_range_product (*cloog_pointers__.p_isl_map_flat_range_product) -+#define isl_map_free (*cloog_pointers__.p_isl_map_free) -+#define isl_map_from_basic_map (*cloog_pointers__.p_isl_map_from_basic_map) -+#define isl_map_from_pw_aff (*cloog_pointers__.p_isl_map_from_pw_aff) -+#define isl_map_from_union_map (*cloog_pointers__.p_isl_map_from_union_map) -+#define isl_map_get_ctx (*cloog_pointers__.p_isl_map_get_ctx) -+#define isl_map_get_space (*cloog_pointers__.p_isl_map_get_space) -+#define isl_map_get_tuple_id (*cloog_pointers__.p_isl_map_get_tuple_id) -+#define isl_map_insert_dims (*cloog_pointers__.p_isl_map_insert_dims) -+#define isl_map_intersect (*cloog_pointers__.p_isl_map_intersect) -+#define isl_map_intersect_domain (*cloog_pointers__.p_isl_map_intersect_domain) -+#define isl_map_intersect_range (*cloog_pointers__.p_isl_map_intersect_range) -+#define isl_map_is_empty (*cloog_pointers__.p_isl_map_is_empty) -+#define isl_map_lex_ge (*cloog_pointers__.p_isl_map_lex_ge) -+#define isl_map_lex_le (*cloog_pointers__.p_isl_map_lex_le) -+#define isl_map_n_out (*cloog_pointers__.p_isl_map_n_out) -+#define isl_map_range (*cloog_pointers__.p_isl_map_range) -+#define isl_map_set_tuple_id (*cloog_pointers__.p_isl_map_set_tuple_id) -+#define isl_map_universe (*cloog_pointers__.p_isl_map_universe) -+#define isl_options_set_on_error (*cloog_pointers__.p_isl_options_set_on_error) -+#define isl_options_set_schedule_fuse (*cloog_pointers__.p_isl_options_set_schedule_fuse) -+#define isl_options_set_schedule_max_constant_term (*cloog_pointers__.p_isl_options_set_schedule_max_constant_term) -+#define isl_options_set_schedule_maximize_band_depth (*cloog_pointers__.p_isl_options_set_schedule_maximize_band_depth) -+#define isl_printer_free (*cloog_pointers__.p_isl_printer_free) -+#define isl_printer_print_aff (*cloog_pointers__.p_isl_printer_print_aff) -+#define isl_printer_print_constraint (*cloog_pointers__.p_isl_printer_print_constraint) -+#define isl_printer_print_map (*cloog_pointers__.p_isl_printer_print_map) -+#define isl_printer_print_set (*cloog_pointers__.p_isl_printer_print_set) -+#define isl_printer_to_file (*cloog_pointers__.p_isl_printer_to_file) -+#define isl_pw_aff_add (*cloog_pointers__.p_isl_pw_aff_add) -+#define isl_pw_aff_alloc (*cloog_pointers__.p_isl_pw_aff_alloc) -+#define isl_pw_aff_copy (*cloog_pointers__.p_isl_pw_aff_copy) -+#define isl_pw_aff_eq_set (*cloog_pointers__.p_isl_pw_aff_eq_set) -+#define isl_pw_aff_free (*cloog_pointers__.p_isl_pw_aff_free) -+#define isl_pw_aff_from_aff (*cloog_pointers__.p_isl_pw_aff_from_aff) -+#define isl_pw_aff_ge_set (*cloog_pointers__.p_isl_pw_aff_ge_set) -+#define isl_pw_aff_gt_set (*cloog_pointers__.p_isl_pw_aff_gt_set) -+#define isl_pw_aff_is_cst (*cloog_pointers__.p_isl_pw_aff_is_cst) -+#define isl_pw_aff_le_set (*cloog_pointers__.p_isl_pw_aff_le_set) -+#define isl_pw_aff_lt_set (*cloog_pointers__.p_isl_pw_aff_lt_set) -+#define isl_pw_aff_mod (*cloog_pointers__.p_isl_pw_aff_mod) -+#define isl_pw_aff_mul (*cloog_pointers__.p_isl_pw_aff_mul) -+#define isl_pw_aff_ne_set (*cloog_pointers__.p_isl_pw_aff_ne_set) -+#define isl_pw_aff_nonneg_set (*cloog_pointers__.p_isl_pw_aff_nonneg_set) -+#define isl_pw_aff_set_tuple_id (*cloog_pointers__.p_isl_pw_aff_set_tuple_id) -+#define isl_pw_aff_sub (*cloog_pointers__.p_isl_pw_aff_sub) -+#define isl_pw_aff_zero_set (*cloog_pointers__.p_isl_pw_aff_zero_set) -+#define isl_schedule_free (*cloog_pointers__.p_isl_schedule_free) -+#define isl_schedule_get_band_forest (*cloog_pointers__.p_isl_schedule_get_band_forest) -+#define isl_set_add_constraint (*cloog_pointers__.p_isl_set_add_constraint) -+#define isl_set_add_dims (*cloog_pointers__.p_isl_set_add_dims) -+#define isl_set_apply (*cloog_pointers__.p_isl_set_apply) -+#define isl_set_coalesce (*cloog_pointers__.p_isl_set_coalesce) -+#define isl_set_copy (*cloog_pointers__.p_isl_set_copy) -+#define isl_set_dim (*cloog_pointers__.p_isl_set_dim) -+#define isl_set_fix_si (*cloog_pointers__.p_isl_set_fix_si) -+#define isl_set_free (*cloog_pointers__.p_isl_set_free) -+#define isl_set_from_cloog_domain (*cloog_pointers__.p_isl_set_from_cloog_domain) -+#define isl_set_get_space (*cloog_pointers__.p_isl_set_get_space) -+#define isl_set_get_tuple_id (*cloog_pointers__.p_isl_set_get_tuple_id) -+#define isl_set_intersect (*cloog_pointers__.p_isl_set_intersect) -+#define isl_set_is_empty (*cloog_pointers__.p_isl_set_is_empty) -+#define isl_set_max (*cloog_pointers__.p_isl_set_max) -+#define isl_set_min (*cloog_pointers__.p_isl_set_min) -+#define isl_set_n_dim (*cloog_pointers__.p_isl_set_n_dim) -+#define isl_set_nat_universe (*cloog_pointers__.p_isl_set_nat_universe) -+#define isl_set_project_out (*cloog_pointers__.p_isl_set_project_out) -+#define isl_set_set_tuple_id (*cloog_pointers__.p_isl_set_set_tuple_id) -+#define isl_set_universe (*cloog_pointers__.p_isl_set_universe) -+#define isl_space_add_dims (*cloog_pointers__.p_isl_space_add_dims) -+#define isl_space_alloc (*cloog_pointers__.p_isl_space_alloc) -+#define isl_space_copy (*cloog_pointers__.p_isl_space_copy) -+#define isl_space_dim (*cloog_pointers__.p_isl_space_dim) -+#define isl_space_domain (*cloog_pointers__.p_isl_space_domain) -+#define isl_space_find_dim_by_id (*cloog_pointers__.p_isl_space_find_dim_by_id) -+#define isl_space_free (*cloog_pointers__.p_isl_space_free) -+#define isl_space_from_domain (*cloog_pointers__.p_isl_space_from_domain) -+#define isl_space_get_tuple_id (*cloog_pointers__.p_isl_space_get_tuple_id) -+#define isl_space_params_alloc (*cloog_pointers__.p_isl_space_params_alloc) -+#define isl_space_range (*cloog_pointers__.p_isl_space_range) -+#define isl_space_set_alloc (*cloog_pointers__.p_isl_space_set_alloc) -+#define isl_space_set_dim_id (*cloog_pointers__.p_isl_space_set_dim_id) -+#define isl_space_set_tuple_id (*cloog_pointers__.p_isl_space_set_tuple_id) -+#define isl_union_map_add_map (*cloog_pointers__.p_isl_union_map_add_map) -+#define isl_union_map_align_params (*cloog_pointers__.p_isl_union_map_align_params) -+#define isl_union_map_apply_domain (*cloog_pointers__.p_isl_union_map_apply_domain) -+#define isl_union_map_apply_range (*cloog_pointers__.p_isl_union_map_apply_range) -+#define isl_union_map_compute_flow (*cloog_pointers__.p_isl_union_map_compute_flow) -+#define isl_union_map_copy (*cloog_pointers__.p_isl_union_map_copy) -+#define isl_union_map_empty (*cloog_pointers__.p_isl_union_map_empty) -+#define isl_union_map_flat_range_product (*cloog_pointers__.p_isl_union_map_flat_range_product) -+#define isl_union_map_foreach_map (*cloog_pointers__.p_isl_union_map_foreach_map) -+#define isl_union_map_free (*cloog_pointers__.p_isl_union_map_free) -+#define isl_union_map_from_map (*cloog_pointers__.p_isl_union_map_from_map) -+#define isl_union_map_get_ctx (*cloog_pointers__.p_isl_union_map_get_ctx) -+#define isl_union_map_get_space (*cloog_pointers__.p_isl_union_map_get_space) -+#define isl_union_map_gist_domain (*cloog_pointers__.p_isl_union_map_gist_domain) -+#define isl_union_map_gist_range (*cloog_pointers__.p_isl_union_map_gist_range) -+#define isl_union_map_intersect_domain (*cloog_pointers__.p_isl_union_map_intersect_domain) -+#define isl_union_map_is_empty (*cloog_pointers__.p_isl_union_map_is_empty) -+#define isl_union_map_subtract (*cloog_pointers__.p_isl_union_map_subtract) -+#define isl_union_map_union (*cloog_pointers__.p_isl_union_map_union) -+#define isl_union_set_add_set (*cloog_pointers__.p_isl_union_set_add_set) -+#define isl_union_set_compute_schedule (*cloog_pointers__.p_isl_union_set_compute_schedule) -+#define isl_union_set_copy (*cloog_pointers__.p_isl_union_set_copy) -+#define isl_union_set_empty (*cloog_pointers__.p_isl_union_set_empty) -+#define isl_union_set_from_set (*cloog_pointers__.p_isl_union_set_from_set) -+#define stmt_ass (*cloog_pointers__.p_stmt_ass) -+#define stmt_block (*cloog_pointers__.p_stmt_block) -+#define stmt_for (*cloog_pointers__.p_stmt_for) -+#define stmt_guard (*cloog_pointers__.p_stmt_guard) -+#define stmt_root (*cloog_pointers__.p_stmt_root) -+#define stmt_user (*cloog_pointers__.p_stmt_user) -+ - typedef struct poly_dr *poly_dr_p; - - typedef struct poly_bb *poly_bb_p; ---- gcc/graphite.c.jj 2012-12-13 11:31:00.000000000 +0100 -+++ gcc/graphite.c 2012-12-14 13:40:44.155136961 +0100 -@@ -78,6 +78,34 @@ along with GCC; see the file COPYING3. - - CloogState *cloog_state; - -+__typeof (cloog_pointers__) cloog_pointers__; -+ -+static bool -+init_cloog_pointers (void) -+{ -+ void *h; -+ -+ if (cloog_pointers__.inited) -+ return cloog_pointers__.h != NULL; -+ h = dlopen ("libcloog-isl.so.4", RTLD_LAZY); -+ cloog_pointers__.h = h; -+ if (h == NULL) -+ return false; -+#define DYNSYM(x) \ -+ do \ -+ { \ -+ union { __typeof (cloog_pointers__.p_##x) p; void *q; } u; \ -+ u.q = dlsym (h, #x); \ -+ if (u.q == NULL) \ -+ return false; \ -+ cloog_pointers__.p_##x = u.p; \ -+ } \ -+ while (0) -+ DYNSYMS -+#undef DYNSYM -+ return true; -+} -+ - /* Print global statistics to FILE. */ - - static void -@@ -277,6 +305,15 @@ graphite_transform_loops (void) - if (parallelized_function_p (cfun->decl)) - return; - -+ if (number_of_loops (cfun) <= 1) -+ return; -+ -+ if (!init_cloog_pointers ()) -+ { -+ sorry ("Graphite loop optimizations cannot be used"); -+ return; -+ } -+ - ctx = isl_ctx_alloc (); - isl_options_set_on_error (ctx, ISL_ON_ERROR_ABORT); - if (!graphite_initialize (ctx)) ---- gcc/graphite-clast-to-gimple.c.jj 2012-12-13 11:31:27.000000000 +0100 -+++ gcc/graphite-clast-to-gimple.c 2012-12-14 13:27:47.196519858 +0100 -@@ -910,7 +910,7 @@ compute_bounds_for_loop (struct clast_fo - from STMT_FOR. */ - - static tree --type_for_clast_for (struct clast_for *stmt_for, ivs_params_p ip) -+type_for_clast_for (struct clast_for *stmt_fora, ivs_params_p ip) - { - mpz_t bound_one, bound_two; - tree lb_type, ub_type; -@@ -918,8 +918,8 @@ type_for_clast_for (struct clast_for *st - mpz_init (bound_one); - mpz_init (bound_two); - -- lb_type = type_for_clast_expr (stmt_for->LB, ip, bound_one, bound_two); -- ub_type = type_for_clast_expr (stmt_for->UB, ip, bound_one, bound_two); -+ lb_type = type_for_clast_expr (stmt_fora->LB, ip, bound_one, bound_two); -+ ub_type = type_for_clast_expr (stmt_fora->UB, ip, bound_one, bound_two); - - mpz_clear (bound_one); - mpz_clear (bound_two); diff --git a/gcc49-cloog-dl2.patch b/gcc49-cloog-dl2.patch deleted file mode 100644 index 2f647a3..0000000 --- a/gcc49-cloog-dl2.patch +++ /dev/null @@ -1,74 +0,0 @@ -2011-04-04 Jakub Jelinek - - * toplev.c (toplev_main_argv): New variable. - (toplev_main): Initialize it. - * graphite.c (init_cloog_pointers): Load libcloog-isl.so.4 from gcc's private - directory. - ---- gcc/toplev.c.jj 2008-12-09 23:59:10.000000000 +0100 -+++ gcc/toplev.c 2009-01-27 14:33:52.000000000 +0100 -@@ -107,6 +107,8 @@ static bool no_backend; - /* Length of line when printing switch values. */ - #define MAX_LINE 75 - -+const char **toplev_main_argv; -+ - /* Decoded options, and number of such options. */ - struct cl_decoded_option *save_decoded_options; - unsigned int save_decoded_options_count; -@@ -1909,6 +1911,8 @@ toplev_main (int argc, char **argv) - - expandargv (&argc, &argv); - -+ toplev_main_argv = CONST_CAST2 (const char **, char **, argv); -+ - /* Initialization of GCC's environment, and diagnostics. */ - general_init (argv[0]); - ---- gcc/graphite.c.jj 2010-12-01 10:24:32.000000000 -0500 -+++ gcc/graphite.c 2010-12-01 11:46:07.832118193 -0500 -@@ -72,11 +72,39 @@ __typeof (cloog_pointers__) cloog_pointe - static bool - init_cloog_pointers (void) - { -- void *h; -- -- if (cloog_pointers__.inited) -- return cloog_pointers__.h != NULL; -- h = dlopen ("libcloog-isl.so.4", RTLD_LAZY); -+ void *h = NULL; -+ extern const char **toplev_main_argv; -+ char *buf, *p; -+ size_t len; -+ -+ if (cloog_pointers__.inited) -+ return cloog_pointers__.h != NULL; -+ len = progname - toplev_main_argv[0]; -+ buf = XALLOCAVAR (char, len + sizeof "libcloog-isl.so.4"); -+ memcpy (buf, toplev_main_argv[0], len); -+ strcpy (buf + len, "libcloog-isl.so.4"); -+ len += sizeof "libcloog-isl.so.4"; -+ p = strstr (buf, "/libexec/"); -+ if (p != NULL) -+ { -+ while (1) -+ { -+ char *q = strstr (p + 8, "/libexec/"); -+ if (q == NULL) -+ break; -+ p = q; -+ } -+ memmove (p + 4, p + 8, len - (p + 8 - buf)); -+ h = dlopen (buf, RTLD_LAZY); -+ if (h == NULL) -+ { -+ len = progname - toplev_main_argv[0]; -+ memcpy (buf, toplev_main_argv[0], len); -+ strcpy (buf + len, "libcloog-isl.so.4"); -+ } -+ } -+ if (h == NULL) -+ h = dlopen (buf, RTLD_LAZY); - cloog_pointers__.h = h; - if (h == NULL) - return false; diff --git a/gcc49-color-auto.patch b/gcc49-color-auto.patch deleted file mode 100644 index a8cf938..0000000 --- a/gcc49-color-auto.patch +++ /dev/null @@ -1,46 +0,0 @@ -2013-09-20 Jakub Jelinek - - * common.opt (-fdiagnostics-color=): Default to auto. - * toplev.c (process_options): Always default to - -fdiagnostics-color=auto if no -f{,no-}diagnostics-color*. - * doc/invoke.texi (-fdiagnostics-color*): Adjust documentation - of the default. - ---- gcc/common.opt.jj 2013-09-18 12:06:53.000000000 +0200 -+++ gcc/common.opt 2013-09-20 10:00:00.935823900 +0200 -@@ -1037,7 +1037,7 @@ Common Alias(fdiagnostics-color=,always, - ; - - fdiagnostics-color= --Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO) -+Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_AUTO) - -fdiagnostics-color=[never|always|auto] Colorize diagnostics - - ; Required for these enum values. ---- gcc/toplev.c.jj 2013-09-09 11:32:39.000000000 +0200 -+++ gcc/toplev.c 2013-09-20 10:10:08.198721005 +0200 -@@ -1229,10 +1229,8 @@ process_options (void) - - maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT; - -- /* Default to -fdiagnostics-color=auto if GCC_COLORS is in the environment, -- otherwise default to -fdiagnostics-color=never. */ -- if (!global_options_set.x_flag_diagnostics_show_color -- && getenv ("GCC_COLORS")) -+ /* Default to -fdiagnostics-color=auto. */ -+ if (!global_options_set.x_flag_diagnostics_show_color) - pp_show_color (global_dc->printer) - = colorize_init (DIAGNOSTICS_COLOR_AUTO); - ---- gcc/doc/invoke.texi.jj 2013-09-18 12:06:50.000000000 +0200 -+++ gcc/doc/invoke.texi 2013-09-20 10:09:29.079904455 +0200 -@@ -3046,8 +3046,7 @@ a message which is too long to fit on a - @cindex highlight, color, colour - @vindex GCC_COLORS @r{environment variable} - Use color in diagnostics. @var{WHEN} is @samp{never}, @samp{always}, --or @samp{auto}. The default is @samp{never} if @env{GCC_COLORS} environment --variable isn't present in the environment, and @samp{auto} otherwise. -+or @samp{auto}. The default is @samp{auto}. - @samp{auto} means to use color only when the standard error is a terminal. - The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are - aliases for @option{-fdiagnostics-color=always} and diff --git a/gcc49-hack.patch b/gcc49-hack.patch deleted file mode 100644 index 1903e95..0000000 --- a/gcc49-hack.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- libada/Makefile.in.jj 2009-01-14 12:07:35.000000000 +0100 -+++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100 -@@ -66,18 +66,40 @@ libsubdir := $(libdir)/gcc/$(target_nonc - ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) - ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR)) - -+DEFAULTMULTIFLAGS := -+ifeq ($(MULTISUBDIR),) -+targ:=$(subst -, ,$(target)) -+arch:=$(word 1,$(targ)) -+ifeq ($(words $(targ)),2) -+osys:=$(word 2,$(targ)) -+else -+osys:=$(word 3,$(targ)) -+endif -+ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),) -+ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64) -+DEFAULTMULTIFLAGS := -m64 -+else -+ifeq ($(strip $(filter-out s390%, $(arch))),) -+DEFAULTMULTIFLAGS := -m31 -+else -+DEFAULTMULTIFLAGS := -m32 -+endif -+endif -+endif -+endif -+ - # exeext should not be used because it's the *host* exeext. We're building - # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus - # definitions just in case something slips through the safety net provided - # by recursive make invocations in gcc/ada/Makefile.in - LIBADA_FLAGS_TO_PASS = \ - "MAKEOVERRIDES=" \ -- "LDFLAGS=$(LDFLAGS)" \ -+ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \ - "LN_S=$(LN_S)" \ - "SHELL=$(SHELL)" \ -- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ -- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ -- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ -+ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ -+ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ -+ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ - "PICFLAG_FOR_TARGET=$(PICFLAG)" \ - "THREAD_KIND=$(THREAD_KIND)" \ - "TRACE=$(TRACE)" \ -@@ -88,7 +110,7 @@ LIBADA_FLAGS_TO_PASS = \ - "exeext=.exeext.should.not.be.used " \ - 'CC=the.host.compiler.should.not.be.needed' \ - "GCC_FOR_TARGET=$(CC)" \ -- "CFLAGS=$(CFLAGS)" -+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)" - - # Rules to build gnatlib. - .PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool ---- gcc/ada/sem_util.adb (revision 161677) -+++ gcc/ada/sem_util.adb (working copy) -@@ -5487,7 +5487,7 @@ package body Sem_Util is - Exp : Node_Id; - Assn : Node_Id; - Choice : Node_Id; -- Comp_Type : Entity_Id; -+ Comp_Type : Entity_Id := Empty; - Is_Array_Aggr : Boolean; - - begin ---- config-ml.in.jj 2010-06-30 09:50:44.000000000 +0200 -+++ config-ml.in 2010-07-02 21:24:17.994211151 +0200 -@@ -516,6 +516,8 @@ multi-do: - ADAFLAGS="$(ADAFLAGS) $${flags}" \ - prefix="$(prefix)" \ - exec_prefix="$(exec_prefix)" \ -+ mandir="$(mandir)" \ -+ infodir="$(infodir)" \ - GCJFLAGS="$(GCJFLAGS) $${flags}" \ - GOCFLAGS="$(GOCFLAGS) $${flags}" \ - CXXFLAGS="$(CXXFLAGS) $${flags}" \ ---- libjava/Makefile.am.jj 2010-07-09 11:17:33.729604090 +0200 -+++ libjava/Makefile.am 2010-07-09 13:16:41.894375641 +0200 -@@ -710,7 +710,8 @@ if USE_LIBGCJ_BC - ## later. - @echo Installing dummy lib libgcj_bc.so.1.0.0; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ -- mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ -+ $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ -+ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \ - $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ - -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ - rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ ---- libjava/Makefile.in.jj 2010-07-09 11:17:34.000000000 +0200 -+++ libjava/Makefile.in 2010-07-09 13:18:07.542572270 +0200 -@@ -12665,7 +12665,8 @@ install-exec-hook: install-binPROGRAMS i - install-libexecsubPROGRAMS - @USE_LIBGCJ_BC_TRUE@ @echo Installing dummy lib libgcj_bc.so.1.0.0; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ --@USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ -+@USE_LIBGCJ_BC_TRUE@ $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ -+@USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \ - @USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ - @USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ - @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ diff --git a/gcc49-i386-libgomp.patch b/gcc49-i386-libgomp.patch deleted file mode 100644 index 45883a6..0000000 --- a/gcc49-i386-libgomp.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100 -+++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100 -@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then - ;; - *) - if test -z "$with_arch"; then -- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" -+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" - fi - esac - ;; -@@ -79,7 +79,7 @@ if test $enable_linux_futex = yes; then - config_path="linux/x86 linux posix" - case " ${CC} ${CFLAGS} " in - *" -m32 "*) -- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686" -+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" - ;; - esac - ;; diff --git a/gcc49-java-nomulti.patch b/gcc49-java-nomulti.patch deleted file mode 100644 index 17334aa..0000000 --- a/gcc49-java-nomulti.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100 -+++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100 -@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode, - [allow rebuilding of .class and .h files])) - AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes) - -+AC_ARG_ENABLE(libjava-multilib, -+ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib])) -+if test "$enable_libjava_multilib" = no; then -+ multilib=no -+ ac_configure_args="$ac_configure_args --disable-multilib" -+fi -+ - # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. - GCC_NO_EXECUTABLES - ---- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100 -+++ libjava/configure 2007-12-07 18:39:58.000000000 +0100 -@@ -1021,6 +1021,8 @@ Optional Features: - default=yes - --enable-java-maintainer-mode - allow rebuilding of .class and .h files -+ --enable-libjava-multilib -+ build libjava as multilib - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-maintainer-mode enable make rules and dependencies not useful -@@ -1973,6 +1975,16 @@ else - fi - - -+# Check whether --enable-libjava-multilib was given. -+if test "${enable_libjava_multilib+set}" = set; then -+ enableval=$enable_libjava_multilib; -+fi -+ -+if test "$enable_libjava_multilib" = no; then -+ multilib=no -+ ac_configure_args="$ac_configure_args --disable-multilib" -+fi -+ - # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. - - diff --git a/gcc49-libgo-p224.patch b/gcc49-libgo-p224.patch deleted file mode 100644 index 89e06e1..0000000 --- a/gcc49-libgo-p224.patch +++ /dev/null @@ -1,1093 +0,0 @@ ---- libgo/Makefile.am.jj 2014-01-08 13:53:06.000000000 +0100 -+++ libgo/Makefile.am 2014-03-05 15:20:09.938466093 +0100 -@@ -1133,7 +1133,6 @@ go_crypto_ecdsa_files = \ - go/crypto/ecdsa/ecdsa.go - go_crypto_elliptic_files = \ - go/crypto/elliptic/elliptic.go \ -- go/crypto/elliptic/p224.go \ - go/crypto/elliptic/p256.go - go_crypto_hmac_files = \ - go/crypto/hmac/hmac.go ---- libgo/Makefile.in.jj 2014-01-08 13:53:06.000000000 +0100 -+++ libgo/Makefile.in 2014-03-05 15:20:20.372465471 +0100 -@@ -1291,7 +1291,6 @@ go_crypto_ecdsa_files = \ - - go_crypto_elliptic_files = \ - go/crypto/elliptic/elliptic.go \ -- go/crypto/elliptic/p224.go \ - go/crypto/elliptic/p256.go - - go_crypto_hmac_files = \ ---- libgo/go/crypto/elliptic/elliptic.go.jj 2013-11-07 11:59:09.000000000 +0100 -+++ libgo/go/crypto/elliptic/elliptic.go 2014-03-05 15:21:04.186462859 +0100 -@@ -326,7 +326,6 @@ var p384 *CurveParams - var p521 *CurveParams - - func initAll() { -- initP224() - initP256() - initP384() - initP521() ---- libgo/go/crypto/elliptic/elliptic_test.go.jj 2013-11-07 11:59:09.000000000 +0100 -+++ libgo/go/crypto/elliptic/elliptic_test.go 2014-03-05 15:46:03.739373453 +0100 -@@ -5,26 +5,16 @@ - package elliptic - - import ( -- "crypto/rand" -- "encoding/hex" -- "fmt" - "math/big" - "testing" - ) - --func TestOnCurve(t *testing.T) { -- p224 := P224() -- if !p224.IsOnCurve(p224.Params().Gx, p224.Params().Gy) { -- t.Errorf("FAIL") -- } --} -- - type baseMultTest struct { - k string - x, y string - } - --var p224BaseMultTests = []baseMultTest{ -+var p256BaseMultTests = []baseMultTest{ - { - "1", - "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", -@@ -287,47 +277,12 @@ var p224BaseMultTests = []baseMultTest{ - }, - } - --func TestBaseMult(t *testing.T) { -- p224 := P224() -- for i, e := range p224BaseMultTests { -- k, ok := new(big.Int).SetString(e.k, 10) -- if !ok { -- t.Errorf("%d: bad value for k: %s", i, e.k) -- } -- x, y := p224.ScalarBaseMult(k.Bytes()) -- if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y { -- t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y) -- } -- if testing.Short() && i > 5 { -- break -- } -- } --} -- --func TestGenericBaseMult(t *testing.T) { -- // We use the P224 CurveParams directly in order to test the generic implementation. -- p224 := P224().Params() -- for i, e := range p224BaseMultTests { -- k, ok := new(big.Int).SetString(e.k, 10) -- if !ok { -- t.Errorf("%d: bad value for k: %s", i, e.k) -- } -- x, y := p224.ScalarBaseMult(k.Bytes()) -- if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y { -- t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y) -- } -- if testing.Short() && i > 5 { -- break -- } -- } --} -- - func TestP256BaseMult(t *testing.T) { - p256 := P256() - p256Generic := p256.Params() - -- scalars := make([]*big.Int, 0, len(p224BaseMultTests)+1) -- for _, e := range p224BaseMultTests { -+ scalars := make([]*big.Int, 0, len(p256BaseMultTests)+1) -+ for _, e := range p256BaseMultTests { - k, _ := new(big.Int).SetString(e.k, 10) - scalars = append(scalars, k) - } -@@ -352,7 +307,7 @@ func TestP256Mult(t *testing.T) { - p256 := P256() - p256Generic := p256.Params() - -- for i, e := range p224BaseMultTests { -+ for i, e := range p256BaseMultTests { - x, _ := new(big.Int).SetString(e.x, 16) - y, _ := new(big.Int).SetString(e.y, 16) - k, _ := new(big.Int).SetString(e.k, 10) -@@ -373,7 +328,6 @@ func TestInfinity(t *testing.T) { - name string - curve Curve - }{ -- {"p224", P224()}, - {"p256", P256()}, - } - -@@ -406,53 +360,13 @@ func TestInfinity(t *testing.T) { - } - } - --func BenchmarkBaseMult(b *testing.B) { -- b.ResetTimer() -- p224 := P224() -- e := p224BaseMultTests[25] -- k, _ := new(big.Int).SetString(e.k, 10) -- b.StartTimer() -- for i := 0; i < b.N; i++ { -- p224.ScalarBaseMult(k.Bytes()) -- } --} -- - func BenchmarkBaseMultP256(b *testing.B) { - b.ResetTimer() - p256 := P256() -- e := p224BaseMultTests[25] -+ e := p256BaseMultTests[25] - k, _ := new(big.Int).SetString(e.k, 10) - b.StartTimer() - for i := 0; i < b.N; i++ { - p256.ScalarBaseMult(k.Bytes()) - } - } -- --func TestMarshal(t *testing.T) { -- p224 := P224() -- _, x, y, err := GenerateKey(p224, rand.Reader) -- if err != nil { -- t.Error(err) -- return -- } -- serialized := Marshal(p224, x, y) -- xx, yy := Unmarshal(p224, serialized) -- if xx == nil { -- t.Error("failed to unmarshal") -- return -- } -- if xx.Cmp(x) != 0 || yy.Cmp(y) != 0 { -- t.Error("unmarshal returned different values") -- return -- } --} -- --func TestP224Overflow(t *testing.T) { -- // This tests for a specific bug in the P224 implementation. -- p224 := P224() -- pointData, _ := hex.DecodeString("049B535B45FB0A2072398A6831834624C7E32CCFD5A4B933BCEAF77F1DD945E08BBE5178F5EDF5E733388F196D2A631D2E075BB16CBFEEA15B") -- x, y := Unmarshal(p224, pointData) -- if !p224.IsOnCurve(x, y) { -- t.Error("P224 failed to validate a correct point") -- } --} ---- libgo/go/crypto/ecdsa/ecdsa_test.go.jj 2012-11-15 18:26:56.000000000 +0100 -+++ libgo/go/crypto/ecdsa/ecdsa_test.go 2014-03-05 15:26:38.461442929 +0100 -@@ -33,7 +33,6 @@ func testKeyGeneration(t *testing.T, c e - } - - func TestKeyGeneration(t *testing.T) { -- testKeyGeneration(t, elliptic.P224(), "p224") - if testing.Short() { - return - } -@@ -63,7 +62,6 @@ func testSignAndVerify(t *testing.T, c e - } - - func TestSignAndVerify(t *testing.T) { -- testSignAndVerify(t, elliptic.P224(), "p224") - if testing.Short() { - return - } -@@ -129,8 +127,6 @@ func TestVectors(t *testing.T) { - parts := strings.SplitN(line, ",", 2) - - switch parts[0] { -- case "P-224": -- pub.Curve = elliptic.P224() - case "P-256": - pub.Curve = elliptic.P256() - case "P-384": ---- libgo/go/crypto/x509/x509.go.jj 2013-11-07 11:59:09.000000000 +0100 -+++ libgo/go/crypto/x509/x509.go 2014-03-05 15:27:37.022439437 +0100 -@@ -305,9 +305,6 @@ func getPublicKeyAlgorithmFromOID(oid as - - // RFC 5480, 2.1.1.1. Named Curve - // --// secp224r1 OBJECT IDENTIFIER ::= { --// iso(1) identified-organization(3) certicom(132) curve(0) 33 } --// - // secp256r1 OBJECT IDENTIFIER ::= { - // iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) - // prime(1) 7 } -@@ -320,7 +317,6 @@ func getPublicKeyAlgorithmFromOID(oid as - // - // NB: secp256r1 is equivalent to prime256v1 - var ( -- oidNamedCurveP224 = asn1.ObjectIdentifier{1, 3, 132, 0, 33} - oidNamedCurveP256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 3, 1, 7} - oidNamedCurveP384 = asn1.ObjectIdentifier{1, 3, 132, 0, 34} - oidNamedCurveP521 = asn1.ObjectIdentifier{1, 3, 132, 0, 35} -@@ -328,8 +324,6 @@ var ( - - func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve { - switch { -- case oid.Equal(oidNamedCurveP224): -- return elliptic.P224() - case oid.Equal(oidNamedCurveP256): - return elliptic.P256() - case oid.Equal(oidNamedCurveP384): -@@ -342,8 +336,6 @@ func namedCurveFromOID(oid asn1.ObjectId - - func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, bool) { - switch curve { -- case elliptic.P224(): -- return oidNamedCurveP224, true - case elliptic.P256(): - return oidNamedCurveP256, true - case elliptic.P384(): -@@ -1373,7 +1365,7 @@ func CreateCertificate(rand io.Reader, t - hashFunc = crypto.SHA1 - case *ecdsa.PrivateKey: - switch priv.Curve { -- case elliptic.P224(), elliptic.P256(): -+ case elliptic.P256(): - hashFunc = crypto.SHA256 - signatureAlgorithm.Algorithm = oidSignatureECDSAWithSHA256 - case elliptic.P384(): ---- libgo/go/crypto/elliptic/p224.go.jj 2012-11-15 18:26:57.000000000 +0100 -+++ libgo/go/crypto/elliptic/p224.go 2014-03-05 15:30:01.189430842 +0100 -@@ -1,765 +0,0 @@ --// Copyright 2012 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --package elliptic -- --// This is a constant-time, 32-bit implementation of P224. See FIPS 186-3, --// section D.2.2. --// --// See http://www.imperialviolet.org/2010/12/04/ecc.html ([1]) for background. -- --import ( -- "math/big" --) -- --var p224 p224Curve -- --type p224Curve struct { -- *CurveParams -- gx, gy, b p224FieldElement --} -- --func initP224() { -- // See FIPS 186-3, section D.2.2 -- p224.CurveParams = new(CurveParams) -- p224.P, _ = new(big.Int).SetString("26959946667150639794667015087019630673557916260026308143510066298881", 10) -- p224.N, _ = new(big.Int).SetString("26959946667150639794667015087019625940457807714424391721682722368061", 10) -- p224.B, _ = new(big.Int).SetString("b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", 16) -- p224.Gx, _ = new(big.Int).SetString("b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", 16) -- p224.Gy, _ = new(big.Int).SetString("bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", 16) -- p224.BitSize = 224 -- -- p224FromBig(&p224.gx, p224.Gx) -- p224FromBig(&p224.gy, p224.Gy) -- p224FromBig(&p224.b, p224.B) --} -- --// P224 returns a Curve which implements P-224 (see FIPS 186-3, section D.2.2) --func P224() Curve { -- initonce.Do(initAll) -- return p224 --} -- --func (curve p224Curve) Params() *CurveParams { -- return curve.CurveParams --} -- --func (curve p224Curve) IsOnCurve(bigX, bigY *big.Int) bool { -- var x, y p224FieldElement -- p224FromBig(&x, bigX) -- p224FromBig(&y, bigY) -- -- // y² = x³ - 3x + b -- var tmp p224LargeFieldElement -- var x3 p224FieldElement -- p224Square(&x3, &x, &tmp) -- p224Mul(&x3, &x3, &x, &tmp) -- -- for i := 0; i < 8; i++ { -- x[i] *= 3 -- } -- p224Sub(&x3, &x3, &x) -- p224Reduce(&x3) -- p224Add(&x3, &x3, &curve.b) -- p224Contract(&x3, &x3) -- -- p224Square(&y, &y, &tmp) -- p224Contract(&y, &y) -- -- for i := 0; i < 8; i++ { -- if y[i] != x3[i] { -- return false -- } -- } -- return true --} -- --func (p224Curve) Add(bigX1, bigY1, bigX2, bigY2 *big.Int) (x, y *big.Int) { -- var x1, y1, z1, x2, y2, z2, x3, y3, z3 p224FieldElement -- -- p224FromBig(&x1, bigX1) -- p224FromBig(&y1, bigY1) -- if bigX1.Sign() != 0 || bigY1.Sign() != 0 { -- z1[0] = 1 -- } -- p224FromBig(&x2, bigX2) -- p224FromBig(&y2, bigY2) -- if bigX2.Sign() != 0 || bigY2.Sign() != 0 { -- z2[0] = 1 -- } -- -- p224AddJacobian(&x3, &y3, &z3, &x1, &y1, &z1, &x2, &y2, &z2) -- return p224ToAffine(&x3, &y3, &z3) --} -- --func (p224Curve) Double(bigX1, bigY1 *big.Int) (x, y *big.Int) { -- var x1, y1, z1, x2, y2, z2 p224FieldElement -- -- p224FromBig(&x1, bigX1) -- p224FromBig(&y1, bigY1) -- z1[0] = 1 -- -- p224DoubleJacobian(&x2, &y2, &z2, &x1, &y1, &z1) -- return p224ToAffine(&x2, &y2, &z2) --} -- --func (p224Curve) ScalarMult(bigX1, bigY1 *big.Int, scalar []byte) (x, y *big.Int) { -- var x1, y1, z1, x2, y2, z2 p224FieldElement -- -- p224FromBig(&x1, bigX1) -- p224FromBig(&y1, bigY1) -- z1[0] = 1 -- -- p224ScalarMult(&x2, &y2, &z2, &x1, &y1, &z1, scalar) -- return p224ToAffine(&x2, &y2, &z2) --} -- --func (curve p224Curve) ScalarBaseMult(scalar []byte) (x, y *big.Int) { -- var z1, x2, y2, z2 p224FieldElement -- -- z1[0] = 1 -- p224ScalarMult(&x2, &y2, &z2, &curve.gx, &curve.gy, &z1, scalar) -- return p224ToAffine(&x2, &y2, &z2) --} -- --// Field element functions. --// --// The field that we're dealing with is ℤ/pℤ where p = 2**224 - 2**96 + 1. --// --// Field elements are represented by a FieldElement, which is a typedef to an --// array of 8 uint32's. The value of a FieldElement, a, is: --// a[0] + 2**28·a[1] + 2**56·a[1] + ... + 2**196·a[7] --// --// Using 28-bit limbs means that there's only 4 bits of headroom, which is less --// than we would really like. But it has the useful feature that we hit 2**224 --// exactly, making the reflections during a reduce much nicer. --type p224FieldElement [8]uint32 -- --// p224P is the order of the field, represented as a p224FieldElement. --var p224P = [8]uint32{1, 0, 0, 0xffff000, 0xfffffff, 0xfffffff, 0xfffffff, 0xfffffff} -- --// p224IsZero returns 1 if a == 0 mod p and 0 otherwise. --// --// a[i] < 2**29 --func p224IsZero(a *p224FieldElement) uint32 { -- // Since a p224FieldElement contains 224 bits there are two possible -- // representations of 0: 0 and p. -- var minimal p224FieldElement -- p224Contract(&minimal, a) -- -- var isZero, isP uint32 -- for i, v := range minimal { -- isZero |= v -- isP |= v - p224P[i] -- } -- -- // If either isZero or isP is 0, then we should return 1. -- isZero |= isZero >> 16 -- isZero |= isZero >> 8 -- isZero |= isZero >> 4 -- isZero |= isZero >> 2 -- isZero |= isZero >> 1 -- -- isP |= isP >> 16 -- isP |= isP >> 8 -- isP |= isP >> 4 -- isP |= isP >> 2 -- isP |= isP >> 1 -- -- // For isZero and isP, the LSB is 0 iff all the bits are zero. -- result := isZero & isP -- result = (^result) & 1 -- -- return result --} -- --// p224Add computes *out = a+b --// --// a[i] + b[i] < 2**32 --func p224Add(out, a, b *p224FieldElement) { -- for i := 0; i < 8; i++ { -- out[i] = a[i] + b[i] -- } --} -- --const two31p3 = 1<<31 + 1<<3 --const two31m3 = 1<<31 - 1<<3 --const two31m15m3 = 1<<31 - 1<<15 - 1<<3 -- --// p224ZeroModP31 is 0 mod p where bit 31 is set in all limbs so that we can --// subtract smaller amounts without underflow. See the section "Subtraction" in --// [1] for reasoning. --var p224ZeroModP31 = []uint32{two31p3, two31m3, two31m3, two31m15m3, two31m3, two31m3, two31m3, two31m3} -- --// p224Sub computes *out = a-b --// --// a[i], b[i] < 2**30 --// out[i] < 2**32 --func p224Sub(out, a, b *p224FieldElement) { -- for i := 0; i < 8; i++ { -- out[i] = a[i] + p224ZeroModP31[i] - b[i] -- } --} -- --// LargeFieldElement also represents an element of the field. The limbs are --// still spaced 28-bits apart and in little-endian order. So the limbs are at --// 0, 28, 56, ..., 392 bits, each 64-bits wide. --type p224LargeFieldElement [15]uint64 -- --const two63p35 = 1<<63 + 1<<35 --const two63m35 = 1<<63 - 1<<35 --const two63m35m19 = 1<<63 - 1<<35 - 1<<19 -- --// p224ZeroModP63 is 0 mod p where bit 63 is set in all limbs. See the section --// "Subtraction" in [1] for why. --var p224ZeroModP63 = [8]uint64{two63p35, two63m35, two63m35, two63m35, two63m35m19, two63m35, two63m35, two63m35} -- --const bottom12Bits = 0xfff --const bottom28Bits = 0xfffffff -- --// p224Mul computes *out = a*b --// --// a[i] < 2**29, b[i] < 2**30 (or vice versa) --// out[i] < 2**29 --func p224Mul(out, a, b *p224FieldElement, tmp *p224LargeFieldElement) { -- for i := 0; i < 15; i++ { -- tmp[i] = 0 -- } -- -- for i := 0; i < 8; i++ { -- for j := 0; j < 8; j++ { -- tmp[i+j] += uint64(a[i]) * uint64(b[j]) -- } -- } -- -- p224ReduceLarge(out, tmp) --} -- --// Square computes *out = a*a --// --// a[i] < 2**29 --// out[i] < 2**29 --func p224Square(out, a *p224FieldElement, tmp *p224LargeFieldElement) { -- for i := 0; i < 15; i++ { -- tmp[i] = 0 -- } -- -- for i := 0; i < 8; i++ { -- for j := 0; j <= i; j++ { -- r := uint64(a[i]) * uint64(a[j]) -- if i == j { -- tmp[i+j] += r -- } else { -- tmp[i+j] += r << 1 -- } -- } -- } -- -- p224ReduceLarge(out, tmp) --} -- --// ReduceLarge converts a p224LargeFieldElement to a p224FieldElement. --// --// in[i] < 2**62 --func p224ReduceLarge(out *p224FieldElement, in *p224LargeFieldElement) { -- for i := 0; i < 8; i++ { -- in[i] += p224ZeroModP63[i] -- } -- -- // Eliminate the coefficients at 2**224 and greater. -- for i := 14; i >= 8; i-- { -- in[i-8] -= in[i] -- in[i-5] += (in[i] & 0xffff) << 12 -- in[i-4] += in[i] >> 16 -- } -- in[8] = 0 -- // in[0..8] < 2**64 -- -- // As the values become small enough, we start to store them in |out| -- // and use 32-bit operations. -- for i := 1; i < 8; i++ { -- in[i+1] += in[i] >> 28 -- out[i] = uint32(in[i] & bottom28Bits) -- } -- in[0] -= in[8] -- out[3] += uint32(in[8]&0xffff) << 12 -- out[4] += uint32(in[8] >> 16) -- // in[0] < 2**64 -- // out[3] < 2**29 -- // out[4] < 2**29 -- // out[1,2,5..7] < 2**28 -- -- out[0] = uint32(in[0] & bottom28Bits) -- out[1] += uint32((in[0] >> 28) & bottom28Bits) -- out[2] += uint32(in[0] >> 56) -- // out[0] < 2**28 -- // out[1..4] < 2**29 -- // out[5..7] < 2**28 --} -- --// Reduce reduces the coefficients of a to smaller bounds. --// --// On entry: a[i] < 2**31 + 2**30 --// On exit: a[i] < 2**29 --func p224Reduce(a *p224FieldElement) { -- for i := 0; i < 7; i++ { -- a[i+1] += a[i] >> 28 -- a[i] &= bottom28Bits -- } -- top := a[7] >> 28 -- a[7] &= bottom28Bits -- -- // top < 2**4 -- mask := top -- mask |= mask >> 2 -- mask |= mask >> 1 -- mask <<= 31 -- mask = uint32(int32(mask) >> 31) -- // Mask is all ones if top != 0, all zero otherwise -- -- a[0] -= top -- a[3] += top << 12 -- -- // We may have just made a[0] negative but, if we did, then we must -- // have added something to a[3], this it's > 2**12. Therefore we can -- // carry down to a[0]. -- a[3] -= 1 & mask -- a[2] += mask & (1<<28 - 1) -- a[1] += mask & (1<<28 - 1) -- a[0] += mask & (1 << 28) --} -- --// p224Invert calculates *out = in**-1 by computing in**(2**224 - 2**96 - 1), --// i.e. Fermat's little theorem. --func p224Invert(out, in *p224FieldElement) { -- var f1, f2, f3, f4 p224FieldElement -- var c p224LargeFieldElement -- -- p224Square(&f1, in, &c) // 2 -- p224Mul(&f1, &f1, in, &c) // 2**2 - 1 -- p224Square(&f1, &f1, &c) // 2**3 - 2 -- p224Mul(&f1, &f1, in, &c) // 2**3 - 1 -- p224Square(&f2, &f1, &c) // 2**4 - 2 -- p224Square(&f2, &f2, &c) // 2**5 - 4 -- p224Square(&f2, &f2, &c) // 2**6 - 8 -- p224Mul(&f1, &f1, &f2, &c) // 2**6 - 1 -- p224Square(&f2, &f1, &c) // 2**7 - 2 -- for i := 0; i < 5; i++ { // 2**12 - 2**6 -- p224Square(&f2, &f2, &c) -- } -- p224Mul(&f2, &f2, &f1, &c) // 2**12 - 1 -- p224Square(&f3, &f2, &c) // 2**13 - 2 -- for i := 0; i < 11; i++ { // 2**24 - 2**12 -- p224Square(&f3, &f3, &c) -- } -- p224Mul(&f2, &f3, &f2, &c) // 2**24 - 1 -- p224Square(&f3, &f2, &c) // 2**25 - 2 -- for i := 0; i < 23; i++ { // 2**48 - 2**24 -- p224Square(&f3, &f3, &c) -- } -- p224Mul(&f3, &f3, &f2, &c) // 2**48 - 1 -- p224Square(&f4, &f3, &c) // 2**49 - 2 -- for i := 0; i < 47; i++ { // 2**96 - 2**48 -- p224Square(&f4, &f4, &c) -- } -- p224Mul(&f3, &f3, &f4, &c) // 2**96 - 1 -- p224Square(&f4, &f3, &c) // 2**97 - 2 -- for i := 0; i < 23; i++ { // 2**120 - 2**24 -- p224Square(&f4, &f4, &c) -- } -- p224Mul(&f2, &f4, &f2, &c) // 2**120 - 1 -- for i := 0; i < 6; i++ { // 2**126 - 2**6 -- p224Square(&f2, &f2, &c) -- } -- p224Mul(&f1, &f1, &f2, &c) // 2**126 - 1 -- p224Square(&f1, &f1, &c) // 2**127 - 2 -- p224Mul(&f1, &f1, in, &c) // 2**127 - 1 -- for i := 0; i < 97; i++ { // 2**224 - 2**97 -- p224Square(&f1, &f1, &c) -- } -- p224Mul(out, &f1, &f3, &c) // 2**224 - 2**96 - 1 --} -- --// p224Contract converts a FieldElement to its unique, minimal form. --// --// On entry, in[i] < 2**29 --// On exit, in[i] < 2**28 --func p224Contract(out, in *p224FieldElement) { -- copy(out[:], in[:]) -- -- for i := 0; i < 7; i++ { -- out[i+1] += out[i] >> 28 -- out[i] &= bottom28Bits -- } -- top := out[7] >> 28 -- out[7] &= bottom28Bits -- -- out[0] -= top -- out[3] += top << 12 -- -- // We may just have made out[i] negative. So we carry down. If we made -- // out[0] negative then we know that out[3] is sufficiently positive -- // because we just added to it. -- for i := 0; i < 3; i++ { -- mask := uint32(int32(out[i]) >> 31) -- out[i] += (1 << 28) & mask -- out[i+1] -= 1 & mask -- } -- -- // We might have pushed out[3] over 2**28 so we perform another, partial, -- // carry chain. -- for i := 3; i < 7; i++ { -- out[i+1] += out[i] >> 28 -- out[i] &= bottom28Bits -- } -- top = out[7] >> 28 -- out[7] &= bottom28Bits -- -- // Eliminate top while maintaining the same value mod p. -- out[0] -= top -- out[3] += top << 12 -- -- // There are two cases to consider for out[3]: -- // 1) The first time that we eliminated top, we didn't push out[3] over -- // 2**28. In this case, the partial carry chain didn't change any values -- // and top is zero. -- // 2) We did push out[3] over 2**28 the first time that we eliminated top. -- // The first value of top was in [0..16), therefore, prior to eliminating -- // the first top, 0xfff1000 <= out[3] <= 0xfffffff. Therefore, after -- // overflowing and being reduced by the second carry chain, out[3] <= -- // 0xf000. Thus it cannot have overflowed when we eliminated top for the -- // second time. -- -- // Again, we may just have made out[0] negative, so do the same carry down. -- // As before, if we made out[0] negative then we know that out[3] is -- // sufficiently positive. -- for i := 0; i < 3; i++ { -- mask := uint32(int32(out[i]) >> 31) -- out[i] += (1 << 28) & mask -- out[i+1] -= 1 & mask -- } -- -- // Now we see if the value is >= p and, if so, subtract p. -- -- // First we build a mask from the top four limbs, which must all be -- // equal to bottom28Bits if the whole value is >= p. If top4AllOnes -- // ends up with any zero bits in the bottom 28 bits, then this wasn't -- // true. -- top4AllOnes := uint32(0xffffffff) -- for i := 4; i < 8; i++ { -- top4AllOnes &= out[i] -- } -- top4AllOnes |= 0xf0000000 -- // Now we replicate any zero bits to all the bits in top4AllOnes. -- top4AllOnes &= top4AllOnes >> 16 -- top4AllOnes &= top4AllOnes >> 8 -- top4AllOnes &= top4AllOnes >> 4 -- top4AllOnes &= top4AllOnes >> 2 -- top4AllOnes &= top4AllOnes >> 1 -- top4AllOnes = uint32(int32(top4AllOnes<<31) >> 31) -- -- // Now we test whether the bottom three limbs are non-zero. -- bottom3NonZero := out[0] | out[1] | out[2] -- bottom3NonZero |= bottom3NonZero >> 16 -- bottom3NonZero |= bottom3NonZero >> 8 -- bottom3NonZero |= bottom3NonZero >> 4 -- bottom3NonZero |= bottom3NonZero >> 2 -- bottom3NonZero |= bottom3NonZero >> 1 -- bottom3NonZero = uint32(int32(bottom3NonZero<<31) >> 31) -- -- // Everything depends on the value of out[3]. -- // If it's > 0xffff000 and top4AllOnes != 0 then the whole value is >= p -- // If it's = 0xffff000 and top4AllOnes != 0 and bottom3NonZero != 0, -- // then the whole value is >= p -- // If it's < 0xffff000, then the whole value is < p -- n := out[3] - 0xffff000 -- out3Equal := n -- out3Equal |= out3Equal >> 16 -- out3Equal |= out3Equal >> 8 -- out3Equal |= out3Equal >> 4 -- out3Equal |= out3Equal >> 2 -- out3Equal |= out3Equal >> 1 -- out3Equal = ^uint32(int32(out3Equal<<31) >> 31) -- -- // If out[3] > 0xffff000 then n's MSB will be zero. -- out3GT := ^uint32(int32(n) >> 31) -- -- mask := top4AllOnes & ((out3Equal & bottom3NonZero) | out3GT) -- out[0] -= 1 & mask -- out[3] -= 0xffff000 & mask -- out[4] -= 0xfffffff & mask -- out[5] -= 0xfffffff & mask -- out[6] -= 0xfffffff & mask -- out[7] -= 0xfffffff & mask --} -- --// Group element functions. --// --// These functions deal with group elements. The group is an elliptic curve --// group with a = -3 defined in FIPS 186-3, section D.2.2. -- --// p224AddJacobian computes *out = a+b where a != b. --func p224AddJacobian(x3, y3, z3, x1, y1, z1, x2, y2, z2 *p224FieldElement) { -- // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-p224Add-2007-bl -- var z1z1, z2z2, u1, u2, s1, s2, h, i, j, r, v p224FieldElement -- var c p224LargeFieldElement -- -- z1IsZero := p224IsZero(z1) -- z2IsZero := p224IsZero(z2) -- -- // Z1Z1 = Z1² -- p224Square(&z1z1, z1, &c) -- // Z2Z2 = Z2² -- p224Square(&z2z2, z2, &c) -- // U1 = X1*Z2Z2 -- p224Mul(&u1, x1, &z2z2, &c) -- // U2 = X2*Z1Z1 -- p224Mul(&u2, x2, &z1z1, &c) -- // S1 = Y1*Z2*Z2Z2 -- p224Mul(&s1, z2, &z2z2, &c) -- p224Mul(&s1, y1, &s1, &c) -- // S2 = Y2*Z1*Z1Z1 -- p224Mul(&s2, z1, &z1z1, &c) -- p224Mul(&s2, y2, &s2, &c) -- // H = U2-U1 -- p224Sub(&h, &u2, &u1) -- p224Reduce(&h) -- xEqual := p224IsZero(&h) -- // I = (2*H)² -- for j := 0; j < 8; j++ { -- i[j] = h[j] << 1 -- } -- p224Reduce(&i) -- p224Square(&i, &i, &c) -- // J = H*I -- p224Mul(&j, &h, &i, &c) -- // r = 2*(S2-S1) -- p224Sub(&r, &s2, &s1) -- p224Reduce(&r) -- yEqual := p224IsZero(&r) -- if xEqual == 1 && yEqual == 1 && z1IsZero == 0 && z2IsZero == 0 { -- p224DoubleJacobian(x3, y3, z3, x1, y1, z1) -- return -- } -- for i := 0; i < 8; i++ { -- r[i] <<= 1 -- } -- p224Reduce(&r) -- // V = U1*I -- p224Mul(&v, &u1, &i, &c) -- // Z3 = ((Z1+Z2)²-Z1Z1-Z2Z2)*H -- p224Add(&z1z1, &z1z1, &z2z2) -- p224Add(&z2z2, z1, z2) -- p224Reduce(&z2z2) -- p224Square(&z2z2, &z2z2, &c) -- p224Sub(z3, &z2z2, &z1z1) -- p224Reduce(z3) -- p224Mul(z3, z3, &h, &c) -- // X3 = r²-J-2*V -- for i := 0; i < 8; i++ { -- z1z1[i] = v[i] << 1 -- } -- p224Add(&z1z1, &j, &z1z1) -- p224Reduce(&z1z1) -- p224Square(x3, &r, &c) -- p224Sub(x3, x3, &z1z1) -- p224Reduce(x3) -- // Y3 = r*(V-X3)-2*S1*J -- for i := 0; i < 8; i++ { -- s1[i] <<= 1 -- } -- p224Mul(&s1, &s1, &j, &c) -- p224Sub(&z1z1, &v, x3) -- p224Reduce(&z1z1) -- p224Mul(&z1z1, &z1z1, &r, &c) -- p224Sub(y3, &z1z1, &s1) -- p224Reduce(y3) -- -- p224CopyConditional(x3, x2, z1IsZero) -- p224CopyConditional(x3, x1, z2IsZero) -- p224CopyConditional(y3, y2, z1IsZero) -- p224CopyConditional(y3, y1, z2IsZero) -- p224CopyConditional(z3, z2, z1IsZero) -- p224CopyConditional(z3, z1, z2IsZero) --} -- --// p224DoubleJacobian computes *out = a+a. --func p224DoubleJacobian(x3, y3, z3, x1, y1, z1 *p224FieldElement) { -- var delta, gamma, beta, alpha, t p224FieldElement -- var c p224LargeFieldElement -- -- p224Square(&delta, z1, &c) -- p224Square(&gamma, y1, &c) -- p224Mul(&beta, x1, &gamma, &c) -- -- // alpha = 3*(X1-delta)*(X1+delta) -- p224Add(&t, x1, &delta) -- for i := 0; i < 8; i++ { -- t[i] += t[i] << 1 -- } -- p224Reduce(&t) -- p224Sub(&alpha, x1, &delta) -- p224Reduce(&alpha) -- p224Mul(&alpha, &alpha, &t, &c) -- -- // Z3 = (Y1+Z1)²-gamma-delta -- p224Add(z3, y1, z1) -- p224Reduce(z3) -- p224Square(z3, z3, &c) -- p224Sub(z3, z3, &gamma) -- p224Reduce(z3) -- p224Sub(z3, z3, &delta) -- p224Reduce(z3) -- -- // X3 = alpha²-8*beta -- for i := 0; i < 8; i++ { -- delta[i] = beta[i] << 3 -- } -- p224Reduce(&delta) -- p224Square(x3, &alpha, &c) -- p224Sub(x3, x3, &delta) -- p224Reduce(x3) -- -- // Y3 = alpha*(4*beta-X3)-8*gamma² -- for i := 0; i < 8; i++ { -- beta[i] <<= 2 -- } -- p224Sub(&beta, &beta, x3) -- p224Reduce(&beta) -- p224Square(&gamma, &gamma, &c) -- for i := 0; i < 8; i++ { -- gamma[i] <<= 3 -- } -- p224Reduce(&gamma) -- p224Mul(y3, &alpha, &beta, &c) -- p224Sub(y3, y3, &gamma) -- p224Reduce(y3) --} -- --// p224CopyConditional sets *out = *in iff the least-significant-bit of control --// is true, and it runs in constant time. --func p224CopyConditional(out, in *p224FieldElement, control uint32) { -- control <<= 31 -- control = uint32(int32(control) >> 31) -- -- for i := 0; i < 8; i++ { -- out[i] ^= (out[i] ^ in[i]) & control -- } --} -- --func p224ScalarMult(outX, outY, outZ, inX, inY, inZ *p224FieldElement, scalar []byte) { -- var xx, yy, zz p224FieldElement -- for i := 0; i < 8; i++ { -- outX[i] = 0 -- outY[i] = 0 -- outZ[i] = 0 -- } -- -- for _, byte := range scalar { -- for bitNum := uint(0); bitNum < 8; bitNum++ { -- p224DoubleJacobian(outX, outY, outZ, outX, outY, outZ) -- bit := uint32((byte >> (7 - bitNum)) & 1) -- p224AddJacobian(&xx, &yy, &zz, inX, inY, inZ, outX, outY, outZ) -- p224CopyConditional(outX, &xx, bit) -- p224CopyConditional(outY, &yy, bit) -- p224CopyConditional(outZ, &zz, bit) -- } -- } --} -- --// p224ToAffine converts from Jacobian to affine form. --func p224ToAffine(x, y, z *p224FieldElement) (*big.Int, *big.Int) { -- var zinv, zinvsq, outx, outy p224FieldElement -- var tmp p224LargeFieldElement -- -- if isPointAtInfinity := p224IsZero(z); isPointAtInfinity == 1 { -- return new(big.Int), new(big.Int) -- } -- -- p224Invert(&zinv, z) -- p224Square(&zinvsq, &zinv, &tmp) -- p224Mul(x, x, &zinvsq, &tmp) -- p224Mul(&zinvsq, &zinvsq, &zinv, &tmp) -- p224Mul(y, y, &zinvsq, &tmp) -- -- p224Contract(&outx, x) -- p224Contract(&outy, y) -- return p224ToBig(&outx), p224ToBig(&outy) --} -- --// get28BitsFromEnd returns the least-significant 28 bits from buf>>shift, --// where buf is interpreted as a big-endian number. --func get28BitsFromEnd(buf []byte, shift uint) (uint32, []byte) { -- var ret uint32 -- -- for i := uint(0); i < 4; i++ { -- var b byte -- if l := len(buf); l > 0 { -- b = buf[l-1] -- // We don't remove the byte if we're about to return and we're not -- // reading all of it. -- if i != 3 || shift == 4 { -- buf = buf[:l-1] -- } -- } -- ret |= uint32(b) << (8 * i) >> shift -- } -- ret &= bottom28Bits -- return ret, buf --} -- --// p224FromBig sets *out = *in. --func p224FromBig(out *p224FieldElement, in *big.Int) { -- bytes := in.Bytes() -- out[0], bytes = get28BitsFromEnd(bytes, 0) -- out[1], bytes = get28BitsFromEnd(bytes, 4) -- out[2], bytes = get28BitsFromEnd(bytes, 0) -- out[3], bytes = get28BitsFromEnd(bytes, 4) -- out[4], bytes = get28BitsFromEnd(bytes, 0) -- out[5], bytes = get28BitsFromEnd(bytes, 4) -- out[6], bytes = get28BitsFromEnd(bytes, 0) -- out[7], bytes = get28BitsFromEnd(bytes, 4) --} -- --// p224ToBig returns in as a big.Int. --func p224ToBig(in *p224FieldElement) *big.Int { -- var buf [28]byte -- buf[27] = byte(in[0]) -- buf[26] = byte(in[0] >> 8) -- buf[25] = byte(in[0] >> 16) -- buf[24] = byte(((in[0] >> 24) & 0x0f) | (in[1]<<4)&0xf0) -- -- buf[23] = byte(in[1] >> 4) -- buf[22] = byte(in[1] >> 12) -- buf[21] = byte(in[1] >> 20) -- -- buf[20] = byte(in[2]) -- buf[19] = byte(in[2] >> 8) -- buf[18] = byte(in[2] >> 16) -- buf[17] = byte(((in[2] >> 24) & 0x0f) | (in[3]<<4)&0xf0) -- -- buf[16] = byte(in[3] >> 4) -- buf[15] = byte(in[3] >> 12) -- buf[14] = byte(in[3] >> 20) -- -- buf[13] = byte(in[4]) -- buf[12] = byte(in[4] >> 8) -- buf[11] = byte(in[4] >> 16) -- buf[10] = byte(((in[4] >> 24) & 0x0f) | (in[5]<<4)&0xf0) -- -- buf[9] = byte(in[5] >> 4) -- buf[8] = byte(in[5] >> 12) -- buf[7] = byte(in[5] >> 20) -- -- buf[6] = byte(in[6]) -- buf[5] = byte(in[6] >> 8) -- buf[4] = byte(in[6] >> 16) -- buf[3] = byte(((in[6] >> 24) & 0x0f) | (in[7]<<4)&0xf0) -- -- buf[2] = byte(in[7] >> 4) -- buf[1] = byte(in[7] >> 12) -- buf[0] = byte(in[7] >> 20) -- -- return new(big.Int).SetBytes(buf[:]) --} ---- libgo/go/crypto/elliptic/p224_test.go.jj 2012-11-15 18:26:57.000000000 +0100 -+++ libgo/go/crypto/elliptic/p224_test.go 2014-03-05 15:29:58.743430988 +0100 -@@ -1,47 +0,0 @@ --// Copyright 2012 The Go Authors. All rights reserved. --// Use of this source code is governed by a BSD-style --// license that can be found in the LICENSE file. -- --package elliptic -- --import ( -- "math/big" -- "testing" --) -- --var toFromBigTests = []string{ -- "0", -- "1", -- "23", -- "b70e0cb46bb4bf7f321390b94a03c1d356c01122343280d6105c1d21", -- "706a46d476dcb76798e6046d89474788d164c18032d268fd10704fa6", --} -- --func p224AlternativeToBig(in *p224FieldElement) *big.Int { -- ret := new(big.Int) -- tmp := new(big.Int) -- -- for i := uint(0); i < 8; i++ { -- tmp.SetInt64(int64(in[i])) -- tmp.Lsh(tmp, 28*i) -- ret.Add(ret, tmp) -- } -- ret.Mod(ret, p224.P) -- return ret --} -- --func TestToFromBig(t *testing.T) { -- for i, test := range toFromBigTests { -- n, _ := new(big.Int).SetString(test, 16) -- var x p224FieldElement -- p224FromBig(&x, n) -- m := p224ToBig(&x) -- if n.Cmp(m) != 0 { -- t.Errorf("#%d: %x != %x", i, n, m) -- } -- q := p224AlternativeToBig(&x) -- if n.Cmp(q) != 0 { -- t.Errorf("#%d: %x != %x (alternative)", i, n, m) -- } -- } --} ---- libgo/go/crypto/elliptic/p256.go.jj 2013-11-07 11:59:09.000000000 +0100 -+++ libgo/go/crypto/elliptic/p256.go 2014-03-05 15:34:31.910414701 +0100 -@@ -233,6 +233,8 @@ func p256ReduceCarry(inout *[p256Limbs]u - inout[7] += carry << 25 - } - -+const bottom28Bits = 0xfffffff -+ - // p256Sum sets out = in+in2. - // - // On entry, in[i]+in2[i] must not overflow a 32-bit word. -@@ -265,6 +267,7 @@ const ( - two31m2 = 1<<31 - 1<<2 - two31p24m2 = 1<<31 + 1<<24 - 1<<2 - two30m27m2 = 1<<30 - 1<<27 - 1<<2 -+ two31m3 = 1<<31 - 1<<3 - ) - - // p256Zero31 is 0 mod p. diff --git a/gcc49-libgomp-omp_h-multilib.patch b/gcc49-libgomp-omp_h-multilib.patch deleted file mode 100644 index d0e98d1..0000000 --- a/gcc49-libgomp-omp_h-multilib.patch +++ /dev/null @@ -1,17 +0,0 @@ -2008-06-09 Jakub Jelinek - - * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. - ---- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 -+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 -@@ -42,8 +42,8 @@ typedef struct - - typedef struct - { -- unsigned char _x[@OMP_NEST_LOCK_SIZE@] -- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); -+ unsigned char _x[8 + sizeof (void *)] -+ __attribute__((__aligned__(sizeof (void *)))); - } omp_nest_lock_t; - #endif - diff --git a/gcc49-libstdc++-docs.patch b/gcc49-libstdc++-docs.patch deleted file mode 100644 index ee8598a..0000000 --- a/gcc49-libstdc++-docs.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100 -+++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100 -@@ -5,6 +5,8 @@ - FSF - -

-+ Release 4.9.2 -+

- Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License, Version 1.2 or any later version published by the ---- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100 -+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100 -@@ -18,8 +18,11 @@ - member functions for the library classes, finding out what is in a - particular include file, looking at inheritance diagrams, etc. -

-- The API documentation, rendered into HTML, can be viewed online: -+ The API documentation, rendered into HTML, can be viewed here: -

  • -+ for the 4.9.2 release, local -+ -+

  • - for the 3.4 release - -

  • diff --git a/gcc49-libtool-no-rpath.patch b/gcc49-libtool-no-rpath.patch deleted file mode 100644 index 466c661..0000000 --- a/gcc49-libtool-no-rpath.patch +++ /dev/null @@ -1,27 +0,0 @@ -libtool sucks. ---- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 -+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 -@@ -5394,6 +5394,7 @@ EOF - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6071,6 +6072,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6120,6 +6122,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then diff --git a/gcc49-no-add-needed.patch b/gcc49-no-add-needed.patch deleted file mode 100644 index b6ca777..0000000 --- a/gcc49-no-add-needed.patch +++ /dev/null @@ -1,50 +0,0 @@ -2010-02-08 Roland McGrath - - * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the - linker. - * config/gnu-user.h (LINK_EH_SPEC): Likewise. - * config/alpha/elf.h (LINK_EH_SPEC): Likewise. - * config/ia64/linux.h (LINK_EH_SPEC): Likewise. - ---- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100 -+++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100 -@@ -165,5 +165,5 @@ extern int alpha_this_gpdisp_sequence_nu - I imagine that other systems will catch up. In the meantime, it - doesn't harm to make sure that the data exists to be used later. */ - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " - #endif ---- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100 -+++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100 -@@ -77,7 +77,7 @@ do { \ - Signalize that because we have fde-glibc, we don't need all C shared libs - linked against -lgcc_s. */ - #undef LINK_EH_SPEC --#define LINK_EH_SPEC "" -+#define LINK_EH_SPEC "--no-add-needed " - - /* Put all *tf routines in libgcc. */ - #undef LIBGCC2_HAS_TF_MODE ---- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100 -+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100 -@@ -82,7 +82,7 @@ see the files COPYING3 and COPYING.RUNTI - #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " - #endif - - #undef LINK_GCC_C_SEQUENCE_SPEC ---- gcc/config/rs6000/sysv4.h.jj 2011-01-03 13:02:18.255994215 +0100 -+++ gcc/config/rs6000/sysv4.h 2011-01-04 18:14:10.933888871 +0100 -@@ -820,7 +820,7 @@ extern int fixuplabelno; - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" - - #if defined(HAVE_LD_EH_FRAME_HDR) --# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " - #endif - - #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ diff --git a/gcc49-ppc32-retaddr.patch b/gcc49-ppc32-retaddr.patch deleted file mode 100644 index 7e8eeb5..0000000 --- a/gcc49-ppc32-retaddr.patch +++ /dev/null @@ -1,87 +0,0 @@ -2005-11-28 Jakub Jelinek - - * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, - read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx - instead of doing an extran indirection from frame_pointer_rtx. - - * gcc.dg/20051128-1.c: New test. - ---- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 -+++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 -@@ -20970,18 +20970,22 @@ rs6000_return_addr (int count, rtx frame - if (count != 0 - || ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) && flag_pic)) - { -+ rtx x; - cfun->machine->ra_needs_full_frame = 1; - -- return -- gen_rtx_MEM -- (Pmode, -- memory_address -- (Pmode, -- plus_constant (Pmode, -- copy_to_reg -- (gen_rtx_MEM (Pmode, -- memory_address (Pmode, frame))), -- RETURN_ADDRESS_OFFSET))); -+ if (count == 0) -+ { -+ gcc_assert (frame == frame_pointer_rtx); -+ x = arg_pointer_rtx; -+ } -+ else -+ { -+ x = memory_address (Pmode, frame); -+ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); -+ } -+ -+ x = plus_constant (Pmode, x, RETURN_ADDRESS_OFFSET); -+ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); - } - - cfun->machine->ra_need_lr = 1; ---- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 -+++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 -@@ -0,0 +1,41 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -fpic" } */ -+ -+extern void exit (int); -+extern void abort (void); -+ -+int b; -+ -+struct A -+{ -+ void *pad[147]; -+ void *ra, *h; -+ long o; -+}; -+ -+void -+__attribute__((noinline)) -+foo (struct A *a, void *x) -+{ -+ __builtin_memset (a, 0, sizeof (a)); -+ if (!b) -+ exit (0); -+} -+ -+void -+__attribute__((noinline)) -+bar (void) -+{ -+ struct A a; -+ -+ __builtin_unwind_init (); -+ foo (&a, __builtin_return_address (0)); -+} -+ -+int -+main (void) -+{ -+ bar (); -+ abort (); -+ return 0; -+} diff --git a/gcc49-pr38757.patch b/gcc49-pr38757.patch deleted file mode 100644 index 4206584..0000000 --- a/gcc49-pr38757.patch +++ /dev/null @@ -1,106 +0,0 @@ -2009-03-18 Jakub Jelinek - - PR debug/38757 - * langhooks.h (struct lang_hooks): Add source_language langhook. - * langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL. - (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE. - * dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype - also for DW_LANG_{C,C99,ObjC}. - (gen_compile_unit_die): Use lang_hooks.source_language () to - determine if DW_LANG_C99 or DW_LANG_C89 should be returned. -c/ - * c-lang.c (c_source_language): New function. - (LANG_HOOKS_SOURCE_LANGUAGE): Define. - ---- gcc/langhooks.h.jj 2011-01-03 12:53:05.125745450 +0100 -+++ gcc/langhooks.h 2011-01-04 17:59:43.166744926 +0100 -@@ -467,6 +467,10 @@ struct lang_hooks - gimplification. */ - bool deep_unsharing; - -+ /* Return year of the source language standard version if the FE supports -+ multiple versions of the standard. */ -+ int (*source_language) (void); -+ - /* Whenever you add entries here, make sure you adjust langhooks-def.h - and langhooks.c accordingly. */ - }; ---- gcc/langhooks-def.h.jj 2011-01-03 12:53:05.000000000 +0100 -+++ gcc/langhooks-def.h 2011-01-04 18:00:44.858851030 +0100 -@@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_ - #define LANG_HOOKS_BLOCK_MAY_FALLTHRU hook_bool_const_tree_true - #define LANG_HOOKS_EH_USE_CXA_END_CLEANUP false - #define LANG_HOOKS_DEEP_UNSHARING false -+#define LANG_HOOKS_SOURCE_LANGUAGE NULL - - /* Attribute hooks. */ - #define LANG_HOOKS_ATTRIBUTE_TABLE NULL -@@ -303,7 +304,8 @@ extern void lhd_end_section (void); - LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \ - LANG_HOOKS_BLOCK_MAY_FALLTHRU, \ - LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \ -- LANG_HOOKS_DEEP_UNSHARING \ -+ LANG_HOOKS_DEEP_UNSHARING, \ -+ LANG_HOOKS_SOURCE_LANGUAGE \ - } - - #endif /* GCC_LANG_HOOKS_DEF_H */ ---- gcc/c/c-lang.c.jj 2011-01-03 12:53:05.376056936 +0100 -+++ gcc/c/c-lang.c 2011-01-04 17:59:43.167743798 +0100 -@@ -36,6 +36,12 @@ along with GCC; see the file COPYING3. - - enum c_language_kind c_language = clk_c; - -+static int -+c_source_language (void) -+{ -+ return flag_isoc99 ? 1999 : 1989; -+} -+ - /* Lang hooks common to C and ObjC are declared in c-objc-common.h; - consequently, there should be very few hooks below. */ - -@@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c; - #define LANG_HOOKS_INIT c_objc_common_init - #undef LANG_HOOKS_INIT_TS - #define LANG_HOOKS_INIT_TS c_common_init_ts -+#undef LANG_HOOKS_SOURCE_LANGUAGE -+#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language - - /* Each front end provides its own lang hook initializer. */ - struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; ---- gcc/dwarf2out.c.jj 2011-01-03 12:53:05.102056475 +0100 -+++ gcc/dwarf2out.c 2011-01-04 18:03:14.534151763 +0100 -@@ -16109,9 +16109,18 @@ add_bit_size_attribute (dw_die_ref die, - static inline void - add_prototyped_attribute (dw_die_ref die, tree func_type) - { -- if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89 -- && prototype_p (func_type)) -- add_AT_flag (die, DW_AT_prototyped, 1); -+ switch (get_AT_unsigned (comp_unit_die (), DW_AT_language)) -+ { -+ case DW_LANG_C: -+ case DW_LANG_C89: -+ case DW_LANG_C99: -+ case DW_LANG_ObjC: -+ if (prototype_p (func_type)) -+ add_AT_flag (die, DW_AT_prototyped, 1); -+ break; -+ default: -+ break; -+ } - } - - /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found -@@ -18915,6 +18924,10 @@ gen_compile_unit_die (const char *filena - if (strcmp (language_string, "GNU Go") == 0) - language = DW_LANG_Go; - } -+ else if (strcmp (language_string, "GNU C") == 0 -+ && lang_hooks.source_language -+ && lang_hooks.source_language () >= 1999) -+ language = DW_LANG_C99; - } - /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */ - else if (strcmp (language_string, "GNU Fortran") == 0) diff --git a/gcc49-pr56493.patch b/gcc49-pr56493.patch deleted file mode 100644 index 87603db..0000000 --- a/gcc49-pr56493.patch +++ /dev/null @@ -1,76 +0,0 @@ -2013-06-17 Jakub Jelinek - - PR c++/56493 - * convert.c (convert_to_real, convert_to_expr, convert_to_complex): - Handle COMPOUND_EXPR. - - * c-c++-common/pr56493.c: New test. - ---- gcc/convert.c.jj 2013-05-13 09:44:53.000000000 +0200 -+++ gcc/convert.c 2013-06-16 12:16:13.754108523 +0200 -@@ -95,6 +95,15 @@ convert_to_real (tree type, tree expr) - enum built_in_function fcode = builtin_mathfn_code (expr); - tree itype = TREE_TYPE (expr); - -+ if (TREE_CODE (expr) == COMPOUND_EXPR) -+ { -+ tree t = convert_to_real (type, TREE_OPERAND (expr, 1)); -+ if (t == TREE_OPERAND (expr, 1)) -+ return expr; -+ return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR, TREE_TYPE (t), -+ TREE_OPERAND (expr, 0), t); -+ } -+ - /* Disable until we figure out how to decide whether the functions are - present in runtime. */ - /* Convert (float)sqrt((double)x) where x is float into sqrtf(x) */ -@@ -366,6 +375,15 @@ convert_to_integer (tree type, tree expr - return error_mark_node; - } - -+ if (ex_form == COMPOUND_EXPR) -+ { -+ tree t = convert_to_integer (type, TREE_OPERAND (expr, 1)); -+ if (t == TREE_OPERAND (expr, 1)) -+ return expr; -+ return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR, TREE_TYPE (t), -+ TREE_OPERAND (expr, 0), t); -+ } -+ - /* Convert e.g. (long)round(d) -> lround(d). */ - /* If we're converting to char, we may encounter differing behavior - between converting from double->char vs double->long->char. -@@ -854,6 +872,14 @@ convert_to_complex (tree type, tree expr - - if (TYPE_MAIN_VARIANT (elt_type) == TYPE_MAIN_VARIANT (subtype)) - return expr; -+ else if (TREE_CODE (expr) == COMPOUND_EXPR) -+ { -+ tree t = convert_to_complex (type, TREE_OPERAND (expr, 1)); -+ if (t == TREE_OPERAND (expr, 1)) -+ return expr; -+ return build2_loc (EXPR_LOCATION (expr), COMPOUND_EXPR, -+ TREE_TYPE (t), TREE_OPERAND (expr, 0), t); -+ } - else if (TREE_CODE (expr) == COMPLEX_EXPR) - return fold_build2 (COMPLEX_EXPR, type, - convert (subtype, TREE_OPERAND (expr, 0)), ---- gcc/testsuite/c-c++-common/pr56493.c.jj 2013-06-17 10:24:36.891659600 +0200 -+++ gcc/testsuite/c-c++-common/pr56493.c 2013-06-17 10:24:33.164720149 +0200 -@@ -0,0 +1,16 @@ -+/* PR c++/56493 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fdump-tree-gimple" } */ -+ -+unsigned long long bar (void); -+int x; -+ -+void -+foo (void) -+{ -+ x += bar (); -+} -+ -+/* Verify we narrow the addition from unsigned long long to unsigned int type. */ -+/* { dg-final { scan-tree-dump " (\[a-zA-Z._0-9]*) = \\(unsigned int\\) \[^;\n\r]*;.* (\[a-zA-Z._0-9]*) = \\(unsigned int\\) \[^;\n\r]*;.* = \\1 \\+ \\2;" "gimple" { target { ilp32 || lp64 } } } } */ -+/* { dg-final { cleanup-tree-dump "gimple" } } */ diff --git a/gcc49-pr63659.patch b/gcc49-pr63659.patch deleted file mode 100644 index 262f30b..0000000 --- a/gcc49-pr63659.patch +++ /dev/null @@ -1,134 +0,0 @@ -2014-10-31 Jakub Jelinek - - PR rtl-optimization/63659 - * ree.c (update_reg_equal_equiv_notes): New function. - (combine_set_extension, transform_ifelse): Use it. - - * gcc.c-torture/execute/pr63659.c: New test. - ---- gcc/ree.c.jj 2014-10-22 15:52:18.000000000 +0200 -+++ gcc/ree.c 2014-10-27 19:18:37.287412478 +0100 -@@ -261,6 +261,50 @@ typedef struct ext_cand - - static int max_insn_uid; - -+/* Update or remove REG_EQUAL or REG_EQUIV notes for INSN. */ -+ -+static bool -+update_reg_equal_equiv_notes (rtx insn, enum machine_mode new_mode, -+ enum machine_mode old_mode, enum rtx_code code) -+{ -+ rtx *loc = ®_NOTES (insn); -+ while (*loc) -+ { -+ enum reg_note kind = REG_NOTE_KIND (*loc); -+ if (kind == REG_EQUAL || kind == REG_EQUIV) -+ { -+ rtx orig_src = XEXP (*loc, 0); -+ /* Update equivalency constants. Recall that RTL constants are -+ sign-extended. */ -+ if (GET_CODE (orig_src) == CONST_INT -+ && HOST_BITS_PER_WIDE_INT >= GET_MODE_BITSIZE (new_mode)) -+ { -+ if (INTVAL (orig_src) >= 0 || code == SIGN_EXTEND) -+ /* Nothing needed. */; -+ else -+ { -+ /* Zero-extend the negative constant by masking out the -+ bits outside the source mode. */ -+ rtx new_const_int -+ = gen_int_mode (INTVAL (orig_src) -+ & GET_MODE_MASK (old_mode), -+ new_mode); -+ if (!validate_change (insn, &XEXP (*loc, 0), -+ new_const_int, true)) -+ return false; -+ } -+ loc = &XEXP (*loc, 1); -+ } -+ /* Drop all other notes, they assume a wrong mode. */ -+ else if (!validate_change (insn, loc, XEXP (*loc, 1), true)) -+ return false; -+ } -+ else -+ loc = &XEXP (*loc, 1); -+ } -+ return true; -+} -+ - /* Given a insn (CURR_INSN), an extension candidate for removal (CAND) - and a pointer to the SET rtx (ORIG_SET) that needs to be modified, - this code modifies the SET rtx to a new SET rtx that extends the -@@ -282,6 +326,7 @@ static bool - combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set) - { - rtx orig_src = SET_SRC (*orig_set); -+ enum machine_mode orig_mode = GET_MODE (SET_DEST (*orig_set)); - rtx new_set; - rtx cand_pat = PATTERN (cand->insn); - -@@ -318,9 +363,8 @@ combine_set_extension (ext_cand *cand, r - { - /* Zero-extend the negative constant by masking out the bits outside - the source mode. */ -- enum machine_mode src_mode = GET_MODE (SET_DEST (*orig_set)); - rtx new_const_int -- = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (src_mode), -+ = gen_int_mode (INTVAL (orig_src) & GET_MODE_MASK (orig_mode), - GET_MODE (new_reg)); - new_set = gen_rtx_SET (VOIDmode, new_reg, new_const_int); - } -@@ -359,7 +403,9 @@ combine_set_extension (ext_cand *cand, r - - /* This change is a part of a group of changes. Hence, - validate_change will not try to commit the change. */ -- if (validate_change (curr_insn, orig_set, new_set, true)) -+ if (validate_change (curr_insn, orig_set, new_set, true) -+ && update_reg_equal_equiv_notes (curr_insn, cand->mode, orig_mode, -+ cand->code)) - { - if (dump_file) - { -@@ -409,7 +455,9 @@ transform_ifelse (ext_cand *cand, rtx de - ifexpr = gen_rtx_IF_THEN_ELSE (cand->mode, cond, map_srcreg, map_srcreg2); - new_set = gen_rtx_SET (VOIDmode, map_dstreg, ifexpr); - -- if (validate_change (def_insn, &PATTERN (def_insn), new_set, true)) -+ if (validate_change (def_insn, &PATTERN (def_insn), new_set, true) -+ && update_reg_equal_equiv_notes (def_insn, cand->mode, GET_MODE (dstreg), -+ cand->code)) - { - if (dump_file) - { ---- gcc/testsuite/gcc.c-torture/execute/pr63659.c.jj 2014-10-27 19:26:57.720902738 +0100 -+++ gcc/testsuite/gcc.c-torture/execute/pr63659.c 2014-10-27 19:26:36.000000000 +0100 -@@ -0,0 +1,29 @@ -+/* PR rtl-optimization/63659 */ -+ -+int a, b, c, *d = &b, g, h, i; -+unsigned char e; -+char f; -+ -+int -+main () -+{ -+ while (a) -+ { -+ for (a = 0; a; a++) -+ for (; c; c++) -+ ; -+ if (i) -+ break; -+ } -+ -+ char j = c, k = -1, l; -+ l = g = j >> h; -+ f = l == 0 ? k : k % l; -+ e = 0 ? 0 : f; -+ *d = e; -+ -+ if (b != 255) -+ __builtin_abort (); -+ -+ return 0; -+} diff --git a/gcc49-rh330771.patch b/gcc49-rh330771.patch deleted file mode 100644 index 102730f..0000000 --- a/gcc49-rh330771.patch +++ /dev/null @@ -1,27 +0,0 @@ -2007-10-16 Jakub Jelinek - - * Makefile.am (libgcj_tools_la_LIBADD): Add. - * Makefile.in: Regenerated. - ---- libjava/Makefile.am.jj 2009-05-06 08:14:50.000000000 +0200 -+++ libjava/Makefile.am 2009-05-06 10:26:43.000000000 +0200 -@@ -550,7 +550,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - $(LIBJAVA_LDFLAGS_LIBMATH) - --libgcj_tools_la_LIBADD = libgcj.la -+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la - libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \ - $(libgcj_tools_la_version_dep) - if BUILD_SUBLIBS ---- libjava/Makefile.in.jj 2009-05-06 08:14:49.000000000 +0200 -+++ libjava/Makefile.in 2009-05-06 10:27:18.000000000 +0200 -@@ -1110,7 +1110,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ - $(LIBJAVA_LDFLAGS_LIBMATH) - --libgcj_tools_la_LIBADD = libgcj.la -+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la - libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \ - $(libgcj_tools_la_version_dep) $(am__append_19) - libgcj_tools_la_LINK = $(LIBLINK) $(libgcj_tools_la_LDFLAGS) \ diff --git a/gcc49-sparc-config-detection.patch b/gcc49-sparc-config-detection.patch deleted file mode 100644 index cd683a0..0000000 --- a/gcc49-sparc-config-detection.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 -+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 -@@ -2656,7 +2656,7 @@ sparc-*-rtems*) - tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-elf sparc/t-rtems" - ;; --sparc-*-linux*) -+sparc-*-linux* | sparcv9-*-linux*) - tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - case ${target} in -@@ -2710,7 +2710,7 @@ sparc64-*-rtems*) - extra_options="${extra_options}" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64" - ;; --sparc64-*-linux*) -+sparc64*-*-linux*) - tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h sparc/tso.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64" ---- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 -+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 -@@ -1002,7 +1002,7 @@ sparc-*-elf*) - tmake_file="${tmake_file} t-fdpbit t-crtfm" - extra_parts="$extra_parts crti.o crtn.o crtfastmath.o" - ;; --sparc-*-linux*) # SPARC's running GNU/Linux, libc6 -+sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6 - tmake_file="${tmake_file} t-crtfm" - if test "${host_address}" = 64; then - tmake_file="$tmake_file sparc/t-linux64" -@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* - tmake_file="$tmake_file t-crtfm" - extra_parts="$extra_parts crtfastmath.o" - ;; --sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux -+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux - extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} t-crtfm sparc/t-linux" - if test "${host_address}" = 64; then diff --git a/gcc6-aarch64-async-unw-tables.patch b/gcc6-aarch64-async-unw-tables.patch new file mode 100644 index 0000000..feec149 --- /dev/null +++ b/gcc6-aarch64-async-unw-tables.patch @@ -0,0 +1,35 @@ +2014-04-07 Richard Henderson + + * common/config/aarch64/aarch64-common.c (TARGET_OPTION_INIT_STRUCT): + Define. + (aarch64_option_init_struct): New function. + +--- gcc/common/config/aarch64/aarch64-common.c ++++ gcc/common/config/aarch64/aarch64-common.c +@@ -39,6 +39,9 @@ + #undef TARGET_OPTION_OPTIMIZATION_TABLE + #define TARGET_OPTION_OPTIMIZATION_TABLE aarch_option_optimization_table + ++#undef TARGET_OPTION_INIT_STRUCT ++#define TARGET_OPTION_INIT_STRUCT aarch64_option_init_struct ++ + /* Set default optimization options. */ + static const struct default_options aarch_option_optimization_table[] = + { +@@ -47,6 +50,16 @@ static const struct default_options aarch_option_optimization_table[] = + { OPT_LEVELS_NONE, 0, NULL, 0 } + }; + ++/* Implement TARGET_OPTION_INIT_STRUCT. */ ++ ++static void ++aarch64_option_init_struct (struct gcc_options *opts) ++{ ++ /* By default, always emit DWARF-2 unwind info. This allows debugging ++ without maintaining a stack frame back-chain. */ ++ opts->x_flag_asynchronous_unwind_tables = 1; ++} ++ + /* Implement TARGET_HANDLE_OPTION. + This function handles the target specific options for CPU/target selection. + diff --git a/gcc6-hack.patch b/gcc6-hack.patch new file mode 100644 index 0000000..950ff63 --- /dev/null +++ b/gcc6-hack.patch @@ -0,0 +1,159 @@ +--- libada/Makefile.in.jj 2009-01-14 12:07:35.000000000 +0100 ++++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100 +@@ -66,18 +66,40 @@ libsubdir := $(libdir)/gcc/$(target_nonc + ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) + ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR)) + ++DEFAULTMULTIFLAGS := ++ifeq ($(MULTISUBDIR),) ++targ:=$(subst -, ,$(target)) ++arch:=$(word 1,$(targ)) ++ifeq ($(words $(targ)),2) ++osys:=$(word 2,$(targ)) ++else ++osys:=$(word 3,$(targ)) ++endif ++ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),) ++ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64) ++DEFAULTMULTIFLAGS := -m64 ++else ++ifeq ($(strip $(filter-out s390%, $(arch))),) ++DEFAULTMULTIFLAGS := -m31 ++else ++DEFAULTMULTIFLAGS := -m32 ++endif ++endif ++endif ++endif ++ + # exeext should not be used because it's the *host* exeext. We're building + # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus + # definitions just in case something slips through the safety net provided + # by recursive make invocations in gcc/ada/Makefile.in + LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ +- "LDFLAGS=$(LDFLAGS)" \ ++ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ +- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ ++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG)" \ + "THREAD_KIND=$(THREAD_KIND)" \ + "TRACE=$(TRACE)" \ +@@ -88,7 +110,7 @@ LIBADA_FLAGS_TO_PASS = \ + "exeext=.exeext.should.not.be.used " \ + 'CC=the.host.compiler.should.not.be.needed' \ + "GCC_FOR_TARGET=$(CC)" \ +- "CFLAGS=$(CFLAGS)" ++ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)" + + # Rules to build gnatlib. + .PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool +--- gcc/ada/sem_util.adb (revision 161677) ++++ gcc/ada/sem_util.adb (working copy) +@@ -5487,7 +5487,7 @@ package body Sem_Util is + Exp : Node_Id; + Assn : Node_Id; + Choice : Node_Id; +- Comp_Type : Entity_Id; ++ Comp_Type : Entity_Id := Empty; + Is_Array_Aggr : Boolean; + + begin +--- config-ml.in.jj 2010-06-30 09:50:44.000000000 +0200 ++++ config-ml.in 2010-07-02 21:24:17.994211151 +0200 +@@ -516,6 +516,8 @@ multi-do: + ADAFLAGS="$(ADAFLAGS) $${flags}" \ + prefix="$(prefix)" \ + exec_prefix="$(exec_prefix)" \ ++ mandir="$(mandir)" \ ++ infodir="$(infodir)" \ + GCJFLAGS="$(GCJFLAGS) $${flags}" \ + GOCFLAGS="$(GOCFLAGS) $${flags}" \ + CXXFLAGS="$(CXXFLAGS) $${flags}" \ +--- libjava/Makefile.am.jj 2010-07-09 11:17:33.729604090 +0200 ++++ libjava/Makefile.am 2010-07-09 13:16:41.894375641 +0200 +@@ -710,7 +710,8 @@ if USE_LIBGCJ_BC + ## later. + @echo Installing dummy lib libgcj_bc.so.1.0.0; \ + rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ +- mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ ++ $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ ++ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \ + $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ + -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ + rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ +--- libjava/Makefile.in.jj 2010-07-09 11:17:34.000000000 +0200 ++++ libjava/Makefile.in 2010-07-09 13:18:07.542572270 +0200 +@@ -12665,7 +12665,8 @@ install-exec-hook: install-binPROGRAMS i + install-libexecsubPROGRAMS + @USE_LIBGCJ_BC_TRUE@ @echo Installing dummy lib libgcj_bc.so.1.0.0; \ + @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ +-@USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ ++@USE_LIBGCJ_BC_TRUE@ $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \ ++@USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \ + @USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \ + @USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \ + @USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \ +--- libcpp/macro.c.jj 2015-01-14 11:01:34.000000000 +0100 ++++ libcpp/macro.c 2015-01-14 14:22:19.286949884 +0100 +@@ -2947,8 +2947,6 @@ create_iso_definition (cpp_reader *pfile + cpp_token *token; + const cpp_token *ctoken; + bool following_paste_op = false; +- const char *paste_op_error_msg = +- N_("'##' cannot appear at either end of a macro expansion"); + unsigned int num_extra_tokens = 0; + + /* Get the first token of the expansion (or the '(' of a +@@ -3059,7 +3057,8 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the end. */ + if (following_paste_op) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro expansion"); + return false; + } + break; +@@ -3072,7 +3071,8 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the beginning. */ + if (macro->count == 1) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro expansion"); + return false; + } + +--- libcpp/expr.c.jj 2015-01-14 11:01:34.000000000 +0100 ++++ libcpp/expr.c 2015-01-14 14:35:52.851002344 +0100 +@@ -672,16 +672,17 @@ cpp_classify_number (cpp_reader *pfile, + if ((result & CPP_N_WIDTH) == CPP_N_LARGE + && CPP_OPTION (pfile, cpp_warn_long_long)) + { +- const char *message = CPP_OPTION (pfile, cplusplus) +- ? N_("use of C++11 long long integer constant") +- : N_("use of C99 long long integer constant"); +- + if (CPP_OPTION (pfile, c99)) + cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location, +- 0, message); ++ 0, CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + else + cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG, +- virtual_location, 0, message); ++ virtual_location, 0, ++ CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + } + + result |= CPP_N_INTEGER; diff --git a/gcc6-i386-libgomp.patch b/gcc6-i386-libgomp.patch new file mode 100644 index 0000000..520561e --- /dev/null +++ b/gcc6-i386-libgomp.patch @@ -0,0 +1,11 @@ +--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100 ++++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100 +@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then + ;; + *) + if test -z "$with_arch"; then +- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" ++ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" + fi + esac + ;; diff --git a/gcc6-isl-dl.patch b/gcc6-isl-dl.patch new file mode 100644 index 0000000..209ac3f --- /dev/null +++ b/gcc6-isl-dl.patch @@ -0,0 +1,585 @@ +--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200 ++++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100 +@@ -1013,7 +1013,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY) + # and the system's installed libraries. + LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ + $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) +-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ ++BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ + $(ZLIB) + # Any system libraries needed just for GNAT. + SYSLIBS = @GNAT_LIBEXC@ +@@ -2058,6 +2058,15 @@ $(out_object_file): $(out_file) + $(common_out_object_file): $(common_out_file) + $(COMPILE) $< + $(POSTCOMPILE) ++ ++graphite%.o : \ ++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) ++graphite.o : \ ++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) ++graphite%.o : \ ++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) ++graphite.o : \ ++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) + # + # Generate header and source files from the machine description, + # and compile them. +--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100 ++++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100 +@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. + #include + #include + #include ++#include + + #ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS + /* isl 0.15 or later. */ +@@ -47,6 +48,494 @@ along with GCC; see the file COPYING3. + # define isl_stat_ok 0 + #endif + ++#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS ++#define DYNSYM_SCHEDULE_FUSE DYNSYM (isl_options_set_schedule_serialize_sccs) ++#define DYNSYM_SET_YAML_STYLE DYNSYM (isl_printer_set_yaml_style); ++#else ++#define DYNSYM_SCHEDULE_FUSE DYNSYM (isl_options_set_schedule_fuse) ++#define DYNSYM_SET_YAML_STYLE ++#endif ++ ++#define DYNSYMS \ ++ DYNSYM (isl_aff_add_coefficient_si); \ ++ DYNSYM (isl_aff_free); \ ++ DYNSYM (isl_aff_get_space); \ ++ DYNSYM (isl_aff_set_coefficient_si); \ ++ DYNSYM (isl_aff_set_constant_si); \ ++ DYNSYM (isl_aff_zero_on_domain); \ ++ DYNSYM (isl_band_free); \ ++ DYNSYM (isl_band_get_children); \ ++ DYNSYM (isl_band_get_partial_schedule); \ ++ DYNSYM (isl_band_has_children); \ ++ DYNSYM (isl_band_list_free); \ ++ DYNSYM (isl_band_list_get_band); \ ++ DYNSYM (isl_band_list_get_ctx); \ ++ DYNSYM (isl_band_list_n_band); \ ++ DYNSYM (isl_band_n_member); \ ++ DYNSYM (isl_basic_map_add_constraint); \ ++ DYNSYM (isl_basic_map_project_out); \ ++ DYNSYM (isl_basic_map_universe); \ ++ DYNSYM (isl_constraint_set_coefficient_si); \ ++ DYNSYM (isl_constraint_set_constant_si); \ ++ DYNSYM (isl_ctx_alloc); \ ++ DYNSYM (isl_ctx_free); \ ++ DYNSYM (isl_equality_alloc); \ ++ DYNSYM (isl_id_alloc); \ ++ DYNSYM (isl_id_copy); \ ++ DYNSYM (isl_id_free); \ ++ DYNSYM (isl_inequality_alloc); \ ++ DYNSYM (isl_local_space_copy); \ ++ DYNSYM (isl_local_space_free); \ ++ DYNSYM (isl_local_space_from_space); \ ++ DYNSYM (isl_local_space_range); \ ++ DYNSYM (isl_map_add_constraint); \ ++ DYNSYM (isl_map_add_dims); \ ++ DYNSYM (isl_map_align_params); \ ++ DYNSYM (isl_map_apply_range); \ ++ DYNSYM (isl_map_copy); \ ++ DYNSYM (isl_map_dim); \ ++ DYNSYM (isl_map_dump); \ ++ DYNSYM (isl_map_equate); \ ++ DYNSYM (isl_map_fix_si); \ ++ DYNSYM (isl_map_flat_product); \ ++ DYNSYM (isl_map_flat_range_product); \ ++ DYNSYM (isl_map_free); \ ++ DYNSYM (isl_map_from_basic_map); \ ++ DYNSYM (isl_map_from_pw_aff); \ ++ DYNSYM (isl_map_from_union_map); \ ++ DYNSYM (isl_map_get_ctx); \ ++ DYNSYM (isl_map_get_space); \ ++ DYNSYM (isl_map_get_tuple_id); \ ++ DYNSYM (isl_map_insert_dims); \ ++ DYNSYM (isl_map_intersect); \ ++ DYNSYM (isl_map_intersect_domain); \ ++ DYNSYM (isl_map_intersect_range); \ ++ DYNSYM (isl_map_is_empty); \ ++ DYNSYM (isl_map_lex_ge); \ ++ DYNSYM (isl_map_lex_le); \ ++ DYNSYM (isl_map_n_out); \ ++ DYNSYM (isl_map_range); \ ++ DYNSYM (isl_map_set_tuple_id); \ ++ DYNSYM (isl_map_universe); \ ++ DYNSYM (isl_options_set_on_error); \ ++ DYNSYM_SCHEDULE_FUSE; \ ++ DYNSYM_SET_YAML_STYLE \ ++ DYNSYM (isl_options_set_schedule_max_constant_term); \ ++ DYNSYM (isl_options_set_schedule_maximize_band_depth); \ ++ DYNSYM (isl_printer_free); \ ++ DYNSYM (isl_printer_print_aff); \ ++ DYNSYM (isl_printer_print_constraint); \ ++ DYNSYM (isl_printer_print_map); \ ++ DYNSYM (isl_printer_print_set); \ ++ DYNSYM (isl_printer_to_file); \ ++ DYNSYM (isl_pw_aff_add); \ ++ DYNSYM (isl_pw_aff_alloc); \ ++ DYNSYM (isl_pw_aff_copy); \ ++ DYNSYM (isl_pw_aff_eq_set); \ ++ DYNSYM (isl_pw_aff_free); \ ++ DYNSYM (isl_pw_aff_from_aff); \ ++ DYNSYM (isl_pw_aff_ge_set); \ ++ DYNSYM (isl_pw_aff_gt_set); \ ++ DYNSYM (isl_pw_aff_is_cst); \ ++ DYNSYM (isl_pw_aff_le_set); \ ++ DYNSYM (isl_pw_aff_lt_set); \ ++ DYNSYM (isl_pw_aff_mul); \ ++ DYNSYM (isl_pw_aff_ne_set); \ ++ DYNSYM (isl_pw_aff_nonneg_set); \ ++ DYNSYM (isl_pw_aff_set_tuple_id); \ ++ DYNSYM (isl_pw_aff_sub); \ ++ DYNSYM (isl_pw_aff_zero_set); \ ++ DYNSYM (isl_schedule_free); \ ++ DYNSYM (isl_schedule_get_band_forest); \ ++ DYNSYM (isl_set_add_constraint); \ ++ DYNSYM (isl_set_add_dims); \ ++ DYNSYM (isl_set_apply); \ ++ DYNSYM (isl_set_coalesce); \ ++ DYNSYM (isl_set_copy); \ ++ DYNSYM (isl_set_dim); \ ++ DYNSYM (isl_set_fix_si); \ ++ DYNSYM (isl_set_free); \ ++ DYNSYM (isl_set_get_space); \ ++ DYNSYM (isl_set_get_tuple_id); \ ++ DYNSYM (isl_set_intersect); \ ++ DYNSYM (isl_set_is_empty); \ ++ DYNSYM (isl_set_n_dim); \ ++ DYNSYM (isl_set_nat_universe); \ ++ DYNSYM (isl_set_project_out); \ ++ DYNSYM (isl_set_set_tuple_id); \ ++ DYNSYM (isl_set_universe); \ ++ DYNSYM (isl_space_add_dims); \ ++ DYNSYM (isl_space_alloc); \ ++ DYNSYM (isl_space_copy); \ ++ DYNSYM (isl_space_dim); \ ++ DYNSYM (isl_space_domain); \ ++ DYNSYM (isl_space_find_dim_by_id); \ ++ DYNSYM (isl_space_free); \ ++ DYNSYM (isl_space_from_domain); \ ++ DYNSYM (isl_space_get_tuple_id); \ ++ DYNSYM (isl_space_params_alloc); \ ++ DYNSYM (isl_space_range); \ ++ DYNSYM (isl_space_set_alloc); \ ++ DYNSYM (isl_space_set_dim_id); \ ++ DYNSYM (isl_space_set_tuple_id); \ ++ DYNSYM (isl_union_map_add_map); \ ++ DYNSYM (isl_union_map_align_params); \ ++ DYNSYM (isl_union_map_apply_domain); \ ++ DYNSYM (isl_union_map_apply_range); \ ++ DYNSYM (isl_union_map_compute_flow); \ ++ DYNSYM (isl_union_map_copy); \ ++ DYNSYM (isl_union_map_empty); \ ++ DYNSYM (isl_union_map_flat_range_product); \ ++ DYNSYM (isl_union_map_foreach_map); \ ++ DYNSYM (isl_union_map_free); \ ++ DYNSYM (isl_union_map_from_map); \ ++ DYNSYM (isl_union_map_get_ctx); \ ++ DYNSYM (isl_union_map_get_space); \ ++ DYNSYM (isl_union_map_gist_domain); \ ++ DYNSYM (isl_union_map_gist_range); \ ++ DYNSYM (isl_union_map_intersect_domain); \ ++ DYNSYM (isl_union_map_is_empty); \ ++ DYNSYM (isl_union_map_subtract); \ ++ DYNSYM (isl_union_map_union); \ ++ DYNSYM (isl_union_set_add_set); \ ++ DYNSYM (isl_union_set_compute_schedule); \ ++ DYNSYM (isl_union_set_copy); \ ++ DYNSYM (isl_union_set_empty); \ ++ DYNSYM (isl_union_set_from_set); \ ++ DYNSYM (isl_aff_add_constant_val); \ ++ DYNSYM (isl_aff_get_coefficient_val); \ ++ DYNSYM (isl_aff_get_ctx); \ ++ DYNSYM (isl_aff_mod_val); \ ++ DYNSYM (isl_ast_build_ast_from_schedule); \ ++ DYNSYM (isl_ast_build_free); \ ++ DYNSYM (isl_ast_build_from_context); \ ++ DYNSYM (isl_ast_build_get_ctx); \ ++ DYNSYM (isl_ast_build_get_schedule); \ ++ DYNSYM (isl_ast_build_get_schedule_space); \ ++ DYNSYM (isl_ast_build_set_before_each_for); \ ++ DYNSYM (isl_ast_build_set_options); \ ++ DYNSYM (isl_ast_expr_free); \ ++ DYNSYM (isl_ast_expr_from_val); \ ++ DYNSYM (isl_ast_expr_get_ctx); \ ++ DYNSYM (isl_ast_expr_get_id); \ ++ DYNSYM (isl_ast_expr_get_op_arg); \ ++ DYNSYM (isl_ast_expr_get_op_n_arg); \ ++ DYNSYM (isl_ast_expr_get_op_type); \ ++ DYNSYM (isl_ast_expr_get_type); \ ++ DYNSYM (isl_ast_expr_get_val); \ ++ DYNSYM (isl_ast_expr_sub); \ ++ DYNSYM (isl_ast_node_block_get_children); \ ++ DYNSYM (isl_ast_node_for_get_body); \ ++ DYNSYM (isl_ast_node_for_get_cond); \ ++ DYNSYM (isl_ast_node_for_get_inc); \ ++ DYNSYM (isl_ast_node_for_get_init); \ ++ DYNSYM (isl_ast_node_for_get_iterator); \ ++ DYNSYM (isl_ast_node_free); \ ++ DYNSYM (isl_ast_node_get_annotation); \ ++ DYNSYM (isl_ast_node_get_type); \ ++ DYNSYM (isl_ast_node_if_get_cond); \ ++ DYNSYM (isl_ast_node_if_get_else); \ ++ DYNSYM (isl_ast_node_if_get_then); \ ++ DYNSYM (isl_ast_node_list_free); \ ++ DYNSYM (isl_ast_node_list_get_ast_node); \ ++ DYNSYM (isl_ast_node_list_n_ast_node); \ ++ DYNSYM (isl_ast_node_user_get_expr); \ ++ DYNSYM (isl_constraint_set_coefficient_val); \ ++ DYNSYM (isl_constraint_set_constant_val); \ ++ DYNSYM (isl_id_get_user); \ ++ DYNSYM (isl_local_space_get_ctx); \ ++ DYNSYM (isl_map_fix_val); \ ++ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \ ++ DYNSYM (isl_printer_print_ast_node); \ ++ DYNSYM (isl_printer_print_str); \ ++ DYNSYM (isl_printer_set_output_format); \ ++ DYNSYM (isl_pw_aff_mod_val); \ ++ DYNSYM (isl_schedule_constraints_compute_schedule); \ ++ DYNSYM (isl_schedule_constraints_on_domain); \ ++ DYNSYM (isl_schedule_constraints_set_coincidence); \ ++ DYNSYM (isl_schedule_constraints_set_proximity); \ ++ DYNSYM (isl_schedule_constraints_set_validity); \ ++ DYNSYM (isl_set_get_dim_id); \ ++ DYNSYM (isl_set_max_val); \ ++ DYNSYM (isl_set_min_val); \ ++ DYNSYM (isl_set_params); \ ++ DYNSYM (isl_space_align_params); \ ++ DYNSYM (isl_space_map_from_domain_and_range); \ ++ DYNSYM (isl_space_set_tuple_name); \ ++ DYNSYM (isl_space_wrap); \ ++ DYNSYM (isl_union_map_from_domain_and_range); \ ++ DYNSYM (isl_union_map_range); \ ++ DYNSYM (isl_union_set_union); \ ++ DYNSYM (isl_union_set_universe); \ ++ DYNSYM (isl_val_2exp); \ ++ DYNSYM (isl_val_add_ui); \ ++ DYNSYM (isl_val_copy); \ ++ DYNSYM (isl_val_free); \ ++ DYNSYM (isl_val_get_num_gmp); \ ++ DYNSYM (isl_val_int_from_gmp); \ ++ DYNSYM (isl_val_int_from_si); \ ++ DYNSYM (isl_val_int_from_ui); \ ++ DYNSYM (isl_val_mul); \ ++ DYNSYM (isl_val_neg); \ ++ DYNSYM (isl_val_sub); \ ++ DYNSYM (isl_printer_print_union_map); \ ++ DYNSYM (isl_pw_aff_get_ctx); \ ++ DYNSYM (isl_val_is_int); \ ++ DYNSYM (isl_ctx_get_max_operations); \ ++ DYNSYM (isl_ctx_set_max_operations); \ ++ DYNSYM (isl_ctx_last_error); \ ++ DYNSYM (isl_ctx_reset_operations); \ ++ DYNSYM (isl_map_coalesce); \ ++ DYNSYM (isl_printer_print_schedule); \ ++ DYNSYM (isl_set_set_dim_id); \ ++ DYNSYM (isl_union_map_coalesce); ++ ++extern struct isl_pointers_s__ ++{ ++ bool inited; ++ void *h; ++#define DYNSYM(x) __typeof (x) *p_##x ++ DYNSYMS ++#undef DYNSYM ++} isl_pointers__; ++ ++#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si) ++#define isl_aff_free (*isl_pointers__.p_isl_aff_free) ++#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space) ++#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si) ++#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si) ++#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain) ++#define isl_band_free (*isl_pointers__.p_isl_band_free) ++#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children) ++#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule) ++#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children) ++#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free) ++#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band) ++#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx) ++#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band) ++#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member) ++#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint) ++#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out) ++#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe) ++#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si) ++#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si) ++#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc) ++#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free) ++#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc) ++#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc) ++#define isl_id_copy (*isl_pointers__.p_isl_id_copy) ++#define isl_id_free (*isl_pointers__.p_isl_id_free) ++#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc) ++#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy) ++#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free) ++#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space) ++#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range) ++#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint) ++#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims) ++#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params) ++#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range) ++#define isl_map_copy (*isl_pointers__.p_isl_map_copy) ++#define isl_map_dim (*isl_pointers__.p_isl_map_dim) ++#define isl_map_dump (*isl_pointers__.p_isl_map_dump) ++#define isl_map_equate (*isl_pointers__.p_isl_map_equate) ++#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si) ++#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product) ++#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product) ++#define isl_map_free (*isl_pointers__.p_isl_map_free) ++#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map) ++#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff) ++#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map) ++#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx) ++#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space) ++#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id) ++#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims) ++#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect) ++#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain) ++#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range) ++#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty) ++#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge) ++#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le) ++#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out) ++#define isl_map_range (*isl_pointers__.p_isl_map_range) ++#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id) ++#define isl_map_universe (*isl_pointers__.p_isl_map_universe) ++#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error) ++#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS ++#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs) ++#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style) ++#else ++#define isl_options_set_schedule_fuse (*isl_pointers__.p_isl_options_set_schedule_fuse) ++#endif ++#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term) ++#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth) ++#define isl_printer_free (*isl_pointers__.p_isl_printer_free) ++#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff) ++#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint) ++#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map) ++#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set) ++#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file) ++#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add) ++#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc) ++#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy) ++#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set) ++#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free) ++#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff) ++#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set) ++#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set) ++#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst) ++#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set) ++#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set) ++#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul) ++#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set) ++#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set) ++#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id) ++#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub) ++#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set) ++#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free) ++#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest) ++#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint) ++#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims) ++#define isl_set_apply (*isl_pointers__.p_isl_set_apply) ++#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce) ++#define isl_set_copy (*isl_pointers__.p_isl_set_copy) ++#define isl_set_dim (*isl_pointers__.p_isl_set_dim) ++#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si) ++#define isl_set_free (*isl_pointers__.p_isl_set_free) ++#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space) ++#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id) ++#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect) ++#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty) ++#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim) ++#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe) ++#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out) ++#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id) ++#define isl_set_universe (*isl_pointers__.p_isl_set_universe) ++#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims) ++#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc) ++#define isl_space_copy (*isl_pointers__.p_isl_space_copy) ++#define isl_space_dim (*isl_pointers__.p_isl_space_dim) ++#define isl_space_domain (*isl_pointers__.p_isl_space_domain) ++#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id) ++#define isl_space_free (*isl_pointers__.p_isl_space_free) ++#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain) ++#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id) ++#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc) ++#define isl_space_range (*isl_pointers__.p_isl_space_range) ++#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc) ++#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id) ++#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id) ++#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map) ++#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params) ++#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain) ++#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range) ++#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow) ++#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy) ++#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty) ++#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product) ++#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map) ++#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free) ++#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map) ++#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx) ++#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space) ++#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain) ++#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range) ++#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain) ++#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty) ++#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract) ++#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union) ++#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set) ++#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule) ++#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy) ++#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty) ++#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set) ++#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val) ++#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val) ++#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx) ++#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val) ++#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule) ++#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free) ++#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context) ++#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx) ++#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule) ++#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space) ++#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for) ++#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options) ++#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free) ++#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val) ++#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx) ++#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id) ++#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg) ++#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg) ++#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type) ++#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type) ++#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val) ++#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub) ++#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children) ++#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body) ++#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond) ++#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc) ++#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init) ++#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator) ++#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free) ++#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation) ++#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type) ++#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond) ++#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else) ++#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then) ++#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free) ++#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node) ++#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node) ++#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr) ++#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val) ++#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val) ++#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user) ++#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx) ++#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val) ++#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound) ++#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node) ++#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str) ++#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format) ++#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val) ++#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule) ++#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain) ++#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence) ++#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity) ++#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity) ++#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id) ++#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val) ++#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val) ++#define isl_set_params (*isl_pointers__.p_isl_set_params) ++#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params) ++#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range) ++#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name) ++#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap) ++#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range) ++#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range) ++#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union) ++#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe) ++#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp) ++#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui) ++#define isl_val_copy (*isl_pointers__.p_isl_val_copy) ++#define isl_val_free (*isl_pointers__.p_isl_val_free) ++#define isl_val_get_num_gmp (*isl_pointers__.p_isl_val_get_num_gmp) ++#define isl_val_int_from_gmp (*isl_pointers__.p_isl_val_int_from_gmp) ++#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si) ++#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui) ++#define isl_val_mul (*isl_pointers__.p_isl_val_mul) ++#define isl_val_neg (*isl_pointers__.p_isl_val_neg) ++#define isl_val_sub (*isl_pointers__.p_isl_val_sub) ++#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map) ++#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx) ++#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int) ++#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations) ++#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations) ++#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error) ++#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations) ++#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce) ++#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule) ++#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id) ++#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce) ++ + typedef struct poly_dr *poly_dr_p; + + typedef struct poly_bb *poly_bb_p; +--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100 ++++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100 +@@ -54,6 +54,34 @@ along with GCC; see the file COPYING3. + #include "tree-cfgcleanup.h" + #include "graphite.h" + ++__typeof (isl_pointers__) isl_pointers__; ++ ++static bool ++init_isl_pointers (void) ++{ ++ void *h; ++ ++ if (isl_pointers__.inited) ++ return isl_pointers__.h != NULL; ++ h = dlopen ("libisl.so.13", RTLD_LAZY); ++ isl_pointers__.h = h; ++ if (h == NULL) ++ return false; ++#define DYNSYM(x) \ ++ do \ ++ { \ ++ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \ ++ u.q = dlsym (h, #x); \ ++ if (u.q == NULL) \ ++ return false; \ ++ isl_pointers__.p_##x = u.p; \ ++ } \ ++ while (0) ++ DYNSYMS ++#undef DYNSYM ++ return true; ++} ++ + /* Print global statistics to FILE. */ + + static void +@@ -298,6 +326,15 @@ graphite_transform_loops (void) + if (parallelized_function_p (cfun->decl)) + return; + ++ if (number_of_loops (cfun) <= 1) ++ return; ++ ++ if (!init_isl_pointers ()) ++ { ++ sorry ("Graphite loop optimizations cannot be used"); ++ return; ++ } ++ + ctx = isl_ctx_alloc (); + isl_options_set_on_error (ctx, ISL_ON_ERROR_ABORT); + if (!graphite_initialize (ctx)) diff --git a/gcc6-java-nomulti.patch b/gcc6-java-nomulti.patch new file mode 100644 index 0000000..17334aa --- /dev/null +++ b/gcc6-java-nomulti.patch @@ -0,0 +1,44 @@ +--- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100 ++++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100 +@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode, + [allow rebuilding of .class and .h files])) + AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes) + ++AC_ARG_ENABLE(libjava-multilib, ++ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib])) ++if test "$enable_libjava_multilib" = no; then ++ multilib=no ++ ac_configure_args="$ac_configure_args --disable-multilib" ++fi ++ + # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. + GCC_NO_EXECUTABLES + +--- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100 ++++ libjava/configure 2007-12-07 18:39:58.000000000 +0100 +@@ -1021,6 +1021,8 @@ Optional Features: + default=yes + --enable-java-maintainer-mode + allow rebuilding of .class and .h files ++ --enable-libjava-multilib ++ build libjava as multilib + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-maintainer-mode enable make rules and dependencies not useful +@@ -1973,6 +1975,16 @@ else + fi + + ++# Check whether --enable-libjava-multilib was given. ++if test "${enable_libjava_multilib+set}" = set; then ++ enableval=$enable_libjava_multilib; ++fi ++ ++if test "$enable_libjava_multilib" = no; then ++ multilib=no ++ ac_configure_args="$ac_configure_args --disable-multilib" ++fi ++ + # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. + + diff --git a/gcc6-libgo-p224.patch b/gcc6-libgo-p224.patch new file mode 100644 index 0000000..ec729cf --- /dev/null +++ b/gcc6-libgo-p224.patch @@ -0,0 +1,1123 @@ +--- libgo/Makefile.am.jj 2014-01-08 13:53:06.000000000 +0100 ++++ libgo/Makefile.am 2014-03-05 15:20:09.938466093 +0100 +@@ -1133,7 +1133,6 @@ go_crypto_ecdsa_files = \ + go/crypto/ecdsa/ecdsa.go + go_crypto_elliptic_files = \ + go/crypto/elliptic/elliptic.go \ +- go/crypto/elliptic/p224.go \ + go/crypto/elliptic/p256.go + go_crypto_hmac_files = \ + go/crypto/hmac/hmac.go +--- libgo/Makefile.in.jj 2014-01-08 13:53:06.000000000 +0100 ++++ libgo/Makefile.in 2014-03-05 15:20:20.372465471 +0100 +@@ -1291,7 +1291,6 @@ go_crypto_ecdsa_files = \ + + go_crypto_elliptic_files = \ + go/crypto/elliptic/elliptic.go \ +- go/crypto/elliptic/p224.go \ + go/crypto/elliptic/p256.go + + go_crypto_hmac_files = \ +--- libgo/go/crypto/elliptic/elliptic.go.jj 2016-02-05 20:11:20.000000000 +0100 ++++ libgo/go/crypto/elliptic/elliptic.go 2016-02-05 22:36:06.145039321 +0100 +@@ -338,7 +338,6 @@ var p384 *CurveParams + var p521 *CurveParams + + func initAll() { +- initP224() + initP256() + initP384() + initP521() +--- libgo/go/crypto/elliptic/elliptic_test.go.jj 2016-02-05 20:11:19.000000000 +0100 ++++ libgo/go/crypto/elliptic/elliptic_test.go 2016-02-05 22:37:37.857772875 +0100 +@@ -5,39 +5,16 @@ + package elliptic + + import ( +- "crypto/rand" +- "encoding/hex" +- "fmt" + "math/big" + "testing" + ) + +-func TestOnCurve(t *testing.T) { +- p224 := P224() +- if !p224.IsOnCurve(p224.Params().Gx, p224.Params().Gy) { +- t.Errorf("FAIL") +- } +-} +- +-func TestOffCurve(t *testing.T) { +- p224 := P224() +- x, y := new(big.Int).SetInt64(1), new(big.Int).SetInt64(1) +- if p224.IsOnCurve(x, y) { +- t.Errorf("FAIL: point off curve is claimed to be on the curve") +- } +- b := Marshal(p224, x, y) +- x1, y1 := Unmarshal(p224, b) +- if x1 != nil || y1 != nil { +- t.Errorf("FAIL: unmarshalling a point not on the curve succeeded") +- } +-} +- + type baseMultTest struct { + k string + x, y string + } + +-var p224BaseMultTests = []baseMultTest{ ++var p256BaseMultTests = []baseMultTest{ + { + "1", + "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", +@@ -300,47 +277,12 @@ var p224BaseMultTests = []baseMultTest{ + }, + } + +-func TestBaseMult(t *testing.T) { +- p224 := P224() +- for i, e := range p224BaseMultTests { +- k, ok := new(big.Int).SetString(e.k, 10) +- if !ok { +- t.Errorf("%d: bad value for k: %s", i, e.k) +- } +- x, y := p224.ScalarBaseMult(k.Bytes()) +- if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y { +- t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y) +- } +- if testing.Short() && i > 5 { +- break +- } +- } +-} +- +-func TestGenericBaseMult(t *testing.T) { +- // We use the P224 CurveParams directly in order to test the generic implementation. +- p224 := P224().Params() +- for i, e := range p224BaseMultTests { +- k, ok := new(big.Int).SetString(e.k, 10) +- if !ok { +- t.Errorf("%d: bad value for k: %s", i, e.k) +- } +- x, y := p224.ScalarBaseMult(k.Bytes()) +- if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y { +- t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y) +- } +- if testing.Short() && i > 5 { +- break +- } +- } +-} +- + func TestP256BaseMult(t *testing.T) { + p256 := P256() + p256Generic := p256.Params() + +- scalars := make([]*big.Int, 0, len(p224BaseMultTests)+1) +- for _, e := range p224BaseMultTests { ++ scalars := make([]*big.Int, 0, len(p256BaseMultTests)+1) ++ for _, e := range p256BaseMultTests { + k, _ := new(big.Int).SetString(e.k, 10) + scalars = append(scalars, k) + } +@@ -365,7 +307,7 @@ func TestP256Mult(t *testing.T) { + p256 := P256() + p256Generic := p256.Params() + +- for i, e := range p224BaseMultTests { ++ for i, e := range p256BaseMultTests { + x, _ := new(big.Int).SetString(e.x, 16) + y, _ := new(big.Int).SetString(e.y, 16) + k, _ := new(big.Int).SetString(e.k, 10) +@@ -386,7 +328,6 @@ func TestInfinity(t *testing.T) { + name string + curve Curve + }{ +- {"p224", P224()}, + {"p256", P256()}, + } + +@@ -419,21 +360,10 @@ func TestInfinity(t *testing.T) { + } + } + +-func BenchmarkBaseMult(b *testing.B) { +- b.ResetTimer() +- p224 := P224() +- e := p224BaseMultTests[25] +- k, _ := new(big.Int).SetString(e.k, 10) +- b.StartTimer() +- for i := 0; i < b.N; i++ { +- p224.ScalarBaseMult(k.Bytes()) +- } +-} +- + func BenchmarkBaseMultP256(b *testing.B) { + b.ResetTimer() + p256 := P256() +- e := p224BaseMultTests[25] ++ e := p256BaseMultTests[25] + k, _ := new(big.Int).SetString(e.k, 10) + b.StartTimer() + for i := 0; i < b.N; i++ { +@@ -452,32 +382,3 @@ func BenchmarkScalarMultP256(b *testing. + p256.ScalarMult(x, y, priv) + } + } +- +-func TestMarshal(t *testing.T) { +- p224 := P224() +- _, x, y, err := GenerateKey(p224, rand.Reader) +- if err != nil { +- t.Error(err) +- return +- } +- serialized := Marshal(p224, x, y) +- xx, yy := Unmarshal(p224, serialized) +- if xx == nil { +- t.Error("failed to unmarshal") +- return +- } +- if xx.Cmp(x) != 0 || yy.Cmp(y) != 0 { +- t.Error("unmarshal returned different values") +- return +- } +-} +- +-func TestP224Overflow(t *testing.T) { +- // This tests for a specific bug in the P224 implementation. +- p224 := P224() +- pointData, _ := hex.DecodeString("049B535B45FB0A2072398A6831834624C7E32CCFD5A4B933BCEAF77F1DD945E08BBE5178F5EDF5E733388F196D2A631D2E075BB16CBFEEA15B") +- x, y := Unmarshal(p224, pointData) +- if !p224.IsOnCurve(x, y) { +- t.Error("P224 failed to validate a correct point") +- } +-} +--- libgo/go/crypto/ecdsa/ecdsa_test.go.jj 2016-02-05 20:10:59.000000000 +0100 ++++ libgo/go/crypto/ecdsa/ecdsa_test.go 2016-02-05 22:41:54.916215999 +0100 +@@ -33,7 +33,6 @@ func testKeyGeneration(t *testing.T, c e + } + + func TestKeyGeneration(t *testing.T) { +- testKeyGeneration(t, elliptic.P224(), "p224") + if testing.Short() { + return + } +@@ -98,7 +97,6 @@ func testSignAndVerify(t *testing.T, c e + } + + func TestSignAndVerify(t *testing.T) { +- testSignAndVerify(t, elliptic.P224(), "p224") + if testing.Short() { + return + } +@@ -135,7 +133,6 @@ func testNonceSafety(t *testing.T, c ell + } + + func TestNonceSafety(t *testing.T) { +- testNonceSafety(t, elliptic.P224(), "p224") + if testing.Short() { + return + } +@@ -170,7 +167,6 @@ func testINDCCA(t *testing.T, c elliptic + } + + func TestINDCCA(t *testing.T) { +- testINDCCA(t, elliptic.P224(), "p224") + if testing.Short() { + return + } +@@ -236,8 +232,6 @@ func TestVectors(t *testing.T) { + parts := strings.SplitN(line, ",", 2) + + switch parts[0] { +- case "P-224": +- pub.Curve = elliptic.P224() + case "P-256": + pub.Curve = elliptic.P256() + case "P-384": +--- libgo/go/crypto/x509/x509.go.jj 2016-02-05 20:11:19.000000000 +0100 ++++ libgo/go/crypto/x509/x509.go 2016-02-05 22:36:06.147039294 +0100 +@@ -334,9 +334,6 @@ func getPublicKeyAlgorithmFromOID(oid as + + // RFC 5480, 2.1.1.1. Named Curve + // +-// secp224r1 OBJECT IDENTIFIER ::= { +-// iso(1) identified-organization(3) certicom(132) curve(0) 33 } +-// + // secp256r1 OBJECT IDENTIFIER ::= { + // iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3) + // prime(1) 7 } +@@ -349,7 +346,6 @@ func getPublicKeyAlgorithmFromOID(oid as + // + // NB: secp256r1 is equivalent to prime256v1 + var ( +- oidNamedCurveP224 = asn1.ObjectIdentifier{1, 3, 132, 0, 33} + oidNamedCurveP256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 3, 1, 7} + oidNamedCurveP384 = asn1.ObjectIdentifier{1, 3, 132, 0, 34} + oidNamedCurveP521 = asn1.ObjectIdentifier{1, 3, 132, 0, 35} +@@ -357,8 +353,6 @@ var ( + + func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve { + switch { +- case oid.Equal(oidNamedCurveP224): +- return elliptic.P224() + case oid.Equal(oidNamedCurveP256): + return elliptic.P256() + case oid.Equal(oidNamedCurveP384): +@@ -371,8 +365,6 @@ func namedCurveFromOID(oid asn1.ObjectId + + func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, bool) { + switch curve { +- case elliptic.P224(): +- return oidNamedCurveP224, true + case elliptic.P256(): + return oidNamedCurveP256, true + case elliptic.P384(): +@@ -1502,7 +1494,7 @@ func signingParamsForPublicKey(pub inter + pubType = ECDSA + + switch pub.Curve { +- case elliptic.P224(), elliptic.P256(): ++ case elliptic.P256(): + hashFunc = crypto.SHA256 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA256 + case elliptic.P384(): +--- libgo/go/crypto/elliptic/p224.go.jj 2016-01-15 10:58:09.000000000 +0100 ++++ libgo/go/crypto/elliptic/p224.go 2016-02-05 22:36:06.147039294 +0100 +@@ -1,765 +0,0 @@ +-// Copyright 2012 The Go Authors. All rights reserved. +-// Use of this source code is governed by a BSD-style +-// license that can be found in the LICENSE file. +- +-package elliptic +- +-// This is a constant-time, 32-bit implementation of P224. See FIPS 186-3, +-// section D.2.2. +-// +-// See http://www.imperialviolet.org/2010/12/04/ecc.html ([1]) for background. +- +-import ( +- "math/big" +-) +- +-var p224 p224Curve +- +-type p224Curve struct { +- *CurveParams +- gx, gy, b p224FieldElement +-} +- +-func initP224() { +- // See FIPS 186-3, section D.2.2 +- p224.CurveParams = &CurveParams{Name: "P-224"} +- p224.P, _ = new(big.Int).SetString("26959946667150639794667015087019630673557916260026308143510066298881", 10) +- p224.N, _ = new(big.Int).SetString("26959946667150639794667015087019625940457807714424391721682722368061", 10) +- p224.B, _ = new(big.Int).SetString("b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", 16) +- p224.Gx, _ = new(big.Int).SetString("b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", 16) +- p224.Gy, _ = new(big.Int).SetString("bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", 16) +- p224.BitSize = 224 +- +- p224FromBig(&p224.gx, p224.Gx) +- p224FromBig(&p224.gy, p224.Gy) +- p224FromBig(&p224.b, p224.B) +-} +- +-// P224 returns a Curve which implements P-224 (see FIPS 186-3, section D.2.2) +-func P224() Curve { +- initonce.Do(initAll) +- return p224 +-} +- +-func (curve p224Curve) Params() *CurveParams { +- return curve.CurveParams +-} +- +-func (curve p224Curve) IsOnCurve(bigX, bigY *big.Int) bool { +- var x, y p224FieldElement +- p224FromBig(&x, bigX) +- p224FromBig(&y, bigY) +- +- // y² = x³ - 3x + b +- var tmp p224LargeFieldElement +- var x3 p224FieldElement +- p224Square(&x3, &x, &tmp) +- p224Mul(&x3, &x3, &x, &tmp) +- +- for i := 0; i < 8; i++ { +- x[i] *= 3 +- } +- p224Sub(&x3, &x3, &x) +- p224Reduce(&x3) +- p224Add(&x3, &x3, &curve.b) +- p224Contract(&x3, &x3) +- +- p224Square(&y, &y, &tmp) +- p224Contract(&y, &y) +- +- for i := 0; i < 8; i++ { +- if y[i] != x3[i] { +- return false +- } +- } +- return true +-} +- +-func (p224Curve) Add(bigX1, bigY1, bigX2, bigY2 *big.Int) (x, y *big.Int) { +- var x1, y1, z1, x2, y2, z2, x3, y3, z3 p224FieldElement +- +- p224FromBig(&x1, bigX1) +- p224FromBig(&y1, bigY1) +- if bigX1.Sign() != 0 || bigY1.Sign() != 0 { +- z1[0] = 1 +- } +- p224FromBig(&x2, bigX2) +- p224FromBig(&y2, bigY2) +- if bigX2.Sign() != 0 || bigY2.Sign() != 0 { +- z2[0] = 1 +- } +- +- p224AddJacobian(&x3, &y3, &z3, &x1, &y1, &z1, &x2, &y2, &z2) +- return p224ToAffine(&x3, &y3, &z3) +-} +- +-func (p224Curve) Double(bigX1, bigY1 *big.Int) (x, y *big.Int) { +- var x1, y1, z1, x2, y2, z2 p224FieldElement +- +- p224FromBig(&x1, bigX1) +- p224FromBig(&y1, bigY1) +- z1[0] = 1 +- +- p224DoubleJacobian(&x2, &y2, &z2, &x1, &y1, &z1) +- return p224ToAffine(&x2, &y2, &z2) +-} +- +-func (p224Curve) ScalarMult(bigX1, bigY1 *big.Int, scalar []byte) (x, y *big.Int) { +- var x1, y1, z1, x2, y2, z2 p224FieldElement +- +- p224FromBig(&x1, bigX1) +- p224FromBig(&y1, bigY1) +- z1[0] = 1 +- +- p224ScalarMult(&x2, &y2, &z2, &x1, &y1, &z1, scalar) +- return p224ToAffine(&x2, &y2, &z2) +-} +- +-func (curve p224Curve) ScalarBaseMult(scalar []byte) (x, y *big.Int) { +- var z1, x2, y2, z2 p224FieldElement +- +- z1[0] = 1 +- p224ScalarMult(&x2, &y2, &z2, &curve.gx, &curve.gy, &z1, scalar) +- return p224ToAffine(&x2, &y2, &z2) +-} +- +-// Field element functions. +-// +-// The field that we're dealing with is ℤ/pℤ where p = 2**224 - 2**96 + 1. +-// +-// Field elements are represented by a FieldElement, which is a typedef to an +-// array of 8 uint32's. The value of a FieldElement, a, is: +-// a[0] + 2**28·a[1] + 2**56·a[1] + ... + 2**196·a[7] +-// +-// Using 28-bit limbs means that there's only 4 bits of headroom, which is less +-// than we would really like. But it has the useful feature that we hit 2**224 +-// exactly, making the reflections during a reduce much nicer. +-type p224FieldElement [8]uint32 +- +-// p224P is the order of the field, represented as a p224FieldElement. +-var p224P = [8]uint32{1, 0, 0, 0xffff000, 0xfffffff, 0xfffffff, 0xfffffff, 0xfffffff} +- +-// p224IsZero returns 1 if a == 0 mod p and 0 otherwise. +-// +-// a[i] < 2**29 +-func p224IsZero(a *p224FieldElement) uint32 { +- // Since a p224FieldElement contains 224 bits there are two possible +- // representations of 0: 0 and p. +- var minimal p224FieldElement +- p224Contract(&minimal, a) +- +- var isZero, isP uint32 +- for i, v := range minimal { +- isZero |= v +- isP |= v - p224P[i] +- } +- +- // If either isZero or isP is 0, then we should return 1. +- isZero |= isZero >> 16 +- isZero |= isZero >> 8 +- isZero |= isZero >> 4 +- isZero |= isZero >> 2 +- isZero |= isZero >> 1 +- +- isP |= isP >> 16 +- isP |= isP >> 8 +- isP |= isP >> 4 +- isP |= isP >> 2 +- isP |= isP >> 1 +- +- // For isZero and isP, the LSB is 0 iff all the bits are zero. +- result := isZero & isP +- result = (^result) & 1 +- +- return result +-} +- +-// p224Add computes *out = a+b +-// +-// a[i] + b[i] < 2**32 +-func p224Add(out, a, b *p224FieldElement) { +- for i := 0; i < 8; i++ { +- out[i] = a[i] + b[i] +- } +-} +- +-const two31p3 = 1<<31 + 1<<3 +-const two31m3 = 1<<31 - 1<<3 +-const two31m15m3 = 1<<31 - 1<<15 - 1<<3 +- +-// p224ZeroModP31 is 0 mod p where bit 31 is set in all limbs so that we can +-// subtract smaller amounts without underflow. See the section "Subtraction" in +-// [1] for reasoning. +-var p224ZeroModP31 = []uint32{two31p3, two31m3, two31m3, two31m15m3, two31m3, two31m3, two31m3, two31m3} +- +-// p224Sub computes *out = a-b +-// +-// a[i], b[i] < 2**30 +-// out[i] < 2**32 +-func p224Sub(out, a, b *p224FieldElement) { +- for i := 0; i < 8; i++ { +- out[i] = a[i] + p224ZeroModP31[i] - b[i] +- } +-} +- +-// LargeFieldElement also represents an element of the field. The limbs are +-// still spaced 28-bits apart and in little-endian order. So the limbs are at +-// 0, 28, 56, ..., 392 bits, each 64-bits wide. +-type p224LargeFieldElement [15]uint64 +- +-const two63p35 = 1<<63 + 1<<35 +-const two63m35 = 1<<63 - 1<<35 +-const two63m35m19 = 1<<63 - 1<<35 - 1<<19 +- +-// p224ZeroModP63 is 0 mod p where bit 63 is set in all limbs. See the section +-// "Subtraction" in [1] for why. +-var p224ZeroModP63 = [8]uint64{two63p35, two63m35, two63m35, two63m35, two63m35m19, two63m35, two63m35, two63m35} +- +-const bottom12Bits = 0xfff +-const bottom28Bits = 0xfffffff +- +-// p224Mul computes *out = a*b +-// +-// a[i] < 2**29, b[i] < 2**30 (or vice versa) +-// out[i] < 2**29 +-func p224Mul(out, a, b *p224FieldElement, tmp *p224LargeFieldElement) { +- for i := 0; i < 15; i++ { +- tmp[i] = 0 +- } +- +- for i := 0; i < 8; i++ { +- for j := 0; j < 8; j++ { +- tmp[i+j] += uint64(a[i]) * uint64(b[j]) +- } +- } +- +- p224ReduceLarge(out, tmp) +-} +- +-// Square computes *out = a*a +-// +-// a[i] < 2**29 +-// out[i] < 2**29 +-func p224Square(out, a *p224FieldElement, tmp *p224LargeFieldElement) { +- for i := 0; i < 15; i++ { +- tmp[i] = 0 +- } +- +- for i := 0; i < 8; i++ { +- for j := 0; j <= i; j++ { +- r := uint64(a[i]) * uint64(a[j]) +- if i == j { +- tmp[i+j] += r +- } else { +- tmp[i+j] += r << 1 +- } +- } +- } +- +- p224ReduceLarge(out, tmp) +-} +- +-// ReduceLarge converts a p224LargeFieldElement to a p224FieldElement. +-// +-// in[i] < 2**62 +-func p224ReduceLarge(out *p224FieldElement, in *p224LargeFieldElement) { +- for i := 0; i < 8; i++ { +- in[i] += p224ZeroModP63[i] +- } +- +- // Eliminate the coefficients at 2**224 and greater. +- for i := 14; i >= 8; i-- { +- in[i-8] -= in[i] +- in[i-5] += (in[i] & 0xffff) << 12 +- in[i-4] += in[i] >> 16 +- } +- in[8] = 0 +- // in[0..8] < 2**64 +- +- // As the values become small enough, we start to store them in |out| +- // and use 32-bit operations. +- for i := 1; i < 8; i++ { +- in[i+1] += in[i] >> 28 +- out[i] = uint32(in[i] & bottom28Bits) +- } +- in[0] -= in[8] +- out[3] += uint32(in[8]&0xffff) << 12 +- out[4] += uint32(in[8] >> 16) +- // in[0] < 2**64 +- // out[3] < 2**29 +- // out[4] < 2**29 +- // out[1,2,5..7] < 2**28 +- +- out[0] = uint32(in[0] & bottom28Bits) +- out[1] += uint32((in[0] >> 28) & bottom28Bits) +- out[2] += uint32(in[0] >> 56) +- // out[0] < 2**28 +- // out[1..4] < 2**29 +- // out[5..7] < 2**28 +-} +- +-// Reduce reduces the coefficients of a to smaller bounds. +-// +-// On entry: a[i] < 2**31 + 2**30 +-// On exit: a[i] < 2**29 +-func p224Reduce(a *p224FieldElement) { +- for i := 0; i < 7; i++ { +- a[i+1] += a[i] >> 28 +- a[i] &= bottom28Bits +- } +- top := a[7] >> 28 +- a[7] &= bottom28Bits +- +- // top < 2**4 +- mask := top +- mask |= mask >> 2 +- mask |= mask >> 1 +- mask <<= 31 +- mask = uint32(int32(mask) >> 31) +- // Mask is all ones if top != 0, all zero otherwise +- +- a[0] -= top +- a[3] += top << 12 +- +- // We may have just made a[0] negative but, if we did, then we must +- // have added something to a[3], this it's > 2**12. Therefore we can +- // carry down to a[0]. +- a[3] -= 1 & mask +- a[2] += mask & (1<<28 - 1) +- a[1] += mask & (1<<28 - 1) +- a[0] += mask & (1 << 28) +-} +- +-// p224Invert calculates *out = in**-1 by computing in**(2**224 - 2**96 - 1), +-// i.e. Fermat's little theorem. +-func p224Invert(out, in *p224FieldElement) { +- var f1, f2, f3, f4 p224FieldElement +- var c p224LargeFieldElement +- +- p224Square(&f1, in, &c) // 2 +- p224Mul(&f1, &f1, in, &c) // 2**2 - 1 +- p224Square(&f1, &f1, &c) // 2**3 - 2 +- p224Mul(&f1, &f1, in, &c) // 2**3 - 1 +- p224Square(&f2, &f1, &c) // 2**4 - 2 +- p224Square(&f2, &f2, &c) // 2**5 - 4 +- p224Square(&f2, &f2, &c) // 2**6 - 8 +- p224Mul(&f1, &f1, &f2, &c) // 2**6 - 1 +- p224Square(&f2, &f1, &c) // 2**7 - 2 +- for i := 0; i < 5; i++ { // 2**12 - 2**6 +- p224Square(&f2, &f2, &c) +- } +- p224Mul(&f2, &f2, &f1, &c) // 2**12 - 1 +- p224Square(&f3, &f2, &c) // 2**13 - 2 +- for i := 0; i < 11; i++ { // 2**24 - 2**12 +- p224Square(&f3, &f3, &c) +- } +- p224Mul(&f2, &f3, &f2, &c) // 2**24 - 1 +- p224Square(&f3, &f2, &c) // 2**25 - 2 +- for i := 0; i < 23; i++ { // 2**48 - 2**24 +- p224Square(&f3, &f3, &c) +- } +- p224Mul(&f3, &f3, &f2, &c) // 2**48 - 1 +- p224Square(&f4, &f3, &c) // 2**49 - 2 +- for i := 0; i < 47; i++ { // 2**96 - 2**48 +- p224Square(&f4, &f4, &c) +- } +- p224Mul(&f3, &f3, &f4, &c) // 2**96 - 1 +- p224Square(&f4, &f3, &c) // 2**97 - 2 +- for i := 0; i < 23; i++ { // 2**120 - 2**24 +- p224Square(&f4, &f4, &c) +- } +- p224Mul(&f2, &f4, &f2, &c) // 2**120 - 1 +- for i := 0; i < 6; i++ { // 2**126 - 2**6 +- p224Square(&f2, &f2, &c) +- } +- p224Mul(&f1, &f1, &f2, &c) // 2**126 - 1 +- p224Square(&f1, &f1, &c) // 2**127 - 2 +- p224Mul(&f1, &f1, in, &c) // 2**127 - 1 +- for i := 0; i < 97; i++ { // 2**224 - 2**97 +- p224Square(&f1, &f1, &c) +- } +- p224Mul(out, &f1, &f3, &c) // 2**224 - 2**96 - 1 +-} +- +-// p224Contract converts a FieldElement to its unique, minimal form. +-// +-// On entry, in[i] < 2**29 +-// On exit, in[i] < 2**28 +-func p224Contract(out, in *p224FieldElement) { +- copy(out[:], in[:]) +- +- for i := 0; i < 7; i++ { +- out[i+1] += out[i] >> 28 +- out[i] &= bottom28Bits +- } +- top := out[7] >> 28 +- out[7] &= bottom28Bits +- +- out[0] -= top +- out[3] += top << 12 +- +- // We may just have made out[i] negative. So we carry down. If we made +- // out[0] negative then we know that out[3] is sufficiently positive +- // because we just added to it. +- for i := 0; i < 3; i++ { +- mask := uint32(int32(out[i]) >> 31) +- out[i] += (1 << 28) & mask +- out[i+1] -= 1 & mask +- } +- +- // We might have pushed out[3] over 2**28 so we perform another, partial, +- // carry chain. +- for i := 3; i < 7; i++ { +- out[i+1] += out[i] >> 28 +- out[i] &= bottom28Bits +- } +- top = out[7] >> 28 +- out[7] &= bottom28Bits +- +- // Eliminate top while maintaining the same value mod p. +- out[0] -= top +- out[3] += top << 12 +- +- // There are two cases to consider for out[3]: +- // 1) The first time that we eliminated top, we didn't push out[3] over +- // 2**28. In this case, the partial carry chain didn't change any values +- // and top is zero. +- // 2) We did push out[3] over 2**28 the first time that we eliminated top. +- // The first value of top was in [0..16), therefore, prior to eliminating +- // the first top, 0xfff1000 <= out[3] <= 0xfffffff. Therefore, after +- // overflowing and being reduced by the second carry chain, out[3] <= +- // 0xf000. Thus it cannot have overflowed when we eliminated top for the +- // second time. +- +- // Again, we may just have made out[0] negative, so do the same carry down. +- // As before, if we made out[0] negative then we know that out[3] is +- // sufficiently positive. +- for i := 0; i < 3; i++ { +- mask := uint32(int32(out[i]) >> 31) +- out[i] += (1 << 28) & mask +- out[i+1] -= 1 & mask +- } +- +- // Now we see if the value is >= p and, if so, subtract p. +- +- // First we build a mask from the top four limbs, which must all be +- // equal to bottom28Bits if the whole value is >= p. If top4AllOnes +- // ends up with any zero bits in the bottom 28 bits, then this wasn't +- // true. +- top4AllOnes := uint32(0xffffffff) +- for i := 4; i < 8; i++ { +- top4AllOnes &= out[i] +- } +- top4AllOnes |= 0xf0000000 +- // Now we replicate any zero bits to all the bits in top4AllOnes. +- top4AllOnes &= top4AllOnes >> 16 +- top4AllOnes &= top4AllOnes >> 8 +- top4AllOnes &= top4AllOnes >> 4 +- top4AllOnes &= top4AllOnes >> 2 +- top4AllOnes &= top4AllOnes >> 1 +- top4AllOnes = uint32(int32(top4AllOnes<<31) >> 31) +- +- // Now we test whether the bottom three limbs are non-zero. +- bottom3NonZero := out[0] | out[1] | out[2] +- bottom3NonZero |= bottom3NonZero >> 16 +- bottom3NonZero |= bottom3NonZero >> 8 +- bottom3NonZero |= bottom3NonZero >> 4 +- bottom3NonZero |= bottom3NonZero >> 2 +- bottom3NonZero |= bottom3NonZero >> 1 +- bottom3NonZero = uint32(int32(bottom3NonZero<<31) >> 31) +- +- // Everything depends on the value of out[3]. +- // If it's > 0xffff000 and top4AllOnes != 0 then the whole value is >= p +- // If it's = 0xffff000 and top4AllOnes != 0 and bottom3NonZero != 0, +- // then the whole value is >= p +- // If it's < 0xffff000, then the whole value is < p +- n := out[3] - 0xffff000 +- out3Equal := n +- out3Equal |= out3Equal >> 16 +- out3Equal |= out3Equal >> 8 +- out3Equal |= out3Equal >> 4 +- out3Equal |= out3Equal >> 2 +- out3Equal |= out3Equal >> 1 +- out3Equal = ^uint32(int32(out3Equal<<31) >> 31) +- +- // If out[3] > 0xffff000 then n's MSB will be zero. +- out3GT := ^uint32(int32(n) >> 31) +- +- mask := top4AllOnes & ((out3Equal & bottom3NonZero) | out3GT) +- out[0] -= 1 & mask +- out[3] -= 0xffff000 & mask +- out[4] -= 0xfffffff & mask +- out[5] -= 0xfffffff & mask +- out[6] -= 0xfffffff & mask +- out[7] -= 0xfffffff & mask +-} +- +-// Group element functions. +-// +-// These functions deal with group elements. The group is an elliptic curve +-// group with a = -3 defined in FIPS 186-3, section D.2.2. +- +-// p224AddJacobian computes *out = a+b where a != b. +-func p224AddJacobian(x3, y3, z3, x1, y1, z1, x2, y2, z2 *p224FieldElement) { +- // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-p224Add-2007-bl +- var z1z1, z2z2, u1, u2, s1, s2, h, i, j, r, v p224FieldElement +- var c p224LargeFieldElement +- +- z1IsZero := p224IsZero(z1) +- z2IsZero := p224IsZero(z2) +- +- // Z1Z1 = Z1² +- p224Square(&z1z1, z1, &c) +- // Z2Z2 = Z2² +- p224Square(&z2z2, z2, &c) +- // U1 = X1*Z2Z2 +- p224Mul(&u1, x1, &z2z2, &c) +- // U2 = X2*Z1Z1 +- p224Mul(&u2, x2, &z1z1, &c) +- // S1 = Y1*Z2*Z2Z2 +- p224Mul(&s1, z2, &z2z2, &c) +- p224Mul(&s1, y1, &s1, &c) +- // S2 = Y2*Z1*Z1Z1 +- p224Mul(&s2, z1, &z1z1, &c) +- p224Mul(&s2, y2, &s2, &c) +- // H = U2-U1 +- p224Sub(&h, &u2, &u1) +- p224Reduce(&h) +- xEqual := p224IsZero(&h) +- // I = (2*H)² +- for j := 0; j < 8; j++ { +- i[j] = h[j] << 1 +- } +- p224Reduce(&i) +- p224Square(&i, &i, &c) +- // J = H*I +- p224Mul(&j, &h, &i, &c) +- // r = 2*(S2-S1) +- p224Sub(&r, &s2, &s1) +- p224Reduce(&r) +- yEqual := p224IsZero(&r) +- if xEqual == 1 && yEqual == 1 && z1IsZero == 0 && z2IsZero == 0 { +- p224DoubleJacobian(x3, y3, z3, x1, y1, z1) +- return +- } +- for i := 0; i < 8; i++ { +- r[i] <<= 1 +- } +- p224Reduce(&r) +- // V = U1*I +- p224Mul(&v, &u1, &i, &c) +- // Z3 = ((Z1+Z2)²-Z1Z1-Z2Z2)*H +- p224Add(&z1z1, &z1z1, &z2z2) +- p224Add(&z2z2, z1, z2) +- p224Reduce(&z2z2) +- p224Square(&z2z2, &z2z2, &c) +- p224Sub(z3, &z2z2, &z1z1) +- p224Reduce(z3) +- p224Mul(z3, z3, &h, &c) +- // X3 = r²-J-2*V +- for i := 0; i < 8; i++ { +- z1z1[i] = v[i] << 1 +- } +- p224Add(&z1z1, &j, &z1z1) +- p224Reduce(&z1z1) +- p224Square(x3, &r, &c) +- p224Sub(x3, x3, &z1z1) +- p224Reduce(x3) +- // Y3 = r*(V-X3)-2*S1*J +- for i := 0; i < 8; i++ { +- s1[i] <<= 1 +- } +- p224Mul(&s1, &s1, &j, &c) +- p224Sub(&z1z1, &v, x3) +- p224Reduce(&z1z1) +- p224Mul(&z1z1, &z1z1, &r, &c) +- p224Sub(y3, &z1z1, &s1) +- p224Reduce(y3) +- +- p224CopyConditional(x3, x2, z1IsZero) +- p224CopyConditional(x3, x1, z2IsZero) +- p224CopyConditional(y3, y2, z1IsZero) +- p224CopyConditional(y3, y1, z2IsZero) +- p224CopyConditional(z3, z2, z1IsZero) +- p224CopyConditional(z3, z1, z2IsZero) +-} +- +-// p224DoubleJacobian computes *out = a+a. +-func p224DoubleJacobian(x3, y3, z3, x1, y1, z1 *p224FieldElement) { +- var delta, gamma, beta, alpha, t p224FieldElement +- var c p224LargeFieldElement +- +- p224Square(&delta, z1, &c) +- p224Square(&gamma, y1, &c) +- p224Mul(&beta, x1, &gamma, &c) +- +- // alpha = 3*(X1-delta)*(X1+delta) +- p224Add(&t, x1, &delta) +- for i := 0; i < 8; i++ { +- t[i] += t[i] << 1 +- } +- p224Reduce(&t) +- p224Sub(&alpha, x1, &delta) +- p224Reduce(&alpha) +- p224Mul(&alpha, &alpha, &t, &c) +- +- // Z3 = (Y1+Z1)²-gamma-delta +- p224Add(z3, y1, z1) +- p224Reduce(z3) +- p224Square(z3, z3, &c) +- p224Sub(z3, z3, &gamma) +- p224Reduce(z3) +- p224Sub(z3, z3, &delta) +- p224Reduce(z3) +- +- // X3 = alpha²-8*beta +- for i := 0; i < 8; i++ { +- delta[i] = beta[i] << 3 +- } +- p224Reduce(&delta) +- p224Square(x3, &alpha, &c) +- p224Sub(x3, x3, &delta) +- p224Reduce(x3) +- +- // Y3 = alpha*(4*beta-X3)-8*gamma² +- for i := 0; i < 8; i++ { +- beta[i] <<= 2 +- } +- p224Sub(&beta, &beta, x3) +- p224Reduce(&beta) +- p224Square(&gamma, &gamma, &c) +- for i := 0; i < 8; i++ { +- gamma[i] <<= 3 +- } +- p224Reduce(&gamma) +- p224Mul(y3, &alpha, &beta, &c) +- p224Sub(y3, y3, &gamma) +- p224Reduce(y3) +-} +- +-// p224CopyConditional sets *out = *in iff the least-significant-bit of control +-// is true, and it runs in constant time. +-func p224CopyConditional(out, in *p224FieldElement, control uint32) { +- control <<= 31 +- control = uint32(int32(control) >> 31) +- +- for i := 0; i < 8; i++ { +- out[i] ^= (out[i] ^ in[i]) & control +- } +-} +- +-func p224ScalarMult(outX, outY, outZ, inX, inY, inZ *p224FieldElement, scalar []byte) { +- var xx, yy, zz p224FieldElement +- for i := 0; i < 8; i++ { +- outX[i] = 0 +- outY[i] = 0 +- outZ[i] = 0 +- } +- +- for _, byte := range scalar { +- for bitNum := uint(0); bitNum < 8; bitNum++ { +- p224DoubleJacobian(outX, outY, outZ, outX, outY, outZ) +- bit := uint32((byte >> (7 - bitNum)) & 1) +- p224AddJacobian(&xx, &yy, &zz, inX, inY, inZ, outX, outY, outZ) +- p224CopyConditional(outX, &xx, bit) +- p224CopyConditional(outY, &yy, bit) +- p224CopyConditional(outZ, &zz, bit) +- } +- } +-} +- +-// p224ToAffine converts from Jacobian to affine form. +-func p224ToAffine(x, y, z *p224FieldElement) (*big.Int, *big.Int) { +- var zinv, zinvsq, outx, outy p224FieldElement +- var tmp p224LargeFieldElement +- +- if isPointAtInfinity := p224IsZero(z); isPointAtInfinity == 1 { +- return new(big.Int), new(big.Int) +- } +- +- p224Invert(&zinv, z) +- p224Square(&zinvsq, &zinv, &tmp) +- p224Mul(x, x, &zinvsq, &tmp) +- p224Mul(&zinvsq, &zinvsq, &zinv, &tmp) +- p224Mul(y, y, &zinvsq, &tmp) +- +- p224Contract(&outx, x) +- p224Contract(&outy, y) +- return p224ToBig(&outx), p224ToBig(&outy) +-} +- +-// get28BitsFromEnd returns the least-significant 28 bits from buf>>shift, +-// where buf is interpreted as a big-endian number. +-func get28BitsFromEnd(buf []byte, shift uint) (uint32, []byte) { +- var ret uint32 +- +- for i := uint(0); i < 4; i++ { +- var b byte +- if l := len(buf); l > 0 { +- b = buf[l-1] +- // We don't remove the byte if we're about to return and we're not +- // reading all of it. +- if i != 3 || shift == 4 { +- buf = buf[:l-1] +- } +- } +- ret |= uint32(b) << (8 * i) >> shift +- } +- ret &= bottom28Bits +- return ret, buf +-} +- +-// p224FromBig sets *out = *in. +-func p224FromBig(out *p224FieldElement, in *big.Int) { +- bytes := in.Bytes() +- out[0], bytes = get28BitsFromEnd(bytes, 0) +- out[1], bytes = get28BitsFromEnd(bytes, 4) +- out[2], bytes = get28BitsFromEnd(bytes, 0) +- out[3], bytes = get28BitsFromEnd(bytes, 4) +- out[4], bytes = get28BitsFromEnd(bytes, 0) +- out[5], bytes = get28BitsFromEnd(bytes, 4) +- out[6], bytes = get28BitsFromEnd(bytes, 0) +- out[7], bytes = get28BitsFromEnd(bytes, 4) +-} +- +-// p224ToBig returns in as a big.Int. +-func p224ToBig(in *p224FieldElement) *big.Int { +- var buf [28]byte +- buf[27] = byte(in[0]) +- buf[26] = byte(in[0] >> 8) +- buf[25] = byte(in[0] >> 16) +- buf[24] = byte(((in[0] >> 24) & 0x0f) | (in[1]<<4)&0xf0) +- +- buf[23] = byte(in[1] >> 4) +- buf[22] = byte(in[1] >> 12) +- buf[21] = byte(in[1] >> 20) +- +- buf[20] = byte(in[2]) +- buf[19] = byte(in[2] >> 8) +- buf[18] = byte(in[2] >> 16) +- buf[17] = byte(((in[2] >> 24) & 0x0f) | (in[3]<<4)&0xf0) +- +- buf[16] = byte(in[3] >> 4) +- buf[15] = byte(in[3] >> 12) +- buf[14] = byte(in[3] >> 20) +- +- buf[13] = byte(in[4]) +- buf[12] = byte(in[4] >> 8) +- buf[11] = byte(in[4] >> 16) +- buf[10] = byte(((in[4] >> 24) & 0x0f) | (in[5]<<4)&0xf0) +- +- buf[9] = byte(in[5] >> 4) +- buf[8] = byte(in[5] >> 12) +- buf[7] = byte(in[5] >> 20) +- +- buf[6] = byte(in[6]) +- buf[5] = byte(in[6] >> 8) +- buf[4] = byte(in[6] >> 16) +- buf[3] = byte(((in[6] >> 24) & 0x0f) | (in[7]<<4)&0xf0) +- +- buf[2] = byte(in[7] >> 4) +- buf[1] = byte(in[7] >> 12) +- buf[0] = byte(in[7] >> 20) +- +- return new(big.Int).SetBytes(buf[:]) +-} +--- libgo/go/crypto/elliptic/p224_test.go.jj 2016-01-15 10:58:09.000000000 +0100 ++++ libgo/go/crypto/elliptic/p224_test.go 2016-02-05 22:36:06.148039280 +0100 +@@ -1,47 +0,0 @@ +-// Copyright 2012 The Go Authors. All rights reserved. +-// Use of this source code is governed by a BSD-style +-// license that can be found in the LICENSE file. +- +-package elliptic +- +-import ( +- "math/big" +- "testing" +-) +- +-var toFromBigTests = []string{ +- "0", +- "1", +- "23", +- "b70e0cb46bb4bf7f321390b94a03c1d356c01122343280d6105c1d21", +- "706a46d476dcb76798e6046d89474788d164c18032d268fd10704fa6", +-} +- +-func p224AlternativeToBig(in *p224FieldElement) *big.Int { +- ret := new(big.Int) +- tmp := new(big.Int) +- +- for i := uint(0); i < 8; i++ { +- tmp.SetInt64(int64(in[i])) +- tmp.Lsh(tmp, 28*i) +- ret.Add(ret, tmp) +- } +- ret.Mod(ret, p224.P) +- return ret +-} +- +-func TestToFromBig(t *testing.T) { +- for i, test := range toFromBigTests { +- n, _ := new(big.Int).SetString(test, 16) +- var x p224FieldElement +- p224FromBig(&x, n) +- m := p224ToBig(&x) +- if n.Cmp(m) != 0 { +- t.Errorf("#%d: %x != %x", i, n, m) +- } +- q := p224AlternativeToBig(&x) +- if n.Cmp(q) != 0 { +- t.Errorf("#%d: %x != %x (alternative)", i, n, m) +- } +- } +-} +--- libgo/go/crypto/elliptic/p256.go.jj 2016-02-05 20:11:19.000000000 +0100 ++++ libgo/go/crypto/elliptic/p256.go 2016-02-05 22:36:06.148039280 +0100 +@@ -235,6 +235,8 @@ func p256ReduceCarry(inout *[p256Limbs]u + inout[7] += carry << 25 + } + ++const bottom28Bits = 0xfffffff ++ + // p256Sum sets out = in+in2. + // + // On entry, in[i]+in2[i] must not overflow a 32-bit word. +@@ -267,6 +269,7 @@ const ( + two31m2 = 1<<31 - 1<<2 + two31p24m2 = 1<<31 + 1<<24 - 1<<2 + two30m27m2 = 1<<30 - 1<<27 - 1<<2 ++ two31m3 = 1<<31 - 1<<3 + ) + + // p256Zero31 is 0 mod p. diff --git a/gcc6-libgomp-omp_h-multilib.patch b/gcc6-libgomp-omp_h-multilib.patch new file mode 100644 index 0000000..d0e98d1 --- /dev/null +++ b/gcc6-libgomp-omp_h-multilib.patch @@ -0,0 +1,17 @@ +2008-06-09 Jakub Jelinek + + * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. + +--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 ++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 +@@ -42,8 +42,8 @@ typedef struct + + typedef struct + { +- unsigned char _x[@OMP_NEST_LOCK_SIZE@] +- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); ++ unsigned char _x[8 + sizeof (void *)] ++ __attribute__((__aligned__(sizeof (void *)))); + } omp_nest_lock_t; + #endif + diff --git a/gcc6-libsanitize-aarch64-va42.patch b/gcc6-libsanitize-aarch64-va42.patch new file mode 100644 index 0000000..72418df --- /dev/null +++ b/gcc6-libsanitize-aarch64-va42.patch @@ -0,0 +1,38 @@ +2015-01-22 Jakub Jelinek + + * sanitizer_common/sanitizer_platform.h + (SANITIZER_AARCH64_VMA): Set to 42. + (SANITIZER_CAN_USE_ALLOCATOR64): Set to 1 on __aarch64__ + if SANITIZER_WORDSIZE is 64. + (SANITIZER_MMAP_RANGE_SIZE): Define to 1ULL << 42 for + __aarch64__. + +--- libsanitizer/sanitizer_common/sanitizer_platform.h.jj 2015-11-23 13:29:55.000000000 +0100 ++++ libsanitizer/sanitizer_common/sanitizer_platform.h 2016-01-15 12:04:08.511206409 +0100 +@@ -82,7 +82,7 @@ + // VMA size definition for architecture that support multiple sizes. + // AArch64 has 3 VMA sizes: 39, 42 and 48. + #if !defined(SANITIZER_AARCH64_VMA) +-# define SANITIZER_AARCH64_VMA 39 ++# define SANITIZER_AARCH64_VMA 42 + #else + # if SANITIZER_AARCH64_VMA != 39 && SANITIZER_AARCH64_VMA != 42 + # error "invalid SANITIZER_AARCH64_VMA size" +@@ -95,7 +95,7 @@ + // For such platforms build this code with -DSANITIZER_CAN_USE_ALLOCATOR64=0 or + // change the definition of SANITIZER_CAN_USE_ALLOCATOR64 here. + #ifndef SANITIZER_CAN_USE_ALLOCATOR64 +-# if defined(__mips64) || defined(__aarch64__) ++# if defined(__mips64) + # define SANITIZER_CAN_USE_ALLOCATOR64 0 + # else + # define SANITIZER_CAN_USE_ALLOCATOR64 (SANITIZER_WORDSIZE == 64) +@@ -107,6 +107,8 @@ + // will still work but will consume more memory for TwoLevelByteMap. + #if defined(__mips__) + # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 40) ++#elif defined(__aarch64__) ++# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 42) + #else + # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47) + #endif diff --git a/gcc6-libstdc++-docs.patch b/gcc6-libstdc++-docs.patch new file mode 100644 index 0000000..057cac0 --- /dev/null +++ b/gcc6-libstdc++-docs.patch @@ -0,0 +1,24 @@ +--- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100 ++++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100 +@@ -5,6 +5,8 @@ + FSF + +

    ++ Release 6.3.0 ++

    + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, Version 1.2 or any later version published by the +--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100 ++++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100 +@@ -20,7 +20,9 @@ + member functions for the library classes, finding out what is in a + particular include file, looking at inheritance diagrams, etc. +

    +- The API documentation, rendered into HTML, can be viewed online ++ The API documentation, rendered into HTML, can be viewed locally ++ for the 6.3.0 release, ++ online + for each GCC release + and + diff --git a/gcc6-libtool-no-rpath.patch b/gcc6-libtool-no-rpath.patch new file mode 100644 index 0000000..466c661 --- /dev/null +++ b/gcc6-libtool-no-rpath.patch @@ -0,0 +1,27 @@ +libtool sucks. +--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 ++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 +@@ -5394,6 +5394,7 @@ EOF + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6071,6 +6072,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6120,6 +6122,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then diff --git a/gcc6-no-add-needed.patch b/gcc6-no-add-needed.patch new file mode 100644 index 0000000..4102e1c --- /dev/null +++ b/gcc6-no-add-needed.patch @@ -0,0 +1,50 @@ +2010-02-08 Roland McGrath + + * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the + linker. + * config/gnu-user.h (LINK_EH_SPEC): Likewise. + * config/alpha/elf.h (LINK_EH_SPEC): Likewise. + * config/ia64/linux.h (LINK_EH_SPEC): Likewise. + +--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100 ++++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100 +@@ -165,5 +165,5 @@ extern int alpha_this_gpdisp_sequence_nu + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " + #endif +--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100 ++++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100 +@@ -76,7 +76,7 @@ do { \ + Signalize that because we have fde-glibc, we don't need all C shared libs + linked against -lgcc_s. */ + #undef LINK_EH_SPEC +-#define LINK_EH_SPEC "" ++#define LINK_EH_SPEC "--no-add-needed " + + #undef TARGET_INIT_LIBFUNCS + #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs +--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100 ++++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100 +@@ -82,7 +82,7 @@ see the files COPYING3 and COPYING.RUNTI + #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " + #endif + + #undef LINK_GCC_C_SEQUENCE_SPEC +--- gcc/config/rs6000/sysv4.h.jj 2011-01-03 13:02:18.255994215 +0100 ++++ gcc/config/rs6000/sysv4.h 2011-01-04 18:14:10.933888871 +0100 +@@ -820,7 +820,7 @@ extern int fixuplabelno; + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + + #if defined(HAVE_LD_EH_FRAME_HDR) +-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} " + #endif + + #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ diff --git a/gcc6-ppc32-retaddr.patch b/gcc6-ppc32-retaddr.patch new file mode 100644 index 0000000..7e8eeb5 --- /dev/null +++ b/gcc6-ppc32-retaddr.patch @@ -0,0 +1,87 @@ +2005-11-28 Jakub Jelinek + + * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, + read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx + instead of doing an extran indirection from frame_pointer_rtx. + + * gcc.dg/20051128-1.c: New test. + +--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 ++++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 +@@ -20970,18 +20970,22 @@ rs6000_return_addr (int count, rtx frame + if (count != 0 + || ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) && flag_pic)) + { ++ rtx x; + cfun->machine->ra_needs_full_frame = 1; + +- return +- gen_rtx_MEM +- (Pmode, +- memory_address +- (Pmode, +- plus_constant (Pmode, +- copy_to_reg +- (gen_rtx_MEM (Pmode, +- memory_address (Pmode, frame))), +- RETURN_ADDRESS_OFFSET))); ++ if (count == 0) ++ { ++ gcc_assert (frame == frame_pointer_rtx); ++ x = arg_pointer_rtx; ++ } ++ else ++ { ++ x = memory_address (Pmode, frame); ++ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); ++ } ++ ++ x = plus_constant (Pmode, x, RETURN_ADDRESS_OFFSET); ++ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); + } + + cfun->machine->ra_need_lr = 1; +--- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 ++++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 +@@ -0,0 +1,41 @@ ++/* { dg-do run } */ ++/* { dg-options "-O2 -fpic" } */ ++ ++extern void exit (int); ++extern void abort (void); ++ ++int b; ++ ++struct A ++{ ++ void *pad[147]; ++ void *ra, *h; ++ long o; ++}; ++ ++void ++__attribute__((noinline)) ++foo (struct A *a, void *x) ++{ ++ __builtin_memset (a, 0, sizeof (a)); ++ if (!b) ++ exit (0); ++} ++ ++void ++__attribute__((noinline)) ++bar (void) ++{ ++ struct A a; ++ ++ __builtin_unwind_init (); ++ foo (&a, __builtin_return_address (0)); ++} ++ ++int ++main (void) ++{ ++ bar (); ++ abort (); ++ return 0; ++} diff --git a/gcc6-rh330771.patch b/gcc6-rh330771.patch new file mode 100644 index 0000000..102730f --- /dev/null +++ b/gcc6-rh330771.patch @@ -0,0 +1,27 @@ +2007-10-16 Jakub Jelinek + + * Makefile.am (libgcj_tools_la_LIBADD): Add. + * Makefile.in: Regenerated. + +--- libjava/Makefile.am.jj 2009-05-06 08:14:50.000000000 +0200 ++++ libjava/Makefile.am 2009-05-06 10:26:43.000000000 +0200 +@@ -550,7 +550,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ + $(LIBJAVA_LDFLAGS_LIBMATH) + +-libgcj_tools_la_LIBADD = libgcj.la ++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la + libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \ + $(libgcj_tools_la_version_dep) + if BUILD_SUBLIBS +--- libjava/Makefile.in.jj 2009-05-06 08:14:49.000000000 +0200 ++++ libjava/Makefile.in 2009-05-06 10:27:18.000000000 +0200 +@@ -1110,7 +1110,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \ + $(LIBJAVA_LDFLAGS_LIBMATH) + +-libgcj_tools_la_LIBADD = libgcj.la ++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la + libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \ + $(libgcj_tools_la_version_dep) $(am__append_19) + libgcj_tools_la_LINK = $(LIBLINK) $(libgcj_tools_la_LDFLAGS) \ diff --git a/gcc6-sparc-config-detection.patch b/gcc6-sparc-config-detection.patch new file mode 100644 index 0000000..a37018e --- /dev/null +++ b/gcc6-sparc-config-detection.patch @@ -0,0 +1,40 @@ +--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 ++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 +@@ -2656,7 +2656,7 @@ sparc-*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems" + ;; +-sparc-*-linux*) ++sparc-*-linux* | sparcv9-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + case ${target} in +@@ -2710,7 +2710,7 @@ sparc64-*-rtems*) + extra_options="${extra_options}" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64" + ;; +-sparc64-*-linux*) ++sparc64*-*-linux*) + tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64" +--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 ++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 +@@ -1002,7 +1002,7 @@ sparc-*-elf*) + tmake_file="${tmake_file} t-fdpbit t-crtfm" + extra_parts="$extra_parts crti.o crtn.o crtfastmath.o" + ;; +-sparc-*-linux*) # SPARC's running GNU/Linux, libc6 ++sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6 + tmake_file="${tmake_file} t-crtfm" + if test "${host_address}" = 64; then + tmake_file="$tmake_file sparc/t-linux64" +@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* + tmake_file="$tmake_file t-crtfm" + extra_parts="$extra_parts crtfastmath.o" + ;; +-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux ++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} t-crtfm sparc/t-linux" + if test "${host_address}" = 64; then diff --git a/ghdl.spec b/ghdl.spec index ff7ddf4..d94b655 100644 --- a/ghdl.spec +++ b/ghdl.spec @@ -1,6 +1,6 @@ -%global DATE 20141101 -%global SVNREV 216995 -%global gcc_version 4.9.2 +%global DATE 20170118 +%global SVNREV 244565 +%global gcc_version 6.3.1 %global ghdlver 0.34dev %global ghdlgitrev .20170302git31f8e7a @@ -43,30 +43,24 @@ URL: http://ghdl.free.fr/ # svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_7-branch@%{SVNREV} gcc-%{version}-%{DATE} # tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2 Source0: gcc-%{gcc_version}-%{DATE}.tar.bz2 -%global isl_version 0.12.2 -Source1: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2 -%global cloog_version 0.18.1 +%global isl_version 0.14 +Source1: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.xz +%global cloog_version 0.18.3 Source2: ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-%{cloog_version}.tar.gz -Patch0: gcc49-hack.patch -Patch1: gcc49-java-nomulti.patch -Patch2: gcc49-ppc32-retaddr.patch -Patch3: gcc49-rh330771.patch -Patch4: gcc49-i386-libgomp.patch -Patch5: gcc49-sparc-config-detection.patch -Patch6: gcc49-libgomp-omp_h-multilib.patch -Patch7: gcc49-libtool-no-rpath.patch -Patch8: gcc49-cloog-dl.patch -Patch9: gcc49-cloog-dl2.patch -Patch10: gcc49-pr38757.patch -Patch11: gcc49-libstdc++-docs.patch -Patch12: gcc49-no-add-needed.patch -Patch14: gcc49-pr56493.patch -Patch15: gcc49-color-auto.patch -Patch16: gcc49-libgo-p224.patch -Patch17: gcc49-aarch64-async-unw-tables.patch -Patch18: gcc49-aarch64-unwind-opt.patch -Patch19: gcc49-pr63659.patch -Patch1100: cloog-%{cloog_version}-ppc64le-config.patch +Patch0: gcc6-hack.patch +Patch1: gcc6-java-nomulti.patch +Patch2: gcc6-ppc32-retaddr.patch +Patch3: gcc6-rh330771.patch +Patch4: gcc6-i386-libgomp.patch +Patch5: gcc6-sparc-config-detection.patch +Patch6: gcc6-libgomp-omp_h-multilib.patch +Patch7: gcc6-libtool-no-rpath.patch +Patch8: gcc6-isl-dl.patch +Patch9: gcc6-libstdc++-docs.patch +Patch10: gcc6-no-add-needed.patch +Patch11: gcc6-libgo-p224.patch +Patch12: gcc6-aarch64-async-unw-tables.patch +Patch13: gcc6-libsanitize-aarch64-va42.patch Source100: ghdl%{ghdlgitrev}.tar.bz2 Patch104: ghdl-grtbuild.patch Patch105: ghdl-grtadac.patch @@ -95,9 +89,14 @@ Requires: gcc %ifarch x86_64 %global multilib_32_arch i386 %endif -%global build_cloog 1 +#%ifarch %{ix86} x86_64 +#%global build_libmpx 1 +#%else +%global build_libmpx 0 +#%endif +%global build_isl 1 %global build_libstdcxx_docs 1 -%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} %global attr_ifunc 1 %else %global attr_ifunc 0 @@ -106,8 +105,14 @@ Requires: gcc # Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 # Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 # Need binutils which support .weakref >= 2.16.91.0.3-1 -BuildRequires: binutils -#BuildRequires: binutils >= 2.24 +# Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 +# Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 +# Need binutils which support --build-id >= 2.17.50.0.17-3 +# Need binutils which support %gnu_unique_object >= 2.19.51.0.14 +# Need binutils which support .cfi_sections >= 2.19.51.0.14-33 +# Need binutils which support --no-add-needed >= 2.20.51.0.2-12 +# Need binutils which support -plugin +BuildRequires: binutils >= 2.24 BuildRequires: zlib-devel, gettext, bison, flex, sharutils, texinfo, texinfo-tex, gawk, /usr/bin/pod2man # Make sure pthread.h doesn't contain __thread tokens # Make sure glibc supports stack protector @@ -255,24 +260,21 @@ that tracks signal updates and schedules processes. %patch5 -p0 -b .sparc-config-detection~ %patch6 -p0 -b .libgomp-omp_h-multilib~ %patch7 -p0 -b .libtool-no-rpath~ -%if %{build_cloog} -%patch8 -p0 -b .cloog-dl~ -%patch9 -p0 -b .cloog-dl2~ +%if %{build_isl} +%patch8 -p0 -b .isl-dl~ %endif -%patch10 -p0 -b .pr38757~ %if %{build_libstdcxx_docs} -%patch11 -p0 -b .libstdc++-docs~ -%endif -%patch12 -p0 -b .no-add-needed~ -%patch14 -p0 -b .pr56493~ -%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 -%patch15 -p0 -b .color-auto~ +%patch9 -p0 -b .libstdc++-docs~ %endif -%patch16 -p0 -b .libgo-p224~ +%patch10 -p0 -b .no-add-needed~ +%patch11 -p0 -b .libgo-p224~ rm -f libgo/go/crypto/elliptic/p224{,_test}.go -%patch17 -p0 -b .aarch64-async-unw-tables~ -%patch18 -p0 -b .aarch64-unwind-opt~ -%patch19 -p0 -b .pr63659~ +%patch12 -p0 -b .aarch64-async-unw-tables~ +%patch13 -p0 -b .libsanitize-aarch64-va42~ + +pushd cloog-%{cloog_version} +./autogen.sh +popd %ifarch %{ix86} x86_64 %if %{with mcode} @@ -312,8 +314,6 @@ popd #patch105 -p1 -b .grtadac %patch106 -p0 -b .ppc64abort -%patch1100 -p0 -b .cloog-ppc64le-config~ - %if 0%{?fedora} >= 16 || 0%{?rhel} >= 7 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2 sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' gcc/common.opt @@ -357,7 +357,7 @@ export CONFIG_SITE=NONE %{__mkdir} obj-%{gcc_target_platform} pushd obj-%{gcc_target_platform} -%if %{build_cloog} +%if %{build_isl} mkdir isl-build isl-install %ifarch s390 s390x ISL_FLAG_PIC=-fPIC @@ -379,7 +379,7 @@ cat >> ../../cloog-%{cloog_version}/source/isl/constraints.c << \EOF static void __attribute__((used)) *s1 = (void *) isl_union_map_compute_flow; static void __attribute__((used)) *s2 = (void *) isl_map_dump; EOF -sed -i 's|libcloog|libgcc49privatecloog|g' \ +sed -i 's|libcloog|libgcc6privatecloog|g' \ ../../cloog-%{cloog_version}/{,test/}Makefile.{am,in} isl_prefix=`cd ../isl-install; pwd` \ ../../cloog-%{cloog_version}/configure --with-isl=system \ @@ -392,8 +392,8 @@ sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool make %{?_smp_mflags} make %{?_smp_mflags} install cd ../cloog-install/lib -rm libgcc49privatecloog-isl.so{,.4} -mv libgcc49privatecloog-isl.so.4.0.0 libcloog-isl.so.4 +rm libgcc6privatecloog-isl.so{,.4} +mv libgcc6privatecloog-isl.so.4.0.0 libcloog-isl.so.4 ln -sf libcloog-isl.so.4 libcloog-isl.so ln -sf libcloog-isl.so.4 libcloog.so cd ../.. @@ -404,61 +404,56 @@ OPT_FLAGS=`echo %{optflags}|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -pipe / /g'` -# for now -OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -Werror=format-security / /g'` %ifarch sparc OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcpu=v[78]//g'` %endif %ifarch %{ix86} OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-march=i.86//g'` %endif -%ifarch sparc64 -cat > gcc64 <<"EOF" -#!/bin/sh -exec /usr/bin/gcc -m64 "$@" -EOF -chmod +x gcc64 -CC=`pwd`/gcc64 -%endif -%ifarch ppc64 -if gcc -m64 -xc -S /dev/null -o - > /dev/null 2>&1; then - cat > gcc64 <<"EOF" -#!/bin/sh -exec /usr/bin/gcc -m64 "$@" -EOF - chmod +x gcc64 - CC=`pwd`/gcc64 -fi -%endif OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` case "$OPT_FLAGS" in *-fasynchronous-unwind-tables*) - sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/' \ - ../gcc/Makefile.in + sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables /' \ + ../libgcc/Makefile.in ;; esac -CC="$CC" CFLAGS="$OPT_FLAGS" \ - CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g'`" \ - XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" GCJFLAGS="$OPT_FLAGS" \ +CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ + CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ + | sed 's/ -Werror=format-security / -Wformat -Werror=format-security /'`" \ + XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ ../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap=no \ --enable-shared --enable-threads=posix --enable-checking=release \ %ifarch ppc64le + --enable-targets=powerpcle-linux \ +%endif +%ifarch ppc64le --disable-multilib \ %else --enable-multilib \ %endif --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ - --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu \ + --enable-gnu-unique-object --enable-linker-build-id \ +%ifnarch %{mips} + --with-linker-hash-style=gnu \ +%endif --enable-languages=vhdl \ --enable-plugin --enable-initfini-array \ --disable-libgcj \ -%if %{build_cloog} +%if 0%{?fedora} >= 21 && 0%{?fedora} <= 22 + --with-default-libstdcxx-abi=gcc4-compatible \ +%endif +%if %{build_isl} --with-isl=`pwd`/isl-install --with-cloog=`pwd`/cloog-install \ %else --without-isl --without-cloog \ %endif +%if %{build_libmpx} + --enable-libmpx \ +%else + --disable-libmpx \ +%endif %if 0%{?fedora} >= 21 || 0%{?rhel} >= 7 %if %{attr_ifunc} --enable-gnu-indirect-function \ @@ -482,7 +477,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \ %ifarch sparc sparcv9 --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 %endif -%ifarch ppc ppc64 ppc64le ppc64p7 +%ifarch ppc ppc64 ppc64p7 %if 0%{?rhel} >= 7 --with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \ %endif @@ -490,6 +485,9 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \ --with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \ %endif %endif +%ifarch ppc64le + --with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \ +%endif %ifarch ppc --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 %endif @@ -513,17 +511,23 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \ %endif %ifarch s390 s390x %if 0%{?rhel} >= 7 - --with-arch=z196 --with-tune=zEC12 --enable-decimal-float \ + --with-arch=z196 --with-tune=zEC12 --enable-decimal-float \ %else - --with-arch=z9-109 --with-tune=z10 --enable-decimal-float \ + --with-arch=z9-109 --with-tune=z10 --enable-decimal-float \ %endif %endif %ifarch armv7hl - --with-cpu=cortex-a8 --with-tune=cortex-a8 --with-arch=armv7-a \ + --with-tune=cortex-a8 --with-arch=armv7-a \ --with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux \ %endif +%ifarch mips mipsel + --with-arch=mips32r2 --with-fp-32=xx \ +%endif +%ifarch mips64 mips64el + --with-arch=mips64r2 --with-abi=64 \ +%endif %ifnarch sparc sparcv9 ppc - --build=%{gcc_target_platform} + --build=%{gcc_target_platform} \ %endif @@ -550,7 +554,7 @@ popd #%{__make} %{?_smp_mflags} %{__make} -%if %{build_cloog} +%if %{build_isl} cp -a cloog-install/lib/libcloog-isl.so.4 gcc/ %endif diff --git a/sources b/sources index db4682a..c4cd28c 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (cloog-0.18.1.tar.gz) = 0b12d9f3c39a2425e28e1d7c0a2b3787287fe3e6e3052f094d2ab6cffeb205ce19044100cbfd805659b3e6b3d21ac2f5a3c92848f476de54edfe6b1cbd2172e9 -SHA512 (isl-0.12.2.tar.bz2) = b5dea4d6b504fac22f2d8cd9c47d6896994d3966635a514d45010243db44cfbc009574b808f3587f35d91de629110bc11b52941d4075e21f8646c59656e62aea -SHA512 (gcc-4.9.2-20141101.tar.bz2) = 51d895e2ceac3d68f694043f1f478aea0d425f6fdb129eac7f6693fa21830ece5f438ca740c9ac8ada8002a56ea491f2720c6bce11948dd7b994770c6996cbd1 +SHA512 (isl-0.14.tar.xz) = cf43868d466d6ff08c5e15345d222ad153e8c4e86831f9854df716eb914c6c15f4c44b73aa6e0b16eb556d1a4d3c26af6f71e85421bf464cbbd053d5f3c515ee +SHA512 (cloog-0.18.3.tar.gz) = e1bb557b69d38dde7a6b7acde661005bec2c3b5ffa75df32514bff70c8bfe6a12befe24c0448b85e87cf818f3a83cdec2b54066592b7d300c818611085ce17fb +SHA512 (gcc-6.3.1-20170118.tar.bz2) = a2c6261687dc44e980c81c3be04162873195f7e5ed3ceacdde0544f6e4f2d081eef12fe5f73f2f5ac7007dbd823c0e6d1ff5a5e0e7135c46fcc30efce3960def SHA512 (ghdl.20170302git31f8e7a.tar.bz2) = 777f4f03c850a39ceee818bbd21d3a5ad5527b2443fe128e1ba3dc298626ddf5410579095a626cd0d6addc7223137379f3aede570c72ed1366ad0bffc946fe44