⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc-20030210-sh-linux-1.patch

📁 linux下编译交叉工具链的工具源码
💻 PATCH
📖 第 1 页 / 共 4 页
字号:
+#if defined(HAVE_LD_EH_FRAME_HDR)+#undef LINK_EH_SPEC+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "+#endif  #undef STARTFILE_SPEC #define STARTFILE_SPEC \@@ -92,4 +127,40 @@      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ 		       %{!p:%{profile:gcrt1.o%s} \ 			 %{!profile:crt1.o%s}}}} \-   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"+   crti.o%s %{static:crtbeginT.o%s}\+   %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"++#undef FUNCTION_PROFILER+#define FUNCTION_PROFILER(STREAM,LABELNO)				\+do									\+{									\+  if (flag_pic)								\+    {									\+      fprintf (STREAM, "	mov.l	3f,r1\n");			\+      fprintf (STREAM, "	mova	3f,r0\n");			\+      fprintf (STREAM, "	add	r1,r0\n");			\+      fprintf (STREAM, "	mov.l	1f,r1\n");			\+      fprintf (STREAM, "	mov.l	@(r0,r1),r1\n");		\+    }									\+  else									\+    {									\+      fprintf (STREAM, "	mov.l	1f,r1\n");			\+    }									\+  fprintf (STREAM, "	sts.l	pr,@-r15\n");				\+  fprintf (STREAM, "	mova	2f,r0\n");				\+  fprintf (STREAM, "	jmp	@r1\n");				\+  fprintf (STREAM, "	lds	r0,pr\n");				\+  fprintf (STREAM, "	.align	2\n");					\+  if (flag_pic)								\+    {									\+      fprintf (STREAM, "1:	.long	mcount@GOT\n");			\+      fprintf (STREAM, "3:	.long	_GLOBAL_OFFSET_TABLE_\n");	\+    }									\+  else									\+    {									\+      fprintf (STREAM, "1:	.long	mcount\n");			\+    }									\+  fprintf (STREAM, "2:	lds.l	@r15+,pr\n");				\+} while (0)++#define NO_SHARED_LIBGCC_MULTILIBdiff -ruN gcc-20030210.orig/gcc/config/sh/sh-protos.h gcc-20030210/gcc/config/sh/sh-protos.h--- gcc-20030210.orig/gcc/config/sh/sh-protos.h	Fri Feb 22 01:42:28 2002+++ gcc-20030210/gcc/config/sh/sh-protos.h	Sat Feb 22 01:40:14 2003@@ -74,6 +74,7 @@ extern int shl_sext_length PARAMS ((rtx)); extern int gen_shl_sext PARAMS ((rtx, rtx, rtx, rtx)); extern rtx gen_datalabel_ref PARAMS ((rtx));+extern int shl_casesi_worker_length PARAMS ((rtx)); extern int regs_used PARAMS ((rtx, int)); extern void fixup_addr_diff_vecs PARAMS ((rtx)); extern int get_dest_uid PARAMS ((rtx, int));diff -ruN gcc-20030210.orig/gcc/config/sh/sh.c gcc-20030210/gcc/config/sh/sh.c--- gcc-20030210.orig/gcc/config/sh/sh.c	Fri Feb 22 01:42:28 2002+++ gcc-20030210/gcc/config/sh/sh.c	Sat Feb 22 01:40:14 2003@@ -2143,6 +2143,48 @@   return sym; } ++/* Function to be used in the length attribute of the casesi_worker+   instruction.  Returns number of instructions, which is half of the+   length of bytes. */++int+shl_casesi_worker_length (insn)+     rtx insn;+{+  rtx set_src, label;+  rtx diff_vec;++  set_src = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));+  if (!(GET_CODE (set_src) == UNSPEC+	&& XINT (set_src, 1) == UNSPEC_CASESI))+    abort ();++  label = XVECEXP (set_src, 0, 2);+  if (GET_CODE (label) != LABEL_REF)+    abort ();++  diff_vec = PATTERN (next_real_insn (XEXP (label, 0)));++  if (GET_CODE (diff_vec) != ADDR_DIFF_VEC)+    abort ();++  switch (GET_MODE (diff_vec))+    {+    case SImode:+      return 2;+    case HImode:+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)+	return 3;+      return 2;+    case QImode:+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)+	return 2;+      return 1;+    default:+      abort ();+    }+}  /* The SH cannot load a large constant into a register, constants have to    come from a pc relative load.  The reference of a pc relative load@@ -3190,7 +3232,7 @@       vec_lab = XEXP (XEXP (pat, 0), 0);        /* Search the matching casesi_jump_2.  */-      for (prev = vec_lab; ; prev = PREV_INSN (prev))+      for (prev = vec_lab; prev; prev = PREV_INSN (prev)) 	{ 	  if (GET_CODE (prev) != JUMP_INSN) 	    continue;@@ -3205,6 +3247,13 @@ 	    break; 	} +      if (prev == NULL)+	{			/* Switch statement has been optimized out.  */+	  delete_insn (PREV_INSN (insn));+	  delete_insn (insn);+	  continue;+	}+       /* Emit the reference label of the braf where it belongs, right after 	 the casesi_jump_2 (i.e. braf).  */       braf_label = XEXP (XEXP (SET_SRC (XVECEXP (prevpat, 0, 0)), 1), 0);@@ -3223,7 +3272,7 @@      rtx barrier_or_label; {   rtx next = next_real_insn (barrier_or_label), pat, prev;-  int slot, credit, jump_to_next;+  int slot, credit, jump_to_next = 0;     if (! next)     return 0;@@ -4507,7 +4556,8 @@   if (current_function_varargs || current_function_stdarg)     {       /* This is not used by the SH3E calling convention  */-      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI)+      if (TARGET_SH1 && ! TARGET_SH3E && ! TARGET_SH5 && ! TARGET_HITACHI+	  || TARGET_NO_IMPLICIT_FP) 	{ 	  /* Push arg regs as if they'd been provided by caller in stack.  */ 	  for (i = 0; i < NPARM_REGS(SImode); i++)@@ -5149,7 +5199,8 @@   tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;   tree record; -  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)+  if (TARGET_SH5 || (! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI+      || TARGET_NO_IMPLICIT_FP)     return ptr_type_node;    record = make_node (RECORD_TYPE);@@ -5211,7 +5262,8 @@       return;     } -  if ((! TARGET_SH3E && ! TARGET_SH4) || TARGET_HITACHI)+  if ((! TARGET_SH3E && ! TARGET_SH4)+      || TARGET_HITACHI || TARGET_NO_IMPLICIT_FP)     {       std_expand_builtin_va_start (stdarg_p, valist, nextarg);       return;@@ -5289,7 +5341,8 @@   rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;   pptr_type_node = build_pointer_type (ptr_type_node); -  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4) && ! TARGET_HITACHI)+  if (! TARGET_SH5 && (TARGET_SH3E || TARGET_SH4)+      && ! TARGET_HITACHI && ! TARGET_NO_IMPLICIT_FP)     {       tree f_next_o, f_next_o_limit, f_next_fp, f_next_fp_limit, f_next_stack;       tree next_o, next_o_limit, next_fp, next_fp_limit, next_stack;diff -ruN gcc-20030210.orig/gcc/config/sh/sh.h gcc-20030210/gcc/config/sh/sh.h--- gcc-20030210.orig/gcc/config/sh/sh.h	Fri Feb 22 01:42:28 2002+++ gcc-20030210/gcc/config/sh/sh.h	Sat Feb 22 01:40:14 2003@@ -147,10 +147,10 @@ #define HARD_SH4_BIT	(1<<5) #define FPU_SINGLE_BIT	(1<<7) #define SH4_BIT	       	(1<<12)+#define NO_IMPLICIT_FP_BIT	(1<<3) #define FMOVD_BIT	(1<<4) #define SH5_BIT		(1<<0) #define SPACE_BIT 	(1<<13)-#define BIGTABLE_BIT  	(1<<14) #define RELAX_BIT	(1<<15) #define USERMODE_BIT	(1<<16) #define HITACHI_BIT     (1<<22)@@ -205,6 +205,9 @@ /* Nonzero if we should generate code for a SH5 CPU (either ISA).  */ #define TARGET_SH5 (target_flags & SH5_BIT) +/* Nonzero if we should not use FPU implicitly.  */+#define TARGET_NO_IMPLICIT_FP (target_flags & NO_IMPLICIT_FP_BIT)+ /* Nonzero if we should generate code using the SHcompact instruction    set and 32-bit ABI.  */ #define TARGET_SHCOMPACT (TARGET_SH5 && TARGET_SH1)@@ -225,6 +228,7 @@  /* Nonzero if we should generate code using SHmedia FPU instructions.  */ #define TARGET_SHMEDIA_FPU (TARGET_SHMEDIA && TARGET_FPU_DOUBLE)+ /* Nonzero if we should generate fmovd.  */ #define TARGET_FMOVD (target_flags & FMOVD_BIT) @@ -234,9 +238,6 @@ /* Nonzero if we should generate smaller code rather than faster code.  */ #define TARGET_SMALLCODE   (target_flags & SPACE_BIT) -/* Nonzero to use long jump tables.  */-#define TARGET_BIGTABLE     (target_flags & BIGTABLE_BIT)- /* Nonzero to generate pseudo-ops needed by the assembler and linker    to do function call relaxing.  */ #define TARGET_RELAX (target_flags & RELAX_BIT)@@ -297,7 +298,6 @@   {"5-compact-nofpu", TARGET_NONE, "" },	\   {"5-compact-nofpu", SH5_BIT|SH3_BIT|SH2_BIT|SH1_BIT, "Generate FPU-less SHcompact code" }, \   {"b",		-LITTLE_ENDIAN_BIT, "" },  	\-  {"bigtable", 	BIGTABLE_BIT, "" },		\   {"dalign",  	DALIGN_BIT, "" },		\   {"fmovd",  	FMOVD_BIT, "" },		\   {"hitachi",	HITACHI_BIT, "" },		\@@ -306,6 +306,7 @@   {"isize", 	ISIZE_BIT, "" },		\   {"l",		LITTLE_ENDIAN_BIT, "" },  	\   {"no-ieee",  	-IEEE_BIT, "" },		\+  {"no-implicit-fp", NO_IMPLICIT_FP_BIT, "" },	\   {"padstruct", PADSTRUCT_BIT, "" },    	\   {"prefergot",	PREFERGOT_BIT, "" },		\   {"relax",	RELAX_BIT, "" },		\@@ -2493,16 +2494,22 @@     goto LABEL;								\ } +extern int optimize; /* needed for gen_casesi.  */+extern int optimize_size;+ /* Specify the machine mode that this machine uses    for the index in the tablejump instruction.  */-#define CASE_VECTOR_MODE (TARGET_BIGTABLE ? SImode : HImode)+#define CASE_VECTOR_MODE SImode  #define CASE_VECTOR_SHORTEN_MODE(MIN_OFFSET, MAX_OFFSET, BODY) \ ((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 127 \  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, QImode) \  : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 255 \  ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, QImode) \- : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 ? HImode \+ : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 \+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, HImode) \+ : optimize_size && (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 65535 \+ ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, HImode) \  : SImode)  /* Define as C expression which evaluates to nonzero if the tablejump@@ -3038,10 +3045,7 @@ /* Output an absolute table element.  */  #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE)  				\-  if (TARGET_BIGTABLE) 							\-    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); 			\-  else									\-    asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); 			\+    asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE))  /* Output various types of constants.  */ @@ -3167,8 +3171,6 @@ #define sh_cpu_attr ((enum attr_cpu)sh_cpu) extern enum processor_type sh_cpu; -extern int optimize; /* needed for gen_casesi.  */- enum mdep_reorg_phase_e {   SH_BEFORE_MDEP_REORG,diff -ruN gcc-20030210.orig/gcc/config/sh/sh.md gcc-20030210/gcc/config/sh/sh.md--- gcc-20030210.orig/gcc/config/sh/sh.md	Sat Nov 23 04:58:06 2002+++ gcc-20030210/gcc/config/sh/sh.md	Sat Feb 22 01:40:14 2003@@ -1242,7 +1242,7 @@    (clobber (reg:SI PR_REG))    (clobber (reg:SI R4_REG))    (use (match_operand:SI 1 "arith_reg_operand" "r"))]-  "TARGET_SH1 && ! TARGET_SH4"+  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"   "jsr	@%1%#"   [(set_attr "type" "sfunc")    (set_attr "needs_delay_slot" "yes")])@@ -1336,7 +1336,7 @@    operands[3] = gen_reg_rtx (Pmode);   /* Emit the move of the address to a pseudo outside of the libcall.  */-  if (TARGET_HARD_SH4 && TARGET_SH3E)+  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)     {       emit_move_insn (operands[3], 		      gen_rtx_SYMBOL_REF (SImode, \"__udivsi3_i4\"));@@ -1391,7 +1391,7 @@    (clobber (reg:SI R2_REG))    (clobber (reg:SI R3_REG))    (use (match_operand:SI 1 "arith_reg_operand" "r"))]-  "TARGET_SH1 && ! TARGET_SH4"+  "TARGET_SH1 && ! TARGET_SH4 || TARGET_NO_IMPLICIT_FP"   "jsr	@%1%#"   [(set_attr "type" "sfunc")    (set_attr "needs_delay_slot" "yes")])@@ -1476,7 +1476,7 @@    operands[3] = gen_reg_rtx (Pmode);   /* Emit the move of the address to a pseudo outside of the libcall.  */-  if (TARGET_HARD_SH4 && TARGET_SH3E)+  if (TARGET_HARD_SH4 && TARGET_SH3E && !TARGET_NO_IMPLICIT_FP)     {       emit_move_insn (operands[3], 		      gen_rtx_SYMBOL_REF (SImode, \"__sdivsi3_i4\"));@@ -6446,6 +6446,8 @@     case SImode:       return \"shll2	%1\;mov.l	@(r0,%1),%0\";     case HImode:+      if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)+	return \"add	%1,%1\;mov.w	@(r0,%1),%0\;extu.w	%0,%0\";       return \"add	%1,%1\;mov.w	@(r0,%1),%0\";     case QImode:       if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)@@ -6455,7 +6457,15 @@       abort ();     } }"-  [(set_attr "length" "4")])+  [(set (attr "length")+	(cond [(eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 1))+	       (const_string "2")+	       (eq (symbol_ref "shl_casesi_worker_length (insn)") (const_int 2))+	       (const_string "4")+	       ;; Put "match_dup" here so that insn_variable_length_p return 1.+	       (ne (match_dup 2) (match_dup 2))+	       (const_string "4")]+	      (const_string "6")))])  (define_insn "casesi_shift_media"   [(set (match_operand 0 "arith_reg_operand" "=r")diff -ruN gcc-20030210.orig/gcc/config/sh/sh3-linux.h gcc-20030210/gcc/config/sh/sh3-linux.h--- gcc-20030210.orig/gcc/config/sh/sh3-linux.h	Thu Jan  1 09:00:00 1970+++ gcc-20030210/gcc/config/sh/sh3-linux.h	Sat Feb 22 01:40:14 2003@@ -0,0 +1,29 @@+#undef TARGET_VERSION+#define TARGET_VERSION  fputs (" (SH3 GNU/Linux with ELF)", stderr);++#undef CPP_SPEC+#define CPP_SPEC \+  "-D__LITTLE_ENDIAN__ \+   -D__SH3__ -D__sh3__ \+   -D__SIZE_TYPE__=unsigned\\ int \+   -D__PTRDIFF_TYPE__=int \+   %{fPIC:-D__PIC__ -D__pic__} \+   %{fpic:-D__PIC__ -D__pic__} \+   %{posix:-D_POSIX_SOURCE} \+   %{pthread:-D_REENTRANT -D_PTHREADS}"++#undef ASM_SPEC+#define ASM_SPEC  "%{mrelax:-relax}"++#undef CC1_SPEC+#define CC1_SPEC \+  "-musermode -ml -m3 %{profile:-p}"++#undef LINK_SPEC+#define LINK_SPEC \+  "%{mrelax:-relax} \+   %{shared:-shared} \+   %{!static: \+     %{rdynamic:-export-dynamic} \+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \+    %{static:-static}"diff -ruN gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h gcc-20030210/gcc/config/sh/sh3eb-linux.h--- gcc-20030210.orig/gcc/config/sh/sh3eb-linux.h	Thu Jan  1 09:00:00 1970+++ gcc-20030210/gcc/config/sh/sh3eb-linux.h	Sat Feb 22 01:40:14 2003@@ -0,0 +1,29 @@+#undef TARGET_VERSION+#define TARGET_VERSION  fputs (" (SH3EB GNU/Linux with ELF)", stderr);++#undef CPP_SPEC+#define CPP_SPEC \+  "-D__BIG_ENDIAN__ \+   -D__SH3__ -D__sh3__ \+   -D__SIZE_TYPE__=unsigned\\ int \+   -D__PTRDIFF_TYPE__=int \+   %{fPIC:-D__PIC__ -D__pic__} \+   %{fpic:-D__PIC__ -D__pic__} \+   %{posix:-D_POSIX_SOURCE} \+   %{pthread:-D_REENTRANT -D_PTHREADS}"++#undef ASM_SPEC+#define ASM_SPEC  "%{mrelax:-relax}"++#undef CC1_SPEC+#define CC1_SPEC \+  "-musermode -mb -m3 %{profile:-p}"++#undef LINK_SPEC+#define LINK_SPEC \+  "%{mrelax:-relax} \+   %{shared:-shared} \+   %{!static: \+     %{rdynamic:-export-dynamic} \+     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \+    %{static:-static}"diff -ruN gcc-20030210.orig/gcc/config/sh/sh4-linux.h gcc-20030210/gcc/config/sh/sh4-linux.h--- gcc-20030210.orig/gcc/config/sh/sh4-linux.h	Thu Jan  1 09:00:00 1970+++ gcc-20030210/gcc/config/sh/sh4-linux.h	Sat Feb 22 01:40:14 2003@@ -0,0 +1,29 @@+#undef TARGET_VERSION+#define TARGET_VERSION  fputs (" (SH4 GNU/Linux with ELF)", stderr);++#undef CPP_SPEC+#define CPP_SPEC \+  "-D__LITTLE_ENDIAN__ \+   -D__SH4__ \+   -D__SIZE_TYPE__=unsigned\\ int \+   -D__PTRDIFF_TYPE__=int \+   %{fPIC:-D__PIC__ -D__pic__} \+   %{fpic:-D__PIC__ -D__pic__} \+   %{posix:-D_POSIX_SOURCE} \+   %{pthread:-D_REENTRANT -D_PTHREADS}"++#undef ASM_SPEC+#define ASM_SPEC  "%{mrelax:-relax}"+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -