some superh fixes
This commit is contained in:
parent
58ba99a1ea
commit
b75753d0c8
43
toolchain/gcc/3.4.4/71_all_sh-pr16665-fix.patch
Normal file
43
toolchain/gcc/3.4.4/71_all_sh-pr16665-fix.patch
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
--- gcc/gcc/config/sh/sh.c
|
||||||
|
+++ gcc/gcc/config/sh/sh.c
|
||||||
|
@@ -9106,6 +9106,15 @@ sh_output_mi_thunk (FILE *file, tree thu
|
||||||
|
}
|
||||||
|
this = FUNCTION_ARG (cum, Pmode, ptr_type_node, 1);
|
||||||
|
|
||||||
|
+ /* In PIC case, we set PIC register to compute the target address. We
|
||||||
|
+ can use a scratch register to save and restore the original value
|
||||||
|
+ except for SHcompact. For SHcompact, use stack. */
|
||||||
|
+ if (flag_pic && TARGET_SHCOMPACT)
|
||||||
|
+ {
|
||||||
|
+ push (PIC_OFFSET_TABLE_REGNUM);
|
||||||
|
+ emit_insn (gen_GOTaddr2picreg ());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* For SHcompact, we only have r0 for a scratch register: r1 is the
|
||||||
|
static chain pointer (even if you can't have nested virtual functions
|
||||||
|
right now, someone might implement them sometime), and the rest of the
|
||||||
|
@@ -9188,8 +9197,24 @@ sh_output_mi_thunk (FILE *file, tree thu
|
||||||
|
assemble_external (function);
|
||||||
|
TREE_USED (function) = 1;
|
||||||
|
}
|
||||||
|
+ /* We can use scratch1 to save and restore the original value of
|
||||||
|
+ PIC register except for SHcompact. */
|
||||||
|
+ if (flag_pic && ! TARGET_SHCOMPACT)
|
||||||
|
+ {
|
||||||
|
+ emit_move_insn (scratch1,
|
||||||
|
+ gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
|
||||||
|
+ emit_insn (gen_GOTaddr2picreg ());
|
||||||
|
+ }
|
||||||
|
funexp = XEXP (DECL_RTL (function), 0);
|
||||||
|
emit_move_insn (scratch2, funexp);
|
||||||
|
+ if (flag_pic)
|
||||||
|
+ {
|
||||||
|
+ if (! TARGET_SHCOMPACT)
|
||||||
|
+ emit_move_insn (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM),
|
||||||
|
+ scratch1);
|
||||||
|
+ else
|
||||||
|
+ pop (PIC_OFFSET_TABLE_REGNUM);
|
||||||
|
+ }
|
||||||
|
funexp = gen_rtx_MEM (FUNCTION_MODE, scratch2);
|
||||||
|
sibcall = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
|
||||||
|
SIBLING_CALL_P (sibcall) = 1;
|
13
toolchain/gcc/3.4.4/72_all_sh-no-reorder-blocks.patch
Normal file
13
toolchain/gcc/3.4.4/72_all_sh-no-reorder-blocks.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--- g/gcc/config/sh/sh.h
|
||||||
|
+++ g/gcc/config/sh/sh.h
|
||||||
|
@@ -422,6 +422,10 @@
|
||||||
|
do { \
|
||||||
|
if (LEVEL) \
|
||||||
|
flag_omit_frame_pointer = -1; \
|
||||||
|
+ if (LEVEL <= 2) \
|
||||||
|
+ { \
|
||||||
|
+ flag_reorder_blocks = 0; \
|
||||||
|
+ } \
|
||||||
|
if (SIZE) \
|
||||||
|
target_flags |= SPACE_BIT; \
|
||||||
|
if (TARGET_SHMEDIA && LEVEL > 1) \
|
28
toolchain/gcc/3.4.4/73_all_sh-pr20617.patch
Normal file
28
toolchain/gcc/3.4.4/73_all_sh-pr20617.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
2005-03-24 J"orn Rennecke <joern.rennecke@st.com>
|
||||||
|
|
||||||
|
Band aid for PR target/20617:
|
||||||
|
* config/sh/lib1funcs.asm (FUNC, ALIAS): Add .hidden directive.
|
||||||
|
|
||||||
|
--- g/gcc/config/sh/lib1funcs.asm
|
||||||
|
+++ g/gcc/config/sh/lib1funcs.asm
|
||||||
|
@@ -37,9 +37,19 @@ Boston, MA 02111-1307, USA. */
|
||||||
|
ELF local label prefixes by J"orn Rennecke
|
||||||
|
amylaar@cygnus.com */
|
||||||
|
|
||||||
|
+#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y)
|
||||||
|
+
|
||||||
|
#ifdef __ELF__
|
||||||
|
#define LOCAL(X) .L_##X
|
||||||
|
-#define FUNC(X) .type X,@function
|
||||||
|
+
|
||||||
|
+#if 1 /* ??? The export list mechanism is broken, everything that is not
|
||||||
|
+ hidden is exported. */
|
||||||
|
+#undef FUNC
|
||||||
|
+#define FUNC(X) .type X,@function; .hidden X
|
||||||
|
+#undef ALIAS
|
||||||
|
+#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y); .hidden GLOBAL(X)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
|
||||||
|
#define ENDFUNC(X) ENDFUNC0(X)
|
||||||
|
#else
|
Loading…
Reference in New Issue
Block a user