aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3')
-rw-r--r--gcc-4.4.3/README.google62
-rwxr-xr-xgcc-4.4.3/configure5
-rw-r--r--gcc-4.4.3/configure.ac2
-rw-r--r--gcc-4.4.3/gcc/config/arm/thumb2.md10
-rw-r--r--gcc-4.4.3/gcc/config/i386/i386.c137
-rw-r--r--gcc-4.4.3/gcc/config/i386/i386.h3
-rw-r--r--gcc-4.4.3/gcc/config/i386/i386.md34
-rw-r--r--gcc-4.4.3/gcc/esp.h16
-rw-r--r--gcc-4.4.3/gcc/gcc.c7
-rw-r--r--gcc-4.4.3/gcc/ipa-inline.c3
-rw-r--r--gcc-4.4.3/gcc/libgcov.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-1.c9
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-10.c18
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-2.c9
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-3.c15
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-4.c13
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5a.c12
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5b.c12
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6a.c12
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6b.c12
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-7.c11
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-8.c11
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-9.c15
-rw-r--r--gcc-4.4.3/libstdc++-v3/include/Makefile.am1
-rw-r--r--gcc-4.4.3/libstdc++-v3/include/Makefile.in1
25 files changed, 415 insertions, 17 deletions
diff --git a/gcc-4.4.3/README.google b/gcc-4.4.3/README.google
index f36db91dd..f626550e6 100644
--- a/gcc-4.4.3/README.google
+++ b/gcc-4.4.3/README.google
@@ -3386,3 +3386,65 @@ libstdc++/include/Makefile.in
Installed cpu_defines.h in freestanding standing mode (libstdc++/48123)
Owner: dougkwan
Status: In gcc trunk rev 171019
+
+gcc/gcc.c
+gcc/esp.h
+ Added the ability to have the driver always pass in -D_FORTIFY_SOURCE=2
+ when doing compiles.
+ Also guarded -z,now and -z,relro with other defines.
+ Owner: asharif
+ Status: local, derived from Gentoo patchset:
+ http://distfiles.gentoo.org/distfiles/gcc-4.4.3-patches-1.4.tar.bz2
+
+gcc/ipa-inline.c
+ Fix updating of inlining priority for corner-case in which callsites of
+ always_inline functions are promoted from indirect calls during inlining.
+ Owner: meheff
+ Status: local
+
+libstdc++-v3/include/Makefile.am
+libstdc++-v3/include/Makefile.in
+ Backport r173220 from trunk to fix freestanding C++ library.
+ http://gcc.gnu.org/viewcvs?view=revision&revision=173220
+ Owner: dougkwan
+ Status: upstream
+
+gcc/config/arm/thumb2.md
+ Fix out-of-range branches in Thumb-2 mode. b/2961998
+ Owner: dougkwan
+ Status: In upstream r149501.
+
+gcc/libgcov.c
+ Fix gcda corruption problem in b/4462929 reported by an external user.
+ Fix contributed by <nkondrashov@nvidia.com>
+ Owner: dougkwan
+ Status: local
+
+Makefile.in
+Makefile.tpl
+configure
+configure.ac
+ Propagate LDFLAGS_FOR_TARGETS in top level configure.
+ This is required to build x86 Android toolchain properly.
+ Owner: dougkwan
+ Status: backport of upstream r173558
+
+gcc/config/i386/i386.c
+gcc/config/i386/i386.h
+gcc/config/i386/i386.md
+gcc/testsuite/gcc.target/i386/pad-1.c
+gcc/testsuite/gcc.target/i386/pad-10.c
+gcc/testsuite/gcc.target/i386/pad-2.c
+gcc/testsuite/gcc.target/i386/pad-3.c
+gcc/testsuite/gcc.target/i386/pad-4.c
+gcc/testsuite/gcc.target/i386/pad-5a.c
+gcc/testsuite/gcc.target/i386/pad-5b.c
+gcc/testsuite/gcc.target/i386/pad-6a.c
+gcc/testsuite/gcc.target/i386/pad-6b.c
+gcc/testsuite/gcc.target/i386/pad-7.c
+gcc/testsuite/gcc.target/i386/pad-8.c
+gcc/testsuite/gcc.target/i386/pad-9.c
+ Backport r164379 from trunk to help Atom performance on small functions.
+ http://gcc.gnu.org/viewcvs?view=revision&revision=164379
+ Owner: asharif
+ Status: upstream in r164379
diff --git a/gcc-4.4.3/configure b/gcc-4.4.3/configure
index 280492393..e713c324c 100755
--- a/gcc-4.4.3/configure
+++ b/gcc-4.4.3/configure
@@ -272,7 +272,7 @@ PACKAGE_STRING=
PACKAGE_BUGREPORT=
ac_unique_file="move-if-change"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TOPLEVEL_CONFIGURE_ARGUMENTS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S build_libsubdir build_subdir host_subdir target_subdir enable_esp CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc extra_mpfr_configure_flags ppllibs pplinc clooglibs clooginc stage1_languages DEBUG_PREFIX_CFLAGS_FOR_TARGET CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET RPATH_ENVVAR GCC_SHLIB_SUBDIR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs AR_FOR_BUILD AS_FOR_BUILD CC_FOR_BUILD CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CXX_FOR_BUILD DLLTOOL_FOR_BUILD GCJ_FOR_BUILD GFORTRAN_FOR_BUILD LDFLAGS_FOR_BUILD LD_FOR_BUILD NM_FOR_BUILD RANLIB_FOR_BUILD WINDMC_FOR_BUILD WINDRES_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES WINDMC OBJCOPY OBJDUMP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET WINDMC_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TOPLEVEL_CONFIGURE_ARGUMENTS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S build_libsubdir build_subdir host_subdir target_subdir enable_esp CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc extra_mpfr_configure_flags ppllibs pplinc clooglibs clooginc stage1_languages DEBUG_PREFIX_CFLAGS_FOR_TARGET CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET RPATH_ENVVAR GCC_SHLIB_SUBDIR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs AR_FOR_BUILD AS_FOR_BUILD CC_FOR_BUILD CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CXX_FOR_BUILD DLLTOOL_FOR_BUILD GCJ_FOR_BUILD GFORTRAN_FOR_BUILD LDFLAGS_FOR_BUILD LD_FOR_BUILD NM_FOR_BUILD RANLIB_FOR_BUILD WINDMC_FOR_BUILD WINDRES_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES WINDMC OBJCOPY OBJDUMP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET WINDMC_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
ac_subst_files='serialization_dependencies host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag'
ac_pwd=`pwd`
@@ -5586,6 +5586,8 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; then
fi
+
+
# Handle --with-headers=XXX. If the value is not "yes", the contents of
# the named directory are copied to $(tooldir)/sys-include.
if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
@@ -13289,6 +13291,7 @@ s,@stage1_languages@,$stage1_languages,;t t
s,@DEBUG_PREFIX_CFLAGS_FOR_TARGET@,$DEBUG_PREFIX_CFLAGS_FOR_TARGET,;t t
s,@CFLAGS_FOR_TARGET@,$CFLAGS_FOR_TARGET,;t t
s,@CXXFLAGS_FOR_TARGET@,$CXXFLAGS_FOR_TARGET,;t t
+s,@LDFLAGS_FOR_TARGET@,$LDFLAGS_FOR_TARGET,;t t
s,@RPATH_ENVVAR@,$RPATH_ENVVAR,;t t
s,@GCC_SHLIB_SUBDIR@,$GCC_SHLIB_SUBDIR,;t t
s,@tooldir@,$tooldir,;t t
diff --git a/gcc-4.4.3/configure.ac b/gcc-4.4.3/configure.ac
index 40aea377e..5ae58cc5f 100644
--- a/gcc-4.4.3/configure.ac
+++ b/gcc-4.4.3/configure.ac
@@ -1891,6 +1891,8 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; then
fi
AC_SUBST(CXXFLAGS_FOR_TARGET)
+AC_SUBST(LDFLAGS_FOR_TARGET)
+
# Handle --with-headers=XXX. If the value is not "yes", the contents of
# the named directory are copied to $(tooldir)/sys-include.
if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
diff --git a/gcc-4.4.3/gcc/config/arm/thumb2.md b/gcc-4.4.3/gcc/config/arm/thumb2.md
index 6e03e8b21..c982ea7cd 100644
--- a/gcc-4.4.3/gcc/config/arm/thumb2.md
+++ b/gcc-4.4.3/gcc/config/arm/thumb2.md
@@ -1190,7 +1190,7 @@
(clobber (reg:CC CC_REGNUM))]
"TARGET_THUMB2"
"*
- if (get_attr_length (insn) == 2 && which_alternative == 0)
+ if (get_attr_length (insn) == 2)
return \"cbz\\t%0, %l1\";
else
return \"cmp\\t%0, #0\;beq\\t%l1\";
@@ -1198,7 +1198,8 @@
[(set (attr "length")
(if_then_else
(and (ge (minus (match_dup 1) (pc)) (const_int 2))
- (le (minus (match_dup 1) (pc)) (const_int 128)))
+ (le (minus (match_dup 1) (pc)) (const_int 128))
+ (eq (symbol_ref ("which_alternative")) (const_int 0)))
(const_int 2)
(const_int 8)))]
)
@@ -1212,7 +1213,7 @@
(clobber (reg:CC CC_REGNUM))]
"TARGET_THUMB2"
"*
- if (get_attr_length (insn) == 2 && which_alternative == 0)
+ if (get_attr_length (insn) == 2)
return \"cbnz\\t%0, %l1\";
else
return \"cmp\\t%0, #0\;bne\\t%l1\";
@@ -1220,7 +1221,8 @@
[(set (attr "length")
(if_then_else
(and (ge (minus (match_dup 1) (pc)) (const_int 2))
- (le (minus (match_dup 1) (pc)) (const_int 128)))
+ (le (minus (match_dup 1) (pc)) (const_int 128))
+ (eq (symbol_ref ("which_alternative")) (const_int 0)))
(const_int 2)
(const_int 8)))]
)
diff --git a/gcc-4.4.3/gcc/config/i386/i386.c b/gcc-4.4.3/gcc/config/i386/i386.c
index fa148be65..b237ed869 100644
--- a/gcc-4.4.3/gcc/config/i386/i386.c
+++ b/gcc-4.4.3/gcc/config/i386/i386.c
@@ -1481,6 +1481,9 @@ static unsigned int initial_ix86_tune_features[X86_TUNE_LAST] = {
/* X86_TUNE_PAD_RETURNS */
m_AMD_MULTIPLE | m_CORE2 | m_GENERIC,
+ /* X86_TUNE_PAD_SHORT_FUNCTION: Pad short funtion. */
+ m_ATOM,
+
/* X86_TUNE_EXT_80387_CONSTANTS */
m_K6_GEODE | m_ATHLON_K8 | m_ATOM | m_PENT4 | m_NOCONA | m_PPRO
| m_CORE2 | m_GENERIC,
@@ -7640,6 +7643,11 @@ ix86_file_end (void)
xops[0] = gen_rtx_REG (Pmode, regno);
xops[1] = gen_rtx_MEM (Pmode, stack_pointer_rtx);
+ /* Pad stack IP move with 4 instructions. 2 NOPs count as 1
+ instruction. */
+ if (TARGET_PAD_SHORT_FUNCTION)
+ output_asm_insn ("nop; nop; nop; nop; nop; nop; nop; nop",
+ xops);
output_asm_insn ("mov%z0\t{%1, %0|%0, %1}", xops);
output_asm_insn ("ret", xops);
}
@@ -27911,17 +27919,134 @@ ix86_pad_returns (void)
}
}
+/* Count the minimum number of instructions in BB. Return 4 if the
+ number of instructions >= 4. */
+
+static int
+ix86_count_insn_bb (basic_block bb)
+{
+ rtx insn;
+ int insn_count = 0;
+
+ /* Count number of instructions in this block. Return 4 if the number
+ of instructions >= 4. */
+ FOR_BB_INSNS (bb, insn)
+ {
+ /* Only happen in exit blocks. */
+ if (JUMP_P (insn)
+ && GET_CODE (PATTERN (insn)) == RETURN)
+ break;
+
+ if (NONDEBUG_INSN_P (insn)
+ && GET_CODE (PATTERN (insn)) != USE
+ && GET_CODE (PATTERN (insn)) != CLOBBER)
+ {
+ insn_count++;
+ if (insn_count >= 4)
+ return insn_count;
+ }
+ }
+
+ return insn_count;
+}
+
+
+/* Count the minimum number of instructions in code path in BB.
+ Return 4 if the number of instructions >= 4. */
+
+static int
+ix86_count_insn (basic_block bb)
+{
+ edge e;
+ edge_iterator ei;
+ int min_prev_count;
+
+ /* Only bother counting instructions along paths with no
+ more than 2 basic blocks between entry and exit. Given
+ that BB has an edge to exit, determine if a predecessor
+ of BB has an edge from entry. If so, compute the number
+ of instructions in the predecessor block. If there
+ happen to be multiple such blocks, compute the minimum. */
+ min_prev_count = 4;
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ {
+ edge prev_e;
+ edge_iterator prev_ei;
+
+ if (e->src == ENTRY_BLOCK_PTR)
+ {
+ min_prev_count = 0;
+ break;
+ }
+ FOR_EACH_EDGE (prev_e, prev_ei, e->src->preds)
+ {
+ if (prev_e->src == ENTRY_BLOCK_PTR)
+ {
+ int count = ix86_count_insn_bb (e->src);
+ if (count < min_prev_count)
+ min_prev_count = count;
+ break;
+ }
+ }
+ }
+
+ if (min_prev_count < 4)
+ min_prev_count += ix86_count_insn_bb (bb);
+
+ return min_prev_count;
+}
+
+/* Pad short funtion to 4 instructions. */
+
+static void
+ix86_pad_short_function (void)
+{
+ edge e;
+ edge_iterator ei;
+
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
+ {
+ rtx ret = BB_END (e->src);
+ if (JUMP_P (ret) && GET_CODE (PATTERN (ret)) == RETURN)
+ {
+ int insn_count = ix86_count_insn (e->src);
+
+ /* Pad short function. */
+ if (insn_count < 4)
+ {
+ rtx insn = ret;
+
+ /* Find epilogue. */
+ while (insn
+ && (!NOTE_P (insn)
+ || NOTE_KIND (insn) != NOTE_INSN_EPILOGUE_BEG))
+ insn = PREV_INSN (insn);
+
+ if (!insn)
+ insn = ret;
+
+ /* Two NOPs are counted as one instruction. */
+ insn_count = 2 * (4 - insn_count);
+ emit_insn_before (gen_nops (GEN_INT (insn_count)), insn);
+ }
+ }
+ }
+}
+
/* Implement machine specific optimizations. We implement padding of returns
for K8 CPUs and pass to avoid 4 jumps in the single 16 byte window. */
static void
ix86_reorg (void)
{
- if (TARGET_PAD_RETURNS && optimize
- && optimize_function_for_speed_p (cfun))
- ix86_pad_returns ();
- if (TARGET_FOUR_JUMP_LIMIT && optimize
- && optimize_function_for_speed_p (cfun))
- ix86_avoid_jump_misspredicts ();
+ if (optimize && optimize_function_for_speed_p (cfun))
+ {
+ if (TARGET_PAD_SHORT_FUNCTION)
+ ix86_pad_short_function ();
+ else if (TARGET_PAD_RETURNS)
+ ix86_pad_returns ();
+ if (TARGET_FOUR_JUMP_LIMIT)
+ ix86_avoid_jump_misspredicts ();
+ }
}
/* Return nonzero when QImode register that must be represented via REX prefix
diff --git a/gcc-4.4.3/gcc/config/i386/i386.h b/gcc-4.4.3/gcc/config/i386/i386.h
index e9014b79a..d7cb8ac3c 100644
--- a/gcc-4.4.3/gcc/config/i386/i386.h
+++ b/gcc-4.4.3/gcc/config/i386/i386.h
@@ -291,6 +291,7 @@ enum ix86_tune_indices {
X86_TUNE_USE_BT,
X86_TUNE_USE_INCDEC,
X86_TUNE_PAD_RETURNS,
+ X86_TUNE_PAD_SHORT_FUNCTION,
X86_TUNE_EXT_80387_CONSTANTS,
X86_TUNE_SHORTEN_X87_SSE,
X86_TUNE_AVOID_VECTOR_DECODE,
@@ -372,6 +373,8 @@ extern unsigned char ix86_tune_features[X86_TUNE_LAST];
#define TARGET_USE_BT ix86_tune_features[X86_TUNE_USE_BT]
#define TARGET_USE_INCDEC ix86_tune_features[X86_TUNE_USE_INCDEC]
#define TARGET_PAD_RETURNS ix86_tune_features[X86_TUNE_PAD_RETURNS]
+#define TARGET_PAD_SHORT_FUNCTION \
+ ix86_tune_features[X86_TUNE_PAD_SHORT_FUNCTION]
#define TARGET_EXT_80387_CONSTANTS \
ix86_tune_features[X86_TUNE_EXT_80387_CONSTANTS]
#define TARGET_SHORTEN_X87_SSE ix86_tune_features[X86_TUNE_SHORTEN_X87_SSE]
diff --git a/gcc-4.4.3/gcc/config/i386/i386.md b/gcc-4.4.3/gcc/config/i386/i386.md
index bbe915112..7989c31db 100644
--- a/gcc-4.4.3/gcc/config/i386/i386.md
+++ b/gcc-4.4.3/gcc/config/i386/i386.md
@@ -77,6 +77,7 @@
(UNSPEC_TLSDESC 23)
; Other random patterns
+ (UNSPEC_NOPS 29)
(UNSPEC_SCAS 30)
(UNSPEC_FNSTSW 31)
(UNSPEC_SAHF 32)
@@ -15323,6 +15324,39 @@
(set_attr "length_immediate" "0")
(set_attr "modrm" "0")])
+;; Generate nops. Operand 0 is the number of nops, up to 8.
+(define_insn "nops"
+ [(unspec [(match_operand 0 "const_int_operand" "")]
+ UNSPEC_NOPS)]
+ "reload_completed"
+{
+ switch (INTVAL (operands[0]))
+ {
+ case 1:
+ return "nop";
+ case 2:
+ return "nop; nop";
+ case 3:
+ return "nop; nop; nop";
+ case 4:
+ return "nop; nop; nop; nop";
+ case 5:
+ return "nop; nop; nop; nop; nop";
+ case 6:
+ return "nop; nop; nop; nop; nop; nop";
+ case 7:
+ return "nop; nop; nop; nop; nop; nop; nop";
+ case 8:
+ return "nop; nop; nop; nop; nop; nop; nop; nop";
+ default:
+ gcc_unreachable ();
+ break;
+ }
+}
+ [(set (attr "length") (symbol_ref "INTVAL (operands[0])"))
+ (set_attr "length_immediate" "0")
+ (set_attr "modrm" "0")])
+
;; Align to 16-byte boundary, max skip in op0. Used to avoid
;; branch prediction penalty for the third jump in a 16-byte
;; block on K8.
diff --git a/gcc-4.4.3/gcc/esp.h b/gcc-4.4.3/gcc/esp.h
index db2135b72..cbcf9d1f9 100644
--- a/gcc-4.4.3/gcc/esp.h
+++ b/gcc-4.4.3/gcc/esp.h
@@ -34,8 +34,19 @@
/* ESP_LINK_SPEC is added to LINK_PIE_SPEC if esp is enable
-z now will be added if we don't have -vanilla spec. We do a -pie incompatible check
Don't remove the specs in the end */
- #define ESP_LINK_SPEC "%(esp_link_now) %(esp_link_pie_check) "
- #define ESP_LINK_NOW_SPEC "%{!nonow:-z now}"
+ #define ESP_LINK_SPEC "%(esp_link_now) %(esp_link_pie_check) %(esp_link_relro)"
+
+ #if defined EFAULT_BIND_NOW
+ #define ESP_LINK_NOW_SPEC "%{!nonow:-z now}"
+ #else
+ #define ESP_LINK_NOW_SPEC ""
+ #endif
+
+ #if defined EFAULT_RELRO
+ #define ESP_LINK_RELRO_SPEC "%{!norelro:-z relro}"
+ #else
+ #define ESP_LINK_RELRO_SPEC ""
+ #endif
/* We use ESP_COMMAND_OPTIONS_SPEC to add pie command-line options. */
#define ESP_COMMAND_OPTIONS_SPEC "%{!D__KERNEL__:%{!nopie:%(esp_options_pie) %(esp_link_pie)}}"
@@ -120,6 +131,7 @@
{ "esp_cc1_strict_overflow", ESP_CC1_STRICT_OVERFLOW_SPEC }, \
{ "esp_link", ESP_LINK_SPEC }, \
{ "esp_link_now", ESP_LINK_NOW_SPEC }, \
+ { "esp_link_relro", ESP_LINK_RELRO_SPEC }, \
{ "esp_link_pie", ESP_LINK_PIE_SPEC }, \
{ "esp_link_pie_check", ESP_LINK_PIE_CHECK_SPEC }, \
{ "esp_command_options", ESP_COMMAND_OPTIONS_SPEC }, \
diff --git a/gcc-4.4.3/gcc/gcc.c b/gcc-4.4.3/gcc/gcc.c
index 3ce244cdf..afa6a014b 100644
--- a/gcc-4.4.3/gcc/gcc.c
+++ b/gcc-4.4.3/gcc/gcc.c
@@ -829,8 +829,11 @@ static const char *cpp_unique_options =
%{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD}\
%{H} %C %{D*&U*&A*} %{i*} %Z %i\
%{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
- %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}\
- %{E|M|MM:%W{o*}}";
+ %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h}"
+#ifdef EFAULT_FORTIFY_SOURCE
+" %{!D_FORTIFY_SOURCE:%{!D_FORTIFY_SOURCE=*:%{!U_FORTIFY_SOURCE:-D_FORTIFY_SOURCE=2}}}"
+#endif
+" %{E|M|MM:%W{o*}}";
/* This contains cpp options which are common with cc1_options and are passed
only when preprocessing only to avoid duplication. We pass the cc1 spec
diff --git a/gcc-4.4.3/gcc/ipa-inline.c b/gcc-4.4.3/gcc/ipa-inline.c
index 48754d467..e2745dd8c 100644
--- a/gcc-4.4.3/gcc/ipa-inline.c
+++ b/gcc-4.4.3/gcc/ipa-inline.c
@@ -1495,8 +1495,7 @@ update_caller_keys (fibheap_t heap, struct cgraph_node *node,
struct cgraph_edge *edge;
const char *failed_reason;
- if (!node->local.inlinable || node->local.disregard_inline_limits
- || node->global.inlined_to)
+ if (!node->local.inlinable || node->global.inlined_to)
return;
if (bitmap_bit_p (updated_nodes, node->uid))
return;
diff --git a/gcc-4.4.3/gcc/libgcov.c b/gcc-4.4.3/gcc/libgcov.c
index 9b1c7bb3e..a39cee7d5 100644
--- a/gcc-4.4.3/gcc/libgcov.c
+++ b/gcc-4.4.3/gcc/libgcov.c
@@ -802,6 +802,8 @@ gcov_merge_gcda_file (struct gcov_info *info,
int error = 0;
gcov_unsigned_t tag, length;
+ eof_pos = 0;
+
tag = gcov_read_unsigned ();
if (tag)
{
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-1.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-1.c
new file mode 100644
index 000000000..87a9d6c81
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fomit-frame-pointer -mtune=generic -S" } */
+/* { dg-final { scan-assembler "rep" } } */
+/* { dg-final { scan-assembler-not "nop" } } */
+
+void
+foo ()
+{
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-10.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-10.c
new file mode 100644
index 000000000..6ba3b7874
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-10.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-not "nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+extern void bar ();
+
+int
+foo2 (int z, int x)
+{
+ if (x == 1)
+ {
+ bar ();
+ return z;
+ }
+ else
+ return x + z;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-2.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-2.c
new file mode 100644
index 000000000..964547cc9
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+void
+foo ()
+{
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-3.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-3.c
new file mode 100644
index 000000000..52442b40f
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-3.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-not "nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int s[8] = {1, 2, 3, 4, 5, 6, 7, 8};
+int d[8] = {11, 22, 33, 44, 55, 66, 77, 88};
+
+void
+foo ()
+{
+ int i;
+ for (i = 0; i < 8; i++)
+ d[i] = s[i] + 0x1000;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-4.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-4.c
new file mode 100644
index 000000000..a7033fae3
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-4.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S -fPIC" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+extern int bar;
+
+int
+foo ()
+{
+ return bar;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5a.c
new file mode 100644
index 000000000..9d0aa2a80
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5a.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y, int z)
+{
+ return x + y + z;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5b.c
new file mode 100644
index 000000000..2e1cf129d
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-5b.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y, int z)
+{
+ return x + y + z;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6a.c
new file mode 100644
index 000000000..e865967a7
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6a.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y)
+{
+ return x + y;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6b.c
new file mode 100644
index 000000000..41aeaee7c
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-6b.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y)
+{
+ return x + y;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-7.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-7.c
new file mode 100644
index 000000000..7a7493d05
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-7.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-not "nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y, int z)
+{
+ return x + y + z + y;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-8.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-8.c
new file mode 100644
index 000000000..873a0a4fa
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-8.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+int
+foo (int x, int y)
+{
+ return y;
+}
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-9.c b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-9.c
new file mode 100644
index 000000000..3d68805d1
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/i386/pad-9.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -fomit-frame-pointer -march=atom -S" } */
+/* { dg-final { scan-assembler-times "nop; nop; nop; nop" 1 } } */
+/* { dg-final { scan-assembler-not "nop; nop; nop; nop; nop" } } */
+/* { dg-final { scan-assembler-not "rep" } } */
+
+extern void bar (void);
+
+void
+foo (int x)
+{
+ if (x)
+ bar ();
+}
diff --git a/gcc-4.4.3/libstdc++-v3/include/Makefile.am b/gcc-4.4.3/libstdc++-v3/include/Makefile.am
index 162983aea..977955081 100644
--- a/gcc-4.4.3/libstdc++-v3/include/Makefile.am
+++ b/gcc-4.4.3/libstdc++-v3/include/Makefile.am
@@ -1137,6 +1137,7 @@ install-freestanding-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
$(mkinstalldirs) $(DESTDIR)${host_installdir}
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
+ ${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
${glibcxx_srcdir}/$(CPU_DEFINES_SRCDIR)/cpu_defines.h; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${std_builddir}
diff --git a/gcc-4.4.3/libstdc++-v3/include/Makefile.in b/gcc-4.4.3/libstdc++-v3/include/Makefile.in
index c4614f490..a790676c8 100644
--- a/gcc-4.4.3/libstdc++-v3/include/Makefile.in
+++ b/gcc-4.4.3/libstdc++-v3/include/Makefile.in
@@ -1538,6 +1538,7 @@ install-freestanding-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}
$(mkinstalldirs) $(DESTDIR)${host_installdir}
for file in ${host_srcdir}/os_defines.h ${host_builddir}/c++config.h \
+ ${glibcxx_srcdir}/$(ABI_TWEAKS_SRCDIR)/cxxabi_tweaks.h \
${glibcxx_srcdir}/$(CPU_DEFINES_SRCDIR)/cpu_defines.h; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${std_builddir}