|
|
@@ -1,85 +0,0 @@
|
|
|
-Index: gcc-4.2.3/gcc/config/avr32/avr32.c
|
|
|
-===================================================================
|
|
|
---- gcc-4.2.3.orig/gcc/config/avr32/avr32.c 2008-05-21 13:45:59.762288215 +0200
|
|
|
-+++ gcc-4.2.3/gcc/config/avr32/avr32.c 2008-05-21 13:46:00.342290304 +0200
|
|
|
-@@ -695,8 +695,7 @@
|
|
|
-
|
|
|
-
|
|
|
- if (!avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21")
|
|
|
-- || vcall_offset
|
|
|
-- || flag_pic)
|
|
|
-+ || vcall_offset)
|
|
|
- {
|
|
|
- fputs ("\tpushm\tlr\n", file);
|
|
|
- }
|
|
|
-@@ -728,47 +727,23 @@
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-- if ( (!avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21")
|
|
|
-- || vcall_offset)
|
|
|
-- && !flag_pic )
|
|
|
-+ if (!avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21")
|
|
|
-+ || vcall_offset)
|
|
|
- {
|
|
|
- fputs ("\tpopm\tlr\n", file);
|
|
|
- }
|
|
|
--
|
|
|
-- if (flag_pic)
|
|
|
-- {
|
|
|
-- /* Load the got into lr and then load the pointer
|
|
|
-- to the function from the got and put it on the stack.
|
|
|
-- We can then call the function and restore lr by issuing
|
|
|
-- a doubleword load from the stack. We do not use a popm/ldm
|
|
|
-- since it will be treated as a return and might need a flushing
|
|
|
-- of the return-stack if available. */
|
|
|
-- rtx label = gen_label_rtx ();
|
|
|
-- /* Load the got. */
|
|
|
-- fputs ("\tlddpc\tlr, 0f\n", file);
|
|
|
-- (*targetm.asm_out.internal_label) (file, "L",
|
|
|
-- CODE_LABEL_NUMBER (label));
|
|
|
-- fputs ("\trsub\tlr, pc\n", file);
|
|
|
-- /* Load the function pointer. */
|
|
|
-- fputs ("\tld.w\tlr, lr[", file);
|
|
|
-- assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
|
|
|
-- fputs ("@got]\n", file);
|
|
|
-- /* Push the function pointer on the stack.*/
|
|
|
-- fputs ("\tpushm\tlr\n", file);
|
|
|
-- /* Restore the old lr value and load the function pointer into
|
|
|
-- pc. */
|
|
|
-- fputs ("\tld.d\tlr,sp++\n", file);
|
|
|
-- fprintf (file, "\t.align 2\n");
|
|
|
-- fprintf (file, "0:\t.long\t.L%d - _GLOBAL_OFFSET_TABLE_\n", CODE_LABEL_NUMBER (label));
|
|
|
-- }
|
|
|
-- else
|
|
|
-- {
|
|
|
-- fprintf (file, "\tlddpc\tpc, 0f\n");
|
|
|
-- fprintf (file, "\t.align 2\n");
|
|
|
-- fputs ("0:\t.long\t", file);
|
|
|
-- assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
|
|
|
-- fputc ('\n', file);
|
|
|
-- }
|
|
|
-+
|
|
|
-+ /* Jump to the function. We assume that we can use an rjmp since the
|
|
|
-+ function to jump to is local and probably not too far away from
|
|
|
-+ the thunk. If this assumption proves to be wrong we could implement
|
|
|
-+ this jump by calculating the offset between the jump source and destination
|
|
|
-+ and put this in the constant pool and then perform an add to pc.
|
|
|
-+ This would also be legitimate PIC code. But for now we hope that an rjmp
|
|
|
-+ will be sufficient...
|
|
|
-+ */
|
|
|
-+ fputs ("\trjmp\t", file);
|
|
|
-+ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
|
|
|
-+ fputc ('\n', file);
|
|
|
- }
|
|
|
-
|
|
|
- /* Implements target hook vector_mode_supported. */
|
|
|
-@@ -1742,7 +1717,7 @@
|
|
|
- if (TREE_CODE (*node) != FUNCTION_DECL)
|
|
|
- {
|
|
|
- warning ("`%s' attribute only applies to functions",
|
|
|
-- IDENTIFIER_POINTER (name));
|
|
|
-+ IDENTIFIER_POINTER (name));
|
|
|
- *no_add_attrs = true;
|
|
|
- }
|
|
|
- /* FIXME: the argument if any is checked for type attributes; should it
|