diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-csl-arm')
19 files changed, 55 insertions, 446 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/15342.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/15342.patch deleted file mode 100644 index d0f3e72d47..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/15342.patch +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | --- gcc/gcc/regrename.c~ 2004-01-14 17:55:20.000000000 +0000 | ||
2 | +++ gcc/gcc/regrename.c 2005-02-28 07:24:25.893015200 +0000 | ||
3 | @@ -671,7 +671,8 @@ | ||
4 | |||
5 | case SET: | ||
6 | scan_rtx (insn, &SET_SRC (x), class, action, OP_IN, 0); | ||
7 | - scan_rtx (insn, &SET_DEST (x), class, action, OP_OUT, 0); | ||
8 | + scan_rtx (insn, &SET_DEST (x), class, action, | ||
9 | + GET_CODE (PATTERN (insn)) == COND_EXEC ? OP_INOUT : OP_OUT, 0); | ||
10 | return; | ||
11 | |||
12 | case STRICT_LOW_PART: | ||
13 | @@ -696,7 +697,8 @@ | ||
14 | abort (); | ||
15 | |||
16 | case CLOBBER: | ||
17 | - scan_rtx (insn, &SET_DEST (x), class, action, OP_OUT, 1); | ||
18 | + scan_rtx (insn, &SET_DEST (x), class, action, | ||
19 | + GET_CODE (PATTERN (insn)) == COND_EXEC ? OP_INOUT : OP_OUT, 0); | ||
20 | return; | ||
21 | |||
22 | case EXPR_LIST: | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/arm-nolibfloat.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/arm-nolibfloat.patch index c4897c0330..57d4a00774 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/arm-nolibfloat.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/arm-nolibfloat.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Pending | ||
1 | # Dimitry Andric <dimitry@andric.com>, 2004-05-01 | 2 | # Dimitry Andric <dimitry@andric.com>, 2004-05-01 |
2 | # | 3 | # |
3 | # * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed | 4 | # * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/arm-softfloat.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/arm-softfloat.patch index 5e1edd9208..9a0a691760 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/arm-softfloat.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/arm-softfloat.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Pending | ||
1 | Index: gcc-4.0.2/gcc/config/arm/t-linux | 2 | Index: gcc-4.0.2/gcc/config/arm/t-linux |
2 | =================================================================== | 3 | =================================================================== |
3 | --- gcc-4.0.2.orig/gcc/config/arm/t-linux 2004-05-15 12:41:35.000000000 +0000 | 4 | --- gcc-4.0.2.orig/gcc/config/arm/t-linux 2004-05-15 12:41:35.000000000 +0000 |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/cache-amnesia.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/cache-amnesia.patch deleted file mode 100644 index ef7cd111c5..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/cache-amnesia.patch +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | diff --git a/gcc/configure b/gcc/configure | ||
2 | index 44620ab..6e1830c 100755 | ||
3 | --- a/gcc/configure | ||
4 | +++ b/gcc/configure | ||
5 | @@ -12272,7 +12272,7 @@ else | ||
6 | esac | ||
7 | saved_CFLAGS="${CFLAGS}" | ||
8 | CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \ | ||
9 | - ${realsrcdir}/configure \ | ||
10 | + CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \ | ||
11 | --enable-languages=${enable_languages-all} \ | ||
12 | --target=$target_alias --host=$build_alias --build=$build_alias | ||
13 | CFLAGS="${saved_CFLAGS}" | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/fortran-static-linking.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/fortran-static-linking.patch deleted file mode 100644 index 3dd6321dc3..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/fortran-static-linking.patch +++ /dev/null | |||
@@ -1,48 +0,0 @@ | |||
1 | f951 (fortran) links to MPFR and GMP of our staging area but when executing | ||
2 | the command the libs can not be found. Use rpath like all the other apps in | ||
3 | our staging bin/ directory. | ||
4 | |||
5 | Patch the configure to avoid the regeneration... | ||
6 | |||
7 | Index: gcc-4.2.2/configure | ||
8 | =================================================================== | ||
9 | --- gcc-4.2.2.orig/configure 2008-01-15 23:23:41.000000000 +0100 | ||
10 | +++ gcc-4.2.2/configure 2008-01-15 23:25:20.000000000 +0100 | ||
11 | @@ -2278,14 +2278,14 @@ | ||
12 | |||
13 | |||
14 | if test "x$with_mpfr" != x; then | ||
15 | - gmplibs="-L$with_mpfr/lib $gmplibs" | ||
16 | + gmplibs="-static -L$with_mpfr/lib $gmplibs" | ||
17 | gmpinc="-I$with_mpfr/include" | ||
18 | fi | ||
19 | if test "x$with_mpfr_include" != x; then | ||
20 | gmpinc="-I$with_mpfr_include" | ||
21 | fi | ||
22 | if test "x$with_mpfr_lib" != x; then | ||
23 | - gmplibs="-L$with_mpfr_lib $gmplibs" | ||
24 | + gmplibs="-static -L$with_mpfr_lib $gmplibs" | ||
25 | fi | ||
26 | |||
27 | # Specify a location for gmp | ||
28 | Index: gcc-4.2.2/configure.in | ||
29 | =================================================================== | ||
30 | --- gcc-4.2.2.orig/configure.in 2008-01-15 23:23:41.000000000 +0100 | ||
31 | +++ gcc-4.2.2/configure.in 2008-01-15 23:24:36.000000000 +0100 | ||
32 | @@ -1066,14 +1066,14 @@ | ||
33 | AC_ARG_WITH(mpfr_lib, [ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library]) | ||
34 | |||
35 | if test "x$with_mpfr" != x; then | ||
36 | - gmplibs="-L$with_mpfr/lib $gmplibs" | ||
37 | + gmplibs="-static -L$with_mpfr/lib $gmplibs" | ||
38 | gmpinc="-I$with_mpfr/include" | ||
39 | fi | ||
40 | if test "x$with_mpfr_include" != x; then | ||
41 | gmpinc="-I$with_mpfr_include" | ||
42 | fi | ||
43 | if test "x$with_mpfr_lib" != x; then | ||
44 | - gmplibs="-L$with_mpfr_lib $gmplibs" | ||
45 | + gmplibs="-static -L$with_mpfr_lib $gmplibs" | ||
46 | fi | ||
47 | |||
48 | # Specify a location for gmp | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.0-arm-lib1asm.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.0-arm-lib1asm.patch deleted file mode 100644 index cf17da6a02..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.0-arm-lib1asm.patch +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | # Fixes errors like the following when building glibc (or any other executable | ||
2 | # or shared library) when using gcc 3.4.0 for ARM with softfloat: | ||
3 | # | ||
4 | # .../libc_pic.os(.text+0x15834): In function `__modf': undefined reference to `__subdf3' | ||
5 | # .../libc_pic.os(.text+0x158b8): In function `__modf': undefined reference to `__subdf3' | ||
6 | # .../libc_pic.os(.text+0x1590c): In function `scalbn': undefined reference to `__muldf3' | ||
7 | # .../libc_pic.os(.text+0x15e94): In function `__ldexpf': undefined reference to `__eqsf2' | ||
8 | # .../libc_pic.os(.text+0xcee4c): In function `monstartup': undefined reference to `__fixsfsi' | ||
9 | |||
10 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/t-linux gcc-3.4.0/gcc/config/arm/t-linux | ||
11 | --- gcc-3.4.0-orig/gcc/config/arm/t-linux 2003-09-20 23:09:07.000000000 +0200 | ||
12 | +++ gcc-3.4.0/gcc/config/arm/t-linux 2004-05-01 20:31:59.102846400 +0200 | ||
13 | @@ -4,7 +4,10 @@ | ||
14 | LIBGCC2_DEBUG_CFLAGS = -g0 | ||
15 | |||
16 | LIB1ASMSRC = arm/lib1funcs.asm | ||
17 | -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx | ||
18 | +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ | ||
19 | + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ | ||
20 | + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ | ||
21 | + _fixsfsi _fixunssfsi _floatdidf _floatdisf | ||
22 | |||
23 | # MULTILIB_OPTIONS = mhard-float/msoft-float | ||
24 | # MULTILIB_DIRNAMES = hard-float soft-float | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch index e6cc42bb65..7453acd348 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Pending | ||
1 | --- gcc-2005q3/gcc/config/arm/linux-eabi.h~ 2007-07-10 09:19:47.000000000 +0930 | 2 | --- gcc-2005q3/gcc/config/arm/linux-eabi.h~ 2007-07-10 09:19:47.000000000 +0930 |
2 | +++ gcc-2005q3/gcc/config/arm/linux-eabi.h 2007-07-10 10:42:37.000000000 +0930 | 3 | +++ gcc-2005q3/gcc/config/arm/linux-eabi.h 2007-07-10 10:42:37.000000000 +0930 |
3 | @@ -48,7 +48,8 @@ | 4 | @@ -48,7 +48,8 @@ |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-makefile-fix.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-makefile-fix.patch index 74c1f26833..9c53173413 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-makefile-fix.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-3.4.4-makefile-fix.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Pending | ||
1 | --- gcc-3.4.4/gcc/Makefile.in.orig 2005-07-25 21:00:37 +0200 | 2 | --- gcc-3.4.4/gcc/Makefile.in.orig 2005-07-25 21:00:37 +0200 |
2 | +++ gcc-3.4.4/gcc/Makefile.in 2005-07-25 21:01:19 +0200 | 3 | +++ gcc-3.4.4/gcc/Makefile.in 2005-07-25 21:01:19 +0200 |
3 | @@ -304,7 +304,7 @@ | 4 | @@ -304,7 +304,7 @@ |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-configure-no-fortran.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-configure-no-fortran.patch index c845503303..d9aed34bf3 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-configure-no-fortran.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-configure-no-fortran.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Inappropriate [embedded specific] | ||
1 | --- tmp/configure.in.orig 2006-09-05 17:50:48.000000000 +0100 | 2 | --- tmp/configure.in.orig 2006-09-05 17:50:48.000000000 +0100 |
2 | +++ tmp/configure.in 2006-09-05 17:50:48.000000000 +0100 | 3 | +++ tmp/configure.in 2006-09-05 17:50:48.000000000 +0100 |
3 | @@ -157,7 +157,6 @@ | 4 | @@ -157,7 +157,6 @@ |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-new-makeinfo.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-new-makeinfo.patch index b984605af7..bd3197dc67 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-new-makeinfo.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc-new-makeinfo.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Inappropriate [embedded specific] | ||
1 | --- | 2 | --- |
2 | configure | 2 +- | 3 | configure | 2 +- |
3 | configure.in | 2 +- | 4 | configure.in | 2 +- |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc34-arm-tune.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc34-arm-tune.patch deleted file mode 100644 index cdb20bef9b..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc34-arm-tune.patch +++ /dev/null | |||
@@ -1,9 +0,0 @@ | |||
1 | --- gcc-3.4.0/gcc/config/arm/linux-elf.h.arm-tune 2004-01-31 01:18:11.000000000 -0500 | ||
2 | +++ gcc-3.4.0/gcc/config/arm/linux-elf.h 2004-04-24 18:19:10.000000000 -0400 | ||
3 | @@ -126,3 +126,6 @@ | ||
4 | |||
5 | #define LINK_GCC_C_SEQUENCE_SPEC \ | ||
6 | "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}" | ||
7 | + | ||
8 | +/* Tune for XScale. */ | ||
9 | +#define TARGET_TUNE_DEFAULT TARGET_CPU_xscale | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc41-configure.in.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc41-configure.in.patch index 3d33bcb978..88b0611a2f 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc41-configure.in.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc41-configure.in.patch | |||
@@ -1,3 +1,5 @@ | |||
1 | Upstream-Status: Inappropriate [embedded specific] | ||
2 | |||
1 | --- gcc-3.4.4/configure.in.orig 2005-08-09 19:57:51.504323183 -0700 | 3 | --- gcc-3.4.4/configure.in.orig 2005-08-09 19:57:51.504323183 -0700 |
2 | +++ gcc-3.4.4/configure.in 2005-08-09 20:00:12.073168623 -0700 | 4 | +++ gcc-3.4.4/configure.in 2005-08-09 20:00:12.073168623 -0700 |
3 | @@ -1907,7 +1907,7 @@ | 5 | @@ -1907,7 +1907,7 @@ |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc_optab_arm.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc_optab_arm.patch index fa21b26554..5738a470ff 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/gcc_optab_arm.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gcc_optab_arm.patch | |||
@@ -1,3 +1,5 @@ | |||
1 | Upstream-Status: Pending | ||
2 | |||
1 | ARM is the only architecture that has a helper function that returns | 3 | ARM is the only architecture that has a helper function that returns |
2 | an unbiased result. This fix is trivial enough that we can show it | 4 | an unbiased result. This fix is trivial enough that we can show it |
3 | doesn't effect any of the other arches. Can we consider this a | 5 | doesn't effect any of the other arches. Can we consider this a |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/gfortran.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/gfortran.patch new file mode 100644 index 0000000000..c78e8313b6 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/gfortran.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | Upstream-Status: Pending | ||
2 | |||
3 | The patch below fixes a crash building libgfortran on arm-linux-gnueabi. | ||
4 | |||
5 | This target doesn't really have a 128-bit integer type, however it does use | ||
6 | TImode to represent the return value of certain special ABI defined library | ||
7 | functions. This results in type_for_size(TImode) being called. | ||
8 | |||
9 | Because TImode deosn't correspond to any gfortran integer kind | ||
10 | gfc_type_for_size returns NULL and we segfault shortly after. | ||
11 | |||
12 | The patch below fixes this by making gfc_type_for_size handle TImode in the | ||
13 | same way as the C frontend. | ||
14 | |||
15 | Tested on x86_64-linux and arm-linux-gnueabi. | ||
16 | Applied to trunk. | ||
17 | |||
18 | Paul | ||
19 | |||
20 | 2007-05-15 Paul Brook <paul@codesourcery.com> | ||
21 | |||
22 | gcc/fortran/ | ||
23 | * trans-types.c (gfc_type_for_size): Handle signed TImode. | ||
24 | |||
25 | Index: gcc-4.2.1/gcc/fortran/trans-types.c | ||
26 | =================================================================== | ||
27 | --- gcc-4.2.1/gcc/fortran/trans-types.c (revision 170435) | ||
28 | +++ gcc-4.2.1/gcc/fortran/trans-types.c (working copy) | ||
29 | @@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un | ||
30 | if (type && bits == TYPE_PRECISION (type)) | ||
31 | return type; | ||
32 | } | ||
33 | + | ||
34 | + /* Handle TImode as a special case because it is used by some backends | ||
35 | + (eg. ARM) even though it is not available for normal use. */ | ||
36 | +#if HOST_BITS_PER_WIDE_INT >= 64 | ||
37 | + if (bits == TYPE_PRECISION (intTI_type_node)) | ||
38 | + return intTI_type_node; | ||
39 | +#endif | ||
40 | } | ||
41 | else | ||
42 | { | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/no-libfloat.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/no-libfloat.patch deleted file mode 100644 index e5d12cfb4f..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/no-libfloat.patch +++ /dev/null | |||
@@ -1,11 +0,0 @@ | |||
1 | --- gcc/gcc/config/arm/linux-elf.h.old 2005-04-20 00:46:28.923375320 +0100 | ||
2 | +++ gcc/gcc/config/arm/linux-elf.h 2005-04-20 00:46:34.181575952 +0100 | ||
3 | @@ -56,7 +56,7 @@ | ||
4 | %{shared:-lc} \ | ||
5 | %{!shared:%{profile:-lc_p}%{!profile:-lc}}" | ||
6 | |||
7 | -#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc" | ||
8 | +#define LIBGCC_SPEC "-lgcc" | ||
9 | |||
10 | /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add | ||
11 | the GNU/Linux magical crtbegin.o file (see crtstuff.c) which | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/pic-without-sl.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/pic-without-sl.patch deleted file mode 100644 index 9a49794da4..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/pic-without-sl.patch +++ /dev/null | |||
@@ -1,303 +0,0 @@ | |||
1 | Index: gcc/config/arm/arm-protos.h | ||
2 | =================================================================== | ||
3 | RCS file: /cvsroot/gcc/gcc/gcc/config/arm/arm-protos.h,v | ||
4 | retrieving revision 1.60.4.20 | ||
5 | diff -u -r1.60.4.20 arm-protos.h | ||
6 | --- gcc/config/arm/arm-protos.h 29 Mar 2005 03:00:11 -0000 1.60.4.20 | ||
7 | +++ gcc/config/arm/arm-protos.h 23 Apr 2005 04:41:06 -0000 | ||
8 | @@ -64,6 +64,7 @@ | ||
9 | extern enum reg_class vfp_secondary_reload_class (enum machine_mode, rtx); | ||
10 | extern int tls_symbolic_operand (rtx, enum machine_mode); | ||
11 | extern bool arm_tls_operand_p (rtx x); | ||
12 | +extern bool arm_pc_pic_operand_p (rtx x); | ||
13 | |||
14 | /* Predicates. */ | ||
15 | extern int s_register_operand (rtx, enum machine_mode); | ||
16 | Index: gcc/config/arm/arm.c | ||
17 | =================================================================== | ||
18 | RCS file: /cvsroot/gcc/gcc/gcc/config/arm/arm.c,v | ||
19 | retrieving revision 1.303.2.79 | ||
20 | diff -u -r1.303.2.79 arm.c | ||
21 | --- gcc/config/arm/arm.c 12 Apr 2005 06:17:07 -0000 1.303.2.79 | ||
22 | +++ gcc/config/arm/arm.c 23 Apr 2005 04:41:09 -0000 | ||
23 | @@ -1003,7 +1003,7 @@ | ||
24 | |||
25 | /* If stack checking is disabled, we can use r10 as the PIC register, | ||
26 | which keeps r9 available. */ | ||
27 | - if (flag_pic) | ||
28 | + if (0 && flag_pic) | ||
29 | arm_pic_register = TARGET_APCS_STACK ? 9 : 10; | ||
30 | |||
31 | if (TARGET_APCS_FLOAT) | ||
32 | @@ -3120,6 +3120,10 @@ | ||
33 | rtx | ||
34 | legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) | ||
35 | { | ||
36 | + if (GET_CODE (orig) == UNSPEC | ||
37 | + && XINT (orig, 1) == UNSPEC_GOTSLOTPC) | ||
38 | + abort (); | ||
39 | + | ||
40 | if (GET_CODE (orig) == SYMBOL_REF | ||
41 | || GET_CODE (orig) == LABEL_REF) | ||
42 | { | ||
43 | @@ -3149,27 +3153,80 @@ | ||
44 | else | ||
45 | address = reg; | ||
46 | |||
47 | - if (TARGET_ARM) | ||
48 | - emit_insn (gen_pic_load_addr_arm (address, orig)); | ||
49 | - else | ||
50 | - emit_insn (gen_pic_load_addr_thumb (address, orig)); | ||
51 | + if (arm_pic_register != INVALID_REGNUM) | ||
52 | + { | ||
53 | + /* Using GP-based PIC addressing. */ | ||
54 | + if (TARGET_ARM) | ||
55 | + emit_insn (gen_pic_load_addr_arm (address, orig)); | ||
56 | + else | ||
57 | + emit_insn (gen_pic_load_addr_thumb (address, orig)); | ||
58 | + | ||
59 | + if ((GET_CODE (orig) == LABEL_REF | ||
60 | + || (GET_CODE (orig) == SYMBOL_REF && | ||
61 | + SYMBOL_REF_LOCAL_P (orig))) | ||
62 | + && NEED_GOT_RELOC) | ||
63 | + pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); | ||
64 | + else | ||
65 | + { | ||
66 | + pic_ref = gen_rtx_MEM (Pmode, | ||
67 | + gen_rtx_PLUS (Pmode, pic_offset_table_rtx, | ||
68 | + address)); | ||
69 | + RTX_UNCHANGING_P (pic_ref) = 1; | ||
70 | + } | ||
71 | |||
72 | - if ((GET_CODE (orig) == LABEL_REF | ||
73 | - || (GET_CODE (orig) == SYMBOL_REF && | ||
74 | - SYMBOL_REF_LOCAL_P (orig))) | ||
75 | - && NEED_GOT_RELOC) | ||
76 | - pic_ref = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, address); | ||
77 | + current_function_uses_pic_offset_table = 1; | ||
78 | + } | ||
79 | else | ||
80 | { | ||
81 | - pic_ref = gen_rtx_MEM (Pmode, | ||
82 | - gen_rtx_PLUS (Pmode, pic_offset_table_rtx, | ||
83 | - address)); | ||
84 | - RTX_UNCHANGING_P (pic_ref) = 1; | ||
85 | + /* Using PC-based PIC addressing. */ | ||
86 | + rtx label, tmp; | ||
87 | + int offset; | ||
88 | + | ||
89 | + label = gen_label_rtx (); | ||
90 | + offset = TARGET_ARM ? 8 : 4; | ||
91 | + | ||
92 | + if (GET_CODE (orig) == LABEL_REF | ||
93 | + || (GET_CODE (orig) == SYMBOL_REF && SYMBOL_REF_LOCAL_P (orig))) | ||
94 | + { | ||
95 | + /* This symbol is defined locally. We don't need a GOT entry. */ | ||
96 | + tmp = gen_rtx_MINUS (Pmode, gen_rtx_UNSPEC (Pmode, gen_rtvec (1, orig), UNSPEC_PIC_SYM), gen_rtx_PLUS (Pmode, | ||
97 | + gen_rtx_LABEL_REF (Pmode, label), | ||
98 | + GEN_INT (offset))); | ||
99 | + | ||
100 | + load_tls_operand (tmp, address); | ||
101 | + | ||
102 | + if (TARGET_ARM) | ||
103 | + emit_insn (gen_pic_add_dot_plus_eight (address, label)); | ||
104 | + else | ||
105 | + emit_insn (gen_pic_add_dot_plus_four (address, label)); | ||
106 | + } | ||
107 | + else | ||
108 | + { | ||
109 | + rtx x = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, orig), UNSPEC_GOTSLOTPC); | ||
110 | + rtx dummy_label; | ||
111 | + | ||
112 | + dummy_label = gen_label_rtx (); | ||
113 | + LABEL_PRESERVE_P (dummy_label) = 1; | ||
114 | + LABEL_NUSES (dummy_label) = 1; | ||
115 | + | ||
116 | + tmp = gen_rtx_MINUS (Pmode, x, gen_rtx_PLUS (Pmode, | ||
117 | + gen_rtx_LABEL_REF (Pmode, label), | ||
118 | + GEN_INT (offset))); | ||
119 | + | ||
120 | + load_tls_operand (tmp, address); | ||
121 | + | ||
122 | + if (TARGET_ARM) | ||
123 | + emit_insn (gen_tls_load_dot_plus_eight (address, address, label, dummy_label)); | ||
124 | + else | ||
125 | + emit_insn (gen_tls_load_dot_plus_four (address, address, label, dummy_label)); | ||
126 | + } | ||
127 | + | ||
128 | + pic_ref = address; | ||
129 | } | ||
130 | |||
131 | insn = emit_move_insn (reg, pic_ref); | ||
132 | #endif | ||
133 | - current_function_uses_pic_offset_table = 1; | ||
134 | + | ||
135 | /* Put a REG_EQUAL note on this insn, so that it can be optimized | ||
136 | by loop. */ | ||
137 | REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, orig, | ||
138 | @@ -3179,11 +3236,17 @@ | ||
139 | else if (GET_CODE (orig) == CONST) | ||
140 | { | ||
141 | rtx base, offset; | ||
142 | + bool minus = FALSE; | ||
143 | |||
144 | if (GET_CODE (XEXP (orig, 0)) == PLUS | ||
145 | && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx) | ||
146 | return orig; | ||
147 | |||
148 | + if (GET_CODE (XEXP (orig, 0)) == MINUS | ||
149 | + && GET_CODE (XEXP (XEXP (orig, 0), 0)) == UNSPEC | ||
150 | + && XINT (XEXP (XEXP (orig, 0), 0), 1) == UNSPEC_GOTSLOTPC) | ||
151 | + return orig; | ||
152 | + | ||
153 | if (GET_CODE (XEXP (orig, 0)) == UNSPEC) | ||
154 | return orig; | ||
155 | |||
156 | @@ -3201,6 +3264,13 @@ | ||
157 | offset = legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode, | ||
158 | base == reg ? 0 : reg); | ||
159 | } | ||
160 | + else if (GET_CODE (XEXP (orig, 0)) == MINUS) | ||
161 | + { | ||
162 | + minus = TRUE; | ||
163 | + base = legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode, reg); | ||
164 | + offset = legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode, | ||
165 | + base == reg ? 0 : reg); | ||
166 | + } | ||
167 | else | ||
168 | abort (); | ||
169 | |||
170 | @@ -3228,7 +3298,7 @@ | ||
171 | return reg; | ||
172 | } | ||
173 | |||
174 | - return gen_rtx_PLUS (Pmode, base, offset); | ||
175 | + return minus ? gen_rtx_MINUS (Pmode, base, offset) : gen_rtx_PLUS (Pmode, base, offset); | ||
176 | } | ||
177 | |||
178 | return orig; | ||
179 | @@ -3267,7 +3337,7 @@ | ||
180 | rtx l1, pic_tmp, pic_tmp2, pic_rtx; | ||
181 | rtx global_offset_table; | ||
182 | |||
183 | - if (current_function_uses_pic_offset_table == 0 || TARGET_SINGLE_PIC_BASE) | ||
184 | + if (current_function_uses_pic_offset_table == 0 || TARGET_SINGLE_PIC_BASE || arm_pic_register == INVALID_REGNUM) | ||
185 | return; | ||
186 | |||
187 | if (!flag_pic) | ||
188 | @@ -3341,8 +3411,11 @@ | ||
189 | static int | ||
190 | pcrel_constant_p (rtx x) | ||
191 | { | ||
192 | + if (GET_CODE (x) == CONST) | ||
193 | + return pcrel_constant_p (XEXP (x, 0)); | ||
194 | + | ||
195 | if (GET_CODE (x) == MINUS) | ||
196 | - return symbol_mentioned_p (XEXP (x, 0)) && label_mentioned_p (XEXP (x, 1)); | ||
197 | + return (((GET_CODE (XEXP (x, 0)) == UNSPEC && XINT (XEXP (x, 0), 1) == UNSPEC_PIC_SYM)) || symbol_mentioned_p (XEXP (x, 0))) && label_mentioned_p (XEXP (x, 1)); | ||
198 | |||
199 | if (GET_CODE (x) == UNSPEC | ||
200 | && XINT (x, 1) == UNSPEC_TLS | ||
201 | @@ -3946,12 +4019,32 @@ | ||
202 | return SYMBOL_REF_TLS_MODEL (op); | ||
203 | } | ||
204 | |||
205 | +bool | ||
206 | +arm_pc_pic_operand_p (rtx op) | ||
207 | +{ | ||
208 | + if (GET_CODE (op) == CONST | ||
209 | + && GET_CODE (XEXP (op, 0)) == MINUS | ||
210 | + && GET_CODE (XEXP (XEXP (op, 0), 0)) == UNSPEC | ||
211 | + && XINT (XEXP (XEXP (op, 0), 0), 1) == UNSPEC_GOTSLOTPC) | ||
212 | + return 1; | ||
213 | + | ||
214 | + if (GET_CODE (op) == CONST | ||
215 | + && GET_CODE (XEXP (op, 0)) == MINUS | ||
216 | + && GET_CODE (XEXP (XEXP (op, 0), 0)) == UNSPEC | ||
217 | + && XINT (XEXP (XEXP (op, 0), 0), 1) == UNSPEC_PIC_SYM) | ||
218 | + return 1; | ||
219 | + | ||
220 | + return 0; | ||
221 | +} | ||
222 | + | ||
223 | /* Valid input to a move instruction. */ | ||
224 | int | ||
225 | move_input_operand (rtx op, enum machine_mode mode) | ||
226 | { | ||
227 | if (tls_symbolic_operand (op, mode)) | ||
228 | return 0; | ||
229 | + if (pcrel_constant_p (op)) | ||
230 | + return 1; | ||
231 | return general_operand (op, mode); | ||
232 | } | ||
233 | |||
234 | @@ -15634,11 +15727,34 @@ | ||
235 | return TRUE; | ||
236 | } | ||
237 | |||
238 | +static bool | ||
239 | +arm_emit_got_decoration (FILE *fp, rtx x) | ||
240 | +{ | ||
241 | + rtx val; | ||
242 | + | ||
243 | + val = XVECEXP (x, 0, 0); | ||
244 | + | ||
245 | + fputs ("_gotslotpc_(", fp); | ||
246 | + | ||
247 | + output_addr_const (fp, val); | ||
248 | + | ||
249 | + fputc (')', fp); | ||
250 | + | ||
251 | + return TRUE; | ||
252 | +} | ||
253 | + | ||
254 | bool | ||
255 | arm_output_addr_const_extra (FILE *fp, rtx x) | ||
256 | { | ||
257 | if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_TLS) | ||
258 | return arm_emit_tls_decoration (fp, x); | ||
259 | + else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_GOTSLOTPC) | ||
260 | + return arm_emit_got_decoration (fp, x); | ||
261 | + else if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_PIC_SYM) | ||
262 | + { | ||
263 | + output_addr_const (fp, XVECEXP (x, 0, 0)); | ||
264 | + return TRUE; | ||
265 | + } | ||
266 | else if (GET_CODE (x) == CONST_VECTOR) | ||
267 | return arm_emit_vector_const (fp, x); | ||
268 | |||
269 | Index: gcc/config/arm/arm.md | ||
270 | =================================================================== | ||
271 | RCS file: /cvsroot/gcc/gcc/gcc/config/arm/arm.md,v | ||
272 | retrieving revision 1.145.2.31 | ||
273 | diff -u -r1.145.2.31 arm.md | ||
274 | --- gcc/config/arm/arm.md 28 Mar 2005 19:04:37 -0000 1.145.2.31 | ||
275 | +++ gcc/config/arm/arm.md 23 Apr 2005 04:41:11 -0000 | ||
276 | @@ -88,6 +88,7 @@ | ||
277 | (UNSPEC_WMADDS 18) ; Used by the intrinsic form of the iWMMXt WMADDS instruction. | ||
278 | (UNSPEC_WMADDU 19) ; Used by the intrinsic form of the iWMMXt WMADDU instruction. | ||
279 | (UNSPEC_TLS 20) ; A symbol that has been treated properly for TLS usage. | ||
280 | + (UNSPEC_GOTSLOTPC 21) | ||
281 | ] | ||
282 | ) | ||
283 | |||
284 | @@ -4179,7 +4180,8 @@ | ||
285 | && (CONSTANT_P (operands[1]) | ||
286 | || symbol_mentioned_p (operands[1]) | ||
287 | || label_mentioned_p (operands[1])) | ||
288 | - && ! tls_mentioned_p (operands[1])) | ||
289 | + && ! tls_mentioned_p (operands[1]) | ||
290 | + && ! arm_pc_pic_operand_p (operands[1])) | ||
291 | operands[1] = legitimize_pic_address (operands[1], SImode, | ||
292 | (no_new_pseudos ? operands[0] : 0)); | ||
293 | } | ||
294 | @@ -4412,7 +4414,8 @@ | ||
295 | (mem:SI (unspec:SI [(plus:SI (match_dup 0) | ||
296 | (const (plus:SI (pc) (const_int 8))))] | ||
297 | UNSPEC_PIC_BASE))) | ||
298 | - (use (label_ref (match_operand 1 "" "")))])] | ||
299 | + (use (label_ref (match_operand 1 "" ""))) | ||
300 | + (use (label_ref (match_operand 1 "" "")))])] | ||
301 | "" | ||
302 | ) | ||
303 | |||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/pr34130.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/pr34130.patch deleted file mode 100644 index 415335f4b4..0000000000 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/pr34130.patch +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | Index: gcc-4.1.2/gcc/fold-const.c | ||
2 | =================================================================== | ||
3 | --- gcc-4.1.2.orig/gcc/fold-const.c 2007-11-21 18:53:42.000000000 +0100 | ||
4 | +++ gcc-4.1.2/gcc/fold-const.c 2007-11-21 18:56:26.000000000 +0100 | ||
5 | @@ -5339,7 +5339,10 @@ | ||
6 | } | ||
7 | break; | ||
8 | } | ||
9 | - /* FALLTHROUGH */ | ||
10 | + /* If the constant is negative, we cannot simplify this. */ | ||
11 | + if (tree_int_cst_sgn (c) == -1) | ||
12 | + break; | ||
13 | + /* FALLTHROUGH */ | ||
14 | case NEGATE_EXPR: | ||
15 | if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0) | ||
16 | return fold_build1 (tcode, ctype, fold_convert (ctype, t1)); | ||
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-no-host-includes.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-no-host-includes.patch index 8b05cb73a9..1695582954 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-no-host-includes.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-no-host-includes.patch | |||
@@ -1,3 +1,5 @@ | |||
1 | Upstream-Status: Pending | ||
2 | |||
1 | Index: gcc-4.0.2/gcc/c-incpath.c | 3 | Index: gcc-4.0.2/gcc/c-incpath.c |
2 | =================================================================== | 4 | =================================================================== |
3 | --- gcc-4.0.2.orig/gcc/c-incpath.c 2005-01-23 16:05:27.000000000 +0100 | 5 | --- gcc-4.0.2.orig/gcc/c-incpath.c 2005-01-23 16:05:27.000000000 +0100 |
diff --git a/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-xgcc-cpp.patch b/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-xgcc-cpp.patch index 921cab6e18..b06de5458b 100644 --- a/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-xgcc-cpp.patch +++ b/meta/recipes-devtools/gcc/gcc-csl-arm/zecke-xgcc-cpp.patch | |||
@@ -1,3 +1,4 @@ | |||
1 | Upstream-Status: Inappropriate [embedded specific] | ||
1 | upstream: n/a | 2 | upstream: n/a |
2 | comment: Use the preprocessor we have just compiled instead the one of | 3 | comment: Use the preprocessor we have just compiled instead the one of |
3 | the system. There might be incompabilities between us and them. | 4 | the system. There might be incompabilities between us and them. |