4.8.3-6
This commit is contained in:
parent
ec5f2ed32a
commit
0b8b87fe25
|
@ -94,3 +94,4 @@
|
|||
/gcc-4.8.2-20140409.tar.bz2
|
||||
/gcc-4.8.2-20140515.tar.bz2
|
||||
/gcc-4.8.3-20140624.tar.bz2
|
||||
/gcc-4.8.3-20140910.tar.bz2
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
2014-04-09 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gcc-interface/Makefile.in: Support aarch64-linux.
|
||||
* init.c: Enable alternate stack support also on aarch64.
|
||||
* types.h (Fat_Pointer): Remove aligned attribute.
|
||||
|
||||
--- gcc/ada/gcc-interface/Makefile.in
|
||||
+++ gcc/ada/gcc-interface/Makefile.in
|
||||
@@ -2123,6 +2123,44 @@ ifeq ($(strip $(filter-out alpha% linux%,$(arch) $(osys))),)
|
||||
LIBRARY_VERSION := $(LIB_VERSION)
|
||||
endif
|
||||
|
||||
+# AArch64 Linux
|
||||
+ifeq ($(strip $(filter-out aarch64% linux%,$(arch) $(osys))),)
|
||||
+ LIBGNAT_TARGET_PAIRS = \
|
||||
+ a-exetim.adb<a-exetim-posix.adb \
|
||||
+ a-exetim.ads<a-exetim-default.ads \
|
||||
+ a-intnam.ads<a-intnam-linux.ads \
|
||||
+ a-synbar.adb<a-synbar-posix.adb \
|
||||
+ a-synbar.ads<a-synbar-posix.ads \
|
||||
+ s-inmaop.adb<s-inmaop-posix.adb \
|
||||
+ s-intman.adb<s-intman-posix.adb \
|
||||
+ s-linux.ads<s-linux.ads \
|
||||
+ s-mudido.adb<s-mudido-affinity.adb \
|
||||
+ s-osinte.ads<s-osinte-linux.ads \
|
||||
+ s-osinte.adb<s-osinte-posix.adb \
|
||||
+ s-osprim.adb<s-osprim-posix.adb \
|
||||
+ s-taprop.adb<s-taprop-linux.adb \
|
||||
+ s-tasinf.ads<s-tasinf-linux.ads \
|
||||
+ s-tasinf.adb<s-tasinf-linux.adb \
|
||||
+ s-tpopsp.adb<s-tpopsp-tls.adb \
|
||||
+ s-taspri.ads<s-taspri-posix.ads \
|
||||
+ g-sercom.adb<g-sercom-linux.adb \
|
||||
+ $(ATOMICS_TARGET_PAIRS) \
|
||||
+ $(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
||||
+ system.ads<system-linux-x86_64.ads
|
||||
+ ## ^^ Note the above is a pretty-close placeholder.
|
||||
+
|
||||
+ TOOLS_TARGET_PAIRS = \
|
||||
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
|
||||
+ indepsw.adb<indepsw-gnu.adb
|
||||
+
|
||||
+ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
|
||||
+ EH_MECHANISM=-gcc
|
||||
+ THREADSLIB=-lpthread -lrt
|
||||
+ GNATLIB_SHARED=gnatlib-shared-dual
|
||||
+ GMEM_LIB = gmemlib
|
||||
+ LIBRARY_VERSION := $(LIB_VERSION)
|
||||
+endif
|
||||
+
|
||||
# x86-64 Linux
|
||||
ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
|
||||
LIBGNAT_TARGET_PAIRS = \
|
||||
--- gcc/ada/init.c
|
||||
+++ gcc/ada/init.c
|
||||
@@ -562,7 +562,9 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext)
|
||||
Raise_From_Signal_Handler (exception, msg);
|
||||
}
|
||||
|
||||
-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
|
||||
+#if defined (i386) || defined (__x86_64__) || defined (__powerpc__) \
|
||||
+ || defined (__aarch64__)
|
||||
+#define HAVE_GNAT_ALTERNATE_STACK 1
|
||||
/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
|
||||
char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */
|
||||
#endif
|
||||
@@ -603,7 +605,7 @@ __gnat_install_handler (void)
|
||||
handled properly, avoiding a SEGV generation from stack usage by the
|
||||
handler itself. */
|
||||
|
||||
-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
|
||||
+#ifdef HAVE_GNAT_ALTERNATE_STACK
|
||||
stack_t stack;
|
||||
stack.ss_sp = __gnat_alternate_stack;
|
||||
stack.ss_size = sizeof (__gnat_alternate_stack);
|
||||
@@ -624,7 +626,7 @@ __gnat_install_handler (void)
|
||||
sigaction (SIGILL, &act, NULL);
|
||||
if (__gnat_get_interrupt_state (SIGBUS) != 's')
|
||||
sigaction (SIGBUS, &act, NULL);
|
||||
-#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
|
||||
+#ifdef HAVE_GNAT_ALTERNATE_STACK
|
||||
act.sa_flags |= SA_ONSTACK;
|
||||
#endif
|
||||
if (__gnat_get_interrupt_state (SIGSEGV) != 's')
|
||||
--- gcc/ada/types.h
|
||||
+++ gcc/ada/types.h
|
||||
@@ -79,8 +79,7 @@ typedef Char *Str_Ptr;
|
||||
/* Types for the fat pointer used for strings and the template it
|
||||
points to. */
|
||||
typedef struct {int Low_Bound, High_Bound; } String_Template;
|
||||
-typedef struct {const char *Array; String_Template *Bounds; }
|
||||
- __attribute ((aligned (sizeof (char *) * 2))) Fat_Pointer;
|
||||
+typedef struct {const char *Array; String_Template *Bounds; } Fat_Pointer;
|
||||
|
||||
/* Types for Node/Entity Kinds: */
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
2014-04-07 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* 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.
|
||||
|
|
@ -0,0 +1,342 @@
|
|||
2014-08-08 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* 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 2014-07-15 02:27:16.000000000 -0700
|
||||
+++ gcc/config/aarch64/aarch64.c 2014-08-21 12:52:44.190455860 -0700
|
||||
@@ -1603,24 +1603,23 @@ 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;
|
||||
rtx insn;
|
||||
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
|
||||
@@ -1632,54 +1631,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;
|
||||
}
|
||||
}
|
||||
-
|
||||
}
|
||||
|
||||
|
||||
@@ -1687,13 +1683,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;
|
||||
@@ -1702,11 +1699,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
|
||||
@@ -1718,56 +1717,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:
|
||||
@@ -1966,7 +1963,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,
|
||||
@@ -1991,6 +1988,7 @@ aarch64_expand_epilogue (bool for_sibcal
|
||||
HOST_WIDE_INT fp_offset;
|
||||
rtx insn;
|
||||
rtx cfa_reg;
|
||||
+ rtx cfi_ops = NULL;
|
||||
|
||||
aarch64_layout_frame ();
|
||||
original_frame_size = get_frame_size () + cfun->machine->saved_varargs_size;
|
||||
@@ -2035,15 +2033,17 @@ 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;
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -2051,6 +2051,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)
|
||||
{
|
||||
@@ -2063,52 +2065,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)
|
|
@ -4,7 +4,7 @@
|
|||
<a class="link" href="http://www.fsf.org/" target="_top">FSF
|
||||
</a>
|
||||
</p><p>
|
||||
+ Release 4.8.2
|
||||
+ Release 4.8.3
|
||||
+ </p><p>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
|
@ -18,7 +18,7 @@
|
|||
- The API documentation, rendered into HTML, can be viewed online:
|
||||
+ The API documentation, rendered into HTML, can be viewed here:
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
|
||||
+ <a class="link" href="api/index.html" target="_top">for the 4.8.2 release, local
|
||||
+ <a class="link" href="api/index.html" target="_top">for the 4.8.3 release, local
|
||||
+ </a>
|
||||
+ </p></li><li class="listitem"><p>
|
||||
<a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
|
||||
|
|
2
sources
2
sources
|
@ -1,4 +1,4 @@
|
|||
be78a47bd82523250eb3e91646db5b3d cloog-0.18.0.tar.gz
|
||||
2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz
|
||||
f3e3e0118bdacf5e5ca5ac4cf7e749d8 gcc-4.8.3-20140624.tar.bz2
|
||||
26639e5821fa0bcf3d5af92c50ef0c6f gcc-4.8.3-20140910.tar.bz2
|
||||
bce1586384d8635a76d2f017fb067cd2 isl-0.11.1.tar.bz2
|
||||
|
|
Loading…
Reference in New Issue