diff options
author | Joerg Wunsch <joerg@FreeBSD.org> | 2011-12-17 09:56:31 +0000 |
---|---|---|
committer | Joerg Wunsch <joerg@FreeBSD.org> | 2011-12-17 09:56:31 +0000 |
commit | 0c19ecdca81ec7e4185424d7cf8e0bf78f919ec3 (patch) | |
tree | a269548b716362dd686d216cffdb13014870f25f /devel/avr-gcc/files/patch-xx-os_main | |
parent | - Update to 1.7.8 (diff) |
Upgrade to GCC 4.5.1.
Completely reorganize the patches for this port.
Patches for new devices are now synchronized with the Atmel AVR tools.
The main difference is the naming scheme, as FreeBSD patches start
with "patch-", while the Atmel AVR Tools patches end up in ".patch".
Notes
Notes:
svn path=/head/; revision=287533
Diffstat (limited to 'devel/avr-gcc/files/patch-xx-os_main')
-rw-r--r-- | devel/avr-gcc/files/patch-xx-os_main | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/devel/avr-gcc/files/patch-xx-os_main b/devel/avr-gcc/files/patch-xx-os_main deleted file mode 100644 index 8b69a3c18c69..000000000000 --- a/devel/avr-gcc/files/patch-xx-os_main +++ /dev/null @@ -1,186 +0,0 @@ ---- ./gcc/config/avr/avr.c.orig 2010-03-05 18:01:20.000000000 +0100 -+++ ./gcc/config/avr/avr.c 2010-03-05 18:01:51.000000000 +0100 -@@ -57,6 +57,7 @@ - static int signal_function_p (tree); - static int nmi_function_p (tree); - static int avr_OS_task_function_p (tree); -+static int avr_OS_main_function_p (tree); - static int avr_regs_to_save (HARD_REG_SET *); - static int sequent_regs_live (void); - static const char *ptrreg_to_str (int); -@@ -603,6 +604,19 @@ - return a != NULL_TREE; - } - -+/* Return nonzero if FUNC is a OS_main function. */ -+ -+static int -+avr_OS_main_function_p (tree func) -+{ -+ tree a; -+ -+ gcc_assert (TREE_CODE (func) == FUNCTION_DECL); -+ -+ a = lookup_attribute ("OS_main", TYPE_ATTRIBUTES (TREE_TYPE (func))); -+ return a != NULL_TREE; -+} -+ - /* Return the number of hard registers to push/pop in the prologue/epilogue - of the current function, and optionally store these registers in SET. */ - -@@ -621,9 +635,10 @@ - count = 0; - - /* No need to save any registers if the function never returns or -- is have "OS_task" attribute. */ -+ is have "OS_task" or "OS_main" attribute. */ - if (TREE_THIS_VOLATILE (current_function_decl) -- || cfun->machine->is_OS_task) -+ || cfun->machine->is_OS_task -+ || cfun->machine->is_OS_main) - return 0; - - for (reg = 0; reg < 32; reg++) -@@ -742,6 +757,8 @@ - rtx pushword = gen_rtx_MEM (HImode, - gen_rtx_POST_DEC (HImode, stack_pointer_rtx)); - rtx insn; -+ int method1_length; -+ int sp_plus_length; - - last_insn_address = 0; - -@@ -751,6 +768,7 @@ - cfun->machine->is_signal = signal_function_p (current_function_decl); - cfun->machine->is_nmi = nmi_function_p (current_function_decl); - cfun->machine->is_OS_task = avr_OS_task_function_p (current_function_decl); -+ cfun->machine->is_OS_main = avr_OS_main_function_p (current_function_decl); - - /* Prologue: naked. */ - if (cfun->machine->is_naked) -@@ -764,6 +782,7 @@ - && !cfun->machine->is_interrupt - && !cfun->machine->is_signal - && !cfun->machine->is_OS_task -+ && !cfun->machine->is_OS_main - && live_seq); - - if (cfun->machine->is_interrupt || cfun->machine->is_signal) -@@ -903,7 +922,7 @@ - } - if (frame_pointer_needed) - { -- if(!cfun->machine->is_OS_task) -+ if (!(cfun->machine->is_OS_task || cfun->machine->is_OS_main)) - { - /* Push frame pointer. */ - insn = emit_move_insn (pushword, frame_pointer_rtx); -@@ -933,7 +952,7 @@ - if (TARGET_TINY_STACK) - { - if (size < -63 || size > 63) -- warning (0, "large frame pointer change (%d) with -mtiny-stack", size); -+ warning (0, "large frame pointer change (%ld) with -mtiny-stack", size); - - /* The high byte (r29) doesn't change - prefer 'subi' (1 cycle) - over 'sbiw' (2 cycles, same size). */ -@@ -945,7 +964,6 @@ - myfp = frame_pointer_rtx; - } - /* Calculate length. */ -- int method1_length; - method1_length = - get_attr_length (gen_move_insn (frame_pointer_rtx, stack_pointer_rtx)); - method1_length += -@@ -1043,6 +1061,7 @@ - HARD_REG_SET set; - int minimize; - HOST_WIDE_INT size = get_frame_size(); -+ int sp_plus_length; - - /* epilogue: naked */ - if (cfun->machine->is_naked) -@@ -1057,6 +1076,7 @@ - && !cfun->machine->is_interrupt - && !cfun->machine->is_signal - && !cfun->machine->is_OS_task -+ && !cfun->machine->is_OS_main - && live_seq); - - if (minimize && (frame_pointer_needed || live_seq > 4)) -@@ -1119,7 +1139,7 @@ - emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); - } - } -- if(!cfun->machine->is_OS_task) -+ if (!(cfun->machine->is_OS_task || cfun->machine->is_OS_main)) - { - /* Restore previous frame_pointer. */ - emit_insn (gen_pophi (frame_pointer_rtx)); -@@ -1939,10 +1959,18 @@ - } - /* Use simple load of stack pointer if no interrupts are used - or inside main or signal function prologue where they disabled. */ -- else if (TARGET_NO_INTERRUPTS -+ else if ((!AVR_XMEGA && TARGET_NO_INTERRUPTS) - || (!AVR_XMEGA -- && reload_completed -+ && reload_completed - && cfun->machine->is_signal -+ && prologue_epilogue_contains (insn)) -+ || (!AVR_XMEGA -+ && reload_completed -+ && cfun->machine->is_OS_main -+ && prologue_contains (insn)) -+ || (AVR_XMEGA -+ && reload_completed -+ && cfun->machine->is_nmi - && prologue_epilogue_contains (insn))) - { - *l = 2; -@@ -4969,6 +4997,7 @@ - { "nmi", 0, 0, true, false, false, avr_handle_fndecl_attribute }, - { "naked", 0, 0, false, true, true, avr_handle_fntype_attribute }, - { "OS_task", 0, 0, false, true, true, avr_handle_fntype_attribute }, -+ { "OS_main", 0, 0, false, true, true, avr_handle_fntype_attribute }, - { NULL, 0, 0, false, false, false, NULL } - }; - ---- ./gcc/config/avr/avr.h.orig 2010-03-05 18:01:20.000000000 +0100 -+++ ./gcc/config/avr/avr.h 2010-03-05 18:01:51.000000000 +0100 -@@ -1320,4 +1320,8 @@ - /* 'true' - if current function is a task function - as specified by the "OS_task" attribute. */ - int is_OS_task; -+ -+ /* 'true' - if current function is a 'main' function -+ as specified by the "OS_main" attribute. */ -+ int is_OS_main; - }; ---- ./gcc/function.c.orig 2009-06-19 23:44:24.000000000 +0200 -+++ ./gcc/function.c 2010-03-05 18:01:51.000000000 +0100 -@@ -4757,6 +4757,14 @@ - } - - int -+prologue_contains (const_rtx insn) -+{ -+ if (contains (insn, &prologue)) -+ return 1; -+ return 0; -+} -+ -+int - prologue_epilogue_contains (const_rtx insn) - { - if (contains (insn, &prologue)) ---- ./gcc/rtl.h.orig 2009-07-14 11:32:55.000000000 +0200 -+++ ./gcc/rtl.h 2010-03-05 18:01:51.000000000 +0100 -@@ -2145,6 +2145,7 @@ - - /* In function.c */ - extern void reposition_prologue_and_epilogue_notes (void); -+extern int prologue_contains (const_rtx); - extern int prologue_epilogue_contains (const_rtx); - extern int sibcall_epilogue_contains (const_rtx); - extern void mark_temp_addr_taken (rtx); |