summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <igor.pashev@nexenta.com>2013-01-31 11:27:12 +0400
committerIgor Pashev <igor.pashev@nexenta.com>2013-01-31 11:27:12 +0400
commitb209e1ae7b3d884cc609daa77efdddd1958eb33b (patch)
tree0afc3dd027db775f32832c11ecdc8d85189cad48
parentbdacbfbd5e67d8d08dc832d1d0bbd300660319d8 (diff)
downloadcibs-pkgs-b209e1ae7b3d884cc609daa77efdddd1958eb33b.tar.gz
Really implement -fstrict-calling-conventions
-rw-r--r--gcc-4.4/patches/gcc-4.4.7.illumos.patch315
1 files changed, 192 insertions, 123 deletions
diff --git a/gcc-4.4/patches/gcc-4.4.7.illumos.patch b/gcc-4.4/patches/gcc-4.4.7.illumos.patch
index e17b58f..3e96564 100644
--- a/gcc-4.4/patches/gcc-4.4.7.illumos.patch
+++ b/gcc-4.4/patches/gcc-4.4.7.illumos.patch
@@ -1,6 +1,6 @@
-diff -dubr gcc-4.4.7/fixincludes/fixincl.x gcc-4.4.7.illumos/fixincludes/fixincl.x
---- gcc-4.4.7/fixincludes/fixincl.x 2010-12-13 21:22:09.000000000 +0300
-+++ gcc-4.4.7.illumos/fixincludes/fixincl.x 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/fixincludes/fixincl.x source/fixincludes/fixincl.x
+--- orig/fixincludes/fixincl.x 2010-12-13 21:22:09.000000000 +0300
++++ source/fixincludes/fixincl.x 2013-01-30 19:23:07.367774204 +0400
@@ -6420,10 +6420,22 @@
*/
tSCC zSun_Auth_ProtoBypass0[] =
@@ -25,10 +25,9 @@ diff -dubr gcc-4.4.7/fixincludes/fixincl.x gcc-4.4.7.illumos/fixincludes/fixincl
{ TT_EGREP, zSun_Auth_ProtoSelect0, (regex_t*)NULL }, };
/*
-Только в gcc-4.4.7.illumos/fixincludes: fixincl.x.orig
-diff -dubr gcc-4.4.7/fixincludes/inclhack.def gcc-4.4.7.illumos/fixincludes/inclhack.def
---- gcc-4.4.7/fixincludes/inclhack.def 2010-12-13 21:22:09.000000000 +0300
-+++ gcc-4.4.7.illumos/fixincludes/inclhack.def 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/fixincludes/inclhack.def source/fixincludes/inclhack.def
+--- orig/fixincludes/inclhack.def 2010-12-13 21:22:09.000000000 +0300
++++ source/fixincludes/inclhack.def 2013-01-30 19:23:07.374086042 +0400
@@ -3459,6 +3459,21 @@
*/
select = '\(\*[a-z][a-z_]*\)\(\)';
@@ -51,11 +50,23 @@ diff -dubr gcc-4.4.7/fixincludes/inclhack.def gcc-4.4.7.illumos/fixincludes/incl
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n%1(...);%2\n"
"#else\n%1();%2\n#endif";
-Только в gcc-4.4.7.illumos/fixincludes: inclhack.def.orig
-Только в gcc-4.4.7.illumos/gcc: ChangeLog.orig
-diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i386.c
---- gcc-4.4.7/gcc/config/i386/i386.c 2012-02-22 23:47:42.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/i386/i386.c 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/common.opt source/gcc/common.opt
+--- orig/gcc/common.opt 2009-03-28 20:28:45.000000000 +0300
++++ source/gcc/common.opt 2013-01-30 19:23:38.478448259 +0400
+@@ -1108,6 +1108,10 @@
+ Common Report Var(flag_strict_aliasing) Optimization
+ Assume strict aliasing rules apply
+
++fstrict-calling-conventions
++Common Report Var(flag_strict_calling_conventions) Init(1)
++Use strict ABI calling conventions even for static functions
++
+ fstrict-overflow
+ Common Report Var(flag_strict_overflow)
+ Treat signed overflow as undefined
+diff -dubrN orig/gcc/config/i386/i386.c source/gcc/config/i386/i386.c
+--- orig/gcc/config/i386/i386.c 2012-02-22 23:47:42.000000000 +0400
++++ source/gcc/config/i386/i386.c 2013-01-30 19:23:38.505666277 +0400
@@ -1654,10 +1654,14 @@
saved frame pointer if frame_pointer_needed
@@ -119,7 +130,25 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* Validate -mpreferred-stack-boundary= value or default it to
PREFERRED_STACK_BOUNDARY_DEFAULT. */
ix86_preferred_stack_boundary = PREFERRED_STACK_BOUNDARY_DEFAULT;
-@@ -7375,8 +7389,8 @@
+@@ -4387,6 +4401,7 @@
+ if (decl
+ && TREE_CODE (decl) == FUNCTION_DECL
+ && optimize
++ && (TARGET_64BIT || !flag_strict_calling_conventions)
+ && !profile_flag)
+ {
+ /* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
+@@ -4471,7 +4486,8 @@
+
+ /* For local functions, pass up to SSE_REGPARM_MAX SFmode
+ (and DFmode for SSE2) arguments in SSE registers. */
+- if (decl && TARGET_SSE_MATH && optimize && !profile_flag)
++ if (decl && TARGET_SSE_MATH && optimize && !profile_flag &&
++ (TARGET_64BIT || !flag_strict_calling_conventions))
+ {
+ /* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
+ struct cgraph_local_info *i = cgraph_local_info (CONST_CAST_TREE(decl));
+@@ -7375,8 +7391,8 @@
return 0;
ix86_compute_frame_layout (&frame);
@@ -130,7 +159,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
}
/* Value should be nonzero if functions must have frame pointers.
-@@ -7396,6 +7410,9 @@
+@@ -7396,6 +7412,9 @@
if (SUBTARGET_FRAME_POINTER_REQUIRED)
return 1;
@@ -140,7 +169,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* In override_options, TARGET_OMIT_LEAF_FRAME_POINTER turns off
the frame pointer by default. Turn it back on now if we've not
got a leaf function. */
-@@ -7761,6 +7778,7 @@
+@@ -7761,6 +7780,7 @@
frame->nregs = ix86_nsaved_regs ();
frame->nsseregs = ix86_nsaved_sseregs ();
@@ -148,7 +177,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
total_size = size;
stack_alignment_needed = crtl->stack_alignment_needed / BITS_PER_UNIT;
-@@ -7816,6 +7834,11 @@
+@@ -7816,6 +7836,11 @@
else
frame->save_regs_using_mov = false;
@@ -160,7 +189,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* Skip return address and saved base pointer. */
offset = frame_pointer_needed ? UNITS_PER_WORD * 2 : UNITS_PER_WORD;
-@@ -7827,17 +7850,27 @@
+@@ -7827,17 +7852,27 @@
if (stack_realign_fp)
offset = (offset + stack_alignment_needed -1) & -stack_alignment_needed;
@@ -191,7 +220,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* Va-arg area */
frame->va_arg_size = ix86_varargs_gpr_size + ix86_varargs_fpr_size;
-@@ -7888,8 +7921,10 @@
+@@ -7888,8 +7923,10 @@
(size + frame->padding1 + frame->padding2
+ frame->outgoing_arguments_size + frame->va_arg_size);
@@ -204,7 +233,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
frame->save_regs_using_mov = false;
if (!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE
-@@ -7899,7 +7934,11 @@
+@@ -7899,7 +7936,11 @@
{
frame->red_zone_size = frame->to_allocate;
if (frame->save_regs_using_mov)
@@ -217,7 +246,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
if (frame->red_zone_size > RED_ZONE_SIZE - RED_ZONE_RESERVE)
frame->red_zone_size = RED_ZONE_SIZE - RED_ZONE_RESERVE;
}
-@@ -7912,7 +7951,9 @@
+@@ -7912,7 +7953,9 @@
fprintf (stderr, "size: %ld\n", (long)size);
fprintf (stderr, "nregs: %ld\n", (long)frame->nregs);
fprintf (stderr, "nsseregs: %ld\n", (long)frame->nsseregs);
@@ -227,7 +256,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
fprintf (stderr, "alignment1: %ld\n", (long)stack_alignment_needed);
fprintf (stderr, "padding1: %ld\n", (long)frame->padding1);
fprintf (stderr, "va_arg: %ld\n", (long)frame->va_arg_size);
-@@ -7929,6 +7970,7 @@
+@@ -7929,6 +7972,7 @@
#endif
}
@@ -235,7 +264,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* Emit code to save registers in the prologue. */
static void
-@@ -7937,6 +7979,22 @@
+@@ -7937,6 +7981,22 @@
unsigned int regno;
rtx insn;
@@ -258,7 +287,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
for (regno = FIRST_PSEUDO_REGISTER - 1; regno-- > 0; )
if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, true))
{
-@@ -7962,6 +8020,24 @@
+@@ -7962,6 +8022,24 @@
RTX_FRAME_RELATED_P (insn) = 1;
offset += UNITS_PER_WORD;
}
@@ -283,7 +312,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
}
/* Emit code to save registers using MOV insns. First register
-@@ -8288,12 +8364,13 @@
+@@ -8288,12 +8366,13 @@
RTX_FRAME_RELATED_P (insn) = 1;
}
@@ -299,7 +328,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* When using red zone we may start register saving before allocating
the stack frame saving one cycle of the prologue. However I will
-@@ -8306,7 +8383,8 @@
+@@ -8306,7 +8385,8 @@
&& !crtl->stack_realign_needed)
? hard_frame_pointer_rtx
: stack_pointer_rtx,
@@ -309,7 +338,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
if (allocate == 0)
;
-@@ -8360,16 +8438,20 @@
+@@ -8360,16 +8440,20 @@
&& !(!TARGET_64BIT_MS_ABI && TARGET_RED_ZONE
&& (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT)))
{
@@ -335,7 +364,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
if (!frame_pointer_needed
|| !(frame.to_allocate + frame.padding0)
|| crtl->stack_realign_needed)
-@@ -8379,7 +8461,7 @@
+@@ -8379,7 +8463,7 @@
ix86_emit_save_sse_regs_using_mov (hard_frame_pointer_rtx,
- frame.nregs * UNITS_PER_WORD
- frame.nsseregs * 16
@@ -344,7 +373,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
pic_reg_used = false;
if (pic_offset_table_rtx
-@@ -8538,11 +8620,11 @@
+@@ -8538,11 +8622,11 @@
must be taken for the normal return case of a function using
eh_return: the eax and edx registers are marked as saved, but not
restored along this path. */
@@ -358,7 +387,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
/* If we're only restoring one register and sp is not valid then
using a move instruction to restore the register since it's
-@@ -8584,7 +8666,7 @@
+@@ -8584,7 +8668,7 @@
ix86_emit_restore_regs_using_mov (stack_pointer_rtx,
frame.to_allocate
+ frame.nsseregs * 16
@@ -367,7 +396,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
}
else
{
-@@ -8593,7 +8675,7 @@
+@@ -8593,7 +8677,7 @@
ix86_emit_restore_regs_using_mov (hard_frame_pointer_rtx,
offset
+ frame.nsseregs * 16
@@ -376,7 +405,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
}
/* eh_return epilogues need %ecx added to the stack pointer. */
-@@ -8620,18 +8702,20 @@
+@@ -8620,18 +8704,20 @@
{
tmp = gen_rtx_PLUS (Pmode, stack_pointer_rtx, sa);
tmp = plus_constant (tmp, (frame.to_allocate
@@ -401,7 +430,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
style);
/* If not an i386, mov & pop is faster than "leave". */
else if (TARGET_USE_LEAVE || optimize_function_for_size_p (cfun)
-@@ -8676,12 +8760,17 @@
+@@ -8676,12 +8762,17 @@
pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (frame.to_allocate
+ frame.nsseregs * 16
@@ -420,7 +449,7 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
if (frame_pointer_needed)
{
/* Leave results in shorter dependency chains on CPUs that are
-@@ -9110,10 +9199,21 @@
+@@ -9110,10 +9201,21 @@
return CONSTANT_P (x) && legitimate_address_p (Pmode, x, 1);
}
@@ -443,10 +472,9 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.c gcc-4.4.7.illumos/gcc/config/i386/i3
bool
legitimate_pic_operand_p (rtx x)
{
-Только в gcc-4.4.7.illumos/gcc/config/i386: i386.c.orig
-diff -dubr gcc-4.4.7/gcc/config/i386/i386.opt gcc-4.4.7.illumos/gcc/config/i386/i386.opt
---- gcc-4.4.7/gcc/config/i386/i386.opt 2009-02-20 18:20:38.000000000 +0300
-+++ gcc-4.4.7.illumos/gcc/config/i386/i386.opt 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/i386/i386.opt source/gcc/config/i386/i386.opt
+--- orig/gcc/config/i386/i386.opt 2009-02-20 18:20:38.000000000 +0300
++++ source/gcc/config/i386/i386.opt 2013-01-30 19:23:07.525310281 +0400
@@ -224,6 +224,10 @@
Target Report Mask(TLS_DIRECT_SEG_REFS)
Use direct references against %gs when accessing tls data
@@ -458,9 +486,9 @@ diff -dubr gcc-4.4.7/gcc/config/i386/i386.opt gcc-4.4.7.illumos/gcc/config/i386/
mtune=
Target RejectNegative Joined Var(ix86_tune_string)
Schedule code for given CPU
-diff -dubr gcc-4.4.7/gcc/config/i386/sol2-10.h gcc-4.4.7.illumos/gcc/config/i386/sol2-10.h
---- gcc-4.4.7/gcc/config/i386/sol2-10.h 2010-07-15 14:08:56.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/i386/sol2-10.h 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/i386/sol2-10.h source/gcc/config/i386/sol2-10.h
+--- orig/gcc/config/i386/sol2-10.h 2010-07-15 14:08:56.000000000 +0400
++++ source/gcc/config/i386/sol2-10.h 2013-01-30 19:23:07.527679958 +0400
@@ -94,7 +94,7 @@
%{R*} \
%{compat-bsd: \
@@ -470,9 +498,9 @@ diff -dubr gcc-4.4.7/gcc/config/i386/sol2-10.h gcc-4.4.7.illumos/gcc/config/i386
-R /usr/ucblib/64} \
%{!compat-bsd: \
%{!YP,*:%{p|pg:-Y P,/usr/lib/libp/64:/lib/64:/usr/lib/64} \
-diff -dubr gcc-4.4.7/gcc/config/sol2-c.c gcc-4.4.7.illumos/gcc/config/sol2-c.c
---- gcc-4.4.7/gcc/config/sol2-c.c 2007-09-18 02:07:46.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sol2-c.c 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sol2-c.c source/gcc/config/sol2-c.c
+--- orig/gcc/config/sol2-c.c 2007-09-18 02:07:46.000000000 +0400
++++ source/gcc/config/sol2-c.c 2013-01-30 19:23:07.578274737 +0400
@@ -114,8 +114,9 @@
{
tree decl = identifier_global_value (t);
@@ -485,9 +513,9 @@ diff -dubr gcc-4.4.7/gcc/config/sol2-c.c gcc-4.4.7.illumos/gcc/config/sol2-c.c
else
solaris_pending_aligns = tree_cons (t, build_tree_list (NULL, x),
solaris_pending_aligns);
-diff -dubr gcc-4.4.7/gcc/config/sol2.h gcc-4.4.7.illumos/gcc/config/sol2.h
---- gcc-4.4.7/gcc/config/sol2.h 2010-06-02 21:51:29.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sol2.h 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sol2.h source/gcc/config/sol2.h
+--- orig/gcc/config/sol2.h 2010-06-02 21:51:29.000000000 +0400
++++ source/gcc/config/sol2.h 2013-01-30 19:23:07.580536112 +0400
@@ -123,12 +123,12 @@
%{YP,*} \
%{R*} \
@@ -505,9 +533,9 @@ diff -dubr gcc-4.4.7/gcc/config/sol2.h gcc-4.4.7.illumos/gcc/config/sol2.h
#undef LINK_ARCH32_SPEC
#define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE
-diff -dubr gcc-4.4.7/gcc/config/sparc/sol2-bi.h gcc-4.4.7.illumos/gcc/config/sparc/sol2-bi.h
---- gcc-4.4.7/gcc/config/sparc/sol2-bi.h 2007-10-19 08:29:38.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sparc/sol2-bi.h 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sparc/sol2-bi.h source/gcc/config/sparc/sol2-bi.h
+--- orig/gcc/config/sparc/sol2-bi.h 2007-10-19 08:29:38.000000000 +0400
++++ source/gcc/config/sparc/sol2-bi.h 2013-01-30 19:23:07.590292675 +0400
@@ -172,12 +172,12 @@
%{YP,*} \
%{R*} \
@@ -525,9 +553,9 @@ diff -dubr gcc-4.4.7/gcc/config/sparc/sol2-bi.h gcc-4.4.7.illumos/gcc/config/spa
#define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE
-diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.c gcc-4.4.7.illumos/gcc/config/sparc/sparc.c
---- gcc-4.4.7/gcc/config/sparc/sparc.c 2011-06-06 03:20:56.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sparc/sparc.c 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sparc/sparc.c source/gcc/config/sparc/sparc.c
+--- orig/gcc/config/sparc/sparc.c 2011-06-06 03:20:56.000000000 +0400
++++ source/gcc/config/sparc/sparc.c 2013-01-30 19:23:07.603449996 +0400
@@ -2984,6 +2984,9 @@
if (TARGET_ARCH32 && !optimize
&& (mode == DFmode || mode == DImode))
@@ -548,19 +576,18 @@ diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.c gcc-4.4.7.illumos/gcc/config/sparc
&& mem_min_alignment (mem, 8))
return 0;
-Только в gcc-4.4.7.illumos/gcc/config/sparc: sparc.c.orig
-diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.h gcc-4.4.7.illumos/gcc/config/sparc/sparc.h
---- gcc-4.4.7/gcc/config/sparc/sparc.h 2011-05-22 02:05:52.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sparc/sparc.h 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sparc/sparc.h source/gcc/config/sparc/sparc.h
+--- orig/gcc/config/sparc/sparc.h 2011-05-22 02:05:52.000000000 +0400
++++ source/gcc/config/sparc/sparc.h 2013-01-30 19:23:07.608786324 +0400
@@ -2402,3 +2402,5 @@
/* We use gcc _mcount for profiling. */
#define NO_PROFILE_COUNTERS 0
+
+#define ASSUME_32BIT_CALLERS sparc_assume_32bit_callers
-diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.md gcc-4.4.7.illumos/gcc/config/sparc/sparc.md
---- gcc-4.4.7/gcc/config/sparc/sparc.md 2011-06-09 23:51:17.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sparc/sparc.md 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sparc/sparc.md source/gcc/config/sparc/sparc.md
+--- orig/gcc/config/sparc/sparc.md 2011-06-09 23:51:17.000000000 +0400
++++ source/gcc/config/sparc/sparc.md 2013-01-30 19:23:07.620621869 +0400
@@ -1959,7 +1959,7 @@
"=o,T,U,o,r,r,r,?T,?f,?f,?o,?f")
(match_operand:DI 1 "input_operand"
@@ -742,10 +769,9 @@ diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.md gcc-4.4.7.illumos/gcc/config/spar
&& mems_ok_for_ldd_peep (operands[2], operands[0], NULL_RTX)"
[(set (match_dup 2)
(match_dup 3))]
-Только в gcc-4.4.7.illumos/gcc/config/sparc: sparc.md.orig
-diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.opt gcc-4.4.7.illumos/gcc/config/sparc/sparc.opt
---- gcc-4.4.7/gcc/config/sparc/sparc.opt 2007-08-02 14:49:31.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/config/sparc/sparc.opt 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config/sparc/sparc.opt source/gcc/config/sparc/sparc.opt
+--- orig/gcc/config/sparc/sparc.opt 2007-08-02 14:49:31.000000000 +0400
++++ source/gcc/config/sparc/sparc.opt 2013-01-30 19:23:07.629377138 +0400
@@ -38,6 +38,10 @@
Target Report
Pass -assert pure-text to linker
@@ -768,9 +794,9 @@ diff -dubr gcc-4.4.7/gcc/config/sparc/sparc.opt gcc-4.4.7.illumos/gcc/config/spa
Mask(LITTLE_ENDIAN)
;; Generate code for little-endian
-diff -dubr gcc-4.4.7/gcc/config.gcc gcc-4.4.7.illumos/gcc/config.gcc
---- gcc-4.4.7/gcc/config.gcc 2011-02-19 00:39:51.000000000 +0300
-+++ gcc-4.4.7.illumos/gcc/config.gcc 2012-09-27 21:10:47.000000000 +0400
+diff -dubrN orig/gcc/config.gcc source/gcc/config.gcc
+--- orig/gcc/config.gcc 2011-02-19 00:39:51.000000000 +0300
++++ source/gcc/config.gcc 2013-01-30 19:23:07.656053218 +0400
@@ -1237,6 +1237,8 @@
"":*:yes | yes:*:yes )
thread_file=solaris
@@ -780,10 +806,9 @@ diff -dubr gcc-4.4.7/gcc/config.gcc gcc-4.4.7.illumos/gcc/config.gcc
esac
;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
-Только в gcc-4.4.7.illumos/gcc: config.gcc.orig
-diff -dubr gcc-4.4.7/gcc/cp/g++spec.c gcc-4.4.7.illumos/gcc/cp/g++spec.c
---- gcc-4.4.7/gcc/cp/g++spec.c 2009-02-20 18:20:38.000000000 +0300
-+++ gcc-4.4.7.illumos/gcc/cp/g++spec.c 2012-09-27 21:10:52.000000000 +0400
+diff -dubrN orig/gcc/cp/g++spec.c source/gcc/cp/g++spec.c
+--- orig/gcc/cp/g++spec.c 2009-02-20 18:20:38.000000000 +0300
++++ source/gcc/cp/g++spec.c 2013-01-30 19:23:07.669426005 +0400
@@ -260,7 +260,7 @@
#endif
@@ -793,9 +818,9 @@ diff -dubr gcc-4.4.7/gcc/cp/g++spec.c gcc-4.4.7.illumos/gcc/cp/g++spec.c
arglist = XNEWVEC (const char *, num_args);
i = 0;
-diff -dubr gcc-4.4.7/gcc/cp/Make-lang.in gcc-4.4.7.illumos/gcc/cp/Make-lang.in
---- gcc-4.4.7/gcc/cp/Make-lang.in 2009-09-09 12:46:32.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/cp/Make-lang.in 2012-09-27 21:10:52.000000000 +0400
+diff -dubrN orig/gcc/cp/Make-lang.in source/gcc/cp/Make-lang.in
+--- orig/gcc/cp/Make-lang.in 2009-09-09 12:46:32.000000000 +0400
++++ source/gcc/cp/Make-lang.in 2013-01-30 19:23:07.691980362 +0400
@@ -55,7 +55,7 @@
g++spec.o: $(srcdir)/cp/g++spec.c $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H) $(CONFIG_H)
(SHLIB_LINK='$(SHLIB_LINK)'; \
@@ -805,9 +830,9 @@ diff -dubr gcc-4.4.7/gcc/cp/Make-lang.in gcc-4.4.7.illumos/gcc/cp/Make-lang.in
# Create the compiler driver for g++.
GXX_OBJS = $(GCC_OBJS) g++spec.o intl.o prefix.o version.o
-diff -dubr gcc-4.4.7/gcc/doc/cpp.texi gcc-4.4.7.illumos/gcc/doc/cpp.texi
---- gcc-4.4.7/gcc/doc/cpp.texi 2008-08-05 21:24:37.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/doc/cpp.texi 2012-09-27 21:10:52.000000000 +0400
+diff -dubrN orig/gcc/doc/cpp.texi source/gcc/doc/cpp.texi
+--- orig/gcc/doc/cpp.texi 2008-08-05 21:24:37.000000000 +0400
++++ source/gcc/doc/cpp.texi 2013-01-30 19:23:07.742939690 +0400
@@ -3508,8 +3508,6 @@
official GNU extensions either. What historical information we have
been able to find, suggests they originated with System V@.
@@ -817,9 +842,9 @@ diff -dubr gcc-4.4.7/gcc/doc/cpp.texi gcc-4.4.7.illumos/gcc/doc/cpp.texi
@cindex null directive
The @dfn{null directive} consists of a @samp{#} followed by a newline,
with only whitespace (including comments) in between. A null directive
-diff -dubr gcc-4.4.7/gcc/doc/invoke.texi gcc-4.4.7.illumos/gcc/doc/invoke.texi
---- gcc-4.4.7/gcc/doc/invoke.texi 2011-03-24 01:02:12.000000000 +0300
-+++ gcc-4.4.7.illumos/gcc/doc/invoke.texi 2012-09-27 21:10:52.000000000 +0400
+diff -dubrN orig/gcc/doc/invoke.texi source/gcc/doc/invoke.texi
+--- orig/gcc/doc/invoke.texi 2011-03-24 01:02:12.000000000 +0300
++++ source/gcc/doc/invoke.texi 2013-01-30 19:23:38.521595995 +0400
@@ -793,7 +793,8 @@
-mfaster-structs -mno-faster-structs @gol
-mfpu -mno-fpu -mhard-float -msoft-float @gol
@@ -830,7 +855,20 @@ diff -dubr gcc-4.4.7/gcc/doc/invoke.texi gcc-4.4.7.illumos/gcc/doc/invoke.texi
-mstack-bias -mno-stack-bias @gol
-munaligned-doubles -mno-unaligned-doubles @gol
-mv8plus -mno-v8plus -mvis -mno-vis
-@@ -11549,6 +11550,10 @@
+@@ -6586,6 +6587,12 @@
+ The @option{-fstrict-aliasing} option is enabled at levels
+ @option{-O2}, @option{-O3}, @option{-Os}.
+
++@item -fstrict-calling-conventions
++@opindex fstrict-calling-conventions
++Use strict ABI calling conventions even with local functions.
++This disable certain optimizations that may cause GCC to call local
++functions in a manner other than that described by the ABI.
++
+ @item -fstrict-overflow
+ @opindex fstrict-overflow
+ Allow the compiler to assume strict signed overflow rules, depending
+@@ -11549,6 +11556,10 @@
@opindex mcmodel=large
Generate code for the large model: This model makes no assumptions
about addresses and sizes of sections.
@@ -841,7 +879,7 @@ diff -dubr gcc-4.4.7/gcc/doc/invoke.texi gcc-4.4.7.illumos/gcc/doc/invoke.texi
@end table
@node i386 and x86-64 Windows Options
-@@ -15178,6 +15183,23 @@
+@@ -15178,6 +15189,23 @@
@opindex mno-vis
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
Visual Instruction Set extensions. The default is @option{-mno-vis}.
@@ -865,10 +903,9 @@ diff -dubr gcc-4.4.7/gcc/doc/invoke.texi gcc-4.4.7.illumos/gcc/doc/invoke.texi
@end table
These @samp{-m} options are supported in addition to the above
-Только в gcc-4.4.7.illumos/gcc/doc: invoke.texi.orig
-diff -dubr gcc-4.4.7/gcc/dwarf2.h gcc-4.4.7.illumos/gcc/dwarf2.h
---- gcc-4.4.7/gcc/dwarf2.h 2009-04-10 03:23:07.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/dwarf2.h 2012-09-27 21:10:52.000000000 +0400
+diff -dubrN orig/gcc/dwarf2.h source/gcc/dwarf2.h
+--- orig/gcc/dwarf2.h 2009-04-10 03:23:07.000000000 +0400
++++ source/gcc/dwarf2.h 2013-01-30 19:23:07.815089917 +0400
@@ -377,6 +377,8 @@
DW_AT_GNU_vector = 0x2107,
/* VMS extensions. */
@@ -878,9 +915,9 @@ diff -dubr gcc-4.4.7/gcc/dwarf2.h gcc-4.4.7.illumos/gcc/dwarf2.h
/* UPC extension. */
DW_AT_upc_threads_scaled = 0x3210,
/* PGI (STMicroelectronics) extensions. */
-diff -dubr gcc-4.4.7/gcc/dwarf2out.c gcc-4.4.7.illumos/gcc/dwarf2out.c
---- gcc-4.4.7/gcc/dwarf2out.c 2011-04-08 01:27:59.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/dwarf2out.c 2012-09-27 21:10:53.000000000 +0400
+diff -dubrN orig/gcc/dwarf2out.c source/gcc/dwarf2out.c
+--- orig/gcc/dwarf2out.c 2011-04-08 01:27:59.000000000 +0400
++++ source/gcc/dwarf2out.c 2013-01-30 19:23:07.857543794 +0400
@@ -9362,10 +9362,6 @@
base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
@@ -945,9 +982,9 @@ diff -dubr gcc-4.4.7/gcc/dwarf2out.c gcc-4.4.7.illumos/gcc/dwarf2out.c
at_import_die = force_type_die (TREE_TYPE (decl));
/* For namespace N { typedef void T; } using N::T; base_type_die
returns NULL, but DW_TAG_imported_declaration requires
-diff -dubr gcc-4.4.7/gcc/expr.c gcc-4.4.7.illumos/gcc/expr.c
---- gcc-4.4.7/gcc/expr.c 2011-07-21 13:39:16.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/expr.c 2012-09-27 21:10:53.000000000 +0400
+diff -dubrN orig/gcc/expr.c source/gcc/expr.c
+--- orig/gcc/expr.c 2011-07-21 13:39:16.000000000 +0400
++++ source/gcc/expr.c 2013-01-30 19:23:07.940241856 +0400
@@ -79,6 +79,10 @@
#endif
#endif
@@ -969,10 +1006,9 @@ diff -dubr gcc-4.4.7/gcc/expr.c gcc-4.4.7.illumos/gcc/expr.c
gcc_assert (GET_MODE (decl_rtl) == pmode);
temp = gen_lowpart_SUBREG (mode, decl_rtl);
-Только в gcc-4.4.7.illumos/gcc: expr.c.orig
-diff -dubr gcc-4.4.7/gcc/function.c gcc-4.4.7.illumos/gcc/function.c
---- gcc-4.4.7/gcc/function.c 2010-08-17 00:24:54.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/function.c 2012-09-27 21:10:53.000000000 +0400
+diff -dubrN orig/gcc/function.c source/gcc/function.c
+--- orig/gcc/function.c 2010-08-17 00:24:54.000000000 +0400
++++ source/gcc/function.c 2013-01-30 19:23:07.962827566 +0400
@@ -83,6 +83,10 @@
#define NAME__MAIN "__main"
#endif
@@ -994,10 +1030,9 @@ diff -dubr gcc-4.4.7/gcc/function.c gcc-4.4.7.illumos/gcc/function.c
parmreg = gen_reg_rtx (promoted_nominal_mode);
-Только в gcc-4.4.7.illumos/gcc: function.c.orig
-diff -dubr gcc-4.4.7/gcc/Makefile.in gcc-4.4.7.illumos/gcc/Makefile.in
---- gcc-4.4.7/gcc/Makefile.in 2010-09-07 15:07:31.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/Makefile.in 2012-09-27 21:10:53.000000000 +0400
+diff -dubrN orig/gcc/Makefile.in source/gcc/Makefile.in
+--- orig/gcc/Makefile.in 2010-09-07 15:07:31.000000000 +0400
++++ source/gcc/Makefile.in 2013-01-30 19:23:07.990739691 +0400
@@ -4725,7 +4725,7 @@
# script does that.
.po.gmo:
@@ -1007,10 +1042,9 @@ diff -dubr gcc-4.4.7/gcc/Makefile.in gcc-4.4.7.illumos/gcc/Makefile.in
# The new .po has to be gone over by hand, so we deposit it into
# build/po with a different extension.
-Только в gcc-4.4.7.illumos/gcc/testsuite: ChangeLog.orig
-diff -dubr gcc-4.4.7/gcc/testsuite/gcc.dg/pragma-align-2.c gcc-4.4.7.illumos/gcc/testsuite/gcc.dg/pragma-align-2.c
---- gcc-4.4.7/gcc/testsuite/gcc.dg/pragma-align-2.c 2008-09-23 13:42:50.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/testsuite/gcc.dg/pragma-align-2.c 2012-09-27 21:10:53.000000000 +0400
+diff -dubrN orig/gcc/testsuite/gcc.dg/pragma-align-2.c source/gcc/testsuite/gcc.dg/pragma-align-2.c
+--- orig/gcc/testsuite/gcc.dg/pragma-align-2.c 2008-09-23 13:42:50.000000000 +0400
++++ source/gcc/testsuite/gcc.dg/pragma-align-2.c 2013-01-30 19:23:08.036806773 +0400
@@ -25,9 +25,9 @@
#pragma align bad_align /* { dg-warning "malformed" } */
#pragma align 1(bad_align /* { dg-warning "malformed" } */
@@ -1033,9 +1067,46 @@ diff -dubr gcc-4.4.7/gcc/testsuite/gcc.dg/pragma-align-2.c gcc-4.4.7.illumos/gcc
if (__alignof__ (x32) < 32)
abort ();
-diff -dubr gcc-4.4.7/gcc/testsuite/lib/gcc-dg.exp gcc-4.4.7.illumos/gcc/testsuite/lib/gcc-dg.exp
---- gcc-4.4.7/gcc/testsuite/lib/gcc-dg.exp 2009-04-22 15:35:25.000000000 +0400
-+++ gcc-4.4.7.illumos/gcc/testsuite/lib/gcc-dg.exp 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/gcc/testsuite/gcc.target/i386/local.c source/gcc/testsuite/gcc.target/i386/local.c
+--- orig/gcc/testsuite/gcc.target/i386/local.c 2007-08-22 13:59:14.000000000 +0400
++++ source/gcc/testsuite/gcc.target/i386/local.c 2013-01-30 19:23:38.544750245 +0400
+@@ -1,5 +1,6 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -funit-at-a-time" } */
++/* { dg-options "-O2 -funit-at-a-time -fno-strict-calling-conventions" { target ilp32 } } */
++/* { dg-options "-O2 -funit-at-a-time" { target lp64 } } */
+ /* { dg-final { scan-assembler "magic\[^\\n\]*eax" { target ilp32 } } } */
+ /* { dg-final { scan-assembler "magic\[^\\n\]*edi" { target lp64 } } } */
+
+diff -dubrN orig/gcc/testsuite/gcc.target/i386/strict-cc.c source/gcc/testsuite/gcc.target/i386/strict-cc.c
+--- orig/gcc/testsuite/gcc.target/i386/strict-cc.c 1970-01-01 03:00:00.000000000 +0300
++++ source/gcc/testsuite/gcc.target/i386/strict-cc.c 2013-01-30 19:23:38.545793845 +0400
+@@ -0,0 +1,22 @@
++/* { dg-do compile { target { ilp32 } } } */
++/* { dg-options "-O2 -funit-at-a-time -fstrict-calling-conventions" } */
++/* { dg-final { scan-assembler "pushl.*\\\$1" } } */
++/* { dg-final { scan-assembler "pushl.*\\\$2" } } */
++/* { dg-final { scan-assembler "pushl.*\\\$3" } } */
++/* { dg-final { scan-assembler "pushl.*\\\$4" } } */
++/* { dg-final { scan-assembler "pushl.*\\\$5" } } */
++
++#include <stdio.h>
++
++/* Verify that local calling convention is not used if strict conventions. */
++static t(int, int, int, int, int) __attribute__ ((noinline));
++
++m()
++{
++ t(1, 2, 3, 4, 5);
++}
++
++static t(int a, int b, int c, int d, int e)
++{
++ printf("%d\n", a, b, c, d, e);
++}
+diff -dubrN orig/gcc/testsuite/lib/gcc-dg.exp source/gcc/testsuite/lib/gcc-dg.exp
+--- orig/gcc/testsuite/lib/gcc-dg.exp 2009-04-22 15:35:25.000000000 +0400
++++ source/gcc/testsuite/lib/gcc-dg.exp 2013-01-30 19:23:08.040791419 +0400
@@ -343,6 +343,37 @@
}
}
@@ -1074,9 +1145,9 @@ diff -dubr gcc-4.4.7/gcc/testsuite/lib/gcc-dg.exp gcc-4.4.7.illumos/gcc/testsuit
# Prune any messages matching ARGS[1] (a regexp) from test output.
proc dg-prune-output { args } {
global additional_prunes
-diff -dubr gcc-4.4.7/gcc/varasm.c gcc-4.4.7.illumos/gcc/varasm.c
---- gcc-4.4.7/gcc/varasm.c 2010-01-20 14:27:49.000000000 +0300
-+++ gcc-4.4.7.illumos/gcc/varasm.c 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/gcc/varasm.c source/gcc/varasm.c
+--- orig/gcc/varasm.c 2010-01-20 14:27:49.000000000 +0300
++++ source/gcc/varasm.c 2013-01-30 19:23:08.073738212 +0400
@@ -5484,6 +5484,9 @@
#endif
}
@@ -1087,9 +1158,9 @@ diff -dubr gcc-4.4.7/gcc/varasm.c gcc-4.4.7.illumos/gcc/varasm.c
/* We must force creation of DECL_RTL for debug info generation, even though
we don't use it here. */
make_decl_rtl (decl);
-diff -dubr gcc-4.4.7/intl/configure gcc-4.4.7.illumos/intl/configure
---- gcc-4.4.7/intl/configure 2010-10-02 15:40:32.000000000 +0400
-+++ gcc-4.4.7.illumos/intl/configure 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/intl/configure source/intl/configure
+--- orig/intl/configure 2010-10-02 15:40:32.000000000 +0400
++++ source/intl/configure 2013-01-30 19:23:08.149881834 +0400
@@ -1557,8 +1557,8 @@
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
@@ -1112,10 +1183,9 @@ diff -dubr gcc-4.4.7/intl/configure gcc-4.4.7.illumos/intl/configure
: ;
else
GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
-Только в gcc-4.4.7.illumos/libcpp: ChangeLog.orig
-diff -dubr gcc-4.4.7/libcpp/directives.c gcc-4.4.7.illumos/libcpp/directives.c
---- gcc-4.4.7/libcpp/directives.c 2011-01-05 02:18:52.000000000 +0300
-+++ gcc-4.4.7.illumos/libcpp/directives.c 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/libcpp/directives.c source/libcpp/directives.c
+--- orig/libcpp/directives.c 2011-01-05 02:18:52.000000000 +0300
++++ source/libcpp/directives.c 2013-01-30 19:23:08.173281020 +0400
@@ -152,11 +152,11 @@
D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
@@ -1130,9 +1200,9 @@ diff -dubr gcc-4.4.7/libcpp/directives.c gcc-4.4.7.illumos/libcpp/directives.c
/* #sccs is synonymous with #ident. */
#define do_sccs do_ident
-diff -dubr gcc-4.4.7/libstdc++-v3/acinclude.m4 gcc-4.4.7.illumos/libstdc++-v3/acinclude.m4
---- gcc-4.4.7/libstdc++-v3/acinclude.m4 2009-05-06 13:00:57.000000000 +0400
-+++ gcc-4.4.7.illumos/libstdc++-v3/acinclude.m4 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/libstdc++-v3/acinclude.m4 source/libstdc++-v3/acinclude.m4
+--- orig/libstdc++-v3/acinclude.m4 2009-05-06 13:00:57.000000000 +0400
++++ source/libstdc++-v3/acinclude.m4 2013-01-30 19:23:08.179516295 +0400
@@ -2444,7 +2444,11 @@
old_CXXFLAGS="$CXXFLAGS"
@@ -1146,9 +1216,9 @@ diff -dubr gcc-4.4.7/libstdc++-v3/acinclude.m4 gcc-4.4.7.illumos/libstdc++-v3/ac
# Fake what AC_TRY_COMPILE does, without linking as this is
# unnecessary for a builtins test.
-diff -dubr gcc-4.4.7/libstdc++-v3/configure gcc-4.4.7.illumos/libstdc++-v3/configure
---- gcc-4.4.7/libstdc++-v3/configure 2009-08-26 23:04:11.000000000 +0400
-+++ gcc-4.4.7.illumos/libstdc++-v3/configure 2012-09-27 21:11:00.000000000 +0400
+diff -dubrN orig/libstdc++-v3/configure source/libstdc++-v3/configure
+--- orig/libstdc++-v3/configure 2009-08-26 23:04:11.000000000 +0400
++++ source/libstdc++-v3/configure 2013-01-30 19:23:08.256349286 +0400
@@ -14758,7 +14758,11 @@
old_CXXFLAGS="$CXXFLAGS"
@@ -1162,4 +1232,3 @@ diff -dubr gcc-4.4.7/libstdc++-v3/configure gcc-4.4.7.illumos/libstdc++-v3/confi
# Fake what AC_TRY_COMPILE does, without linking as this is
# unnecessary for a builtins test.
-Только в gcc-4.4.7.illumos/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char: 12.cc.orig