mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-05-31 01:10:08 +00:00
toolchain-layer: move binutils and gcc from meta-oe into here
Acked-by: Martin Jansa <Martin.Jansa@gmail.com> Acked-by: Eric Bénard <eric@eukrea.com> Acked-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
@@ -1,22 +0,0 @@
|
||||
--- /tmp/configure.ac 2008-06-22 14:14:59.000000000 +0200
|
||||
+++ binutils-2.18.50.0.7/configure.ac 2008-06-22 14:15:30.000000000 +0200
|
||||
@@ -561,7 +561,7 @@
|
||||
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
||||
libgloss_dir=arm
|
||||
;;
|
||||
- arm*-*-linux-gnueabi)
|
||||
+ arm*-*-linux-gnueabi | arm*-*-linux-uclibceabi)
|
||||
noconfigdirs="$noconfigdirs target-qthreads"
|
||||
noconfigdirs="$noconfigdirs target-libobjc"
|
||||
case ${with_newlib} in
|
||||
--- /tmp/configure 2008-06-22 14:17:11.000000000 +0200
|
||||
+++ binutils-2.18.50.0.7/configure 2008-06-22 14:17:56.000000000 +0200
|
||||
@@ -2307,7 +2307,7 @@
|
||||
noconfigdirs="$noconfigdirs target-libffi target-qthreads"
|
||||
libgloss_dir=arm
|
||||
;;
|
||||
- arm*-*-linux-gnueabi)
|
||||
+ arm*-*-linux-gnueabi | arm*-*-linux-uclibceabi)
|
||||
noconfigdirs="$noconfigdirs target-qthreads"
|
||||
noconfigdirs="$noconfigdirs target-libobjc"
|
||||
case ${with_newlib} in
|
||||
-240
@@ -1,240 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
## 152_arm_branches_to_weak_symbols.dpatch
|
||||
##
|
||||
## DP: Description: http://sourceware.org/ml/binutils/2010-04/msg00446.html
|
||||
## DP: Description: taken from the trunk
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
|
||||
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
|
||||
|
||||
case "$1" in
|
||||
-patch) patch $patch_opts -p0 < $0;;
|
||||
-unpatch) patch $patch_opts -p0 -R < $0;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
gas/
|
||||
|
||||
2010-05-04 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* write.c (fixup_segment): Revert previous delta.
|
||||
* config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Also force the
|
||||
generation of relocations for fixups against weak symbols.
|
||||
|
||||
2010-04-29 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* write.c (fixup_segment): Do not assume we know the section a
|
||||
defined weak symbol is in.
|
||||
* config/tc-arm.c (relax_adr, relax_branch, md_apply_fix): Treat
|
||||
weak symbols as not known to be in the same section, even if they
|
||||
are defined.
|
||||
|
||||
gas/testsuite/
|
||||
|
||||
2010-04-29 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gas/arm/weakdef-1.s: New.
|
||||
* gas/arm/weakdef-1.d: New.
|
||||
* gas/arm/weakdef-2.s: New.
|
||||
* gas/arm/weakdef-2.d: New.
|
||||
* gas/arm/weakdef-2.l: New.
|
||||
|
||||
@DPATCH@
|
||||
diff -urN gas.orig/config/tc-arm.c gas/config/tc-arm.c
|
||||
--- a/gas/config/tc-arm.c 2010-02-22 08:06:52.000000000 +0000
|
||||
+++ b/gas/config/tc-arm.c 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -18207,7 +18207,8 @@
|
||||
|
||||
/* Assume worst case for symbols not known to be in the same section. */
|
||||
if (!S_IS_DEFINED (fragp->fr_symbol)
|
||||
- || sec != S_GET_SEGMENT (fragp->fr_symbol))
|
||||
+ || sec != S_GET_SEGMENT (fragp->fr_symbol)
|
||||
+ || S_IS_WEAK (fragp->fr_symbol))
|
||||
return 4;
|
||||
|
||||
val = relaxed_symbol_addr (fragp, stretch);
|
||||
@@ -18250,7 +18251,8 @@
|
||||
|
||||
/* Assume worst case for symbols not known to be in the same section. */
|
||||
if (!S_IS_DEFINED (fragp->fr_symbol)
|
||||
- || sec != S_GET_SEGMENT (fragp->fr_symbol))
|
||||
+ || sec != S_GET_SEGMENT (fragp->fr_symbol)
|
||||
+ || S_IS_WEAK (fragp->fr_symbol))
|
||||
return 4;
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
@@ -19463,22 +19465,23 @@
|
||||
not have a reloc for it, so tc_gen_reloc will reject it. */
|
||||
fixP->fx_done = 1;
|
||||
|
||||
- if (fixP->fx_addsy
|
||||
- && ! S_IS_DEFINED (fixP->fx_addsy))
|
||||
+ if (fixP->fx_addsy)
|
||||
{
|
||||
- as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
- _("undefined symbol %s used as an immediate value"),
|
||||
- S_GET_NAME (fixP->fx_addsy));
|
||||
- break;
|
||||
- }
|
||||
+ const char *msg = 0;
|
||||
|
||||
- if (fixP->fx_addsy
|
||||
- && S_GET_SEGMENT (fixP->fx_addsy) != seg)
|
||||
- {
|
||||
- as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
- _("symbol %s is in a different section"),
|
||||
- S_GET_NAME (fixP->fx_addsy));
|
||||
- break;
|
||||
+ if (! S_IS_DEFINED (fixP->fx_addsy))
|
||||
+ msg = _("undefined symbol %s used as an immediate value");
|
||||
+ else if (S_GET_SEGMENT (fixP->fx_addsy) != seg)
|
||||
+ msg = _("symbol %s is in a different section");
|
||||
+ else if (S_IS_WEAK (fixP->fx_addsy))
|
||||
+ msg = _("symbol %s is weak and may be overridden later");
|
||||
+
|
||||
+ if (msg)
|
||||
+ {
|
||||
+ as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
+ msg, S_GET_NAME (fixP->fx_addsy));
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
newimm = encode_arm_immediate (value);
|
||||
@@ -19504,24 +19507,25 @@
|
||||
unsigned int highpart = 0;
|
||||
unsigned int newinsn = 0xe1a00000; /* nop. */
|
||||
|
||||
- if (fixP->fx_addsy
|
||||
- && ! S_IS_DEFINED (fixP->fx_addsy))
|
||||
+ if (fixP->fx_addsy)
|
||||
{
|
||||
- as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
- _("undefined symbol %s used as an immediate value"),
|
||||
- S_GET_NAME (fixP->fx_addsy));
|
||||
- break;
|
||||
- }
|
||||
+ const char *msg = 0;
|
||||
|
||||
- if (fixP->fx_addsy
|
||||
- && S_GET_SEGMENT (fixP->fx_addsy) != seg)
|
||||
- {
|
||||
- as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
- _("symbol %s is in a different section"),
|
||||
- S_GET_NAME (fixP->fx_addsy));
|
||||
- break;
|
||||
+ if (! S_IS_DEFINED (fixP->fx_addsy))
|
||||
+ msg = _("undefined symbol %s used as an immediate value");
|
||||
+ else if (S_GET_SEGMENT (fixP->fx_addsy) != seg)
|
||||
+ msg = _("symbol %s is in a different section");
|
||||
+ else if (S_IS_WEAK (fixP->fx_addsy))
|
||||
+ msg = _("symbol %s is weak and may be overridden later");
|
||||
+
|
||||
+ if (msg)
|
||||
+ {
|
||||
+ as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||
+ msg, S_GET_NAME (fixP->fx_addsy));
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
-
|
||||
+
|
||||
newimm = encode_arm_immediate (value);
|
||||
temp = md_chars_to_number (buf, INSN_SIZE);
|
||||
|
||||
diff -urN gas.orig/config/tc-arm.h gas/config/tc-arm.h
|
||||
--- a/gas/config/tc-arm.h 2009-09-01 00:24:01.000000000 +0000
|
||||
+++ b/gas/config/tc-arm.h 2010-05-06 12:53:42.784835970 +0000
|
||||
@@ -183,6 +183,7 @@
|
||||
(!(FIX)->fx_pcrel \
|
||||
|| (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
|
||||
|| (FIX)->fx_r_type == BFD_RELOC_32 \
|
||||
+ || ((FIX)->fx_addsy != NULL && S_IS_WEAK ((FIX)->fx_addsy)) \
|
||||
|| TC_FORCE_RELOCATION (FIX))
|
||||
|
||||
/* Force output of R_ARM_REL32 relocations against thumb function symbols.
|
||||
diff -urN gas.orig/testsuite/gas/arm/weakdef-1.d gas/testsuite/gas/arm/weakdef-1.d
|
||||
--- a/gas/testsuite/gas/arm/weakdef-1.d 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/gas/testsuite/gas/arm/weakdef-1.d 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -0,0 +1,20 @@
|
||||
+# name: Thumb branch to weak
|
||||
+# as:
|
||||
+# objdump: -dr
|
||||
+# This test is only valid on ELF based ports.
|
||||
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
|
||||
+
|
||||
+.*: +file format .*arm.*
|
||||
+
|
||||
+
|
||||
+Disassembly of section .text:
|
||||
+
|
||||
+0+000 <Weak>:
|
||||
+ 0: e7fe b.n 2 <Strong>
|
||||
+ 0: R_ARM_THM_JUMP11 Strong
|
||||
+
|
||||
+0+002 <Strong>:
|
||||
+ 2: f7ff bffe b.w 0 <Random>
|
||||
+ 2: R_ARM_THM_JUMP24 Random
|
||||
+ 6: f7ff bffe b.w 0 <Weak>
|
||||
+ 6: R_ARM_THM_JUMP24 Weak
|
||||
diff -urN gas.orig/testsuite/gas/arm/weakdef-1.s gas/testsuite/gas/arm/weakdef-1.s
|
||||
--- a/gas/testsuite/gas/arm/weakdef-1.s 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/gas/testsuite/gas/arm/weakdef-1.s 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -0,0 +1,18 @@
|
||||
+ .syntax unified
|
||||
+ .text
|
||||
+ .thumb
|
||||
+
|
||||
+ .globl Weak
|
||||
+ .weak Weak
|
||||
+ .thumb_func
|
||||
+ .type Weak, %function
|
||||
+Weak:
|
||||
+ b Strong
|
||||
+ .size Weak, .-Weak
|
||||
+
|
||||
+ .globl Strong
|
||||
+ .type Strong, %function
|
||||
+Strong:
|
||||
+ b Random
|
||||
+ b Weak
|
||||
+ .size Strong, .-Strong
|
||||
diff -urN gas.orig/testsuite/gas/arm/weakdef-2.d gas/testsuite/gas/arm/weakdef-2.d
|
||||
--- a/gas/testsuite/gas/arm/weakdef-2.d 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/gas/testsuite/gas/arm/weakdef-2.d 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -0,0 +1,5 @@
|
||||
+# name: adr of weak
|
||||
+# as:
|
||||
+# error-output: weakdef-2.l
|
||||
+# This test is only valid on ELF based ports.
|
||||
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
|
||||
diff -urN gas.orig/testsuite/gas/arm/weakdef-2.l gas/testsuite/gas/arm/weakdef-2.l
|
||||
--- a/gas/testsuite/gas/arm/weakdef-2.l 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/gas/testsuite/gas/arm/weakdef-2.l 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -0,0 +1,3 @@
|
||||
+[^:]*: Assembler messages:
|
||||
+[^:]*:9: Error: symbol Weak is weak and may be overridden later
|
||||
+[^:]*:10: Error: symbol Weak is weak and may be overridden later
|
||||
diff -urN gas.orig/testsuite/gas/arm/weakdef-2.s gas/testsuite/gas/arm/weakdef-2.s
|
||||
--- a/gas/testsuite/gas/arm/weakdef-2.s 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ b/gas/testsuite/gas/arm/weakdef-2.s 2010-05-06 12:52:25.391085365 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+ .syntax unified
|
||||
+ .text
|
||||
+ .globl Strong
|
||||
+Strong:
|
||||
+ adrl r0,Strong
|
||||
+ adr r0,Strong
|
||||
+ .globl Weak
|
||||
+ .weak Weak
|
||||
+Weak: adrl r0,Weak
|
||||
+ adr r0,Weak
|
||||
@@ -1,65 +0,0 @@
|
||||
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||
## 200_elflink_%B_fixes.dpatch by <kirr@landau.phys.spbu.ru>
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Description: Fixes several msgs; needed for later elflink patches
|
||||
## DP: Upstream status: submitted upstream for binutils-2_20-branch
|
||||
|
||||
2010-08-07 Kirill Smelkov <kirr@landau.phys.spbu.ru>
|
||||
|
||||
Backport from mainline:
|
||||
2009-10-12 Roland McGrath <roland@frob.com>
|
||||
|
||||
* elflink.c (elf_link_add_object_symbols, _bfd_elf_merge_symbol):
|
||||
Fix %s that should be %B in several message formats.
|
||||
|
||||
@DPATCH@
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index c42c6e1..4a348de 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -1110,19 +1110,19 @@ _bfd_elf_merge_symbol (bfd *abfd,
|
||||
|
||||
if (tdef && ntdef)
|
||||
(*_bfd_error_handler)
|
||||
- (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"),
|
||||
+ (_("%B: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"),
|
||||
tbfd, tsec, ntbfd, ntsec, h->root.root.string);
|
||||
else if (!tdef && !ntdef)
|
||||
(*_bfd_error_handler)
|
||||
- (_("%s: TLS reference in %B mismatches non-TLS reference in %B"),
|
||||
+ (_("%B: TLS reference in %B mismatches non-TLS reference in %B"),
|
||||
tbfd, ntbfd, h->root.root.string);
|
||||
else if (tdef)
|
||||
(*_bfd_error_handler)
|
||||
- (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"),
|
||||
+ (_("%B: TLS definition in %B section %A mismatches non-TLS reference in %B"),
|
||||
tbfd, tsec, ntbfd, h->root.root.string);
|
||||
else
|
||||
(*_bfd_error_handler)
|
||||
- (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"),
|
||||
+ (_("%B: TLS reference in %B mismatches non-TLS definition in %B section %A"),
|
||||
tbfd, ntbfd, ntsec, h->root.root.string);
|
||||
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
@@ -4437,7 +4437,7 @@ error_free_dyn:
|
||||
if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
- (_("%s: invalid DSO for symbol `%s' definition"),
|
||||
+ (_("%B: invalid DSO for symbol `%s' definition"),
|
||||
abfd, name);
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
goto error_free_vers;
|
||||
@@ -12495,7 +12495,7 @@ _bfd_elf_get_dynamic_reloc_section (bfd * abfd,
|
||||
section does not exist it is created and attached to the DYNOBJ
|
||||
bfd and stored in the SRELOC field of SEC's elf_section_data
|
||||
structure.
|
||||
-
|
||||
+
|
||||
ALIGNMENT is the alignment for the newly created section and
|
||||
IS_RELA defines whether the name should be .rela.<SEC's name>
|
||||
or .rel.<SEC's name>. The section name is looked up in the
|
||||
--
|
||||
1.7.2.1.44.g721e7
|
||||
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||
## 201_elflink_improve_errors.dpatch by <kirr@landau.phys.spbu.ru>
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Improves error messages regarding -no-add-needed cases; needed for
|
||||
## DP: later elflink patches
|
||||
## DP: Upstream status: submitted upstream for binutils-2_20-branch
|
||||
|
||||
2010-08-07 Kirill Smelkov <kirr@landau.phys.spbu.ru>
|
||||
|
||||
Backport from mainline:
|
||||
2009-11-05 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elflink.c (elf_link_add_object_symbols): Improve error
|
||||
message generated when a symbol is left unresolved because a
|
||||
--no-add-needed command line option has prevented the
|
||||
inclusion of the DSO defining it.
|
||||
|
||||
@DPATCH@
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index 4a348de..10eee8c 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -3866,6 +3866,7 @@ error_free_dyn:
|
||||
bfd_boolean common;
|
||||
unsigned int old_alignment;
|
||||
bfd *old_bfd;
|
||||
+ bfd * undef_bfd = NULL;
|
||||
|
||||
override = FALSE;
|
||||
|
||||
@@ -4097,6 +4098,20 @@ error_free_dyn:
|
||||
name = newname;
|
||||
}
|
||||
|
||||
+ /* If this is a definition of a previously undefined symbol
|
||||
+ make a note of the bfd that contained the reference in
|
||||
+ case we need to refer to it later on in error messages. */
|
||||
+ if (! bfd_is_und_section (sec))
|
||||
+ {
|
||||
+ h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
|
||||
+
|
||||
+ if (h != NULL
|
||||
+ && (h->root.type == bfd_link_hash_undefined
|
||||
+ || h->root.type == bfd_link_hash_undefweak)
|
||||
+ && h->root.u.undef.abfd)
|
||||
+ undef_bfd = h->root.u.undef.abfd;
|
||||
+ }
|
||||
+
|
||||
if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
|
||||
&value, &old_alignment,
|
||||
sym_hash, &skip, &override,
|
||||
@@ -4437,9 +4452,12 @@ error_free_dyn:
|
||||
if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
- (_("%B: invalid DSO for symbol `%s' definition"),
|
||||
+ (_("%B: undefined reference to symbol '%s'"),
|
||||
+ undef_bfd == NULL ? info->output_bfd : undef_bfd, name);
|
||||
+ (*_bfd_error_handler)
|
||||
+ (_("note: '%s' is defined in DSO %B so try adding it to the linker command line"),
|
||||
abfd, name);
|
||||
- bfd_set_error (bfd_error_bad_value);
|
||||
+ bfd_set_error (bfd_error_invalid_operation);
|
||||
goto error_free_vers;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.2.1.44.g721e7
|
||||
|
||||
-87
@@ -1,87 +0,0 @@
|
||||
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||
## 202_elflink_noaddneeded_vs_weak.dpatch by <kirr@landau.phys.spbu.ru>
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Fixes '-no-add-needed breaks linking with weak symbols'
|
||||
## DP: Upstream status: submitted upstream for binutils-2_20-branch
|
||||
|
||||
|
||||
2010-08-07 Kirill Smelkov <kirr@landau.phys.spbu.ru>
|
||||
|
||||
Backport from mainline:
|
||||
2010-01-21 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elflink.c (elf_link_add_object_symbols): Look up name of
|
||||
undefined symbol both before and after versioning has been
|
||||
applied. Do not bother with symbols that are weakly undefined.
|
||||
|
||||
|
||||
@DPATCH@
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index 10eee8c..e058064 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -3991,6 +3991,20 @@ error_free_dyn:
|
||||
unsigned int vernum = 0;
|
||||
bfd_boolean skip;
|
||||
|
||||
+ /* If this is a definition of a symbol which was previously
|
||||
+ referenced in a non-weak manner then make a note of the bfd
|
||||
+ that contained the reference. This is used if we need to
|
||||
+ refer to the source of the reference later on. */
|
||||
+ if (! bfd_is_und_section (sec))
|
||||
+ {
|
||||
+ h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
|
||||
+
|
||||
+ if (h != NULL
|
||||
+ && h->root.type == bfd_link_hash_undefined
|
||||
+ && h->root.u.undef.abfd)
|
||||
+ undef_bfd = h->root.u.undef.abfd;
|
||||
+ }
|
||||
+
|
||||
if (ever == NULL)
|
||||
{
|
||||
if (info->default_imported_symver)
|
||||
@@ -4098,16 +4112,15 @@ error_free_dyn:
|
||||
name = newname;
|
||||
}
|
||||
|
||||
- /* If this is a definition of a previously undefined symbol
|
||||
- make a note of the bfd that contained the reference in
|
||||
- case we need to refer to it later on in error messages. */
|
||||
- if (! bfd_is_und_section (sec))
|
||||
+ /* If necessary, make a second attempt to locate the bfd
|
||||
+ containing an unresolved, non-weak reference to the
|
||||
+ current symbol. */
|
||||
+ if (! bfd_is_und_section (sec) && undef_bfd == NULL)
|
||||
{
|
||||
h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
|
||||
|
||||
if (h != NULL
|
||||
- && (h->root.type == bfd_link_hash_undefined
|
||||
- || h->root.type == bfd_link_hash_undefweak)
|
||||
+ && h->root.type == bfd_link_hash_undefined
|
||||
&& h->root.u.undef.abfd)
|
||||
undef_bfd = h->root.u.undef.abfd;
|
||||
}
|
||||
@@ -4448,12 +4461,14 @@ error_free_dyn:
|
||||
/* A symbol from a library loaded via DT_NEEDED of some
|
||||
other library is referenced by a regular object.
|
||||
Add a DT_NEEDED entry for it. Issue an error if
|
||||
- --no-add-needed is used. */
|
||||
- if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
|
||||
+ --no-add-needed is used and the reference was not
|
||||
+ a weak one. */
|
||||
+ if (undef_bfd != NULL
|
||||
+ && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
(_("%B: undefined reference to symbol '%s'"),
|
||||
- undef_bfd == NULL ? info->output_bfd : undef_bfd, name);
|
||||
+ undef_bfd, name);
|
||||
(*_bfd_error_handler)
|
||||
(_("note: '%s' is defined in DSO %B so try adding it to the linker command line"),
|
||||
abfd, name);
|
||||
--
|
||||
1.7.2.1.44.g721e7
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
Adds support for Freescale Power architecture e300c2 and e300c3 cores.
|
||||
http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
|
||||
|
||||
Leon Woestenberg <leonw@mailcan.com>
|
||||
|
||||
Index: binutils-2.19.51.0.3/opcodes/ppc-dis.c
|
||||
===================================================================
|
||||
--- binutils-2.19.51.0.3.orig/opcodes/ppc-dis.c 2009-04-16 00:38:45.000000000 -0700
|
||||
+++ binutils-2.19.51.0.3/opcodes/ppc-dis.c 2009-04-16 00:43:56.000000000 -0700
|
||||
@@ -132,6 +132,8 @@
|
||||
| PPC_OPCODE_POWER6 | PPC_OPCODE_POWER7 | PPC_OPCODE_ALTIVEC
|
||||
| PPC_OPCODE_VSX),
|
||||
0 },
|
||||
+ { "pmr", (PPC_OPCODE_PMR),
|
||||
+ 0 },
|
||||
{ "ppc", (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32),
|
||||
0 },
|
||||
{ "ppc32", (PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_32),
|
||||
@@ -1,37 +0,0 @@
|
||||
http://sourceware.org/bugzilla/show_bug.cgi?id=10340
|
||||
|
||||
Signed-off-by: Sven Rebhan <odinshorse@googlemail.com>
|
||||
|
||||
Always try to prepend the sysroot prefix to absolute filenames first.
|
||||
|
||||
Index: binutils-2.21/ld/ldfile.c
|
||||
===================================================================
|
||||
--- binutils-2.21.orig/ld/ldfile.c
|
||||
+++ binutils-2.21/ld/ldfile.c
|
||||
@@ -372,18 +372,24 @@ ldfile_open_file_search (const char *arc
|
||||
directory first. */
|
||||
if (! entry->is_archive)
|
||||
{
|
||||
- if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
|
||||
+ /* For absolute pathnames, try to always open the file in the
|
||||
+ sysroot first. If this fails, try to open the file at the
|
||||
+ given location. */
|
||||
+ entry->sysrooted = is_sysrooted_pathname(entry->filename, FALSE);
|
||||
+ if (IS_ABSOLUTE_PATH (entry->filename) && ld_sysroot && ! entry->sysrooted)
|
||||
{
|
||||
char *name = concat (ld_sysroot, entry->filename,
|
||||
(const char *) NULL);
|
||||
if (ldfile_try_open_bfd (name, entry))
|
||||
{
|
||||
entry->filename = name;
|
||||
+ entry->sysrooted = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
free (name);
|
||||
}
|
||||
- else if (ldfile_try_open_bfd (entry->filename, entry))
|
||||
+
|
||||
+ if (ldfile_try_open_bfd (entry->filename, entry))
|
||||
{
|
||||
entry->sysrooted = IS_ABSOLUTE_PATH (entry->filename)
|
||||
&& is_sysrooted_pathname (entry->filename, TRUE);
|
||||
@@ -1,29 +0,0 @@
|
||||
# "-fPIE" always triggers segmentation fault in ld.so.1 on mips platform,
|
||||
# which was first saw on dbus-daemon. Below borrow the binutils fix from
|
||||
# binutils bugzilla:
|
||||
#
|
||||
# http://sourceware.org/bugzilla/show_bug.cgi?id=10858
|
||||
#
|
||||
# Its commit message says:
|
||||
# * elfxx-mips.c (mips_elf_create_dynamic_relocation): Use section
|
||||
# sym dynindx for relocs against defined syms in PIEs.
|
||||
#
|
||||
# It's in upstream CVS now (rev 1.267), but not in current release
|
||||
#
|
||||
# By Kevin Tian <kevin.tian@intel.com>, 2010-07-15
|
||||
|
||||
diff --git a/elfxx-mips.c b/elfxx-mips.c
|
||||
index 3a1c8ba..f6c2c1c 100644
|
||||
--- binutils-2.20.1.orig/bfd/elfxx-mips.c
|
||||
+++ binutils-2.20.1/bfd/elfxx-mips.c
|
||||
@@ -5688,9 +5688,7 @@ mips_elf_create_dynamic_relocation (bfd *output_bfd,
|
||||
|
||||
/* We must now calculate the dynamic symbol table index to use
|
||||
in the relocation. */
|
||||
- if (h != NULL
|
||||
- && (!h->root.def_regular
|
||||
- || (info->shared && !info->symbolic && !h->root.forced_local)))
|
||||
+ if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
|
||||
{
|
||||
indx = h->root.dynindx;
|
||||
if (SGI_COMPAT (output_bfd))
|
||||
@@ -1,253 +0,0 @@
|
||||
This patch is recived from Mark Hatle
|
||||
|
||||
purpose: warn for uses of system directories when cross linking
|
||||
|
||||
Signed-Off-By: Mark Hatle <mark.hatle@windriver.com>
|
||||
|
||||
Code Merged from Sourcery G++ binutils 2.19 - 4.4-277
|
||||
|
||||
2008-07-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
ld/
|
||||
* ld.h (args_type): Add error_poison_system_directories.
|
||||
* ld.texinfo (--error-poison-system-directories): Document.
|
||||
* ldfile.c (ldfile_add_library_path): Check
|
||||
command_line.error_poison_system_directories.
|
||||
* ldmain.c (main): Initialize
|
||||
command_line.error_poison_system_directories.
|
||||
* lexsup.c (enum option_values): Add
|
||||
OPTION_ERROR_POISON_SYSTEM_DIRECTORIES.
|
||||
(ld_options): Add --error-poison-system-directories.
|
||||
(parse_args): Handle new option.
|
||||
|
||||
2007-06-13 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
ld/
|
||||
* config.in: Regenerate.
|
||||
* ld.h (args_type): Add poison_system_directories.
|
||||
* ld.texinfo (--no-poison-system-directories): Document.
|
||||
* ldfile.c (ldfile_add_library_path): Check
|
||||
command_line.poison_system_directories.
|
||||
* ldmain.c (main): Initialize
|
||||
command_line.poison_system_directories.
|
||||
* lexsup.c (enum option_values): Add
|
||||
OPTION_NO_POISON_SYSTEM_DIRECTORIES.
|
||||
(ld_options): Add --no-poison-system-directories.
|
||||
(parse_args): Handle new option.
|
||||
|
||||
2007-04-20 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ binutils 2.17:
|
||||
|
||||
2007-03-20 Joseph Myers <joseph@codesourcery.com>
|
||||
Based on patch by Mark Hatle <mark.hatle@windriver.com>.
|
||||
ld/
|
||||
* configure.in (--enable-poison-system-directories): New option.
|
||||
* configure, config.in: Regenerate.
|
||||
* ldfile.c (ldfile_add_library_path): If
|
||||
ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
|
||||
/usr/lib, /usr/local/lib or /usr/X11R6/lib.
|
||||
|
||||
Index: binutils-2.20.1/ld/config.in
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/config.in
|
||||
+++ binutils-2.20.1/ld/config.in
|
||||
@@ -4,6 +4,9 @@
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
+/* Define to warn for use of native system library directories */
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+
|
||||
/* Additional extension a shared object might have. */
|
||||
#undef EXTRA_SHLIB_EXTENSION
|
||||
|
||||
Index: binutils-2.20.1/ld/configure.in
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/configure.in
|
||||
+++ binutils-2.20.1/ld/configure.in
|
||||
@@ -69,6 +69,16 @@ AC_SUBST(use_sysroot)
|
||||
AC_SUBST(TARGET_SYSTEM_ROOT)
|
||||
AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system library directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system library directories])
|
||||
+fi
|
||||
+
|
||||
AC_ARG_ENABLE([got],
|
||||
AS_HELP_STRING([--enable-got=<type>],
|
||||
[GOT handling scheme (target, single, negative, multigot)]),
|
||||
Index: binutils-2.20.1/ld/ld.h
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/ld.h
|
||||
+++ binutils-2.20.1/ld/ld.h
|
||||
@@ -176,6 +176,14 @@ typedef struct {
|
||||
input files. */
|
||||
bfd_boolean accept_unknown_input_arch;
|
||||
|
||||
+ /* If TRUE (the default) warn for uses of system directories when
|
||||
+ cross linking. */
|
||||
+ bfd_boolean poison_system_directories;
|
||||
+
|
||||
+ /* If TRUE (default FALSE) give an error for uses of system
|
||||
+ directories when cross linking instead of a warning. */
|
||||
+ bfd_boolean error_poison_system_directories;
|
||||
+
|
||||
/* Big or little endian as set on command line. */
|
||||
enum endian_enum endian;
|
||||
|
||||
Index: binutils-2.20.1/ld/ld.texinfo
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/ld.texinfo
|
||||
+++ binutils-2.20.1/ld/ld.texinfo
|
||||
@@ -2084,6 +2084,18 @@ string identifying the original linked f
|
||||
|
||||
Passing @code{none} for @var{style} disables the setting from any
|
||||
@code{--build-id} options earlier on the command line.
|
||||
+
|
||||
+@kindex --no-poison-system-directories
|
||||
+@item --no-poison-system-directories
|
||||
+Do not warn for @option{-L} options using system directories such as
|
||||
+@file{/usr/lib} when cross linking. This option is intended for use
|
||||
+in chroot environments when such directories contain the correct
|
||||
+libraries for the target system rather than the host.
|
||||
+
|
||||
+@kindex --error-poison-system-directories
|
||||
+@item --error-poison-system-directories
|
||||
+Give an error instead of a warning for @option{-L} options using
|
||||
+system directories when cross linking.
|
||||
@end table
|
||||
|
||||
@c man end
|
||||
Index: binutils-2.20.1/ld/ldfile.c
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/ldfile.c
|
||||
+++ binutils-2.20.1/ld/ldfile.c
|
||||
@@ -120,6 +120,23 @@ ldfile_add_library_path (const char *nam
|
||||
{
|
||||
new_dirs->name = xstrdup (name);
|
||||
new_dirs->sysrooted = is_sysrooted_pathname (name, FALSE);
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (command_line.poison_system_directories
|
||||
+ && ((!strncmp (name, "/lib", 4))
|
||||
+ || (!strncmp (name, "/usr/lib", 8))
|
||||
+ || (!strncmp (name, "/usr/local/lib", 14))
|
||||
+ || (!strncmp (name, "/usr/X11R6/lib", 14))))
|
||||
+ {
|
||||
+ if (command_line.error_poison_system_directories)
|
||||
+ einfo (_("%X%P: error: library search path \"%s\" is unsafe for "
|
||||
+ "cross-compilation\n"), name);
|
||||
+ else
|
||||
+ einfo (_("%P: warning: library search path \"%s\" is unsafe for "
|
||||
+ "cross-compilation\n"), name);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
}
|
||||
}
|
||||
|
||||
Index: binutils-2.20.1/ld/ldmain.c
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/ldmain.c
|
||||
+++ binutils-2.20.1/ld/ldmain.c
|
||||
@@ -252,6 +252,8 @@ main (int argc, char **argv)
|
||||
command_line.warn_mismatch = TRUE;
|
||||
command_line.warn_search_mismatch = TRUE;
|
||||
command_line.check_section_addresses = -1;
|
||||
+ command_line.poison_system_directories = TRUE;
|
||||
+ command_line.error_poison_system_directories = FALSE;
|
||||
|
||||
/* We initialize DEMANGLING based on the environment variable
|
||||
COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
|
||||
Index: binutils-2.20.1/ld/lexsup.c
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/ld/lexsup.c
|
||||
+++ binutils-2.20.1/ld/lexsup.c
|
||||
@@ -166,7 +166,9 @@ enum option_values
|
||||
OPTION_WARN_SHARED_TEXTREL,
|
||||
OPTION_WARN_ALTERNATE_EM,
|
||||
OPTION_REDUCE_MEMORY_OVERHEADS,
|
||||
- OPTION_DEFAULT_SCRIPT
|
||||
+ OPTION_DEFAULT_SCRIPT,
|
||||
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
|
||||
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES
|
||||
};
|
||||
|
||||
/* The long options. This structure is used for both the option
|
||||
@@ -575,6 +577,14 @@ static const struct ld_option ld_options
|
||||
TWO_DASHES },
|
||||
{ {"wrap", required_argument, NULL, OPTION_WRAP},
|
||||
'\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES },
|
||||
+ { {"no-poison-system-directories", no_argument, NULL,
|
||||
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES},
|
||||
+ '\0', NULL, N_("Do not warn for -L options using system directories"),
|
||||
+ TWO_DASHES },
|
||||
+ { {"error-poison-system-directories", no_argument, NULL,
|
||||
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES},
|
||||
+ '\0', NULL, N_("Give an error for -L options using system directories"),
|
||||
+ TWO_DASHES },
|
||||
};
|
||||
|
||||
#define OPTION_COUNT ARRAY_SIZE (ld_options)
|
||||
@@ -1480,6 +1490,14 @@ parse_args (unsigned argc, char **argv)
|
||||
einfo (_("%P%X: --hash-size needs a numeric argument\n"));
|
||||
}
|
||||
break;
|
||||
+
|
||||
+ case OPTION_NO_POISON_SYSTEM_DIRECTORIES:
|
||||
+ command_line.poison_system_directories = FALSE;
|
||||
+ break;
|
||||
+
|
||||
+ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES:
|
||||
+ command_line.error_poison_system_directories = TRUE;
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
|
||||
diff -ur binutils-2.20.1.orig/ld/configure binutils-2.20.1/ld/configure
|
||||
--- binutils-2.20.1.orig/ld/configure 2010-03-03 08:06:22.000000000 -0600
|
||||
+++ binutils-2.20.1/ld/configure 2010-09-30 11:19:35.776990594 -0500
|
||||
@@ -901,6 +904,7 @@
|
||||
enable_targets
|
||||
enable_64_bit_bfd
|
||||
with_sysroot
|
||||
+enable_poison_system_directories
|
||||
enable_got
|
||||
enable_werror
|
||||
enable_build_warnings
|
||||
@@ -1548,6 +1552,8 @@
|
||||
(and sometimes confusing) to the casual installer
|
||||
--enable-targets alternative target configurations
|
||||
--enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system library directories
|
||||
--enable-got=<type> GOT handling scheme (target, single, negative,
|
||||
multigot)
|
||||
--enable-werror treat compile warnings as errors
|
||||
@@ -4302,6 +4334,19 @@
|
||||
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Check whether --enable-got was given.
|
||||
if test "${enable_got+set}" = set; then :
|
||||
enableval=$enable_got; case "${enableval}" in
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
--- binutils-2.18.orig/configure
|
||||
+++ binutils-2.18/configure
|
||||
@@ -2206,7 +2206,7 @@
|
||||
am33_2.0-*-linux*)
|
||||
noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
|
||||
;;
|
||||
- sh-*-linux*)
|
||||
+ sh*-*-linux*)
|
||||
noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
|
||||
;;
|
||||
sh*-*-pe|mips*-*-pe|*arm-wince-pe)
|
||||
@@ -2504,7 +2504,7 @@
|
||||
romp-*-*)
|
||||
noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
|
||||
;;
|
||||
- sh-*-* | sh64-*-*)
|
||||
+ sh*-*-* | sh64-*-*)
|
||||
case "${host}" in
|
||||
i[3456789]86-*-vsta) ;; # don't add gprof back in
|
||||
i[3456789]86-*-go32*) ;; # don't add gprof back in
|
||||
--- binutils-2.18.orig/gprof/configure
|
||||
+++ binutils-2.18/gprof/configure
|
||||
@@ -4124,6 +4124,11 @@
|
||||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
+linux-uclibc*)
|
||||
+ lt_cv_deplibs_check_method=pass_all
|
||||
+ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
|
||||
+ ;;
|
||||
+
|
||||
netbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
## 001_ld_makefile_patch.dpatch
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Description: correct where ld scripts are installed
|
||||
## DP: Author: Chris Chimelis <chris@debian.org>
|
||||
## DP: Upstream status: N/A
|
||||
## DP: Date: ??
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
|
||||
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
|
||||
|
||||
case "$1" in
|
||||
-patch) patch $patch_opts -p1 < $0;;
|
||||
-unpatch) patch $patch_opts -p1 -R < $0;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
@DPATCH@
|
||||
--- binutils-2.16.91.0.1/ld/Makefile.am
|
||||
+++ binutils-2.16.91.0.1/ld/Makefile.am
|
||||
@@ -20,7 +20,7 @@
|
||||
# We put the scripts in the directory $(scriptdir)/ldscripts.
|
||||
# We can't put the scripts in $(datadir) because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
-scriptdir = $(tooldir)/lib
|
||||
+scriptdir = $(libdir)
|
||||
|
||||
EMUL = @EMUL@
|
||||
EMULATION_OFILES = @EMULATION_OFILES@
|
||||
--- binutils-2.16.91.0.1/ld/Makefile.in
|
||||
+++ binutils-2.16.91.0.1/ld/Makefile.in
|
||||
@@ -268,7 +268,7 @@
|
||||
# We put the scripts in the directory $(scriptdir)/ldscripts.
|
||||
# We can't put the scripts in $(datadir) because the SEARCH_DIR
|
||||
# directives need to be different for native and cross linkers.
|
||||
-scriptdir = $(tooldir)/lib
|
||||
+scriptdir = $(libdir)
|
||||
BASEDIR = $(srcdir)/..
|
||||
BFDDIR = $(BASEDIR)/bfd
|
||||
INCDIR = $(BASEDIR)/include
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Specify which filename is causing an error if the filename is a
|
||||
## DP: directory. (#45832)
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
|
||||
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
|
||||
|
||||
case "$1" in
|
||||
-patch) patch $patch_opts -p1 < $0;;
|
||||
-unpatch) patch $patch_opts -p1 -R < $0;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
@DPATCH@
|
||||
diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
|
||||
--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c 2003-07-23 16:08:09.000000000 +0100
|
||||
+++ binutils-2.14.90.0.6/bfd/opncls.c 2003-09-10 22:35:00.000000000 +0100
|
||||
@@ -150,6 +150,13 @@
|
||||
{
|
||||
bfd *nbfd;
|
||||
const bfd_target *target_vec;
|
||||
+ struct stat s;
|
||||
+
|
||||
+ if (stat (filename, &s) == 0)
|
||||
+ if (S_ISDIR(s.st_mode)) {
|
||||
+ bfd_set_error (bfd_error_file_not_recognized);
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
nbfd = _bfd_new_bfd ();
|
||||
if (nbfd == NULL)
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
|
||||
##
|
||||
## All lines beginning with `## DP:' are a description of the patch.
|
||||
## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
|
||||
## DP: cases where -rpath isn't specified. (#151024)
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
|
||||
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
|
||||
|
||||
case "$1" in
|
||||
-patch) patch $patch_opts -p1 < $0;;
|
||||
-unpatch) patch $patch_opts -p1 -R < $0;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
@DPATCH@
|
||||
diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
|
||||
--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:58.000000000 +0100
|
||||
+++ binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:59.000000000 +0100
|
||||
@@ -692,6 +692,8 @@
|
||||
&& command_line.rpath == NULL)
|
||||
{
|
||||
lib_path = (const char *) getenv ("LD_RUN_PATH");
|
||||
+ if ((lib_path) && (strlen (lib_path) == 0))
|
||||
+ lib_path = NULL;
|
||||
if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
|
||||
force))
|
||||
break;
|
||||
@@ -871,6 +873,8 @@
|
||||
rpath = command_line.rpath;
|
||||
if (rpath == NULL)
|
||||
rpath = (const char *) getenv ("LD_RUN_PATH");
|
||||
+ if ((rpath) && (strlen (rpath) == 0))
|
||||
+ rpath = NULL;
|
||||
if (! (bfd_elf_size_dynamic_sections
|
||||
(output_bfd, command_line.soname, rpath,
|
||||
command_line.filter_shlib,
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
Source: Khem Raj <raj.khem@gmail.com>
|
||||
Disposition: submit upstream.
|
||||
|
||||
Description:
|
||||
|
||||
We do not need to have the libtool patch anymore for binutils after
|
||||
libtool has been updated upstream it include support for it. However
|
||||
for building gas natively on uclibc systems we have to link it with
|
||||
-lm so that it picks up missing symbols.
|
||||
|
||||
/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_from_double':
|
||||
floatformat.c:(.text+0x1ec): undefined reference to `frexp'
|
||||
floatformat.c:(.text+0x2f8): undefined reference to `ldexp'
|
||||
/local/build_area/BUILD/arm_v5t_le_uclibc/binutils-2.17.50/objdir/libiberty/pic/libiberty.a(floatformat.o): In function `floatformat_to_double':
|
||||
floatformat.c:(.text+0x38a): undefined reference to `ldexp'
|
||||
floatformat.c:(.text+0x3d2): undefined reference to `ldexp'
|
||||
floatformat.c:(.text+0x43e): undefined reference to `ldexp' floatformat.c:(.text+0x4e2): undefined reference to `ldexp'
|
||||
collect2: ld returned 1 exit status
|
||||
make[4]: *** [as-new] Error 1
|
||||
|
||||
Index: binutils-2.17.50/gas/configure.tgt
|
||||
===================================================================
|
||||
--- binutils-2.17.50.orig/gas/configure.tgt
|
||||
+++ binutils-2.17.50/gas/configure.tgt
|
||||
@@ -408,6 +408,12 @@ case ${generic_target} in
|
||||
*-*-netware) fmt=elf em=netware ;;
|
||||
esac
|
||||
|
||||
+case ${generic_target} in
|
||||
+ arm-*-*uclibc*)
|
||||
+ need_libm=yes
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
case ${cpu_type} in
|
||||
alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z80 | z8k)
|
||||
bfd_gas=yes
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
## 127_x86_64_i386_biarch.dpatch
|
||||
##
|
||||
## DP: Description: Add (/usr)/lib32 to the search paths on x86_64.
|
||||
## DP: Author: Aurelien Jarno <aurel32.debian.org>
|
||||
## DP: Upstream status: Debian specific
|
||||
#
|
||||
# Hacked to apply with quilt
|
||||
# Adapted to binutils 2.18.50.0.7
|
||||
|
||||
--- binutils/ld/emulparams/elf_i386.sh
|
||||
+++ binutils/ld/emulparams/elf_i386.sh
|
||||
@@ -12,3 +12,13 @@
|
||||
SEPARATE_GOTPLT=12
|
||||
SHARABLE_SECTIONS=yes
|
||||
IREL_IN_PLT=
|
||||
+
|
||||
+# Linux modify the default library search path to first include
|
||||
+# a 32-bit specific directory.
|
||||
+case "$target" in
|
||||
+ x86_64*-linux* | i[3-7]86*-linux* | x86_64*-kfreebsd*-gnu | i[3-7]86*-kfreebsd*-gnu)
|
||||
+ case "$EMULATION_NAME" in
|
||||
+ *i386*) LIBPATH_SUFFIX=32 ;;
|
||||
+ esac
|
||||
+ ;;
|
||||
+esac
|
||||
@@ -1,20 +0,0 @@
|
||||
don't let the distro compiler point to the wrong installation location
|
||||
|
||||
Thanks to RP for helping find the source code causing the issue.
|
||||
|
||||
2010/08/13
|
||||
Nitin A Kamble <nitin.a.kamble@intel.com>
|
||||
Index: binutils-2.20.1/libiberty/Makefile.in
|
||||
===================================================================
|
||||
--- binutils-2.20.1.orig/libiberty/Makefile.in
|
||||
+++ binutils-2.20.1/libiberty/Makefile.in
|
||||
@@ -327,7 +327,8 @@ install: install_to_$(INSTALL_DEST) inst
|
||||
# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
|
||||
# default multilib, so we have to take CFLAGS into account as well,
|
||||
# since it will be passed the multilib flags.
|
||||
-MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
|
||||
+#MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
|
||||
+MULTIOSDIR = ""
|
||||
install_to_libdir: all
|
||||
${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
|
||||
$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,36 +0,0 @@
|
||||
Enabling sysroot support in libtool exposed a bug where the final
|
||||
library had an RPATH encoded into it which still pointed to the
|
||||
sysroot. This works around the issue until it gets sorted out
|
||||
upstream.
|
||||
|
||||
Fix suggested by Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
|
||||
|
||||
diff -urN binutils-2.21.orig//ltmain.sh binutils-2.21/ltmain.sh
|
||||
--- binutils-2.21.orig//ltmain.sh 2011-01-18 11:50:40.821710085 -0800
|
||||
+++ binutils-2.21/ltmain.sh 2011-01-18 11:51:38.774952785 -0800
|
||||
@@ -8035,9 +8035,11 @@
|
||||
test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
|
||||
for libdir in $rpath; do
|
||||
if test -n "$hardcode_libdir_flag_spec"; then
|
||||
+ func_replace_sysroot "$libdir"
|
||||
+ libdir=$func_replace_sysroot_result
|
||||
+ func_stripname '=' '' "$libdir"
|
||||
+ libdir=$func_stripname_result
|
||||
if test -n "$hardcode_libdir_separator"; then
|
||||
- func_replace_sysroot "$libdir"
|
||||
- libdir=$func_replace_sysroot_result
|
||||
if test -z "$hardcode_libdirs"; then
|
||||
hardcode_libdirs="$libdir"
|
||||
else
|
||||
@@ -8770,6 +8772,10 @@
|
||||
hardcode_libdirs=
|
||||
for libdir in $compile_rpath $finalize_rpath; do
|
||||
if test -n "$hardcode_libdir_flag_spec"; then
|
||||
+ func_replace_sysroot "$libdir"
|
||||
+ libdir=$func_replace_sysroot_result
|
||||
+ func_stripname '=' '' "$libdir"
|
||||
+ libdir=$func_stripname_result
|
||||
if test -n "$hardcode_libdir_separator"; then
|
||||
if test -z "$hardcode_libdirs"; then
|
||||
hardcode_libdirs="$libdir"
|
||||
@@ -1,22 +0,0 @@
|
||||
inherit cross-canadian
|
||||
|
||||
DESCRIPTION = "A GNU collection of cross-canadian binary utilities for ${TARGET_ARCH} target"
|
||||
PN = "binutils-cross-canadian-${TRANSLATED_TARGET_ARCH}"
|
||||
BPN = "binutils"
|
||||
|
||||
DEPENDS = "flex-native bison-native virtual/${HOST_PREFIX}gcc-crosssdk virtual/libc-nativesdk zlib-nativesdk gettext-nativesdk"
|
||||
EXTRA_OECONF = "--with-sysroot=${SDKPATH}/sysroots/${TARGET_SYS} \
|
||||
--program-prefix=${TARGET_PREFIX} \
|
||||
--disable-werror"
|
||||
|
||||
do_install () {
|
||||
autotools_do_install
|
||||
|
||||
# We're not interested in the libs or headers, these would come from the
|
||||
# nativesdk or target version of the binutils recipe
|
||||
rm -rf ${D}${prefix}/${TARGET_SYS}
|
||||
rm -f ${D}${libdir}/libbfd*
|
||||
rm -f ${D}${libdir}/libiberty*
|
||||
rm -f ${D}${libdir}/libopcodes*
|
||||
rm -f ${D}${includedir}/*.h
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
require binutils_${PV}.bb
|
||||
require binutils-cross-canadian.inc
|
||||
PR = "r6"
|
||||
@@ -1,30 +0,0 @@
|
||||
inherit cross
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}binutils"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
INHIBIT_AUTOTOOLS_DEPS = "1"
|
||||
|
||||
EXTRA_OECONF = "--with-sysroot=${STAGING_DIR_TARGET} \
|
||||
--program-prefix=${TARGET_PREFIX} \
|
||||
--disable-install-libbfd \
|
||||
--disable-werror \
|
||||
--disable-nls \
|
||||
--enable-poison-system-directories"
|
||||
|
||||
do_install () {
|
||||
oe_runmake 'DESTDIR=${D}' install
|
||||
|
||||
# We don't really need these, so we'll remove them...
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${libdir_native}/libiberty.a
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${prefix_native}/${TARGET_SYS}
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${prefix_native}/lib/ldscripts
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${prefix_native}/share/info
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${prefix_native}/share/locale
|
||||
rm -rf ${D}${STAGING_DIR_NATIVE}${prefix_native}/share/man
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/share || :
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/${libdir}/gcc-lib || :
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/${libdir}64/gcc-lib || :
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/${libdir} || :
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/${libdir}64 || :
|
||||
rmdir ${D}${STAGING_DIR_NATIVE}${prefix_native}/${prefix} || :
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
require binutils_${PV}.bb
|
||||
require binutils-cross.inc
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
require binutils-cross_${PV}.bb
|
||||
|
||||
inherit crosssdk
|
||||
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}binutils-crosssdk"
|
||||
|
||||
PR = "r4"
|
||||
|
||||
do_configure_prepend () {
|
||||
sed -i 's#/usr/local/lib /lib /usr/lib#${SDKPATHNATIVE}/lib ${SDKPATHNATIVE}/usr/lib /usr/local/lib /lib /usr/lib#' ${S}/ld/configure.tgt
|
||||
}
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
SUMMARY = "A GNU collection of binary utilities"
|
||||
DESCRIPTION = "The GNU Binutils are a collection of binary tools. \
|
||||
The main ones are ld (GNU Linker), and as (GNU Assembler). This \
|
||||
package also includes addition tools such as addr2line (Converts \
|
||||
addresses into filenames and line numbers), ar (utility for creating, \
|
||||
modifying and extracting archives), nm (list symbols in object \
|
||||
files), objcopy (copy and translate object files), objdump (Display \
|
||||
object information), and other tools and related libraries."
|
||||
HOMEPAGE = "http://www.gnu.org/software/binutils/"
|
||||
BUGTRACKER = "http://sourceware.org/bugzilla/"
|
||||
SECTION = "devel"
|
||||
LICENSE = "GPLv3"
|
||||
|
||||
DEPENDS = "flex-native bison-native"
|
||||
|
||||
inherit autotools gettext
|
||||
|
||||
PACKAGES += "${PN}-symlinks"
|
||||
|
||||
FILES_${PN} = " \
|
||||
${bindir}/${TARGET_PREFIX}* \
|
||||
${libdir}/lib*-*.so \
|
||||
${prefix}/${TARGET_SYS}/bin/*"
|
||||
|
||||
FILES_${PN}-dev = " \
|
||||
${includedir} \
|
||||
${libdir}/*.a \
|
||||
${libdir}/*.la \
|
||||
${libdir}/libbfd.so \
|
||||
${libdir}/libopcodes.so"
|
||||
|
||||
FILES_${PN}-symlinks = " \
|
||||
${bindir}/addr2line \
|
||||
${bindir}/as \
|
||||
${bindir}/c++filt \
|
||||
${bindir}/gprof \
|
||||
${bindir}/ld \
|
||||
${bindir}/nm \
|
||||
${bindir}/objcopy \
|
||||
${bindir}/objdump \
|
||||
${bindir}/ranlib \
|
||||
${bindir}/readelf \
|
||||
${bindir}/size \
|
||||
${bindir}/strip"
|
||||
|
||||
B = "${S}/build.${HOST_SYS}.${TARGET_SYS}"
|
||||
|
||||
EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \
|
||||
--enable-install-libbfd \
|
||||
--enable-shared"
|
||||
|
||||
EXTRA_OECONF_virtclass-native = "--enable-target=all --enable-64-bit-bfd --enable-install-libbfd"
|
||||
|
||||
# This is necessary due to a bug in the binutils Makefiles
|
||||
# EXTRA_OEMAKE = "configure-build-libiberty all"
|
||||
|
||||
export AR = "${HOST_PREFIX}ar"
|
||||
export AS = "${HOST_PREFIX}as"
|
||||
export LD = "${HOST_PREFIX}ld"
|
||||
export NM = "${HOST_PREFIX}nm"
|
||||
export RANLIB = "${HOST_PREFIX}ranlib"
|
||||
export OBJCOPY = "${HOST_PREFIX}objcopy"
|
||||
export OBJDUMP = "${HOST_PREFIX}objdump"
|
||||
|
||||
export AR_FOR_TARGET = "${TARGET_PREFIX}ar"
|
||||
export AS_FOR_TARGET = "${TARGET_PREFIX}as"
|
||||
export LD_FOR_TARGET = "${TARGET_PREFIX}ld"
|
||||
export NM_FOR_TARGET = "${TARGET_PREFIX}nm"
|
||||
export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib"
|
||||
|
||||
export CC_FOR_HOST = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
|
||||
export CXX_FOR_HOST = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}"
|
||||
|
||||
export CC_FOR_BUILD = "${BUILD_CC}"
|
||||
export CPP_FOR_BUILD = "${BUILD_CPP}"
|
||||
export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
|
||||
|
||||
do_configure () {
|
||||
(cd ${S}; gnu-configize) || die "Failed to run gnu-configize"
|
||||
oe_runconf
|
||||
#
|
||||
# must prime config.cache to ensure the build of libiberty
|
||||
#
|
||||
mkdir -p ${B}/build-${BUILD_SYS}
|
||||
for i in ${CONFIG_SITE}; do
|
||||
cat $i >> ${B}/build-${BUILD_SYS}/config.cache
|
||||
done
|
||||
}
|
||||
|
||||
do_install () {
|
||||
autotools_do_install
|
||||
|
||||
# We don't really need these, so we'll remove them...
|
||||
rm -rf ${D}${libdir}/ldscripts
|
||||
|
||||
# Fix the /usr/${TARGET_SYS}/bin/* links
|
||||
for l in ${D}${prefix}/${TARGET_SYS}/bin/*; do
|
||||
rm -f $l
|
||||
ln -sf `echo ${prefix}/${TARGET_SYS}/bin \
|
||||
| tr -s / \
|
||||
| sed -e 's,^/,,' -e 's,[^/]*,..,g'`${bindir}/${TARGET_PREFIX}`basename $l` $l
|
||||
done
|
||||
|
||||
# Install the libiberty header
|
||||
install -d ${D}${includedir}
|
||||
install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
|
||||
install -m 644 ${S}/include/libiberty.h ${D}${includedir}
|
||||
|
||||
cd ${D}${bindir}
|
||||
|
||||
# Symlinks for ease of running these on the native target
|
||||
for p in ${TARGET_PREFIX}* ; do
|
||||
ln -sf $p `echo $p | sed -e s,${TARGET_PREFIX},,`
|
||||
done
|
||||
|
||||
rm ${D}${bindir}/ar ${D}${bindir}/strings
|
||||
}
|
||||
|
||||
do_install_virtclass-native () {
|
||||
autotools_do_install
|
||||
|
||||
# Install the libiberty header
|
||||
install -d ${D}${includedir}
|
||||
install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
|
||||
install -m 644 ${S}/include/libiberty.h ${D}${includedir}
|
||||
|
||||
# We only want libiberty, libbfd and libopcodes
|
||||
rm -rf ${D}${bindir}
|
||||
rm -rf ${D}${prefix}/${TARGET_SYS}
|
||||
rm -rf ${D}${prefix}/lib/ldscripts
|
||||
rm -rf ${D}${prefix}/share/info
|
||||
rm -rf ${D}${prefix}/share/locale
|
||||
rm -rf ${D}${prefix}/share/man
|
||||
rmdir ${D}${prefix}/share || :
|
||||
rmdir ${D}/${libdir}/gcc-lib || :
|
||||
rmdir ${D}/${libdir}64/gcc-lib || :
|
||||
rmdir ${D}/${libdir} || :
|
||||
rmdir ${D}/${libdir}64 || :
|
||||
}
|
||||
|
||||
pkg_postinst_${PN}-symlinks () {
|
||||
update-alternatives --install ${bindir}/ar ar ${TARGET_SYS}-ar 100
|
||||
update-alternatives --install ${bindir}/strings strings ${TARGET_SYS}-strings 100
|
||||
}
|
||||
|
||||
pkg_prerm_${PN}-symlinks () {
|
||||
update-alternatives --remove ar ${TARGET_SYS}-ar
|
||||
update-alternatives --remove strings ${TARGET_SYS}-strings
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
require binutils.inc
|
||||
|
||||
PR = "r9"
|
||||
|
||||
LIC_FILES_CHKSUM="\
|
||||
file://src-release;endline=17;md5=4830a9ef968f3b18dd5e9f2c00db2d35\
|
||||
file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
|
||||
file://COPYING.LIB;md5=9f604d8a4f8e74f4f5140845a21b6674\
|
||||
file://COPYING3;md5=d32239bcb673463ab874e80d47fae504\
|
||||
file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6\
|
||||
file://gas/COPYING;md5=d32239bcb673463ab874e80d47fae504\
|
||||
file://include/COPYING;md5=59530bdf33659b29e73d4adb9f9f6552\
|
||||
file://include/COPYING3;md5=d32239bcb673463ab874e80d47fae504\
|
||||
file://libiberty/COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7\
|
||||
file://bfd/COPYING;md5=d32239bcb673463ab874e80d47fae504\
|
||||
"
|
||||
|
||||
SRC_URI = "\
|
||||
${GNU_MIRROR}/binutils/binutils-${PV}a.tar.bz2 \
|
||||
file://binutils-uclibc-100-uclibc-conf.patch \
|
||||
file://110-arm-eabi-conf.patch \
|
||||
file://binutils-uclibc-300-001_ld_makefile_patch.patch \
|
||||
file://binutils-uclibc-300-006_better_file_error.patch \
|
||||
file://binutils-uclibc-300-012_check_ldrunpath_length.patch \
|
||||
file://binutils-uclibc-gas-needs-libm.patch \
|
||||
file://binutils-x86_64_i386_biarch.patch \
|
||||
file://binutils-mips-pie.patch \
|
||||
file://libtool-2.4-update.patch \
|
||||
file://binutils-2.19.1-ld-sysroot.patch \
|
||||
file://libiberty_path_fix.patch \
|
||||
file://binutils-poison.patch \
|
||||
file://libtool-rpath-fix.patch \
|
||||
file://152_arm_branches_to_weak_symbols.patch \
|
||||
file://200_elflink_%B_fixes.patch \
|
||||
file://201_elflink_improve_noaddneeded_errors.patch \
|
||||
file://202_elflink_noaddneeded_vs_weak.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "2b9dc8f2b7dbd5ec5992c6e29de0b764"
|
||||
SRC_URI[sha256sum] = "71d37c96451333c5c0b84b170169fdcb138bbb27397dc06281905d9717c8ed64"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
|
||||
do_configure_prepend() {
|
||||
sed -i -e 's: -Werror::g' ${S}/bfd/warning.m4
|
||||
|
||||
# These aren't getting regenerated by autotools.bbclass
|
||||
for i in $(find ${S} -name "configure") ; do
|
||||
sed -i -e 's: -Werror::g' $i
|
||||
done
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
diff -urN gcc-4.2.2-orig/gcc/configure gcc-4.2.2/gcc/configure
|
||||
--- gcc-4.2.2-orig/gcc/configure 2008-08-31 23:10:56.000000000 +0200
|
||||
+++ gcc-4.2.2/gcc/configure 2008-08-31 23:03:02.000000000 +0200
|
||||
@@ -12716,6 +12716,7 @@
|
||||
esac
|
||||
saved_CFLAGS="${CFLAGS}"
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
+ CPP="${CPP_FOR_BUILD}" CPPFLAGS="${CPPFLAGS_FOR_BUILD}" \
|
||||
CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
--target=$target_alias --host=$build_alias --build=$build_alias
|
||||
diff -urN gcc-4.2.2-orig/gcc/configure.ac gcc-4.2.2/gcc/configure.ac
|
||||
--- gcc-4.2.2-orig/gcc/configure.ac 2008-08-31 23:10:53.000000000 +0200
|
||||
+++ gcc-4.2.2/gcc/configure.ac 2008-08-31 23:03:29.000000000 +0200
|
||||
@@ -1490,6 +1490,7 @@
|
||||
esac
|
||||
saved_CFLAGS="${CFLAGS}"
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
+ CPP="${CPP_FOR_BUILD}" CPPFLAGS="${CPPFLAGS_FOR_BUILD}" \
|
||||
${realsrcdir}/configure \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
--target=$target_alias --host=$build_alias --build=$build_alias
|
||||
@@ -1,12 +0,0 @@
|
||||
Index: gcc-4.3.3/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.3.3.orig/Makefile.in 2010-06-16 18:04:38.379008150 +0400
|
||||
+++ gcc-4.3.3/Makefile.in 2010-06-16 18:05:29.115006261 +0400
|
||||
@@ -148,6 +148,7 @@
|
||||
# built for the build system to override those in BASE_FLAGS_TO_PASSS.
|
||||
EXTRA_BUILD_FLAGS = \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)" \
|
||||
+ LIBCFLAGS="$(CFLAGS_FOR_BUILD)" \
|
||||
LDFLAGS="$(LDFLAGS_FOR_BUILD)"
|
||||
|
||||
# This is the list of directories to built for the host system.
|
||||
@@ -1,13 +0,0 @@
|
||||
Index: gcc-4.3.1/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/Makefile.in 2010-07-07 13:08:44.000000000 +0200
|
||||
+++ gcc-4.3.1/Makefile.in 2010-07-07 13:11:59.246625709 +0200
|
||||
@@ -149,7 +149,7 @@
|
||||
EXTRA_BUILD_FLAGS = \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)" \
|
||||
LDFLAGS="$(LDFLAGS_FOR_BUILD)" \
|
||||
- LIBCFLAGS=""
|
||||
+ LIBCFLAGS="$(CFLAGS_FOR_BUILD)"
|
||||
|
||||
# This is the list of directories to built for the host system.
|
||||
SUBDIRS = @configdirs@
|
||||
@@ -1,11 +0,0 @@
|
||||
--- gcc-3.4.6/gcc/collect2.c 2008-10-04 18:17:17.796750393 +0400
|
||||
+++ gcc-3.4.6/gcc/collect2.new 2008-10-04 18:24:10.120748711 +0400
|
||||
@@ -1534,7 +1534,7 @@ collect_execute (const char *prog, char
|
||||
if (redir)
|
||||
{
|
||||
/* Open response file. */
|
||||
- redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
|
||||
+ redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, S_IWUSR);
|
||||
|
||||
/* Duplicate the stdout and stderr file handles
|
||||
so they can be restored later. */
|
||||
@@ -1,14 +0,0 @@
|
||||
Patch for gcc3 to support gcc4-compatible (and consistent) values for -mtune= option.
|
||||
|
||||
--- gcc-3.4.4/gcc/config/arm/arm.c.org 2007-12-15 23:58:35.000000000 +0200
|
||||
+++ gcc-3.4.4/gcc/config/arm/arm.c 2007-12-16 00:20:39.000000000 +0200
|
||||
@@ -432,7 +432,9 @@
|
||||
{"arm10tdmi", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5 },
|
||||
{"arm1020t", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5 },
|
||||
{"arm926ejs", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
|
||||
+ {"arm926ej-s", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
|
||||
{"arm1026ejs", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
|
||||
+ {"arm1026ej-s", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
|
||||
{"xscale", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE },
|
||||
{"iwmmxt", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE | FL_IWMMXT },
|
||||
/* V6 Architecture Processors */
|
||||
@@ -1,40 +0,0 @@
|
||||
The patch below fixes a crash building libgfortran on arm-linux-gnueabi.
|
||||
|
||||
This target doesn't really have a 128-bit integer type, however it does use
|
||||
TImode to represent the return value of certain special ABI defined library
|
||||
functions. This results in type_for_size(TImode) being called.
|
||||
|
||||
Because TImode deosn't correspond to any gfortran integer kind
|
||||
gfc_type_for_size returns NULL and we segfault shortly after.
|
||||
|
||||
The patch below fixes this by making gfc_type_for_size handle TImode in the
|
||||
same way as the C frontend.
|
||||
|
||||
Tested on x86_64-linux and arm-linux-gnueabi.
|
||||
Applied to trunk.
|
||||
|
||||
Paul
|
||||
|
||||
2007-05-15 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
gcc/fortran/
|
||||
* trans-types.c (gfc_type_for_size): Handle signed TImode.
|
||||
|
||||
Index: gcc-4.2.1/gcc/fortran/trans-types.c
|
||||
===================================================================
|
||||
--- gcc-4.2.1/gcc/fortran/trans-types.c (revision 170435)
|
||||
+++ gcc-4.2.1/gcc/fortran/trans-types.c (working copy)
|
||||
@@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un
|
||||
if (type && bits == TYPE_PRECISION (type))
|
||||
return type;
|
||||
}
|
||||
+
|
||||
+ /* Handle TImode as a special case because it is used by some backends
|
||||
+ (eg. ARM) even though it is not available for normal use. */
|
||||
+#if HOST_BITS_PER_WIDE_INT >= 65
|
||||
+ if (bits == TYPE_PRECISION (intTI_type_node))
|
||||
+ return intTI_type_node;
|
||||
+#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1,40 +0,0 @@
|
||||
The patch below fixes a crash building libgfortran on arm-linux-gnueabi.
|
||||
|
||||
This target doesn't really have a 128-bit integer type, however it does use
|
||||
TImode to represent the return value of certain special ABI defined library
|
||||
functions. This results in type_for_size(TImode) being called.
|
||||
|
||||
Because TImode deosn't correspond to any gfortran integer kind
|
||||
gfc_type_for_size returns NULL and we segfault shortly after.
|
||||
|
||||
The patch below fixes this by making gfc_type_for_size handle TImode in the
|
||||
same way as the C frontend.
|
||||
|
||||
Tested on x86_64-linux and arm-linux-gnueabi.
|
||||
Applied to trunk.
|
||||
|
||||
Paul
|
||||
|
||||
2007-05-15 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
gcc/fortran/
|
||||
* trans-types.c (gfc_type_for_size): Handle signed TImode.
|
||||
|
||||
Index: gcc-4.2.1/gcc/fortran/trans-types.c
|
||||
===================================================================
|
||||
--- gcc-4.2.1/gcc/fortran/trans-types.c (revision 170435)
|
||||
+++ gcc-4.2.1/gcc/fortran/trans-types.c (working copy)
|
||||
@@ -1800,6 +1800,13 @@ gfc_type_for_size (unsigned bits, int un
|
||||
if (type && bits == TYPE_PRECISION (type))
|
||||
return type;
|
||||
}
|
||||
+
|
||||
+ /* Handle TImode as a special case because it is used by some backends
|
||||
+ (eg. ARM) even though it is not available for normal use. */
|
||||
+#if HOST_BITS_PER_WIDE_INT >= 64
|
||||
+ if (bits == TYPE_PRECISION (intTI_type_node))
|
||||
+ return intTI_type_node;
|
||||
+#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1,29 +0,0 @@
|
||||
diff -rupN gcc-4.2.orig/gcc/c-incpath.c gcc-4.2/gcc/c-incpath.c
|
||||
--- gcc-4.2.orig/gcc/c-incpath.c 2007-09-01 11:28:30.000000000 -0400
|
||||
+++ gcc-4.2/gcc/c-incpath.c 2008-08-17 16:56:01.000000000 -0400
|
||||
@@ -340,13 +340,18 @@ add_path (char *path, int chain, int cxx
|
||||
cpp_dir *p;
|
||||
|
||||
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
|
||||
- /* Convert all backslashes to slashes. The native CRT stat()
|
||||
- function does not recognize a directory that ends in a backslash
|
||||
- (unless it is a drive root dir, such "c:\"). Forward slashes,
|
||||
- trailing or otherwise, cause no problems for stat(). */
|
||||
- char* c;
|
||||
- for (c = path; *c; c++)
|
||||
- if (*c == '\\') *c = '/';
|
||||
+ /* Remove unnecessary trailing slashes. On some versions of MS
|
||||
+ Windows, trailing _forward_ slashes cause no problems for stat().
|
||||
+ On newer versions, stat() does not recognise a directory that ends
|
||||
+ in a '\\' or '/', unless it is a drive root dir, such as "c:/",
|
||||
+ where it is obligatory. */
|
||||
+ int pathlen = strlen (path);
|
||||
+ char* end = path + pathlen - 1;
|
||||
+ /* Preserve the lead '/' or lead "c:/". */
|
||||
+ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1);
|
||||
+
|
||||
+ for (; end > start && IS_DIR_SEPARATOR (*end); end--)
|
||||
+ *end = 0;
|
||||
#endif
|
||||
|
||||
p = XNEW (cpp_dir);
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
config/mh-mingw | 3 +++
|
||||
configure | 1 +
|
||||
configure.in | 1 +
|
||||
3 files changed, 5 insertions(+)
|
||||
|
||||
Index: gcc-4.2.3/config/mh-mingw
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ gcc-4.2.3/config/mh-mingw
|
||||
@@ -0,0 +1,3 @@
|
||||
+# Add -D__USE_MINGW_ACCESS to enable the built compiler to work on Windows
|
||||
+# Vista (see PR33281 for details).
|
||||
+BOOT_CFLAGS += -D__USE_MINGW_ACCESS
|
||||
Index: gcc-4.2.3/configure.in
|
||||
===================================================================
|
||||
--- gcc-4.2.3.orig/configure.in
|
||||
+++ gcc-4.2.3/configure.in
|
||||
@@ -929,6 +929,7 @@ case "${host}" in
|
||||
host_makefile_frag="config/mh-cygwin"
|
||||
;;
|
||||
*-mingw32*)
|
||||
+ host_makefile_frag="config/mh-mingw"
|
||||
;;
|
||||
*-interix*)
|
||||
host_makefile_frag="config/mh-interix"
|
||||
Index: gcc-4.2.3/configure
|
||||
===================================================================
|
||||
--- gcc-4.2.3.orig/configure
|
||||
+++ gcc-4.2.3/configure
|
||||
@@ -1769,6 +1769,7 @@ case "${host}" in
|
||||
host_makefile_frag="config/mh-cygwin"
|
||||
;;
|
||||
*-mingw32*)
|
||||
+ host_makefile_frag="config/mh-mingw"
|
||||
;;
|
||||
*-interix*)
|
||||
host_makefile_frag="config/mh-interix"
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
config/mh-mingw | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: gcc-4.2.3/config/mh-mingw
|
||||
===================================================================
|
||||
--- gcc-4.2.3.orig/config/mh-mingw
|
||||
+++ gcc-4.2.3/config/mh-mingw
|
||||
@@ -1,3 +1,4 @@
|
||||
# Add -D__USE_MINGW_ACCESS to enable the built compiler to work on Windows
|
||||
# Vista (see PR33281 for details).
|
||||
BOOT_CFLAGS += -D__USE_MINGW_ACCESS
|
||||
+CFLAGS += -D__USE_MINGW_ACCESS
|
||||
@@ -1,273 +0,0 @@
|
||||
require recipes-devtools/gcc/gcc-common.inc
|
||||
ARM_INSTRUCTION_SET = "arm"
|
||||
|
||||
DEPENDS =+ "mpfr gmp libmpc elfutils"
|
||||
NATIVEDEPS = "mpfr-native gmp-native gettext-native libmpc-native elfutils-native"
|
||||
|
||||
LICENSE="GCC RUNTIME LIBRARY EXCEPTION & GPLv2 & GPLv3 & LGPLv2.1 & LGPLv3"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
|
||||
file://COPYING3;md5=d32239bcb673463ab874e80d47fae504 \
|
||||
file://COPYING3.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \
|
||||
file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1 \
|
||||
file://COPYING.RUNTIME;md5=fe60d87048567d4fe8c8a0ed2448bcc8"
|
||||
|
||||
|
||||
PV = "4.5"
|
||||
PR = "r47"
|
||||
|
||||
# BINV should be incremented after updating to a revision
|
||||
# after a minor gcc release (e.g. 4.5.1 or 4.5.2) has been made
|
||||
# the value will be minor-release+1 e.g. if minor release was
|
||||
# 4.5.1 then the value below will be 2 which will mean 4.5.2
|
||||
# which will be next minor release and so on.
|
||||
|
||||
BINV = "${PV}.4"
|
||||
SRCREV = "184907"
|
||||
BRANCH = "gcc-4_5-branch"
|
||||
PR_append = "+svnr${SRCPV}"
|
||||
|
||||
SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
|
||||
file://gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch \
|
||||
file://100-uclibc-conf.patch \
|
||||
file://gcc-uclibc-locale-ctype_touplow_t.patch \
|
||||
file://cache-amnesia.patch \
|
||||
file://gcc-flags-for-build.patch \
|
||||
file://libstdc++-emit-__cxa_end_cleanup-in-text.patch \
|
||||
file://Makefile.in.patch \
|
||||
file://gcc-armv4-pass-fix-v4bx-to-ld.patch \
|
||||
file://sh4-multilib.patch \
|
||||
file://arm-lib1funcs.as-fix-mismatch-between-conditions-of-an-IT-block.patch \
|
||||
\
|
||||
file://linaro/gcc-4.5-linaro-r99297.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99298.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99299.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99300.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99301.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99302.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99303.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99304.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99305.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99306.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99307.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99308.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99310.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99312.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99313.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99314.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99315.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99316.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99318.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99319.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99320.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99321.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99322.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99323.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99324.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99325.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99326.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99327.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99332.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99335.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99336.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99337.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99338.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99339.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99340.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99341.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99342.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99343.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99344.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99345.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99346.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99348.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99349.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99351.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99352.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99353.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99354.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99355.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99356.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99357.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99358.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99359.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99360.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99361.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99363.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99364.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99365.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99366.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99367.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99368.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99369.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99371.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99372.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99373.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99374.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99375.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99376.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99377.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99378.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99379.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99380.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99381.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99383.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99384.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99385.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99388.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99391.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99392.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99393.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99395.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99396.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99397.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99398.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99402.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99403.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99404.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99405.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99406.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99407.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99408.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99409.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99410.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99411.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99412.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99413.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99415.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99416.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99417.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99418.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99419.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99420.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99421.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99423.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99424.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99425.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99426.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99429.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99432.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99433.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99434.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99435.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99436.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99437.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99439.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99440.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99441.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99442.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99443.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99444.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99449.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99450.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99451.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99452.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99453.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99454.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99455.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99464.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99465.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99466.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99468.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99473.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99475.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99478.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99479.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99480.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99483.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99488.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99489.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99494.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99495.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99498.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99502.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99503.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99504.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99506.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99507.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99510.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99511.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99514.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99516.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99519.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99521.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99522.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99523.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99524.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99525.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99528.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99529.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99530.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99531.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99532.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99533.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99534.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99536.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99537.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99540.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99548.patch \
|
||||
file://linaro/gcc-4.5-linaro-r99549.patch \
|
||||
\
|
||||
file://more-epilogues.patch \
|
||||
file://gcc-scalar-widening-pr45847.patch \
|
||||
file://gcc-arm-volatile-bitfield-fix.patch \
|
||||
\
|
||||
file://fedora/gcc43-c++-builtin-redecl.patch;striplevel=0 \
|
||||
file://fedora/gcc43-ia64-libunwind.patch;striplevel=0 \
|
||||
file://fedora/gcc43-java-nomulti.patch;striplevel=0 \
|
||||
file://fedora/gcc43-ppc32-retaddr.patch;striplevel=0 \
|
||||
file://fedora/gcc43-pr32139.patch;striplevel=0 \
|
||||
file://fedora/gcc43-pr33763.patch;striplevel=0 \
|
||||
file://fedora/gcc43-rh330771.patch;striplevel=0 \
|
||||
file://fedora/gcc43-rh341221.patch;striplevel=0 \
|
||||
file://fedora/gcc43-java-debug-iface-type.patch;striplevel=0 \
|
||||
file://fedora/gcc43-i386-libgomp.patch;striplevel=0 \
|
||||
file://fedora/gcc45-no-add-needed.patch;striplevel=0 \
|
||||
file://optional_libstdc.patch \
|
||||
file://64bithack.patch \
|
||||
file://COLLECT_GCC_OPTIONS.patch \
|
||||
file://gcc-poison-dir-extend.patch \
|
||||
file://gcc-poison-parameters.patch \
|
||||
file://gcc-ppc-config-fix.patch \
|
||||
file://use-defaults.h-and-t-oe-in-B.patch \
|
||||
file://gcc-with-linker-hash-style.patch \
|
||||
file://GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch \
|
||||
\
|
||||
file://fortran-cross-compile-hack.patch \
|
||||
"
|
||||
|
||||
# Language Overrides
|
||||
FORTRAN = ""
|
||||
JAVA = ""
|
||||
|
||||
S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/${BRANCH}"
|
||||
B = "${WORKDIR}/${BRANCH}/build.${HOST_SYS}.${TARGET_SYS}"
|
||||
|
||||
#EXTRA_OECONF_BASE = " --enable-cheaders=c_std \
|
||||
# --enable-libssp \
|
||||
# --disable-bootstrap \
|
||||
# --disable-libgomp \
|
||||
# --disable-libmudflap"
|
||||
EXTRA_OECONF_BASE = "--enable-lto \
|
||||
--enable-libssp \
|
||||
--disable-bootstrap \
|
||||
--disable-libgomp \
|
||||
--disable-libmudflap \
|
||||
--with-linker-hash-style=${LINKER_HASH_STYLE} \
|
||||
--with-ppl=no \
|
||||
--with-cloog=no \
|
||||
--enable-cheaders=c_global "
|
||||
|
||||
EXTRA_OECONF_INITIAL = "--disable-libmudflap \
|
||||
--disable-libgomp \
|
||||
--disable-libssp \
|
||||
--enable-decimal-float=no"
|
||||
|
||||
EXTRA_OECONF_INTERMEDIATE = "--disable-libmudflap \
|
||||
--disable-libgomp \
|
||||
--disable-libssp"
|
||||
|
||||
EXTRA_OECONF_append_libc-uclibc = " --disable-decimal-float "
|
||||
EXTRA_OECONF_append_mips64 = " --with-arch-64=mips64 --with-tune-64=mips64"
|
||||
EXTRA_OECONF_append_mips64el = " --with-arch-64=mips64 --with-tune-64=mips64"
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
Index: gcc-4.3.1/contrib/regression/objs-gcc.sh
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/contrib/regression/objs-gcc.sh 2007-12-24 15:18:57.000000000 -0800
|
||||
+++ gcc-4.3.1/contrib/regression/objs-gcc.sh 2008-08-16 01:15:12.000000000 -0700
|
||||
@@ -105,6 +105,10 @@
|
||||
then
|
||||
make all-gdb all-dejagnu all-ld || exit 1
|
||||
make install-gdb install-dejagnu install-ld || exit 1
|
||||
+elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
|
||||
+ then
|
||||
+ make all-gdb all-dejagnu all-ld || exit 1
|
||||
+ make install-gdb install-dejagnu install-ld || exit 1
|
||||
elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
|
||||
make bootstrap || exit 1
|
||||
make install || exit 1
|
||||
Index: gcc-4.3.1/libjava/classpath/ltconfig
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/libjava/classpath/ltconfig 2007-06-03 16:18:43.000000000 -0700
|
||||
+++ gcc-4.3.1/libjava/classpath/ltconfig 2008-08-16 01:15:12.000000000 -0700
|
||||
@@ -603,7 +603,7 @@
|
||||
|
||||
# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
|
||||
case $host_os in
|
||||
-linux-gnu*) ;;
|
||||
+linux-gnu*|linux-uclibc*) ;;
|
||||
linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
|
||||
esac
|
||||
|
||||
@@ -1251,7 +1251,7 @@
|
||||
;;
|
||||
|
||||
# This must be Linux ELF.
|
||||
-linux-gnu*)
|
||||
+linux*)
|
||||
version_type=linux
|
||||
need_lib_prefix=no
|
||||
need_version=no
|
||||
@@ -1,20 +0,0 @@
|
||||
--- gcc-4.1.0/libstdc++-v3/fragment.am 2005-03-21 11:40:14.000000000 -0600
|
||||
+++ gcc-4.1.0-patched/libstdc++-v3/fragment.am 2005-04-25 20:14:39.856251785 -0500
|
||||
@@ -21,5 +21,5 @@
|
||||
$(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
|
||||
|
||||
# -I/-D flags to pass when compiling.
|
||||
-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
|
||||
+AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
|
||||
|
||||
--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am 2005-03-21 11:40:18.000000000 -0600
|
||||
+++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am 2005-04-25 20:14:39.682280735 -0500
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
libmath_la_SOURCES = stubs.c
|
||||
|
||||
-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
|
||||
+AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
|
||||
|
||||
# Only compiling "C" sources in this directory.
|
||||
LIBTOOL = @LIBTOOL@ --tag CC
|
||||
@@ -1,68 +0,0 @@
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
GCC has internal multilib handling code but it assumes a very specific rigid directory
|
||||
layout. The build system implementation of multilib layout is very generic and allows
|
||||
complete customisation of the library directories.
|
||||
|
||||
This patch is a partial solution to allow any custom directories to be passed into gcc
|
||||
and handled correctly. It forces gcc to use the base_libdir (which is the current
|
||||
directory, "."). We need to do this for each multilib that is configured as we don't
|
||||
know which compiler options may be being passed into the compiler. Since we have a compiler
|
||||
per mulitlib at this point that isn't an issue.
|
||||
|
||||
The one problem is the target compiler is only going to work for the default multlilib at
|
||||
this point. Ideally we'd figure out which multilibs were being enabled with which paths
|
||||
and be able to patch these entries with a complete set of correct paths but this we
|
||||
don't have such code at this point. This is something the target gcc recipe should do
|
||||
and override these platform defaults in its build config.
|
||||
|
||||
RP 15/8/11
|
||||
|
||||
Index: gcc-4_5-branch/gcc/config/i386/t-linux64
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/i386/t-linux64 2011-09-22 11:37:51.188913390 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/i386/t-linux64 2011-09-22 11:37:56.818913303 -0700
|
||||
@@ -24,8 +24,8 @@
|
||||
# MULTILIB_OSDIRNAMES according to what is found on the target.
|
||||
|
||||
MULTILIB_OPTIONS = m64/m32
|
||||
-MULTILIB_DIRNAMES = 64 32
|
||||
-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)
|
||||
+MULTILIB_DIRNAMES = . .
|
||||
+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
|
||||
|
||||
LIBGCC = stmp-multilib
|
||||
INSTALL_LIBGCC = install-multilib
|
||||
Index: gcc-4_5-branch/gcc/config/mips/t-linux64
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/mips/t-linux64 2011-06-16 17:59:02.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/mips/t-linux64 2011-09-22 11:37:56.838913302 -0700
|
||||
@@ -17,8 +17,8 @@
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
MULTILIB_OPTIONS = mabi=n32/mabi=32/mabi=64
|
||||
-MULTILIB_DIRNAMES = n32 32 64
|
||||
-MULTILIB_OSDIRNAMES = ../lib32 ../lib ../lib64
|
||||
+MULTILIB_DIRNAMES = . . .
|
||||
+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
|
||||
|
||||
EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
|
||||
|
||||
Index: gcc-4_5-branch/gcc/config/rs6000/t-linux64
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/rs6000/t-linux64 2011-06-16 17:58:58.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/rs6000/t-linux64 2011-09-22 11:37:56.838913302 -0700
|
||||
@@ -32,11 +32,11 @@ TARGET_LIBGCC2_CFLAGS += -mno-minimal-to
|
||||
# MULTILIB_OSDIRNAMES according to what is found on the target.
|
||||
|
||||
MULTILIB_OPTIONS = m64/m32 msoft-float
|
||||
-MULTILIB_DIRNAMES = 64 32 nof
|
||||
+MULTILIB_DIRNAMES = . . .
|
||||
MULTILIB_EXTRA_OPTS = fPIC mstrict-align
|
||||
MULTILIB_EXCEPTIONS = m64/msoft-float
|
||||
MULTILIB_EXCLUSIONS = m64/!m32/msoft-float
|
||||
-MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof
|
||||
+MULTILIB_OSDIRNAMES = ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir)) ../$(shell basename $(base_libdir))
|
||||
MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT)
|
||||
|
||||
softfp_wrap_start := '\#ifndef __powerpc64__'
|
||||
@@ -1,29 +0,0 @@
|
||||
http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
|
||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
|
||||
|
||||
Index: gcc-4.5.0/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/configure.ac 2010-03-25 22:40:32.000000000 -0700
|
||||
+++ gcc-4.5.0/gcc/configure.ac 2010-06-25 11:02:48.489057877 -0700
|
||||
@@ -2784,7 +2784,7 @@
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-m64 -Aesame --fatal-warnings"
|
||||
;;
|
||||
- sh-*-* | sh[34]-*-*)
|
||||
+ sh-*-* | sh[34]*-*-*)
|
||||
conftest_s='
|
||||
.section ".tdata","awT",@progbits
|
||||
foo: .long 25
|
||||
Index: gcc-4.5.0/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/configure 2010-03-25 22:40:32.000000000 -0700
|
||||
+++ gcc-4.5.0/gcc/configure 2010-06-25 11:02:48.508381845 -0700
|
||||
@@ -22156,7 +22156,7 @@
|
||||
tls_first_minor=14
|
||||
tls_as_opt="-m64 -Aesame --fatal-warnings"
|
||||
;;
|
||||
- sh-*-* | sh[34]-*-*)
|
||||
+ sh-*-* | sh[34]*-*-*)
|
||||
conftest_s='
|
||||
.section ".tdata","awT",@progbits
|
||||
foo: .long 25
|
||||
@@ -1,34 +0,0 @@
|
||||
By Lennert Buytenhek <buytenh@wantstofly.org>
|
||||
Adds support for arm*b-linux* big-endian ARM targets
|
||||
|
||||
See http://gcc.gnu.org/PR16350
|
||||
|
||||
Index: gcc-4.5.0/gcc/config/arm/linux-elf.h
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/config/arm/linux-elf.h 2009-11-05 06:47:45.000000000 -0800
|
||||
+++ gcc-4.5.0/gcc/config/arm/linux-elf.h 2010-06-25 11:03:06.997132728 -0700
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
#undef MULTILIB_DEFAULTS
|
||||
#define MULTILIB_DEFAULTS \
|
||||
- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
|
||||
+ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
|
||||
|
||||
/* Now we define the strings used to build the spec file. */
|
||||
#undef LIB_SPEC
|
||||
Index: gcc-4.5.0/gcc/config.gcc
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/config.gcc 2010-06-25 10:40:33.321880880 -0700
|
||||
+++ gcc-4.5.0/gcc/config.gcc 2010-06-25 11:03:07.013133525 -0700
|
||||
@@ -734,6 +734,11 @@
|
||||
esac
|
||||
tmake_file="${tmake_file} t-linux arm/t-arm"
|
||||
case ${target} in
|
||||
+ arm*b-*)
|
||||
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
+ ;;
|
||||
+ esac
|
||||
+ case ${target} in
|
||||
arm*-*-linux-*eabi)
|
||||
tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
|
||||
tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc"
|
||||
@@ -1,74 +0,0 @@
|
||||
Hi,
|
||||
|
||||
The attached patch makes sure that we create smaller object code for
|
||||
simple switch statements. We just make sure to flatten the switch
|
||||
statement into an if-else chain, basically.
|
||||
|
||||
This fixes a size-regression as compared to gcc-3.4, as can be seen
|
||||
below.
|
||||
|
||||
2007-04-15 Bernhard Fischer <..>
|
||||
|
||||
* stmt.c (expand_case): Do not create a complex binary tree when
|
||||
optimizing for size but rather use the simple ordered list.
|
||||
(emit_case_nodes): do not emit jumps to the default_label when
|
||||
optimizing for size.
|
||||
|
||||
Not regtested so far.
|
||||
Comments?
|
||||
|
||||
Attached is the test switch.c mentioned below.
|
||||
|
||||
$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
|
||||
gcc-$i -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done
|
||||
$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
|
||||
gcc-$i -UCHAIN -Os -o switch-$i.o -c switch.c ;done
|
||||
|
||||
$ size switch-*.o
|
||||
text data bss dec hex filename
|
||||
169 0 0 169 a9 switch-2.95.o
|
||||
115 0 0 115 73 switch-3.3.o
|
||||
103 0 0 103 67 switch-3.4.o
|
||||
124 0 0 124 7c switch-4.0.o
|
||||
124 0 0 124 7c switch-4.1.o
|
||||
124 0 0 124 7c switch-4.2.orig-HEAD.o
|
||||
95 0 0 95 5f switch-4.3-HEAD.o
|
||||
124 0 0 124 7c switch-4.3.orig-HEAD.o
|
||||
166 0 0 166 a6 switch-CHAIN-2.95.o
|
||||
111 0 0 111 6f switch-CHAIN-3.3.o
|
||||
95 0 0 95 5f switch-CHAIN-3.4.o
|
||||
95 0 0 95 5f switch-CHAIN-4.0.o
|
||||
95 0 0 95 5f switch-CHAIN-4.1.o
|
||||
95 0 0 95 5f switch-CHAIN-4.2.orig-HEAD.o
|
||||
95 0 0 95 5f switch-CHAIN-4.3-HEAD.o
|
||||
95 0 0 95 5f switch-CHAIN-4.3.orig-HEAD.o
|
||||
|
||||
|
||||
Content-Type: text/x-diff; charset=us-ascii
|
||||
Content-Disposition: attachment; filename="gcc-4.3.gcc-flatten-switch-stmt.00.diff"
|
||||
|
||||
Index: gcc-4.5.0/gcc/stmt.c
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/stmt.c 2010-02-19 01:53:51.000000000 -0800
|
||||
+++ gcc-4.5.0/gcc/stmt.c 2010-06-25 11:05:31.816881094 -0700
|
||||
@@ -2440,7 +2440,11 @@
|
||||
default code is emitted. */
|
||||
|
||||
use_cost_table = estimate_case_costs (case_list);
|
||||
- balance_case_nodes (&case_list, NULL);
|
||||
+ /* When optimizing for size, we want a straight list to avoid
|
||||
+ jumps as much as possible. This basically creates an if-else
|
||||
+ chain. */
|
||||
+ if (!optimize_size)
|
||||
+ balance_case_nodes (&case_list, NULL);
|
||||
emit_case_nodes (index, case_list, default_label, index_type);
|
||||
if (default_label)
|
||||
emit_jump (default_label);
|
||||
@@ -3008,6 +3012,7 @@
|
||||
{
|
||||
if (!node_has_low_bound (node, index_type))
|
||||
{
|
||||
+ if (!optimize_size) /* don't jl to the .default_label. */
|
||||
emit_cmp_and_jump_insns (index,
|
||||
convert_modes
|
||||
(mode, imode,
|
||||
@@ -1,23 +0,0 @@
|
||||
#This patck added --sysroot into COLLECT_GCC_OPTIONS which is used to
|
||||
#invoke collect2.
|
||||
|
||||
Index: gcc-4_5-branch/gcc/gcc.c
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/gcc.c
|
||||
+++ gcc-4_5-branch/gcc/gcc.c
|
||||
@@ -4667,6 +4667,15 @@ set_collect_gcc_options (void)
|
||||
sizeof ("COLLECT_GCC_OPTIONS=") - 1);
|
||||
|
||||
first_time = TRUE;
|
||||
+#ifdef HAVE_LD_SYSROOT
|
||||
+ if (target_system_root_changed && target_system_root)
|
||||
+ {
|
||||
+ obstack_grow (&collect_obstack, "'--sysroot=", sizeof("'--sysroot=")-1);
|
||||
+ obstack_grow (&collect_obstack, target_system_root,strlen(target_system_root));
|
||||
+ obstack_grow (&collect_obstack, "'", 1);
|
||||
+ first_time = FALSE;
|
||||
+ }
|
||||
+#endif
|
||||
for (i = 0; (int) i < n_switches; i++)
|
||||
{
|
||||
const char *const *args;
|
||||
@@ -1,178 +0,0 @@
|
||||
source: http://patchwork.ozlabs.org/patch/129800/
|
||||
Upstream-Status: Submitted
|
||||
|
||||
ChangeLog
|
||||
* Makefile.in (gcc_gxx_include_dir_add_sysroot): New.
|
||||
(PREPROCESSOR_DEFINES): Define GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT.
|
||||
|
||||
* cppdefault.c (cpp_include_defaults): replace hard coded "1" with
|
||||
GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT for "add_sysroot" field.
|
||||
|
||||
* configure.ac (AC_SUBST): Add gcc_gxx_include_dir_add_sysroot to
|
||||
control whether sysroot should be prepended to gxx include dir.
|
||||
|
||||
* configure: Regenerate.
|
||||
|
||||
Hi, this is a follow up for issue "http://codereview.appspot.com/4641076".
|
||||
|
||||
The rationale for the patch copied from previous thread:
|
||||
=======================================
|
||||
The setup:
|
||||
|
||||
Configuring a toolchain targeting x86-64 GNU Linux (Ubuntu Lucid), as a
|
||||
cross-compiler. Using a sysroot to provide the Lucid headers+libraries,
|
||||
with the sysroot path being within the GCC install tree. Want to use the
|
||||
Lucid system libstdc++ and headers, which means that I'm not
|
||||
building/installing libstdc++-v3.
|
||||
|
||||
So, configuring with:
|
||||
--with-sysroot="$SYSROOT"
|
||||
--disable-libstdc++-v3 \
|
||||
--with-gxx-include-dir="$SYSROOT/usr/include/c++/4.4" \
|
||||
(among other options).
|
||||
|
||||
Hoping to support two usage models with this configuration, w.r.t. use of
|
||||
the sysroot:
|
||||
|
||||
(1) somebody installs the sysroot in the normal location relative to the
|
||||
GCC install, and relocates the whole bundle (sysroot+GCC). This works
|
||||
great AFAICT, GCC finds its includes (including the C++ includes) thanks
|
||||
to the add_standard_paths iprefix handling.
|
||||
|
||||
(2) somebody installs the sysroot in a non-standard location, and uses
|
||||
--sysroot to try to access it. This works fine for the C headers, but
|
||||
doesn't work.
|
||||
|
||||
For the C headers, add_standard_paths prepends the sysroot location to
|
||||
the /usr/include path (since that's what's specified in cppdefault.c for
|
||||
that path). It doesn't do the same for the C++ include path, though
|
||||
(again, as specified in cppdefault.c).
|
||||
|
||||
add_standard_paths doesn't attempt to relocate built-in include paths that
|
||||
start with the compiled-in sysroot location (e.g., the g++ include dir, in
|
||||
this case). This isn't surprising really: normally you either prepend the
|
||||
sysroot location or you don't (as specified by cppdefault.c); none of the
|
||||
built-in paths normally *start* with the sysroot location and need to be
|
||||
relocated. However, in this odd-ball case of trying to use the C++ headers
|
||||
from the sysroot, one of the paths *does* need to be relocated in this way.
|
||||
===========================
|
||||
--- a/gcc/Makefile.in
|
||||
+++ b/gcc/Makefile.in
|
||||
@@ -585,6 +585,7 @@ slibdir = @slibdir@
|
||||
build_tooldir = $(exec_prefix)/$(target_noncanonical)
|
||||
# Directory in which the compiler finds target-independent g++ includes.
|
||||
gcc_gxx_include_dir = @gcc_gxx_include_dir@
|
||||
+gcc_gxx_include_dir_add_sysroot = @gcc_gxx_include_dir_add_sysroot@
|
||||
# Directory to search for site-specific includes.
|
||||
local_includedir = $(local_prefix)/include
|
||||
includedir = $(prefix)/include
|
||||
@@ -3788,6 +3789,7 @@ PREPROCESSOR_DEFINES = \
|
||||
-DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
|
||||
-DFIXED_INCLUDE_DIR=\"$(libsubdir)/include-fixed\" \
|
||||
-DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
|
||||
+ -DGPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT=$(gcc_gxx_include_dir_add_sysroot) \
|
||||
-DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
|
||||
-DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
|
||||
-DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -144,6 +144,15 @@ if test x${gcc_gxx_include_dir} = x; the
|
||||
fi
|
||||
fi
|
||||
|
||||
+gcc_gxx_include_dir_add_sysroot=0
|
||||
+if test "${with_sysroot+set}" = set; then :
|
||||
+ gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
|
||||
+ if test "${gcc_gxx_without_sysroot}"; then :
|
||||
+ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
|
||||
+ gcc_gxx_include_dir_add_sysroot=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
AC_ARG_WITH(cpp_install_dir,
|
||||
[ --with-cpp-install-dir=DIR
|
||||
install the user visible C preprocessor in DIR
|
||||
@@ -4492,6 +4501,7 @@ AC_SUBST(extra_programs)
|
||||
AC_SUBST(float_h_file)
|
||||
AC_SUBST(gcc_config_arguments)
|
||||
AC_SUBST(gcc_gxx_include_dir)
|
||||
+AC_SUBST(gcc_gxx_include_dir_add_sysroot)
|
||||
AC_SUBST(host_exeext)
|
||||
AC_SUBST(host_xm_file_list)
|
||||
AC_SUBST(host_xm_include_list)
|
||||
--- a/gcc/cppdefault.c
|
||||
+++ b/gcc/cppdefault.c
|
||||
@@ -48,15 +48,18 @@ const struct default_include cpp_include
|
||||
= {
|
||||
#ifdef GPLUSPLUS_INCLUDE_DIR
|
||||
/* Pick up GNU C++ generic include files. */
|
||||
- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
|
||||
+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,
|
||||
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
|
||||
#endif
|
||||
#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
|
||||
/* Pick up GNU C++ target-dependent include files. */
|
||||
- { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, 0, 1 },
|
||||
+ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,
|
||||
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },
|
||||
#endif
|
||||
#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
|
||||
/* Pick up GNU C++ backward and deprecated include files. */
|
||||
- { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, 0, 0 },
|
||||
+ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
|
||||
+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
|
||||
#endif
|
||||
#ifdef LOCAL_INCLUDE_DIR
|
||||
/* /usr/local/include comes before the fixincluded header files. */
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -639,6 +639,7 @@ host_xm_defines
|
||||
host_xm_include_list
|
||||
host_xm_file_list
|
||||
host_exeext
|
||||
+gcc_gxx_include_dir_add_sysroot
|
||||
gcc_gxx_include_dir
|
||||
gcc_config_arguments
|
||||
float_h_file
|
||||
@@ -3282,6 +3283,15 @@ if test x${gcc_gxx_include_dir} = x; the
|
||||
fi
|
||||
fi
|
||||
|
||||
+gcc_gxx_include_dir_add_sysroot=0
|
||||
+if test "${with_sysroot+set}" = set; then :
|
||||
+ gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
|
||||
+ if test "${gcc_gxx_without_sysroot}"; then :
|
||||
+ gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
|
||||
+ gcc_gxx_include_dir_add_sysroot=1
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
|
||||
# Check whether --with-cpp_install_dir was given.
|
||||
if test "${with_cpp_install_dir+set}" = set; then :
|
||||
@@ -17118,7 +17128,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17121 "configure"
|
||||
+#line 17131 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -17224,7 +17234,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17227 "configure"
|
||||
+#line 17237 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -25381,6 +25391,7 @@ fi
|
||||
|
||||
|
||||
|
||||
+
|
||||
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
Index: gcc-4.5/gcc/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/Makefile.in
|
||||
+++ gcc-4.5/gcc/Makefile.in
|
||||
@@ -656,7 +656,7 @@ LIBGCC2_INCLUDES =
|
||||
TARGET_LIBGCC2_CFLAGS =
|
||||
|
||||
# Options to use when compiling crtbegin/end.
|
||||
-CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
+CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(TARGET_INCLUDES) $(MULTILIB_CFLAGS) -g0 \
|
||||
-finhibit-size-directive -fno-inline -fno-exceptions \
|
||||
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
|
||||
$(INHIBIT_LIBC_CFLAGS)
|
||||
@@ -1038,10 +1038,14 @@ BUILD_ERRORS = build/errors.o
|
||||
# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
|
||||
# currently being compiled, in both source trees, to be examined as well.
|
||||
# libintl.h will be found in ../intl if we are using the included libintl.
|
||||
-INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
|
||||
+#
|
||||
+# TARGET_INCLUDES is added to avoid that GMPINC (which points to the host
|
||||
+# include dir) is used for compiling libgcc.a
|
||||
+TARGET_INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
|
||||
-I$(srcdir)/../include @INCINTL@ \
|
||||
- $(CPPINC) $(GMPINC) $(DECNUMINC) \
|
||||
+ $(CPPINC) $(DECNUMINC) \
|
||||
$(PPLINC) $(CLOOGINC) $(LIBELFINC)
|
||||
+INCLUDES = $(TARGET_INCLUDES) $(GMPINC)
|
||||
|
||||
.c.o:
|
||||
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
Fix for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43999
|
||||
|
||||
http://patchwork.ozlabs.org/patch/72260/ is the patch that made into
|
||||
upstream gcc
|
||||
|
||||
diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm
|
||||
index 085e690..2e76c01 100644
|
||||
--- a/gcc/config/arm/lib1funcs.asm
|
||||
+++ b/gcc/config/arm/lib1funcs.asm
|
||||
@@ -641,7 +641,7 @@ pc .req r15
|
||||
subhs \dividend, \dividend, \divisor, lsr #3
|
||||
orrhs \result, \result, \curbit, lsr #3
|
||||
cmp \dividend, #0 @ Early termination?
|
||||
- do_it hs, t
|
||||
+ do_it ne, t
|
||||
movnes \curbit, \curbit, lsr #4 @ No, any more bits to do?
|
||||
movne \divisor, \divisor, lsr #4
|
||||
bne 1b
|
||||
@@ -1,36 +0,0 @@
|
||||
#! /bin/sh -e
|
||||
|
||||
# DP: Fix armv4t build on ARM
|
||||
|
||||
dir=
|
||||
if [ $# -eq 3 -a "$2" = '-d' ]; then
|
||||
pdir="-d $3"
|
||||
dir="$3/"
|
||||
elif [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
case "$1" in
|
||||
-patch)
|
||||
patch $pdir -f --no-backup-if-mismatch -p1 < $0
|
||||
;;
|
||||
-unpatch)
|
||||
patch $pdir -f --no-backup-if-mismatch -R -p1 < $0
|
||||
;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
esac
|
||||
exit 0
|
||||
|
||||
--- src/gcc/config/arm/linux-eabi.h.orig 2007-11-24 12:37:38.000000000 +0000
|
||||
+++ src/gcc/config/arm/linux-eabi.h 2007-11-24 12:39:41.000000000 +0000
|
||||
@@ -44,7 +44,7 @@
|
||||
The ARM10TDMI core is the default for armv5t, so set
|
||||
SUBTARGET_CPU_DEFAULT to achieve this. */
|
||||
#undef SUBTARGET_CPU_DEFAULT
|
||||
-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
|
||||
+#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
|
||||
|
||||
/* TARGET_BIG_ENDIAN_DEFAULT is set in
|
||||
config.gcc for big endian configurations. */
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
gcc/configure | 2 +-
|
||||
gcc/configure.ac | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gcc-4.5+svnr155514/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4.5+svnr155514.orig/gcc/configure 2009-12-29 22:00:40.000000000 -0800
|
||||
+++ gcc-4.5+svnr155514/gcc/configure 2009-12-29 23:52:43.381592113 -0800
|
||||
@@ -10467,7 +10467,7 @@ else
|
||||
saved_CFLAGS="${CFLAGS}"
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
LDFLAGS="${LDFLAGS_FOR_BUILD}" \
|
||||
- ${realsrcdir}/configure \
|
||||
+ CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
--target=$target_alias --host=$build_alias --build=$build_alias
|
||||
CFLAGS="${saved_CFLAGS}"
|
||||
Index: gcc-4.5+svnr155514/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5+svnr155514.orig/gcc/configure.ac 2009-12-29 22:00:40.000000000 -0800
|
||||
+++ gcc-4.5+svnr155514/gcc/configure.ac 2009-12-29 23:51:54.589091778 -0800
|
||||
@@ -1458,7 +1458,7 @@ else
|
||||
saved_CFLAGS="${CFLAGS}"
|
||||
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
|
||||
LDFLAGS="${LDFLAGS_FOR_BUILD}" \
|
||||
- ${realsrcdir}/configure \
|
||||
+ CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
|
||||
--enable-languages=${enable_languages-all} \
|
||||
--target=$target_alias --host=$build_alias --build=$build_alias
|
||||
CFLAGS="${saved_CFLAGS}"
|
||||
@@ -1,44 +0,0 @@
|
||||
GCC: disable MASK_RELAX_PIC_CALLS bit
|
||||
|
||||
The new feature added after 4.3.3
|
||||
"http://www.pubbs.net/200909/gcc/94048-patch-add-support-for-rmipsjalr.html"
|
||||
will cause cc1plus eat up all the system memory when build webkit-gtk.
|
||||
The function mips_get_pic_call_symbol keeps on recursively calling itself.
|
||||
Disable this feature to walk aside the bug.
|
||||
|
||||
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
|
||||
|
||||
diff -ruN gcc-4.5.0-orig/gcc/configure gcc-4.5.0/gcc/configure
|
||||
--- gcc-4.5.0-orig/gcc/configure 2010-09-17 23:30:21.000000000 +0800
|
||||
+++ gcc-4.5.0/gcc/configure 2010-09-19 18:21:28.000000000 +0800
|
||||
@@ -23945,13 +23945,6 @@
|
||||
rm -f conftest.*
|
||||
fi
|
||||
fi
|
||||
- if test $gcc_cv_as_ld_jalr_reloc = yes; then
|
||||
- if test x$target_cpu_default = x; then
|
||||
- target_cpu_default=MASK_RELAX_PIC_CALLS
|
||||
- else
|
||||
- target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
|
||||
- fi
|
||||
- fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ld_jalr_reloc" >&5
|
||||
$as_echo "$gcc_cv_as_ld_jalr_reloc" >&6; }
|
||||
|
||||
diff -ruN gcc-4.5.0-orig/gcc/configure.ac gcc-4.5.0/gcc/configure.ac
|
||||
--- gcc-4.5.0-orig/gcc/configure.ac 2010-09-17 23:30:21.000000000 +0800
|
||||
+++ gcc-4.5.0/gcc/configure.ac 2010-09-19 18:21:11.000000000 +0800
|
||||
@@ -3467,13 +3467,6 @@
|
||||
rm -f conftest.*
|
||||
fi
|
||||
fi
|
||||
- if test $gcc_cv_as_ld_jalr_reloc = yes; then
|
||||
- if test x$target_cpu_default = x; then
|
||||
- target_cpu_default=MASK_RELAX_PIC_CALLS
|
||||
- else
|
||||
- target_cpu_default="($target_cpu_default)|MASK_RELAX_PIC_CALLS"
|
||||
- fi
|
||||
- fi
|
||||
AC_MSG_RESULT($gcc_cv_as_ld_jalr_reloc)
|
||||
|
||||
AC_CACHE_CHECK([linker for .eh_frame personality relaxation],
|
||||
@@ -1,114 +0,0 @@
|
||||
2007-10-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* decl.c (duplicate_decls): When redeclaring a builtin function,
|
||||
keep the merged decl builtin whenever types match, even if new
|
||||
decl defines a function.
|
||||
|
||||
* gcc.dg/builtins-65.c: New test.
|
||||
* g++.dg/ext/builtin10.C: New test.
|
||||
|
||||
Index: gcc/cp/decl.c
|
||||
===================================================================
|
||||
--- gcc/cp/decl.c.orig 2010-04-01 11:48:46.000000000 -0700
|
||||
+++ gcc/cp/decl.c 2010-06-25 10:10:54.749131719 -0700
|
||||
@@ -2021,23 +2021,21 @@
|
||||
DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
|
||||
DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
|
||||
}
|
||||
+ /* If redeclaring a builtin function, it stays built in. */
|
||||
+ if (types_match && DECL_BUILT_IN (olddecl))
|
||||
+ {
|
||||
+ DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
|
||||
+ DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
|
||||
+ /* If we're keeping the built-in definition, keep the rtl,
|
||||
+ regardless of declaration matches. */
|
||||
+ COPY_DECL_RTL (olddecl, newdecl);
|
||||
+ }
|
||||
if (new_defines_function)
|
||||
/* If defining a function declared with other language
|
||||
linkage, use the previously declared language linkage. */
|
||||
SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
|
||||
else if (types_match)
|
||||
{
|
||||
- /* If redeclaring a builtin function, and not a definition,
|
||||
- it stays built in. */
|
||||
- if (DECL_BUILT_IN (olddecl))
|
||||
- {
|
||||
- DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
|
||||
- DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
|
||||
- /* If we're keeping the built-in definition, keep the rtl,
|
||||
- regardless of declaration matches. */
|
||||
- COPY_DECL_RTL (olddecl, newdecl);
|
||||
- }
|
||||
-
|
||||
DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
|
||||
/* Don't clear out the arguments if we're just redeclaring a
|
||||
function. */
|
||||
Index: gcc/testsuite/gcc.dg/builtins-65.c
|
||||
===================================================================
|
||||
--- gcc/testsuite/gcc.dg/builtins-65.c.orig 2009-06-26 02:02:04.000000000 -0700
|
||||
+++ gcc/testsuite/gcc.dg/builtins-65.c 2010-06-25 10:10:54.784464429 -0700
|
||||
@@ -1,3 +1,28 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+typedef __SIZE_TYPE__ size_t;
|
||||
+extern void __chk_fail (void);
|
||||
+extern int snprintf (char *, size_t, const char *, ...);
|
||||
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
|
||||
+{
|
||||
+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
|
||||
+ __chk_fail ();
|
||||
+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
|
||||
+
|
||||
+char buf[10];
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ snprintf (buf, 10, "%d%d\n", 10, 10);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "mysnprintf" } } */
|
||||
+/* { dg-final { scan-assembler-not "__chk_fail" } } */
|
||||
/* { dg-do link } */
|
||||
/* { dg-options "-O2 -ffast-math" } */
|
||||
/* { dg-require-effective-target c99_runtime } */
|
||||
Index: gcc/testsuite/g++.dg/ext/builtin10.C
|
||||
===================================================================
|
||||
--- gcc/testsuite/g++.dg/ext/builtin10.C.orig 2009-02-02 03:27:50.000000000 -0800
|
||||
+++ gcc/testsuite/g++.dg/ext/builtin10.C 2010-06-25 10:10:54.816467202 -0700
|
||||
@@ -1,3 +1,30 @@
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+typedef __SIZE_TYPE__ size_t;
|
||||
+extern "C" {
|
||||
+extern void __chk_fail (void);
|
||||
+extern int snprintf (char *, size_t, const char *, ...);
|
||||
+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
|
||||
+{
|
||||
+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
|
||||
+ __chk_fail ();
|
||||
+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
|
||||
+}
|
||||
+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
|
||||
+}
|
||||
+
|
||||
+char buf[10];
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ snprintf (buf, 10, "%d%d\n", 10, 10);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+// { dg-final { scan-assembler "mysnprintf" } }
|
||||
+// { dg-final { scan-assembler-not "__chk_fail" } }
|
||||
// { dg-do compile { target correct_iso_cpp_string_wchar_protos } }
|
||||
// { dg-options "-O2 -fdump-tree-optimized" }
|
||||
|
||||
@@ -1,284 +0,0 @@
|
||||
2008-02-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-ppoutput.c (scan_translation_unit): Handle CPP_PRAGMA
|
||||
and CPP_PRAGMA_EOL.
|
||||
* c-pragma.c (pragma_ns_name): New typedef.
|
||||
(registered_pp_pragmas): New variable.
|
||||
(c_pp_lookup_pragma): New function.
|
||||
(c_register_pragma_1): If flag_preprocess_only, do nothing
|
||||
for non-expanded pragmas, for expanded ones push pragma's
|
||||
namespace and name into registered_pp_pragmas vector.
|
||||
(c_invoke_pragma_handler): Register OpenMP pragmas even when
|
||||
flag_preprocess_only, don't register GCC pch_preprocess
|
||||
pragma if flag_preprocess_only.
|
||||
* c-opts.c (c_common_init): Call init_pragma even if
|
||||
flag_preprocess_only.
|
||||
* c-pragma.c (c_pp_lookup_pragma): New prototype.
|
||||
* config/darwin.h (DARWIN_REGISTER_TARGET_PRAGMAS): Don't call
|
||||
cpp_register_pragma if flag_preprocess_only.
|
||||
|
||||
* gcc.dg/gomp/preprocess-1.c: New test.
|
||||
|
||||
--- gcc/c-ppoutput.c.jj 2008-01-26 18:01:16.000000000 +0100
|
||||
+++ gcc/c-ppoutput.c 2008-02-26 22:54:57.000000000 +0100
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Preprocess only, using cpplib.
|
||||
- Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007
|
||||
- Free Software Foundation, Inc.
|
||||
+ Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007,
|
||||
+ 2008 Free Software Foundation, Inc.
|
||||
Written by Per Bothner, 1994-95.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
@@ -177,7 +177,24 @@ scan_translation_unit (cpp_reader *pfile
|
||||
avoid_paste = false;
|
||||
print.source = NULL;
|
||||
print.prev = token;
|
||||
- cpp_output_token (token, print.outf);
|
||||
+ if (token->type == CPP_PRAGMA)
|
||||
+ {
|
||||
+ const char *space;
|
||||
+ const char *name;
|
||||
+
|
||||
+ maybe_print_line (token->src_loc);
|
||||
+ fputs ("#pragma ", print.outf);
|
||||
+ c_pp_lookup_pragma (token->val.pragma, &space, &name);
|
||||
+ if (space)
|
||||
+ fprintf (print.outf, "%s %s", space, name);
|
||||
+ else
|
||||
+ fprintf (print.outf, "%s", name);
|
||||
+ print.printed = 1;
|
||||
+ }
|
||||
+ else if (token->type == CPP_PRAGMA_EOL)
|
||||
+ maybe_print_line (token->src_loc);
|
||||
+ else
|
||||
+ cpp_output_token (token, print.outf);
|
||||
|
||||
if (token->type == CPP_COMMENT)
|
||||
account_for_newlines (token->val.str.text, token->val.str.len);
|
||||
--- gcc/c-pragma.c.jj 2008-02-15 18:43:03.000000000 +0100
|
||||
+++ gcc/c-pragma.c 2008-02-26 22:59:44.000000000 +0100
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Handle #pragma, system V.4 style. Supports #pragma weak and #pragma pack.
|
||||
Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
- 2006, 2007 Free Software Foundation, Inc.
|
||||
+ 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@@ -872,6 +872,61 @@ DEF_VEC_ALLOC_O (pragma_handler, heap);
|
||||
|
||||
static VEC(pragma_handler, heap) *registered_pragmas;
|
||||
|
||||
+typedef struct
|
||||
+{
|
||||
+ const char *space;
|
||||
+ const char *name;
|
||||
+} pragma_ns_name;
|
||||
+
|
||||
+DEF_VEC_O (pragma_ns_name);
|
||||
+DEF_VEC_ALLOC_O (pragma_ns_name, heap);
|
||||
+
|
||||
+static VEC(pragma_ns_name, heap) *registered_pp_pragmas;
|
||||
+
|
||||
+struct omp_pragma_def { const char *name; unsigned int id; };
|
||||
+static const struct omp_pragma_def omp_pragmas[] = {
|
||||
+ { "atomic", PRAGMA_OMP_ATOMIC },
|
||||
+ { "barrier", PRAGMA_OMP_BARRIER },
|
||||
+ { "critical", PRAGMA_OMP_CRITICAL },
|
||||
+ { "flush", PRAGMA_OMP_FLUSH },
|
||||
+ { "for", PRAGMA_OMP_FOR },
|
||||
+ { "master", PRAGMA_OMP_MASTER },
|
||||
+ { "ordered", PRAGMA_OMP_ORDERED },
|
||||
+ { "parallel", PRAGMA_OMP_PARALLEL },
|
||||
+ { "section", PRAGMA_OMP_SECTION },
|
||||
+ { "sections", PRAGMA_OMP_SECTIONS },
|
||||
+ { "single", PRAGMA_OMP_SINGLE },
|
||||
+ { "threadprivate", PRAGMA_OMP_THREADPRIVATE }
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+c_pp_lookup_pragma (unsigned int id, const char **space, const char **name)
|
||||
+{
|
||||
+ const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas);
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < n_omp_pragmas; ++i)
|
||||
+ if (omp_pragmas[i].id == id)
|
||||
+ {
|
||||
+ *space = "omp";
|
||||
+ *name = omp_pragmas[i].name;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (id >= PRAGMA_FIRST_EXTERNAL
|
||||
+ && (id < PRAGMA_FIRST_EXTERNAL
|
||||
+ + VEC_length (pragma_ns_name, registered_pp_pragmas)))
|
||||
+ {
|
||||
+ *space = VEC_index (pragma_ns_name, registered_pp_pragmas,
|
||||
+ id - PRAGMA_FIRST_EXTERNAL)->space;
|
||||
+ *name = VEC_index (pragma_ns_name, registered_pp_pragmas,
|
||||
+ id - PRAGMA_FIRST_EXTERNAL)->name;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ gcc_unreachable ();
|
||||
+}
|
||||
+
|
||||
/* Front-end wrappers for pragma registration to avoid dragging
|
||||
cpplib.h in almost everywhere. */
|
||||
|
||||
@@ -881,13 +936,29 @@ c_register_pragma_1 (const char *space,
|
||||
{
|
||||
unsigned id;
|
||||
|
||||
- VEC_safe_push (pragma_handler, heap, registered_pragmas, &handler);
|
||||
- id = VEC_length (pragma_handler, registered_pragmas);
|
||||
- id += PRAGMA_FIRST_EXTERNAL - 1;
|
||||
-
|
||||
- /* The C++ front end allocates 6 bits in cp_token; the C front end
|
||||
- allocates 7 bits in c_token. At present this is sufficient. */
|
||||
- gcc_assert (id < 64);
|
||||
+ if (flag_preprocess_only)
|
||||
+ {
|
||||
+ pragma_ns_name ns_name;
|
||||
+
|
||||
+ if (!allow_expansion)
|
||||
+ return;
|
||||
+
|
||||
+ ns_name.space = space;
|
||||
+ ns_name.name = name;
|
||||
+ VEC_safe_push (pragma_ns_name, heap, registered_pp_pragmas, &ns_name);
|
||||
+ id = VEC_length (pragma_ns_name, registered_pp_pragmas);
|
||||
+ id += PRAGMA_FIRST_EXTERNAL - 1;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ VEC_safe_push (pragma_handler, heap, registered_pragmas, &handler);
|
||||
+ id = VEC_length (pragma_handler, registered_pragmas);
|
||||
+ id += PRAGMA_FIRST_EXTERNAL - 1;
|
||||
+
|
||||
+ /* The C++ front end allocates 6 bits in cp_token; the C front end
|
||||
+ allocates 7 bits in c_token. At present this is sufficient. */
|
||||
+ gcc_assert (id < 64);
|
||||
+ }
|
||||
|
||||
cpp_register_deferred_pragma (parse_in, space, name, id,
|
||||
allow_expansion, false);
|
||||
@@ -921,24 +992,8 @@ c_invoke_pragma_handler (unsigned int id
|
||||
void
|
||||
init_pragma (void)
|
||||
{
|
||||
- if (flag_openmp && !flag_preprocess_only)
|
||||
+ if (flag_openmp)
|
||||
{
|
||||
- struct omp_pragma_def { const char *name; unsigned int id; };
|
||||
- static const struct omp_pragma_def omp_pragmas[] = {
|
||||
- { "atomic", PRAGMA_OMP_ATOMIC },
|
||||
- { "barrier", PRAGMA_OMP_BARRIER },
|
||||
- { "critical", PRAGMA_OMP_CRITICAL },
|
||||
- { "flush", PRAGMA_OMP_FLUSH },
|
||||
- { "for", PRAGMA_OMP_FOR },
|
||||
- { "master", PRAGMA_OMP_MASTER },
|
||||
- { "ordered", PRAGMA_OMP_ORDERED },
|
||||
- { "parallel", PRAGMA_OMP_PARALLEL },
|
||||
- { "section", PRAGMA_OMP_SECTION },
|
||||
- { "sections", PRAGMA_OMP_SECTIONS },
|
||||
- { "single", PRAGMA_OMP_SINGLE },
|
||||
- { "threadprivate", PRAGMA_OMP_THREADPRIVATE }
|
||||
- };
|
||||
-
|
||||
const int n_omp_pragmas = sizeof (omp_pragmas) / sizeof (*omp_pragmas);
|
||||
int i;
|
||||
|
||||
@@ -947,8 +1002,9 @@ init_pragma (void)
|
||||
omp_pragmas[i].id, true, true);
|
||||
}
|
||||
|
||||
- cpp_register_deferred_pragma (parse_in, "GCC", "pch_preprocess",
|
||||
- PRAGMA_GCC_PCH_PREPROCESS, false, false);
|
||||
+ if (!flag_preprocess_only)
|
||||
+ cpp_register_deferred_pragma (parse_in, "GCC", "pch_preprocess",
|
||||
+ PRAGMA_GCC_PCH_PREPROCESS, false, false);
|
||||
|
||||
#ifdef HANDLE_PRAGMA_PACK
|
||||
#ifdef HANDLE_PRAGMA_PACK_WITH_EXPANSION
|
||||
--- gcc/c-opts.c.jj 2008-02-26 22:53:23.000000000 +0100
|
||||
+++ gcc/c-opts.c 2008-02-26 22:54:57.000000000 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
/* C/ObjC/C++ command line option handling.
|
||||
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
|
||||
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Neil Booth.
|
||||
|
||||
@@ -1239,6 +1239,9 @@ c_common_init (void)
|
||||
if (version_flag)
|
||||
c_common_print_pch_checksum (stderr);
|
||||
|
||||
+ /* Has to wait until now so that cpplib has its hash table. */
|
||||
+ init_pragma ();
|
||||
+
|
||||
if (flag_preprocess_only)
|
||||
{
|
||||
finish_options ();
|
||||
@@ -1246,9 +1249,6 @@ c_common_init (void)
|
||||
return false;
|
||||
}
|
||||
|
||||
- /* Has to wait until now so that cpplib has its hash table. */
|
||||
- init_pragma ();
|
||||
-
|
||||
return true;
|
||||
}
|
||||
|
||||
--- gcc/c-pragma.h.jj 2008-01-26 18:01:16.000000000 +0100
|
||||
+++ gcc/c-pragma.h 2008-02-26 22:54:57.000000000 +0100
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Pragma related interfaces.
|
||||
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
- 2007 Free Software Foundation, Inc.
|
||||
+ 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@@ -124,4 +124,6 @@ extern enum cpp_ttype pragma_lex (tree *
|
||||
extern enum cpp_ttype c_lex_with_flags (tree *, location_t *, unsigned char *,
|
||||
int);
|
||||
|
||||
+extern void c_pp_lookup_pragma (unsigned int, const char **, const char **);
|
||||
+
|
||||
#endif /* GCC_C_PRAGMA_H */
|
||||
--- gcc/config/darwin.h.jj 2008-02-11 14:48:12.000000000 +0100
|
||||
+++ gcc/config/darwin.h 2008-02-26 22:54:57.000000000 +0100
|
||||
@@ -892,8 +892,9 @@ enum machopic_addr_class {
|
||||
|
||||
#define DARWIN_REGISTER_TARGET_PRAGMAS() \
|
||||
do { \
|
||||
- cpp_register_pragma (parse_in, NULL, "mark", \
|
||||
- darwin_pragma_ignore, false); \
|
||||
+ if (!flag_preprocess_only) \
|
||||
+ cpp_register_pragma (parse_in, NULL, "mark", \
|
||||
+ darwin_pragma_ignore, false); \
|
||||
c_register_pragma (0, "options", darwin_pragma_options); \
|
||||
c_register_pragma (0, "segment", darwin_pragma_ignore); \
|
||||
c_register_pragma (0, "unused", darwin_pragma_unused); \
|
||||
--- gcc/testsuite/gcc.dg/gomp/preprocess-1.c.jj 2008-02-26 22:54:57.000000000 +0100
|
||||
+++ gcc/testsuite/gcc.dg/gomp/preprocess-1.c 2008-02-26 22:54:57.000000000 +0100
|
||||
@@ -0,0 +1,16 @@
|
||||
+/* { dg-do preprocess } */
|
||||
+
|
||||
+void foo (void)
|
||||
+{
|
||||
+ int i1, j1, k1;
|
||||
+#define p parallel
|
||||
+#define P(x) private (x##1)
|
||||
+#define S(x) shared (x##1)
|
||||
+#define F(x) firstprivate (x##1)
|
||||
+#pragma omp p P(i) \
|
||||
+ S(j) \
|
||||
+ F(k)
|
||||
+ ;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-file preprocess-1.i "(^|\n)#pragma omp parallel private \\(i1\\) shared \\(j1\\) firstprivate \\(k1\\)($|\n)" } } */
|
||||
@@ -1,65 +0,0 @@
|
||||
Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486
|
||||
hardware isn't supported because NPTL doesn't support it anyway.
|
||||
|
||||
Index: libgomp/configure.tgt
|
||||
===================================================================
|
||||
--- libgomp/configure.tgt.orig 2010-01-28 13:47:59.000000000 -0800
|
||||
+++ libgomp/configure.tgt 2010-06-25 10:32:26.706135558 -0700
|
||||
@@ -48,14 +48,14 @@
|
||||
;;
|
||||
|
||||
# Note that bare i386 is not included here. We need cmpxchg.
|
||||
- i[456]86-*-linux*)
|
||||
+ i[3456]86-*-linux*)
|
||||
config_path="linux/x86 linux posix"
|
||||
case " ${CC} ${CFLAGS} " in
|
||||
*" -m64 "*)
|
||||
;;
|
||||
*)
|
||||
if test -z "$with_arch"; then
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
fi
|
||||
esac
|
||||
;;
|
||||
@@ -67,7 +67,7 @@
|
||||
config_path="linux/x86 linux posix"
|
||||
case " ${CC} ${CFLAGS} " in
|
||||
*" -m32 "*)
|
||||
- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
|
||||
+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
Index: libstdc++-v3/libsupc++/guard.cc
|
||||
===================================================================
|
||||
--- libstdc++-v3/libsupc++/guard.cc.orig 2009-11-09 14:09:30.000000000 -0800
|
||||
+++ libstdc++-v3/libsupc++/guard.cc 2010-06-25 10:32:26.710135964 -0700
|
||||
@@ -30,6 +30,27 @@
|
||||
#include <new>
|
||||
#include <ext/atomicity.h>
|
||||
#include <ext/concurrence.h>
|
||||
+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS
|
||||
+# define _GLIBCXX_ATOMIC_BUILTINS 1
|
||||
+# define __sync_val_compare_and_swap(a, b, c) \
|
||||
+ ({ \
|
||||
+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \
|
||||
+ int sltas; \
|
||||
+ __asm __volatile ("lock; cmpxchgl %3, (%1)" \
|
||||
+ : "=a" (sltas) \
|
||||
+ : "r" (a), "0" (b), "r" (c) : "memory"); \
|
||||
+ sltas; \
|
||||
+ })
|
||||
+# define __sync_lock_test_and_set(a, b) \
|
||||
+ ({ \
|
||||
+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \
|
||||
+ int sltas; \
|
||||
+ __asm __volatile ("xchgl (%1), %0" \
|
||||
+ : "=r" (sltas) \
|
||||
+ : "r" (a), "0" (b) : "memory"); \
|
||||
+ sltas; \
|
||||
+ })
|
||||
+#endif
|
||||
#if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
|
||||
&& defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
|
||||
# include <climits>
|
||||
@@ -1,550 +0,0 @@
|
||||
2004-11-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config.gcc (ia64*-*-linux*): If native and libelf is installed,
|
||||
use ia64/t-glibc-no-libunwind instead of the other t-*unwind*
|
||||
fragments.
|
||||
* config/ia64/t-glibc-no-libunwind: New file.
|
||||
* config/ia64/change-symver.c: New file.
|
||||
* config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED,
|
||||
define _Unwind_* to __symverglobal_Unwind_*.
|
||||
(alias): Undefine.
|
||||
(symverglobal): Define. Use it on _Unwind_*.
|
||||
* config/ia64/mkmap-symver-multi.awk: New file.
|
||||
* config/ia64/libgcc-ia64-no-libunwind.ver: New file.
|
||||
|
||||
Index: gcc/config.gcc
|
||||
===================================================================
|
||||
--- gcc/config.gcc.orig 2010-04-07 03:34:00.000000000 -0700
|
||||
+++ gcc/config.gcc 2010-06-25 10:15:25.133131055 -0700
|
||||
@@ -1457,9 +1457,16 @@
|
||||
;;
|
||||
ia64*-*-linux*)
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h ia64/sysv4.h ia64/linux.h"
|
||||
- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc"
|
||||
- if test x$with_system_libunwind != xyes ; then
|
||||
- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
|
||||
+ tmake_file="${tmake_file} ia64/t-ia64"
|
||||
+ if test x${target} = x${host} && test x${target} = x${build} \
|
||||
+ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \
|
||||
+ && test -f /usr/lib/libelf.so; then
|
||||
+ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind"
|
||||
+ else
|
||||
+ tmake_file="${tmake_file} t-libunwind ia64/t-glibc"
|
||||
+ if test x$with_system_libunwind != xyes ; then
|
||||
+ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
|
||||
+ fi
|
||||
fi
|
||||
target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
|
||||
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
|
||||
Index: gcc/config/ia64/t-glibc-no-libunwind
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/config/ia64/t-glibc-no-libunwind 2010-06-25 10:14:32.521880765 -0700
|
||||
@@ -0,0 +1,30 @@
|
||||
+# Don't use system libunwind library on IA-64 GLIBC based system,
|
||||
+# but make _Unwind_* symbols unversioned, so that created programs
|
||||
+# are usable even when libgcc_s uses libunwind.
|
||||
+LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c
|
||||
+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver
|
||||
+SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk
|
||||
+
|
||||
+SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||
+ -Wl,--soname=$(SHLIB_SONAME) \
|
||||
+ -Wl,--version-script=$(SHLIB_MAP) \
|
||||
+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \
|
||||
+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
|
||||
+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
|
||||
+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
|
||||
+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
|
||||
+ else true; fi && \
|
||||
+ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \
|
||||
+ $$(gcc_srcdir)/config/ia64/change-symver.c -lelf && \
|
||||
+ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
|
||||
+ GCC_3.4.2 _GLOBAL_ \
|
||||
+ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \
|
||||
+ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \
|
||||
+ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \
|
||||
+ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \
|
||||
+ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \
|
||||
+ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \
|
||||
+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
|
||||
+ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
|
||||
+
|
||||
+TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL
|
||||
Index: gcc/config/ia64/change-symver.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/config/ia64/change-symver.c 2010-06-25 10:14:32.521880765 -0700
|
||||
@@ -0,0 +1,211 @@
|
||||
+#define _GNU_SOURCE 1
|
||||
+#define _FILE_OFFSET_BITS 64
|
||||
+#include <endian.h>
|
||||
+#include <errno.h>
|
||||
+#include <error.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <fnmatch.h>
|
||||
+#include <gelf.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+int
|
||||
+compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr)
|
||||
+{
|
||||
+ if (strcmp (name, "_GLOBAL_") == 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ int cnt;
|
||||
+ size_t offset = 0;
|
||||
+ for (cnt = verd_shdr->sh_info; --cnt >= 0; )
|
||||
+ {
|
||||
+ GElf_Verdef defmem;
|
||||
+ GElf_Verdef *def;
|
||||
+ GElf_Verdaux auxmem;
|
||||
+ GElf_Verdaux *aux;
|
||||
+ unsigned int auxoffset;
|
||||
+
|
||||
+ /* Get the data at the next offset. */
|
||||
+ def = gelf_getverdef (verd, offset, &defmem);
|
||||
+ if (def == NULL)
|
||||
+ break;
|
||||
+
|
||||
+ auxoffset = offset + def->vd_aux;
|
||||
+ aux = gelf_getverdaux (verd, auxoffset, &auxmem);
|
||||
+ if (aux == NULL)
|
||||
+ break;
|
||||
+
|
||||
+ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link,
|
||||
+ aux->vda_name)) == 0)
|
||||
+ return def->vd_ndx;
|
||||
+
|
||||
+ /* Find the next offset. */
|
||||
+ offset += def->vd_next;
|
||||
+ }
|
||||
+
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ if (argc < 4)
|
||||
+ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz");
|
||||
+
|
||||
+ const char *fname = argv[1];
|
||||
+
|
||||
+ /* Open the file. */
|
||||
+ int fd;
|
||||
+ fd = open (fname, O_RDWR);
|
||||
+ if (fd == -1)
|
||||
+ error (1, errno, fname);
|
||||
+
|
||||
+ elf_version (EV_CURRENT);
|
||||
+
|
||||
+ /* Now get the ELF descriptor. */
|
||||
+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
|
||||
+ if (elf == NULL || elf_kind (elf) != ELF_K_ELF)
|
||||
+ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ size_t shstrndx;
|
||||
+ /* Get the section header string table index. */
|
||||
+ if (elf_getshstrndx (elf, &shstrndx) < 0)
|
||||
+ error (1, 0, "cannot get shstrndx from %s", fname);
|
||||
+
|
||||
+ GElf_Ehdr ehdr_mem;
|
||||
+ GElf_Ehdr *ehdr;
|
||||
+
|
||||
+ /* We need the ELF header in a few places. */
|
||||
+ ehdr = gelf_getehdr (elf, &ehdr_mem);
|
||||
+ if (ehdr == NULL)
|
||||
+ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ Elf_Scn *scn = NULL;
|
||||
+ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr;
|
||||
+ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL;
|
||||
+
|
||||
+ while ((scn = elf_nextscn (elf, scn)) != NULL)
|
||||
+ {
|
||||
+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
|
||||
+
|
||||
+ if (shdr == NULL)
|
||||
+ error (1, 0, "couldn't get shdr from %s", fname);
|
||||
+
|
||||
+ if ((shdr->sh_flags & SHF_ALLOC) != 0)
|
||||
+ {
|
||||
+ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name);
|
||||
+ Elf_Data **p;
|
||||
+
|
||||
+ if (strcmp (name, ".gnu.version") == 0)
|
||||
+ {
|
||||
+ p = &ver;
|
||||
+ ver_shdr = *shdr;
|
||||
+ }
|
||||
+ else if (strcmp (name, ".gnu.version_d") == 0)
|
||||
+ {
|
||||
+ p = &verd;
|
||||
+ verd_shdr = *shdr;
|
||||
+ }
|
||||
+ else if (strcmp (name, ".dynsym") == 0)
|
||||
+ {
|
||||
+ p = &dynsym;
|
||||
+ dynsym_shdr = *shdr;
|
||||
+ }
|
||||
+ else
|
||||
+ continue;
|
||||
+
|
||||
+ if (*p != NULL)
|
||||
+ error (1, 0, "Two %s sections in %s", name, fname);
|
||||
+ *p = elf_getdata (scn, NULL);
|
||||
+ if (*p == NULL || elf_getdata (scn, *p) != NULL)
|
||||
+ error (1, 0, "No data or non-contiguous data in %s section in %s",
|
||||
+ name, fname);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (ver == NULL || verd == NULL || dynsym == NULL)
|
||||
+ error (1, 0, "Couldn't find one of the needed sections in %s", fname);
|
||||
+
|
||||
+ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr);
|
||||
+ if (from_idx == -1)
|
||||
+ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname);
|
||||
+
|
||||
+ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr);
|
||||
+ if (to_idx == -1)
|
||||
+ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname);
|
||||
+
|
||||
+ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version)
|
||||
+ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize
|
||||
+ || ver_shdr.sh_entsize != 2
|
||||
+ || (ver_shdr.sh_size & 1)
|
||||
+ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2)
|
||||
+ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname);
|
||||
+
|
||||
+ size_t nentries = ver_shdr.sh_size / 2;
|
||||
+ size_t cnt;
|
||||
+ GElf_Versym array[nentries];
|
||||
+ for (cnt = 0; cnt < nentries; ++cnt)
|
||||
+ {
|
||||
+ GElf_Versym vsymmem;
|
||||
+ GElf_Versym *vsym;
|
||||
+
|
||||
+ vsym = gelf_getversym (ver, cnt, &vsymmem);
|
||||
+ if (vsym == NULL)
|
||||
+ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ array[cnt] = *vsym;
|
||||
+ if (*vsym != from_idx)
|
||||
+ continue;
|
||||
+
|
||||
+ GElf_Sym sym_mem;
|
||||
+ GElf_Sym *sym;
|
||||
+ sym = gelf_getsym (dynsym, cnt, &sym_mem);
|
||||
+ if (sym == NULL)
|
||||
+ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name);
|
||||
+
|
||||
+ int argn;
|
||||
+ for (argn = 4; argn < argc; ++argn)
|
||||
+ if (fnmatch (argv[argn], name, 0) == 0)
|
||||
+ {
|
||||
+ array[cnt] = to_idx;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (sizeof (array[0]) != 2)
|
||||
+ abort ();
|
||||
+
|
||||
+#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
+ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
+ ;
|
||||
+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
+#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
+ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
+ ;
|
||||
+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
+#else
|
||||
+# error Unsupported endianity
|
||||
+#endif
|
||||
+ {
|
||||
+ for (cnt = 0; cnt < nentries; ++cnt)
|
||||
+ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8);
|
||||
+ }
|
||||
+ else
|
||||
+ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname);
|
||||
+
|
||||
+ if (elf_end (elf) != 0)
|
||||
+ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1));
|
||||
+
|
||||
+ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset)
|
||||
+ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset,
|
||||
+ fname);
|
||||
+
|
||||
+ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries))
|
||||
+ error (1, 0, "failed to write .gnu.version section into %s", fname);
|
||||
+
|
||||
+ close (fd);
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gcc/config/ia64/unwind-ia64.c
|
||||
===================================================================
|
||||
--- gcc/config/ia64/unwind-ia64.c.orig 2009-09-07 08:41:52.000000000 -0700
|
||||
+++ gcc/config/ia64/unwind-ia64.c 2010-06-25 10:14:32.521880765 -0700
|
||||
@@ -48,6 +48,51 @@
|
||||
#define MD_UNW_COMPATIBLE_PERSONALITY_P(HEADER) 1
|
||||
#endif
|
||||
|
||||
+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace
|
||||
+ (_Unwind_Trace_Fn, void *);
|
||||
+extern void __symverglobal_Unwind_DeleteException
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void * __symverglobal_Unwind_FindEnclosingFunction (void *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind
|
||||
+ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetCFA
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetBSP
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Word __symverglobal_Unwind_GetGR
|
||||
+ (struct _Unwind_Context *, int );
|
||||
+extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *);
|
||||
+extern void *__symverglobal_Unwind_GetLanguageSpecificData
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart
|
||||
+ (struct _Unwind_Context *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *);
|
||||
+extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow
|
||||
+ (struct _Unwind_Exception *);
|
||||
+extern void __symverglobal_Unwind_SetGR
|
||||
+ (struct _Unwind_Context *, int, _Unwind_Word);
|
||||
+extern void __symverglobal_Unwind_SetIP
|
||||
+ (struct _Unwind_Context *, _Unwind_Ptr);
|
||||
+#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace
|
||||
+#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException
|
||||
+#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction
|
||||
+#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind
|
||||
+#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP
|
||||
+#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA
|
||||
+#define _Unwind_GetGR __symverglobal_Unwind_GetGR
|
||||
+#define _Unwind_GetIP __symverglobal_Unwind_GetIP
|
||||
+#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData
|
||||
+#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart
|
||||
+#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException
|
||||
+#define _Unwind_Resume __symverglobal_Unwind_Resume
|
||||
+#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow
|
||||
+#define _Unwind_SetGR __symverglobal_Unwind_SetGR
|
||||
+#define _Unwind_SetIP __symverglobal_Unwind_SetIP
|
||||
+#endif
|
||||
+
|
||||
enum unw_application_register
|
||||
{
|
||||
UNW_AR_BSP,
|
||||
@@ -2457,4 +2502,44 @@
|
||||
alias (_Unwind_SetIP);
|
||||
#endif
|
||||
|
||||
+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
|
||||
+#undef alias
|
||||
+#define symverglobal(name, version) \
|
||||
+__typeof (__symverglobal##name) __symverlocal##name \
|
||||
+ __attribute__ ((alias ("__symverglobal" #name))); \
|
||||
+__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\
|
||||
+__asm__ (".symver __symverlocal" #name"," #name "@" #version)
|
||||
+
|
||||
+#undef _Unwind_Backtrace
|
||||
+#undef _Unwind_DeleteException
|
||||
+#undef _Unwind_FindEnclosingFunction
|
||||
+#undef _Unwind_ForcedUnwind
|
||||
+#undef _Unwind_GetBSP
|
||||
+#undef _Unwind_GetCFA
|
||||
+#undef _Unwind_GetGR
|
||||
+#undef _Unwind_GetIP
|
||||
+#undef _Unwind_GetLanguageSpecificData
|
||||
+#undef _Unwind_GetRegionStart
|
||||
+#undef _Unwind_RaiseException
|
||||
+#undef _Unwind_Resume
|
||||
+#undef _Unwind_Resume_or_Rethrow
|
||||
+#undef _Unwind_SetGR
|
||||
+#undef _Unwind_SetIP
|
||||
+symverglobal (_Unwind_Backtrace, GCC_3.3);
|
||||
+symverglobal (_Unwind_DeleteException, GCC_3.0);
|
||||
+symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3);
|
||||
+symverglobal (_Unwind_ForcedUnwind, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetBSP, GCC_3.3.2);
|
||||
+symverglobal (_Unwind_GetCFA, GCC_3.3);
|
||||
+symverglobal (_Unwind_GetGR, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetIP, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0);
|
||||
+symverglobal (_Unwind_GetRegionStart, GCC_3.0);
|
||||
+symverglobal (_Unwind_RaiseException, GCC_3.0);
|
||||
+symverglobal (_Unwind_Resume, GCC_3.0);
|
||||
+symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3);
|
||||
+symverglobal (_Unwind_SetGR, GCC_3.0);
|
||||
+symverglobal (_Unwind_SetIP, GCC_3.0);
|
||||
+#endif
|
||||
+
|
||||
#endif
|
||||
Index: gcc/config/ia64/mkmap-symver-multi.awk
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/config/ia64/mkmap-symver-multi.awk 2010-06-25 10:14:32.521880765 -0700
|
||||
@@ -0,0 +1,133 @@
|
||||
+# Generate an ELF symbol version map a-la Solaris and GNU ld.
|
||||
+# Contributed by Richard Henderson <rth@cygnus.com>
|
||||
+#
|
||||
+# This file is part of GCC.
|
||||
+#
|
||||
+# GCC is free software; you can redistribute it and/or modify it under
|
||||
+# the terms of the GNU General Public License as published by the Free
|
||||
+# Software Foundation; either version 2, or (at your option) any later
|
||||
+# version.
|
||||
+#
|
||||
+# GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
+# License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with GCC; see the file COPYING. If not, write to the Free
|
||||
+# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
+# 02110-1301, USA.
|
||||
+
|
||||
+BEGIN {
|
||||
+ state = "nm";
|
||||
+ sawsymbol = 0;
|
||||
+}
|
||||
+
|
||||
+# Remove comment and blank lines.
|
||||
+/^ *#/ || /^ *$/ {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# We begin with nm input. Collect the set of symbols that are present
|
||||
+# so that we can not emit them into the final version script -- Solaris
|
||||
+# complains at us if we do.
|
||||
+
|
||||
+state == "nm" && /^%%/ {
|
||||
+ state = "ver";
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" && ($1 == "U" || $2 == "U") {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" && NF == 3 {
|
||||
+ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) {
|
||||
+ def[$3] = 1
|
||||
+ tl=$3
|
||||
+ sub(/^.*@/,"",tl)
|
||||
+ ver[$3] = tl
|
||||
+ } else {
|
||||
+ sub(/@@?GCC_[0-9.]*$/,"",$3)
|
||||
+ def[$3] = 1;
|
||||
+ }
|
||||
+ sawsymbol = 1;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+state == "nm" {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+# Now we process a simplified variant of the Solaris symbol version
|
||||
+# script. We have one symbol per line, no semicolons, simple markers
|
||||
+# for beginning and ending each section, and %inherit markers for
|
||||
+# describing version inheritence. A symbol may appear in more than
|
||||
+# one symbol version, and the last seen takes effect.
|
||||
+
|
||||
+NF == 3 && $1 == "%inherit" {
|
||||
+ inherit[$2] = $3;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+NF == 2 && $2 == "{" {
|
||||
+ libs[$1] = 1;
|
||||
+ thislib = $1;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+$1 == "}" {
|
||||
+ thislib = "";
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ ver[$1] = thislib;
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+END {
|
||||
+ if (!sawsymbol)
|
||||
+ {
|
||||
+ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2";
|
||||
+ exit 1;
|
||||
+ }
|
||||
+ for (l in libs)
|
||||
+ output(l);
|
||||
+}
|
||||
+
|
||||
+function output(lib) {
|
||||
+ if (done[lib])
|
||||
+ return;
|
||||
+ done[lib] = 1;
|
||||
+ if (inherit[lib])
|
||||
+ output(inherit[lib]);
|
||||
+
|
||||
+ empty=1
|
||||
+ for (sym in ver)
|
||||
+ if ((ver[sym] == lib) && (sym in def))
|
||||
+ {
|
||||
+ if (empty)
|
||||
+ {
|
||||
+ printf("%s {\n", lib);
|
||||
+ printf(" global:\n");
|
||||
+ empty = 0;
|
||||
+ }
|
||||
+ symp = sym;
|
||||
+ sub(/@GCC_[0-9.]*$/,"",symp);
|
||||
+ printf("\t%s;\n", symp);
|
||||
+ if (dotsyms)
|
||||
+ printf("\t.%s;\n", symp);
|
||||
+ }
|
||||
+
|
||||
+ if (empty)
|
||||
+ {
|
||||
+ for (l in libs)
|
||||
+ if (inherit[l] == lib)
|
||||
+ inherit[l] = inherit[lib];
|
||||
+ }
|
||||
+ else if (inherit[lib])
|
||||
+ printf("} %s;\n", inherit[lib]);
|
||||
+ else
|
||||
+ printf ("\n local:\n\t*;\n};\n");
|
||||
+}
|
||||
Index: gcc/config/ia64/libgcc-ia64-no-libunwind.ver
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2010-06-25 10:14:32.525880902 -0700
|
||||
@@ -0,0 +1,17 @@
|
||||
+GCC_3.4.2 {
|
||||
+ _Unwind_GetGR
|
||||
+ _Unwind_RaiseException
|
||||
+ _Unwind_GetRegionStart
|
||||
+ _Unwind_SetIP
|
||||
+ _Unwind_GetIP
|
||||
+ _Unwind_GetLanguageSpecificData
|
||||
+ _Unwind_Resume
|
||||
+ _Unwind_DeleteException
|
||||
+ _Unwind_SetGR
|
||||
+ _Unwind_ForcedUnwind
|
||||
+ _Unwind_Backtrace
|
||||
+ _Unwind_FindEnclosingFunction
|
||||
+ _Unwind_GetCFA
|
||||
+ _Unwind_Resume_or_Rethrow
|
||||
+ _Unwind_GetBSP
|
||||
+}
|
||||
@@ -1,19 +0,0 @@
|
||||
2008-01-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* lang.c (java_classify_record): Revert 2007-12-20 change.
|
||||
|
||||
Index: gcc/java/lang.c
|
||||
===================================================================
|
||||
--- gcc/java/lang.c.orig 2010-01-20 00:17:00.000000000 -0800
|
||||
+++ gcc/java/lang.c 2010-06-25 10:28:46.569383189 -0700
|
||||
@@ -881,9 +881,7 @@
|
||||
if (! CLASS_P (type))
|
||||
return RECORD_IS_STRUCT;
|
||||
|
||||
- /* ??? GDB does not support DW_TAG_interface_type as of December,
|
||||
- 2007. Re-enable this at a later time. */
|
||||
- if (0 && CLASS_INTERFACE (TYPE_NAME (type)))
|
||||
+ if (CLASS_INTERFACE (TYPE_NAME (type)))
|
||||
return RECORD_IS_INTERFACE;
|
||||
|
||||
return RECORD_IS_CLASS;
|
||||
@@ -1,48 +0,0 @@
|
||||
Index: libjava/configure.ac
|
||||
===================================================================
|
||||
--- libjava/configure.ac.orig 2010-03-21 12:41:37.000000000 -0700
|
||||
+++ libjava/configure.ac 2010-06-25 10:17:47.489886278 -0700
|
||||
@@ -139,6 +139,13 @@
|
||||
[allow rebuilding of .class and .h files]))
|
||||
AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
|
||||
|
||||
+AC_ARG_ENABLE(libjava-multilib,
|
||||
+ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib]))
|
||||
+if test "$enable_libjava_multilib" = no; then
|
||||
+ multilib=no
|
||||
+ ac_configure_args="$ac_configure_args --disable-multilib"
|
||||
+fi
|
||||
+
|
||||
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
|
||||
GCC_NO_EXECUTABLES
|
||||
|
||||
Index: libjava/configure
|
||||
===================================================================
|
||||
--- libjava/configure.orig 2010-04-02 11:18:06.000000000 -0700
|
||||
+++ libjava/configure 2010-06-25 10:17:47.516381209 -0700
|
||||
@@ -1609,6 +1609,8 @@
|
||||
default=yes
|
||||
--enable-java-maintainer-mode
|
||||
allow rebuilding of .class and .h files
|
||||
+ --enable-libjava-multilib
|
||||
+ build libjava as multilib
|
||||
--disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors
|
||||
--enable-maintainer-mode enable make rules and dependencies not useful
|
||||
@@ -3346,6 +3348,16 @@
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --enable-libjava-multilib was given.
|
||||
+if test "${enable_libjava_multilib+set}" = set; then
|
||||
+ enableval=$enable_libjava_multilib;
|
||||
+fi
|
||||
+
|
||||
+if test "$enable_libjava_multilib" = no; then
|
||||
+ multilib=no
|
||||
+ ac_configure_args="$ac_configure_args --disable-multilib"
|
||||
+fi
|
||||
+
|
||||
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
2005-11-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0,
|
||||
read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx
|
||||
instead of doing an extran indirection from frame_pointer_rtx.
|
||||
|
||||
* gcc.dg/20051128-1.c: New test.
|
||||
|
||||
Index: gcc/config/rs6000/rs6000.c
|
||||
===================================================================
|
||||
--- gcc/config/rs6000/rs6000.c.orig 2010-03-27 03:27:39.000000000 -0700
|
||||
+++ gcc/config/rs6000/rs6000.c 2010-06-25 10:18:04.053381930 -0700
|
||||
@@ -17646,17 +17646,22 @@
|
||||
don't try to be too clever here. */
|
||||
if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic))
|
||||
{
|
||||
+ rtx x;
|
||||
cfun->machine->ra_needs_full_frame = 1;
|
||||
|
||||
- return
|
||||
- gen_rtx_MEM
|
||||
- (Pmode,
|
||||
- memory_address
|
||||
- (Pmode,
|
||||
- plus_constant (copy_to_reg
|
||||
- (gen_rtx_MEM (Pmode,
|
||||
- memory_address (Pmode, frame))),
|
||||
- RETURN_ADDRESS_OFFSET)));
|
||||
+ if (count == 0)
|
||||
+ {
|
||||
+ gcc_assert (frame == frame_pointer_rtx);
|
||||
+ x = arg_pointer_rtx;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ x = memory_address (Pmode, frame);
|
||||
+ x = copy_to_reg (gen_rtx_MEM (Pmode, x));
|
||||
+ }
|
||||
+
|
||||
+ x = plus_constant (x, RETURN_ADDRESS_OFFSET);
|
||||
+ return gen_rtx_MEM (Pmode, memory_address (Pmode, x));
|
||||
}
|
||||
|
||||
cfun->machine->ra_need_lr = 1;
|
||||
Index: gcc/testsuite/gcc.dg/20051128-1.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/testsuite/gcc.dg/20051128-1.c 2010-06-25 10:18:04.061382856 -0700
|
||||
@@ -0,0 +1,41 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2 -fpic" } */
|
||||
+
|
||||
+extern void exit (int);
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int b;
|
||||
+
|
||||
+struct A
|
||||
+{
|
||||
+ void *pad[147];
|
||||
+ void *ra, *h;
|
||||
+ long o;
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+foo (struct A *a, void *x)
|
||||
+{
|
||||
+ __builtin_memset (a, 0, sizeof (a));
|
||||
+ if (!b)
|
||||
+ exit (0);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+__attribute__((noinline))
|
||||
+bar (void)
|
||||
+{
|
||||
+ struct A a;
|
||||
+
|
||||
+ __builtin_unwind_init ();
|
||||
+ foo (&a, __builtin_return_address (0));
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ bar ();
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
@@ -1,16 +0,0 @@
|
||||
2006-08-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/27898
|
||||
* gcc.dg/pr27898.c: New test.
|
||||
|
||||
--- gcc/testsuite/gcc.dg/pr27898.c.jj 2006-08-18 09:19:33.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr27898.c 2006-08-18 09:19:27.000000000 +0200
|
||||
@@ -0,0 +1,8 @@
|
||||
+/* PR c/27898 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "--combine" } */
|
||||
+/* { dg-additional-sources "pr27898.c" } */
|
||||
+
|
||||
+union u { struct { int i; }; };
|
||||
+
|
||||
+extern int foo (union u *);
|
||||
@@ -1,19 +0,0 @@
|
||||
2007-06-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/32139
|
||||
* gcc.c-torture/compile/20070531-1.c: New test.
|
||||
|
||||
--- gcc/testsuite/gcc.c-torture/compile/20070531-1.c.jj 2007-05-31 13:47:22.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.c-torture/compile/20070531-1.c 2007-06-01 10:57:15.000000000 +0200
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* PR tree-optimization/32139 */
|
||||
+int foo (void);
|
||||
+int bar (void) __attribute__ ((const));
|
||||
+
|
||||
+int
|
||||
+test (int x)
|
||||
+{
|
||||
+ int a = (x == 10000 ? foo : bar) ();
|
||||
+ int b = (x == 10000 ? foo : bar) ();
|
||||
+ return a + b;
|
||||
+}
|
||||
@@ -1,159 +0,0 @@
|
||||
2007-11-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/33763
|
||||
* gcc.dg/pr33763.c: New test.
|
||||
* g++.dg/opt/inline13.C: New test.
|
||||
|
||||
2007-11-06 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR tree-optimization/33763
|
||||
* tree-inline.c (expand_call_inline): Silently ignore always_inline
|
||||
attribute for redefined extern inline functions.
|
||||
|
||||
Index: gcc/tree-inline.c
|
||||
===================================================================
|
||||
--- gcc/tree-inline.c.orig 2010-03-18 13:07:13.000000000 -0700
|
||||
+++ gcc/tree-inline.c 2010-06-25 10:18:51.230139825 -0700
|
||||
@@ -3545,6 +3545,12 @@
|
||||
goto egress;
|
||||
|
||||
if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
|
||||
+ /* For extern inline functions that get redefined we always
|
||||
+ silently ignored alway_inline flag. Better behaviour would
|
||||
+ be to be able to keep both bodies and use extern inline body
|
||||
+ for inlining, but we can't do that because frontends overwrite
|
||||
+ the body. */
|
||||
+ && !cg_edge->callee->local.redefined_extern_inline
|
||||
/* Avoid warnings during early inline pass. */
|
||||
&& cgraph_global_info_ready)
|
||||
{
|
||||
Index: gcc/testsuite/gcc.dg/pr33763.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/testsuite/gcc.dg/pr33763.c 2010-06-25 10:18:51.234141302 -0700
|
||||
@@ -0,0 +1,60 @@
|
||||
+/* PR tree-optimization/33763 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ void *a;
|
||||
+ void *b;
|
||||
+} T;
|
||||
+extern void *foo (const char *, const char *);
|
||||
+extern void *bar (void *, const char *, T);
|
||||
+extern int baz (const char *, int);
|
||||
+
|
||||
+extern inline __attribute__ ((always_inline, gnu_inline)) int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 2;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int xa, xb;
|
||||
+
|
||||
+static void *
|
||||
+inl (const char *x, const char *y)
|
||||
+{
|
||||
+ T t = { &xa, &xb };
|
||||
+ int *f = (int *) __builtin_malloc (sizeof (int));
|
||||
+ const char *z;
|
||||
+ int o = 0;
|
||||
+ void *r = 0;
|
||||
+
|
||||
+ for (z = y; *z; z++)
|
||||
+ {
|
||||
+ if (*z == 'r')
|
||||
+ o |= 1;
|
||||
+ if (*z == 'w')
|
||||
+ o |= 2;
|
||||
+ }
|
||||
+ if (o == 1)
|
||||
+ *f = baz (x, 0);
|
||||
+ if (o == 2)
|
||||
+ *f = baz (x, 1);
|
||||
+ if (o == 3)
|
||||
+ *f = baz (x, 2);
|
||||
+
|
||||
+ if (o && *f > 0)
|
||||
+ r = bar (f, "w", t);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+void *
|
||||
+foo (const char *x, const char *y)
|
||||
+{
|
||||
+ return inl (x, y);
|
||||
+}
|
||||
Index: gcc/testsuite/g++.dg/opt/inline13.C
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc/testsuite/g++.dg/opt/inline13.C 2010-06-25 10:18:51.261052137 -0700
|
||||
@@ -0,0 +1,60 @@
|
||||
+// PR tree-optimization/33763
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+typedef struct
|
||||
+{
|
||||
+ void *a;
|
||||
+ void *b;
|
||||
+} T;
|
||||
+extern void *foo (const char *, const char *);
|
||||
+extern void *bar (void *, const char *, T);
|
||||
+extern int baz (const char *, int);
|
||||
+
|
||||
+extern inline __attribute__ ((always_inline, gnu_inline)) int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 2;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (const char *x, int y)
|
||||
+{
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int xa, xb;
|
||||
+
|
||||
+static void *
|
||||
+inl (const char *x, const char *y)
|
||||
+{
|
||||
+ T t = { &xa, &xb };
|
||||
+ int *f = (int *) __builtin_malloc (sizeof (int));
|
||||
+ const char *z;
|
||||
+ int o = 0;
|
||||
+ void *r = 0;
|
||||
+
|
||||
+ for (z = y; *z; z++)
|
||||
+ {
|
||||
+ if (*z == 'r')
|
||||
+ o |= 1;
|
||||
+ if (*z == 'w')
|
||||
+ o |= 2;
|
||||
+ }
|
||||
+ if (o == 1)
|
||||
+ *f = baz (x, 0);
|
||||
+ if (o == 2)
|
||||
+ *f = baz (x, 1);
|
||||
+ if (o == 3)
|
||||
+ *f = baz (x, 2);
|
||||
+
|
||||
+ if (o && *f > 0)
|
||||
+ r = bar (f, "w", t);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+void *
|
||||
+foo (const char *x, const char *y)
|
||||
+{
|
||||
+ return inl (x, y);
|
||||
+}
|
||||
@@ -1,89 +0,0 @@
|
||||
2008-04-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR pch/13675
|
||||
* files.c (struct _cpp_file): Remove pch field.
|
||||
(pch_open_file): Don't set file->pch, just file->pchname.
|
||||
(should_stack_file): After pfile->cb.read_pch call
|
||||
free pchname and clear pchname, don't close file->fd.
|
||||
Test file->pchname instead of file->pch. Don't close fd after cb.
|
||||
(_cpp_stack_include): Test file->pchname instead of file->pch.
|
||||
|
||||
* c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f).
|
||||
|
||||
--- libcpp/files.c.jj 2008-02-18 23:50:17.000000000 +0100
|
||||
+++ libcpp/files.c 2008-03-31 15:59:01.000000000 +0200
|
||||
@@ -106,9 +106,6 @@ struct _cpp_file
|
||||
|
||||
/* If BUFFER above contains the true contents of the file. */
|
||||
bool buffer_valid;
|
||||
-
|
||||
- /* File is a PCH (on return from find_include_file). */
|
||||
- bool pch;
|
||||
};
|
||||
|
||||
/* A singly-linked list for all searches for a given file name, with
|
||||
@@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_f
|
||||
}
|
||||
closedir (pchdir);
|
||||
}
|
||||
- if (valid)
|
||||
- file->pch = true;
|
||||
- else
|
||||
+ if (!valid)
|
||||
*invalid_pch = true;
|
||||
}
|
||||
|
||||
@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _c
|
||||
return false;
|
||||
|
||||
/* Handle PCH files immediately; don't stack them. */
|
||||
- if (file->pch)
|
||||
+ if (file->pchname)
|
||||
{
|
||||
pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
|
||||
- close (file->fd);
|
||||
file->fd = -1;
|
||||
+ free ((void *) file->pchname);
|
||||
+ file->pchname = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, c
|
||||
complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
|
||||
found a PCH file (in which case linemap_add is not called) or we
|
||||
were included from the command-line. */
|
||||
- if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
|
||||
+ if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE)
|
||||
pfile->line_table->highest_location--;
|
||||
|
||||
return _cpp_stack_file (pfile, file, type == IT_IMPORT);
|
||||
--- gcc/c-pch.c.jj 2008-02-18 23:46:08.000000000 +0100
|
||||
+++ gcc/c-pch.c 2008-03-31 15:56:00.000000000 +0200
|
||||
@@ -372,6 +372,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (f == NULL)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
|
||||
+ close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -380,6 +381,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (fread (&h, sizeof (h), 1, f) != 1)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "reading");
|
||||
+ fclose (f);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -425,7 +427,10 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
gt_pch_restore (f);
|
||||
|
||||
if (cpp_read_state (pfile, name, f, smd) != 0)
|
||||
- return;
|
||||
+ {
|
||||
+ fclose (f);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
fclose (f);
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
2007-10-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* Makefile.am (libgcj_tools_la_LIBADD): Add.
|
||||
* Makefile.in: Regenerated.
|
||||
|
||||
Index: libjava/Makefile.am
|
||||
===================================================================
|
||||
--- libjava/Makefile.am.orig 2010-03-21 12:41:37.000000000 -0700
|
||||
+++ libjava/Makefile.am 2010-06-25 10:22:11.394130458 -0700
|
||||
@@ -507,6 +507,8 @@
|
||||
libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch \
|
||||
-fno-bootstrap-classes -fno-indirect-classes \
|
||||
-fsource-filename=$(here)/classpath/tools/all-classes.lst
|
||||
+## See jv_convert_LDADD.
|
||||
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
|
||||
libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF)
|
||||
Index: libjava/Makefile.in
|
||||
===================================================================
|
||||
--- libjava/Makefile.in.orig 2010-04-02 11:18:06.000000000 -0700
|
||||
+++ libjava/Makefile.in 2010-06-25 10:27:41.841708512 -0700
|
||||
@@ -1190,7 +1190,7 @@
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF)
|
||||
|
||||
-libgcj_tools_la_LIBADD = libgcj.la -lm
|
||||
+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la -lm
|
||||
libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec $(am__append_22)
|
||||
libgcj_tools_la_LINK = $(LIBLINK) $(libgcj_tools_la_LDFLAGS)
|
||||
libjvm_la_SOURCES = jni-libjvm.cc
|
||||
@@ -1,32 +0,0 @@
|
||||
2007-10-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* doc/Makefile.am (POD2MAN): Set date from cp-tools.texinfo
|
||||
timestamp rather than from current date.
|
||||
* doc/Makefile.in: Regenerated.
|
||||
|
||||
Index: libjava/classpath/doc/Makefile.am
|
||||
===================================================================
|
||||
--- libjava/classpath/doc/Makefile.am.orig 2008-10-21 10:55:01.000000000 -0700
|
||||
+++ libjava/classpath/doc/Makefile.am 2010-06-25 10:28:30.237631599 -0700
|
||||
@@ -31,7 +31,7 @@
|
||||
gtnameserv.1 \
|
||||
gjdoc.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
||||
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||
STAMP = echo timestamp >
|
||||
|
||||
Index: libjava/classpath/doc/Makefile.in
|
||||
===================================================================
|
||||
--- libjava/classpath/doc/Makefile.in.orig 2010-04-02 11:18:06.000000000 -0700
|
||||
+++ libjava/classpath/doc/Makefile.in 2010-06-25 10:28:30.245635728 -0700
|
||||
@@ -376,7 +376,7 @@
|
||||
gtnameserv.1 \
|
||||
gjdoc.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
||||
TEXI2POD = perl $(srcdir)/texi2pod.pl
|
||||
STAMP = echo timestamp >
|
||||
@GENINSRC_FALSE@STAMP_GENINSRC =
|
||||
@@ -1,60 +0,0 @@
|
||||
2010-02-08 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
|
||||
linker.
|
||||
* config/linux.h (LINK_EH_SPEC): Likewise.
|
||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||
|
||||
Index: gcc/config/alpha/elf.h
|
||||
===================================================================
|
||||
--- gcc/config/alpha/elf.h.orig 2011-06-16 17:58:47.000000000 -0700
|
||||
+++ gcc/config/alpha/elf.h 2011-09-17 11:04:57.033298875 -0700
|
||||
@@ -441,7 +441,7 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||
I imagine that other systems will catch up. In the meantime, it
|
||||
doesn't harm to make sure that the data exists to be used later. */
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
|
||||
#endif
|
||||
|
||||
/* A C statement (sans semicolon) to output to the stdio stream STREAM
|
||||
Index: gcc/config/ia64/linux.h
|
||||
===================================================================
|
||||
--- gcc/config/ia64/linux.h.orig 2011-09-17 11:03:19.000000000 -0700
|
||||
+++ gcc/config/ia64/linux.h 2011-09-17 11:04:57.033298875 -0700
|
||||
@@ -80,7 +80,7 @@ do { \
|
||||
Signalize that because we have fde-glibc, we don't need all C shared libs
|
||||
linked against -lgcc_s. */
|
||||
#undef LINK_EH_SPEC
|
||||
-#define LINK_EH_SPEC ""
|
||||
+#define LINK_EH_SPEC "--no-add-needed "
|
||||
|
||||
#define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
|
||||
|
||||
Index: gcc/config/linux.h
|
||||
===================================================================
|
||||
--- gcc/config/linux.h.orig 2011-09-17 11:03:38.000000000 -0700
|
||||
+++ gcc/config/linux.h 2011-09-17 11:04:57.033298875 -0700
|
||||
@@ -101,7 +101,7 @@ see the files COPYING3 and COPYING.RUNTI
|
||||
} while (0)
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
|
||||
#endif
|
||||
|
||||
/* Define this so we can compile MS code for use with WINE. */
|
||||
Index: gcc/config/rs6000/sysv4.h
|
||||
===================================================================
|
||||
--- gcc/config/rs6000/sysv4.h.orig 2011-09-17 11:03:41.000000000 -0700
|
||||
+++ gcc/config/rs6000/sysv4.h 2011-09-17 11:05:58.653298861 -0700
|
||||
@@ -908,7 +908,7 @@ SVR4_ASM_SPEC \
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
# undef LINK_EH_SPEC
|
||||
-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
|
||||
#endif
|
||||
|
||||
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
|
||||
@@ -1,30 +0,0 @@
|
||||
* Fortran would have searched for arm-angstrom-gnueabi-gfortran but would have used
|
||||
used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler from our cross
|
||||
directory.
|
||||
|
||||
Index: gcc-4.5+svnr155514/libgfortran/configure
|
||||
===================================================================
|
||||
--- gcc-4.5+svnr155514.orig/libgfortran/configure 2009-12-29 22:02:01.000000000 -0800
|
||||
+++ gcc-4.5+svnr155514/libgfortran/configure 2009-12-30 08:12:40.889091657 -0800
|
||||
@@ -11655,7 +11655,7 @@ CC="$lt_save_CC"
|
||||
|
||||
# We need gfortran to compile parts of the library
|
||||
#AC_PROG_FC(gfortran)
|
||||
-FC="$GFORTRAN"
|
||||
+#FC="$GFORTRAN"
|
||||
ac_ext=${ac_fc_srcext-f}
|
||||
ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
|
||||
ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
|
||||
Index: gcc-4.5+svnr155514/libgfortran/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5+svnr155514.orig/libgfortran/configure.ac 2009-12-29 22:02:01.000000000 -0800
|
||||
+++ gcc-4.5+svnr155514/libgfortran/configure.ac 2009-12-30 08:12:13.453094218 -0800
|
||||
@@ -187,7 +187,7 @@ AC_SUBST(enable_static)
|
||||
|
||||
# We need gfortran to compile parts of the library
|
||||
#AC_PROG_FC(gfortran)
|
||||
-FC="$GFORTRAN"
|
||||
+#FC="$GFORTRAN"
|
||||
AC_PROG_FC(gfortran)
|
||||
|
||||
# extra LD Flags which are required for targets
|
||||
@@ -1,319 +0,0 @@
|
||||
Adds support for Freescale Power architecture e300c2 and e300c3 cores.
|
||||
http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
|
||||
|
||||
Leon Woestenberg <leonw@mailcan.com>
|
||||
|
||||
---
|
||||
gcc/config.gcc | 2
|
||||
gcc/config/rs6000/e300c2c3.md | 189 ++++++++++++++++++++++++++++++++++++++++++
|
||||
gcc/config/rs6000/rs6000.c | 24 +++++
|
||||
gcc/config/rs6000/rs6000.h | 4
|
||||
gcc/config/rs6000/rs6000.md | 3
|
||||
5 files changed, 220 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gcc-4.3.1/gcc/config/rs6000/e300c2c3.md
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc-4.3.1/gcc/config/rs6000/e300c2c3.md 2008-08-23 16:51:33.000000000 -0700
|
||||
@@ -0,0 +1,189 @@
|
||||
+;; Pipeline description for Motorola PowerPC e300c3 core.
|
||||
+;; Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
+;;
|
||||
+;; This file is part of GCC.
|
||||
+
|
||||
+;; GCC is free software; you can redistribute it and/or modify it
|
||||
+;; under the terms of the GNU General Public License as published
|
||||
+;; by the Free Software Foundation; either version 2, or (at your
|
||||
+;; option) any later version.
|
||||
+
|
||||
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
+;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
+;; License for more details.
|
||||
+
|
||||
+;; You should have received a copy of the GNU General Public License
|
||||
+;; along with GCC; see the file COPYING. If not, write to the
|
||||
+;; Free Software Foundation, 59 Temple Place - Suite 330, Boston,
|
||||
+;; MA 02111-1307, USA.
|
||||
+
|
||||
+(define_automaton "ppce300c3_most,ppce300c3_long,ppce300c3_retire")
|
||||
+(define_cpu_unit "ppce300c3_decode_0,ppce300c3_decode_1" "ppce300c3_most")
|
||||
+
|
||||
+;; We don't simulate general issue queue (GIC). If we have SU insn
|
||||
+;; and then SU1 insn, they can not be issued on the same cycle
|
||||
+;; (although SU1 insn and then SU insn can be issued) because the SU
|
||||
+;; insn will go to SU1 from GIC0 entry. Fortunately, the first cycle
|
||||
+;; multipass insn scheduling will find the situation and issue the SU1
|
||||
+;; insn and then the SU insn.
|
||||
+(define_cpu_unit "ppce300c3_issue_0,ppce300c3_issue_1" "ppce300c3_most")
|
||||
+
|
||||
+;; We could describe completion buffers slots in combination with the
|
||||
+;; retirement units and the order of completion but the result
|
||||
+;; automaton would behave in the same way because we can not describe
|
||||
+;; real latency time with taking in order completion into account.
|
||||
+;; Actually we could define the real latency time by querying reserved
|
||||
+;; automaton units but the current scheduler uses latency time before
|
||||
+;; issuing insns and making any reservations.
|
||||
+;;
|
||||
+;; So our description is aimed to achieve a insn schedule in which the
|
||||
+;; insns would not wait in the completion buffer.
|
||||
+(define_cpu_unit "ppce300c3_retire_0,ppce300c3_retire_1" "ppce300c3_retire")
|
||||
+
|
||||
+;; Branch unit:
|
||||
+(define_cpu_unit "ppce300c3_bu" "ppce300c3_most")
|
||||
+
|
||||
+;; IU:
|
||||
+(define_cpu_unit "ppce300c3_iu0_stage0,ppce300c3_iu1_stage0" "ppce300c3_most")
|
||||
+
|
||||
+;; IU: This used to describe non-pipelined division.
|
||||
+(define_cpu_unit "ppce300c3_mu_div" "ppce300c3_long")
|
||||
+
|
||||
+;; SRU:
|
||||
+(define_cpu_unit "ppce300c3_sru_stage0" "ppce300c3_most")
|
||||
+
|
||||
+;; Here we simplified LSU unit description not describing the stages.
|
||||
+(define_cpu_unit "ppce300c3_lsu" "ppce300c3_most")
|
||||
+
|
||||
+;; FPU:
|
||||
+(define_cpu_unit "ppce300c3_fpu" "ppce300c3_most")
|
||||
+
|
||||
+;; The following units are used to make automata deterministic
|
||||
+(define_cpu_unit "present_ppce300c3_decode_0" "ppce300c3_most")
|
||||
+(define_cpu_unit "present_ppce300c3_issue_0" "ppce300c3_most")
|
||||
+(define_cpu_unit "present_ppce300c3_retire_0" "ppce300c3_retire")
|
||||
+(define_cpu_unit "present_ppce300c3_iu0_stage0" "ppce300c3_most")
|
||||
+
|
||||
+;; The following sets to make automata deterministic when option ndfa is used.
|
||||
+(presence_set "present_ppce300c3_decode_0" "ppce300c3_decode_0")
|
||||
+(presence_set "present_ppce300c3_issue_0" "ppce300c3_issue_0")
|
||||
+(presence_set "present_ppce300c3_retire_0" "ppce300c3_retire_0")
|
||||
+(presence_set "present_ppce300c3_iu0_stage0" "ppce300c3_iu0_stage0")
|
||||
+
|
||||
+;; Some useful abbreviations.
|
||||
+(define_reservation "ppce300c3_decode"
|
||||
+ "ppce300c3_decode_0|ppce300c3_decode_1+present_ppce300c3_decode_0")
|
||||
+(define_reservation "ppce300c3_issue"
|
||||
+ "ppce300c3_issue_0|ppce300c3_issue_1+present_ppce300c3_issue_0")
|
||||
+(define_reservation "ppce300c3_retire"
|
||||
+ "ppce300c3_retire_0|ppce300c3_retire_1+present_ppce300c3_retire_0")
|
||||
+(define_reservation "ppce300c3_iu_stage0"
|
||||
+ "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0")
|
||||
+
|
||||
+;; Compares can be executed either one of the IU or SRU
|
||||
+(define_insn_reservation "ppce300c3_cmp" 1
|
||||
+ (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \
|
||||
+ +ppce300c3_retire")
|
||||
+
|
||||
+;; Other one cycle IU insns
|
||||
+(define_insn_reservation "ppce300c3_iu" 1
|
||||
+ (and (eq_attr "type" "integer,insert_word")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Branch. Actually this latency time is not used by the scheduler.
|
||||
+(define_insn_reservation "ppce300c3_branch" 1
|
||||
+ (and (eq_attr "type" "jmpreg,branch")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire")
|
||||
+
|
||||
+;; Multiply is non-pipelined but can be executed in any IU
|
||||
+(define_insn_reservation "ppce300c3_multiply" 2
|
||||
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \
|
||||
+ ppce300c3_iu_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Divide. We use the average latency time here. We omit reserving a
|
||||
+;; retire unit because of the result automata will be huge.
|
||||
+(define_insn_reservation "ppce300c3_divide" 20
|
||||
+ (and (eq_attr "type" "idiv")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\
|
||||
+ ppce300c3_mu_div*19")
|
||||
+
|
||||
+;; CR logical
|
||||
+(define_insn_reservation "ppce300c3_cr_logical" 1
|
||||
+ (and (eq_attr "type" "cr_logical,delayed_cr")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Mfcr
|
||||
+(define_insn_reservation "ppce300c3_mfcr" 1
|
||||
+ (and (eq_attr "type" "mfcr")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Mtcrf
|
||||
+(define_insn_reservation "ppce300c3_mtcrf" 1
|
||||
+ (and (eq_attr "type" "mtcr")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Mtjmpr
|
||||
+(define_insn_reservation "ppce300c3_mtjmpr" 1
|
||||
+ (and (eq_attr "type" "mtjmpr,mfjmpr")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
|
||||
+
|
||||
+;; Float point instructions
|
||||
+(define_insn_reservation "ppce300c3_fpcompare" 3
|
||||
+ (and (eq_attr "type" "fpcompare")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
|
||||
+
|
||||
+(define_insn_reservation "ppce300c3_fp" 3
|
||||
+ (and (eq_attr "type" "fp")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
|
||||
+
|
||||
+(define_insn_reservation "ppce300c3_dmul" 4
|
||||
+ (and (eq_attr "type" "dmul")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu,nothing,ppce300c3_retire")
|
||||
+
|
||||
+; Divides are not pipelined
|
||||
+(define_insn_reservation "ppce300c3_sdiv" 18
|
||||
+ (and (eq_attr "type" "sdiv")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*17")
|
||||
+
|
||||
+(define_insn_reservation "ppce300c3_ddiv" 33
|
||||
+ (and (eq_attr "type" "ddiv")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32")
|
||||
+
|
||||
+;; Loads
|
||||
+(define_insn_reservation "ppce300c3_load" 2
|
||||
+ (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
|
||||
+
|
||||
+(define_insn_reservation "ppce300c3_fpload" 2
|
||||
+ (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
|
||||
+
|
||||
+;; Stores.
|
||||
+(define_insn_reservation "ppce300c3_store" 2
|
||||
+ (and (eq_attr "type" "store,store_ux,store_u")
|
||||
+ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
|
||||
+
|
||||
+(define_insn_reservation "ppce300c3_fpstore" 2
|
||||
+ (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
|
||||
+ (eq_attr "cpu" "ppce300c3"))
|
||||
+ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
|
||||
Index: gcc-4.3.1/gcc/config/rs6000/rs6000.c
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.c 2008-08-23 16:49:39.000000000 -0700
|
||||
+++ gcc-4.3.1/gcc/config/rs6000/rs6000.c 2008-08-23 16:54:25.000000000 -0700
|
||||
@@ -669,6 +669,21 @@ struct processor_costs ppc8540_cost = {
|
||||
1, /* prefetch streams /*/
|
||||
};
|
||||
|
||||
+/* Instruction costs on E300C2 and E300C3 cores. */
|
||||
+static const
|
||||
+struct processor_costs ppce300c2c3_cost = {
|
||||
+ COSTS_N_INSNS (4), /* mulsi */
|
||||
+ COSTS_N_INSNS (4), /* mulsi_const */
|
||||
+ COSTS_N_INSNS (4), /* mulsi_const9 */
|
||||
+ COSTS_N_INSNS (4), /* muldi */
|
||||
+ COSTS_N_INSNS (19), /* divsi */
|
||||
+ COSTS_N_INSNS (19), /* divdi */
|
||||
+ COSTS_N_INSNS (3), /* fp */
|
||||
+ COSTS_N_INSNS (4), /* dmul */
|
||||
+ COSTS_N_INSNS (18), /* sdiv */
|
||||
+ COSTS_N_INSNS (33), /* ddiv */
|
||||
+};
|
||||
+
|
||||
/* Instruction costs on POWER4 and POWER5 processors. */
|
||||
static const
|
||||
struct processor_costs power4_cost = {
|
||||
@@ -1420,6 +1435,8 @@ rs6000_override_options (const char *def
|
||||
{"8540", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN},
|
||||
/* 8548 has a dummy entry for now. */
|
||||
{"8548", PROCESSOR_PPC8540, POWERPC_BASE_MASK | MASK_STRICT_ALIGN},
|
||||
+ {"e300c2", PROCESSOR_PPCE300C2, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
|
||||
+ {"e300c3", PROCESSOR_PPCE300C3, POWERPC_BASE_MASK},
|
||||
{"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
|
||||
{"970", PROCESSOR_POWER4,
|
||||
POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64},
|
||||
@@ -1845,6 +1862,11 @@ rs6000_override_options (const char *def
|
||||
rs6000_cost = &ppc8540_cost;
|
||||
break;
|
||||
|
||||
+ case PROCESSOR_PPCE300C2:
|
||||
+ case PROCESSOR_PPCE300C3:
|
||||
+ rs6000_cost = &ppce300c2c3_cost;
|
||||
+ break;
|
||||
+
|
||||
case PROCESSOR_POWER4:
|
||||
case PROCESSOR_POWER5:
|
||||
rs6000_cost = &power4_cost;
|
||||
@@ -18606,6 +18628,8 @@ rs6000_issue_rate (void)
|
||||
case CPU_PPC7400:
|
||||
case CPU_PPC8540:
|
||||
case CPU_CELL:
|
||||
+ case CPU_PPCE300C2:
|
||||
+ case CPU_PPCE300C3:
|
||||
return 2;
|
||||
case CPU_RIOS2:
|
||||
case CPU_PPC604:
|
||||
Index: gcc-4.3.1/gcc/config/rs6000/rs6000.h
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.h 2008-01-26 09:18:35.000000000 -0800
|
||||
+++ gcc-4.3.1/gcc/config/rs6000/rs6000.h 2008-08-23 16:55:30.000000000 -0700
|
||||
@@ -117,6 +117,8 @@
|
||||
%{mcpu=G5: -mpower4 -maltivec} \
|
||||
%{mcpu=8540: -me500} \
|
||||
%{mcpu=8548: -me500} \
|
||||
+%{mcpu=e300c2: -mppc} \
|
||||
+%{mcpu=e300c3: -mppc -mpmr} \
|
||||
%{maltivec: -maltivec} \
|
||||
-many"
|
||||
|
||||
@@ -262,6 +264,8 @@ enum processor_type
|
||||
PROCESSOR_PPC7400,
|
||||
PROCESSOR_PPC7450,
|
||||
PROCESSOR_PPC8540,
|
||||
+ PROCESSOR_PPCE300C2,
|
||||
+ PROCESSOR_PPCE300C3,
|
||||
PROCESSOR_POWER4,
|
||||
PROCESSOR_POWER5,
|
||||
PROCESSOR_POWER6,
|
||||
Index: gcc-4.3.1/gcc/config/rs6000/rs6000.md
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/gcc/config/rs6000/rs6000.md 2008-02-13 16:14:45.000000000 -0800
|
||||
+++ gcc-4.3.1/gcc/config/rs6000/rs6000.md 2008-08-23 16:57:29.000000000 -0700
|
||||
@@ -133,7 +133,7 @@
|
||||
;; Processor type -- this attribute must exactly match the processor_type
|
||||
;; enumeration in rs6000.h.
|
||||
|
||||
-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5,power6,cell"
|
||||
+(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5,power6,cell,ppce300c2,ppce300c3"
|
||||
(const (symbol_ref "rs6000_cpu_attr")))
|
||||
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
(include "7xx.md")
|
||||
(include "7450.md")
|
||||
(include "8540.md")
|
||||
+(include "e300c2c3.md")
|
||||
(include "power4.md")
|
||||
(include "power5.md")
|
||||
(include "power6.md")
|
||||
Index: gcc-4.3.1/gcc/config.gcc
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/gcc/config.gcc 2008-08-23 16:49:43.000000000 -0700
|
||||
+++ gcc-4.3.1/gcc/config.gcc 2008-08-23 17:03:55.000000000 -0700
|
||||
@@ -3144,7 +3144,7 @@ case "${target}" in
|
||||
| rios | rios1 | rios2 | rsc | rsc1 | rs64a \
|
||||
| 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \
|
||||
| 601 | 602 | 603 | 603e | ec603e | 604 \
|
||||
- | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
|
||||
+ | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 | e300c[23] \
|
||||
| 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell)
|
||||
# OK
|
||||
;;
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
configure | 2 +-
|
||||
configure.ac | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: gcc-4.3.1/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/configure.ac 2008-07-21 12:29:18.000000000 -0700
|
||||
+++ gcc-4.3.1/configure.ac 2008-07-21 12:29:35.000000000 -0700
|
||||
@@ -2352,7 +2352,7 @@ fi
|
||||
# for target_alias and gcc doesn't manage it consistently.
|
||||
target_configargs="--cache-file=./config.cache ${target_configargs}"
|
||||
|
||||
-FLAGS_FOR_TARGET=
|
||||
+FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
|
||||
case " $target_configdirs " in
|
||||
*" newlib "*)
|
||||
case " $target_configargs " in
|
||||
Index: gcc-4.3.1/configure
|
||||
===================================================================
|
||||
--- gcc-4.3.1.orig/configure 2008-07-21 12:29:48.000000000 -0700
|
||||
+++ gcc-4.3.1/configure 2008-07-21 12:29:59.000000000 -0700
|
||||
@@ -5841,7 +5841,7 @@ fi
|
||||
# for target_alias and gcc doesn't manage it consistently.
|
||||
target_configargs="--cache-file=./config.cache ${target_configargs}"
|
||||
|
||||
-FLAGS_FOR_TARGET=
|
||||
+FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
|
||||
case " $target_configdirs " in
|
||||
*" newlib "*)
|
||||
case " $target_configargs " in
|
||||
Binary file not shown.
@@ -1,103 +0,0 @@
|
||||
Date: Mon, 22 Nov 2010 13:28:54 +0000
|
||||
From: Julian Brown <julian at codesourcery dot com>
|
||||
To: gcc-patches at gcc dot gnu dot org
|
||||
Cc: DJ Delorie <dj at redhat dot com>
|
||||
Subject: [PATCH] Volatile bitfields vs. inline asm memory constraints
|
||||
Message-ID: <20101122132854.0aca431a@rex.config>
|
||||
Mime-Version: 1.0
|
||||
Content-Type: multipart/mixed; boundary="MP_/ONpW806RnQ1ziaYj7_Y5E27"
|
||||
X-IsSubscribed: yes
|
||||
Mailing-List: contact gcc-patches-help at gcc dot gnu dot org; run by ezmlm
|
||||
Precedence: bulk
|
||||
List-Id: <gcc-patches.gcc.gnu.org>
|
||||
List-Archive: <http://gcc.gnu.org/ml/gcc-patches/>
|
||||
List-Post: <mailto:gcc-patches at gcc dot gnu dot org>
|
||||
List-Help: <mailto:gcc-patches-help at gcc dot gnu dot org>
|
||||
Sender: gcc-patches-owner at gcc dot gnu dot org
|
||||
Delivered-To: mailing list gcc-patches at gcc dot gnu dot org
|
||||
|
||||
|
||||
|
||||
Hi,
|
||||
|
||||
This patch fixes the issue in the (Launchpad, not GCC) bug tracker:
|
||||
|
||||
https://bugs.launchpad.net/gcc-linaro/+bug/675347
|
||||
|
||||
The problem was introduced by the patch from DJ to honour volatile
|
||||
bitfield types:
|
||||
|
||||
http://gcc.gnu.org/ml/gcc-patches/2010-06/msg01167.html
|
||||
|
||||
but not exposed (on ARM) until the option was made the default (on the
|
||||
Linaro branch) -- it's not yet the default on mainline.
|
||||
|
||||
The issue is as follows: after DJ's patch and with
|
||||
-fstrict-volatile-bitfields, in expr.c:expand_expr_real_1, the if
|
||||
condition with the comment "In cases where an aligned union has an
|
||||
unaligned object as a field, we might be extracting a BLKmode value
|
||||
from an integer-mode (e.g., SImode) object [...]" triggers for a normal
|
||||
(non-bitfield) volatile field of a struct/class.
|
||||
|
||||
But, this appears to be over-eager: in the particular case mentioned
|
||||
above, when expanding a "volatile int" struct field used as a memory
|
||||
constraint for an inline asm, we end up with something which is no
|
||||
longer addressable (I think because of the actions of
|
||||
extract_bit_field). So, compilation aborts.
|
||||
|
||||
My proposed fix is to restrict the conditional by only making it execute
|
||||
for -fstrict-volatile-bitfields only for non-naturally-aligned accesses:
|
||||
this appears to work (fixes test in question, and no regressions for
|
||||
cross to ARM Linux, gcc/g++/libstdc++, with -fstrict-volatile-bitfields
|
||||
turned on), but I don't know if there will be unintended consequences.
|
||||
DJ, does it look sane to you?
|
||||
|
||||
Incidentally the constraints in the inline asm in the Launchpad
|
||||
testcase might be slightly dubious (attempting to force (mem (reg)) by
|
||||
using both "+m" (var) and "r" (&var) constraints), but replacing
|
||||
them with e.g.:
|
||||
|
||||
asm volatile("0:\n"
|
||||
"ldrex %[newValue], %[_q_value]\n"
|
||||
"sub %[newValue], %[newValue], #1\n"
|
||||
"strex %[result], %[newValue], %[_q_value]\n"
|
||||
"teq %[result], #0\n"
|
||||
"bne 0b\n"
|
||||
: [newValue] "=&r" (newValue),
|
||||
[result] "=&r" (result)
|
||||
: [_q_value] "Q" (_q_value)
|
||||
: "cc", "memory");
|
||||
|
||||
still leads to a warning (not an error) with trunk and
|
||||
-fstrict-volatile-bitfields:
|
||||
|
||||
atomic-changed.cc:24:35: warning: use of memory input without lvalue in
|
||||
asm operand 2 is deprecated [enabled by default]
|
||||
|
||||
The warning goes away with the attached patch. So, I don't think the
|
||||
problem is purely that the original inline asm is invalid.
|
||||
|
||||
OK to apply, or any comments?
|
||||
|
||||
Julian
|
||||
|
||||
ChangeLog
|
||||
|
||||
gcc/
|
||||
* expr.c (expand_expr_real_1): Only use BLKmode for volatile
|
||||
accesses which are not naturally aligned.
|
||||
|
||||
Index: gcc-4_5-branch/gcc/expr.c
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/expr.c 2010-12-23 00:42:11.690101002 -0800
|
||||
+++ gcc-4_5-branch/gcc/expr.c 2010-12-24 15:07:39.400101000 -0800
|
||||
@@ -9029,7 +9029,8 @@
|
||||
&& modifier != EXPAND_INITIALIZER)
|
||||
/* If the field is volatile, we always want an aligned
|
||||
access. */
|
||||
- || (volatilep && flag_strict_volatile_bitfields > 0)
|
||||
+ || (volatilep && flag_strict_volatile_bitfields > 0
|
||||
+ && (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
|
||||
/* If the field isn't aligned enough to fetch as a memref,
|
||||
fetch it as a bit field. */
|
||||
|| (mode1 != BLKmode
|
||||
@@ -1,29 +0,0 @@
|
||||
The LINK_SPEC for linux gets overwritten by linux-eabi.h which
|
||||
means the value of TARGET_FIX_V4BX_SPEC gets lost and as a result
|
||||
the option is not passed to linker when chosing march=armv4
|
||||
This patch redefines this in linux-eabi.h and reinserts it
|
||||
for eabi defaulting toolchains.
|
||||
|
||||
We might want to send it upstream
|
||||
|
||||
-Khem
|
||||
Index: gcc-4.5/gcc/config/arm/linux-eabi.h
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/config/arm/linux-eabi.h
|
||||
+++ gcc-4.5/gcc/config/arm/linux-eabi.h
|
||||
@@ -63,10 +63,14 @@
|
||||
#undef GLIBC_DYNAMIC_LINKER
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
|
||||
|
||||
+/* For armv4 we pass --fix-v4bx to linker to support EABI */
|
||||
+#undef TARGET_FIX_V4BX_SPEC
|
||||
+#define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4:--fix-v4bx}"
|
||||
+
|
||||
/* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
|
||||
use the GNU/Linux version, not the generic BPABI version. */
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC LINUX_TARGET_LINK_SPEC BE8_LINK_SPEC
|
||||
+#define LINK_SPEC LINUX_TARGET_LINK_SPEC BE8_LINK_SPEC TARGET_FIX_V4BX_SPEC
|
||||
|
||||
/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
|
||||
do not use -lfloat. */
|
||||
@@ -1,178 +0,0 @@
|
||||
Index: gcc-4.5/Makefile.def
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/Makefile.def
|
||||
+++ gcc-4.5/Makefile.def
|
||||
@@ -240,6 +240,7 @@ flags_to_pass = { flag= AWK ; };
|
||||
flags_to_pass = { flag= BISON ; };
|
||||
flags_to_pass = { flag= CC_FOR_BUILD ; };
|
||||
flags_to_pass = { flag= CFLAGS_FOR_BUILD ; };
|
||||
+flags_to_pass = { flag= CPPFLAGS_FOR_BUILD ; };
|
||||
flags_to_pass = { flag= CXX_FOR_BUILD ; };
|
||||
flags_to_pass = { flag= EXPECT ; };
|
||||
flags_to_pass = { flag= FLEX ; };
|
||||
Index: gcc-4.5/gcc/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/Makefile.in
|
||||
+++ gcc-4.5/gcc/Makefile.in
|
||||
@@ -766,7 +766,7 @@ BUILD_LINKERFLAGS = $(BUILD_CFLAGS)
|
||||
|
||||
# Native linker and preprocessor flags. For x-fragment overrides.
|
||||
BUILD_LDFLAGS=@BUILD_LDFLAGS@
|
||||
-BUILD_CPPFLAGS=$(ALL_CPPFLAGS)
|
||||
+BUILD_CPPFLAGS=$(INCLUDES) @BUILD_CPPFLAGS@ $(X_CPPFLAGS)
|
||||
|
||||
# Actual name to use when installing a native compiler.
|
||||
GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
|
||||
Index: gcc-4.5/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/configure.ac
|
||||
+++ gcc-4.5/gcc/configure.ac
|
||||
@@ -1798,16 +1798,18 @@ AC_SUBST(inhibit_libc)
|
||||
# Also, we cannot run fixincludes.
|
||||
|
||||
# These are the normal (build=host) settings:
|
||||
-CC_FOR_BUILD='$(CC)' AC_SUBST(CC_FOR_BUILD)
|
||||
-BUILD_CFLAGS='$(ALL_CFLAGS)' AC_SUBST(BUILD_CFLAGS)
|
||||
-BUILD_LDFLAGS='$(LDFLAGS)' AC_SUBST(BUILD_LDFLAGS)
|
||||
-STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_FIXINC)
|
||||
+CC_FOR_BUILD='$(CC)' AC_SUBST(CC_FOR_BUILD)
|
||||
+BUILD_CFLAGS='$(ALL_CFLAGS)' AC_SUBST(BUILD_CFLAGS)
|
||||
+BUILD_LDFLAGS='$(LDFLAGS)' AC_SUBST(BUILD_LDFLAGS)
|
||||
+BUILD_CPPFLAGS='$(ALL_CPPFLAGS)' AC_SUBST(BUILD_CPPFLAGS)
|
||||
+STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_FIXINC)
|
||||
|
||||
# And these apply if build != host, or we are generating coverage data
|
||||
if test x$build != x$host || test "x$coverage_flags" != x
|
||||
then
|
||||
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
|
||||
+ BUILD_CPPFLAGS='$(CPPFLAGS_FOR_BUILD)'
|
||||
fi
|
||||
|
||||
# Expand extra_headers to include complete path.
|
||||
Index: gcc-4.5/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/Makefile.in
|
||||
+++ gcc-4.5/Makefile.in
|
||||
@@ -333,6 +333,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
|
||||
AS_FOR_BUILD = @AS_FOR_BUILD@
|
||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
|
||||
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
|
||||
CXX_FOR_BUILD = @CXX_FOR_BUILD@
|
||||
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
|
||||
@@ -662,6 +663,7 @@ BASE_FLAGS_TO_PASS = \
|
||||
"BISON=$(BISON)" \
|
||||
"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
|
||||
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
|
||||
+ "CPPFLAGS_FOR_BUILD=$(CPPFLAGS_FOR_BUILD)" \
|
||||
"CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
|
||||
"EXPECT=$(EXPECT)" \
|
||||
"FLEX=$(FLEX)" \
|
||||
Index: gcc-4.5/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/configure
|
||||
+++ gcc-4.5/gcc/configure
|
||||
@@ -707,6 +707,7 @@ SED
|
||||
LIBTOOL
|
||||
collect2
|
||||
STMP_FIXINC
|
||||
+BUILD_CPPFLAGS
|
||||
BUILD_LDFLAGS
|
||||
BUILD_CFLAGS
|
||||
CC_FOR_BUILD
|
||||
@@ -10982,6 +10983,7 @@ fi
|
||||
CC_FOR_BUILD='$(CC)'
|
||||
BUILD_CFLAGS='$(ALL_CFLAGS)'
|
||||
BUILD_LDFLAGS='$(LDFLAGS)'
|
||||
+BUILD_CPPFLAGS='$(ALL_CPPFLAGS)'
|
||||
STMP_FIXINC=stmp-fixinc
|
||||
|
||||
# And these apply if build != host, or we are generating coverage data
|
||||
@@ -10989,6 +10991,7 @@ if test x$build != x$host || test "x$cov
|
||||
then
|
||||
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
|
||||
+ BUILD_CPPFLAGS='$(CPPFLAGS_FOR_BUILD)'
|
||||
fi
|
||||
|
||||
# Expand extra_headers to include complete path.
|
||||
@@ -17108,7 +17111,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17111 "configure"
|
||||
+#line 17114 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -17214,7 +17217,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17217 "configure"
|
||||
+#line 17220 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
Index: gcc-4.5/Makefile.tpl
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/Makefile.tpl
|
||||
+++ gcc-4.5/Makefile.tpl
|
||||
@@ -336,6 +336,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
|
||||
AS_FOR_BUILD = @AS_FOR_BUILD@
|
||||
CC_FOR_BUILD = @CC_FOR_BUILD@
|
||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
||||
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
|
||||
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
|
||||
CXX_FOR_BUILD = @CXX_FOR_BUILD@
|
||||
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
|
||||
Index: gcc-4.5/configure
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/configure
|
||||
+++ gcc-4.5/configure
|
||||
@@ -651,6 +651,7 @@ GCJ_FOR_BUILD
|
||||
DLLTOOL_FOR_BUILD
|
||||
CXX_FOR_BUILD
|
||||
CXXFLAGS_FOR_BUILD
|
||||
+CPPFLAGS_FOR_BUILD
|
||||
CFLAGS_FOR_BUILD
|
||||
CC_FOR_BUILD
|
||||
AS_FOR_BUILD
|
||||
@@ -8036,6 +8037,7 @@ esac
|
||||
# our build compiler if desired.
|
||||
if test x"${build}" = x"${host}" ; then
|
||||
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
|
||||
+ CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
|
||||
CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
|
||||
LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
|
||||
fi
|
||||
@@ -8101,6 +8103,7 @@ done
|
||||
|
||||
|
||||
|
||||
+
|
||||
|
||||
|
||||
|
||||
Index: gcc-4.5/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/configure.ac
|
||||
+++ gcc-4.5/configure.ac
|
||||
@@ -3089,6 +3089,7 @@ esac
|
||||
# our build compiler if desired.
|
||||
if test x"${build}" = x"${host}" ; then
|
||||
CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
|
||||
+ CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${CPPFLAGS}}
|
||||
CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
|
||||
LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
|
||||
fi
|
||||
@@ -3155,6 +3156,7 @@ AC_SUBST(AR_FOR_BUILD)
|
||||
AC_SUBST(AS_FOR_BUILD)
|
||||
AC_SUBST(CC_FOR_BUILD)
|
||||
AC_SUBST(CFLAGS_FOR_BUILD)
|
||||
+AC_SUBST(CPPFLAGS_FOR_BUILD)
|
||||
AC_SUBST(CXXFLAGS_FOR_BUILD)
|
||||
AC_SUBST(CXX_FOR_BUILD)
|
||||
AC_SUBST(DLLTOOL_FOR_BUILD)
|
||||
@@ -1,331 +0,0 @@
|
||||
#! /bin/sh -e
|
||||
|
||||
# DP: Retry the build on an ice, save the calling options and preprocessed
|
||||
# DP: source when the ice is reproducible.
|
||||
|
||||
dir=
|
||||
if [ $# -eq 3 -a "$2" = '-d' ]; then
|
||||
pdir="-d $3"
|
||||
dir="$3/"
|
||||
elif [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
case "$1" in
|
||||
-patch)
|
||||
patch $pdir -f --no-backup-if-mismatch -p0 < $0
|
||||
;;
|
||||
-unpatch)
|
||||
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
|
||||
;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
esac
|
||||
exit 0
|
||||
|
||||
2004-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* system.h (ICE_EXIT_CODE): Define.
|
||||
* gcc.c (execute): Don't free first string early, but at the end
|
||||
of the function. Call retry_ice if compiler exited with
|
||||
ICE_EXIT_CODE.
|
||||
(retry_ice): New function.
|
||||
* diagnostic.c (diagnostic_count_diagnostic,
|
||||
diagnostic_action_after_output, error_recursion): Exit with
|
||||
ICE_EXIT_CODE instead of FATAL_EXIT_CODE.
|
||||
|
||||
--- gcc/diagnostic.c.orig 2007-09-30 10:48:13.000000000 +0000
|
||||
+++ gcc/diagnostic.c 2007-09-30 10:49:57.000000000 +0000
|
||||
@@ -244,7 +244,7 @@
|
||||
fnotice (stderr, "Please submit a full bug report,\n"
|
||||
"with preprocessed source if appropriate.\n"
|
||||
"See %s for instructions.\n", bug_report_url);
|
||||
- exit (ICE_EXIT_CODE);
|
||||
+ exit (FATAL_EXIT_CODE);
|
||||
|
||||
case DK_FATAL:
|
||||
if (context->abort_on_error)
|
||||
--- gcc/gcc.c.orig 2007-09-30 10:48:13.000000000 +0000
|
||||
+++ gcc/gcc.c 2007-09-30 10:48:39.000000000 +0000
|
||||
@@ -357,6 +357,9 @@
|
||||
#if defined(HAVE_TARGET_OBJECT_SUFFIX) || defined(HAVE_TARGET_EXECUTABLE_SUFFIX)
|
||||
static const char *convert_filename (const char *, int, int);
|
||||
#endif
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+static void retry_ice (const char *prog, const char **argv);
|
||||
+#endif
|
||||
|
||||
static const char *getenv_spec_function (int, const char **);
|
||||
static const char *if_exists_spec_function (int, const char **);
|
||||
@@ -2999,7 +3002,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (string != commands[i].prog)
|
||||
+ if (i && string != commands[i].prog)
|
||||
free (CONST_CAST (char *, string));
|
||||
}
|
||||
|
||||
@@ -3056,6 +3059,16 @@
|
||||
else if (WIFEXITED (status)
|
||||
&& WEXITSTATUS (status) >= MIN_FATAL_STATUS)
|
||||
{
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+ /* For ICEs in cc1, cc1obj, cc1plus see if it is
|
||||
+ reproducible or not. */
|
||||
+ char *p;
|
||||
+ if (WEXITSTATUS (status) == ICE_EXIT_CODE
|
||||
+ && i == 0
|
||||
+ && (p = strrchr (commands[0].argv[0], DIR_SEPARATOR))
|
||||
+ && ! strncmp (p + 1, "cc1", 3))
|
||||
+ retry_ice (commands[0].prog, commands[0].argv);
|
||||
+#endif
|
||||
if (WEXITSTATUS (status) > greatest_status)
|
||||
greatest_status = WEXITSTATUS (status);
|
||||
ret_code = -1;
|
||||
@@ -3076,6 +3089,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ if (commands[0].argv[0] != commands[0].prog)
|
||||
+ free ((PTR) commands[0].argv[0]);
|
||||
+
|
||||
return ret_code;
|
||||
}
|
||||
}
|
||||
@@ -6016,6 +6032,224 @@
|
||||
switches[switchnum].validated = 1;
|
||||
}
|
||||
|
||||
+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS))
|
||||
+#define RETRY_ICE_ATTEMPTS 2
|
||||
+
|
||||
+static void
|
||||
+retry_ice (const char *prog, const char **argv)
|
||||
+{
|
||||
+ int nargs, out_arg = -1, quiet = 0, attempt;
|
||||
+ int pid, retries, sleep_interval;
|
||||
+ const char **new_argv;
|
||||
+ char *temp_filenames[RETRY_ICE_ATTEMPTS * 2 + 2];
|
||||
+
|
||||
+ if (input_filename == NULL || ! strcmp (input_filename, "-"))
|
||||
+ return;
|
||||
+
|
||||
+ for (nargs = 0; argv[nargs] != NULL; ++nargs)
|
||||
+ /* Only retry compiler ICEs, not preprocessor ones. */
|
||||
+ if (! strcmp (argv[nargs], "-E"))
|
||||
+ return;
|
||||
+ else if (argv[nargs][0] == '-' && argv[nargs][1] == 'o')
|
||||
+ {
|
||||
+ if (out_arg == -1)
|
||||
+ out_arg = nargs;
|
||||
+ else
|
||||
+ return;
|
||||
+ }
|
||||
+ /* If the compiler is going to output any time information,
|
||||
+ it might vary between invocations. */
|
||||
+ else if (! strcmp (argv[nargs], "-quiet"))
|
||||
+ quiet = 1;
|
||||
+ else if (! strcmp (argv[nargs], "-ftime-report"))
|
||||
+ return;
|
||||
+
|
||||
+ if (out_arg == -1 || !quiet)
|
||||
+ return;
|
||||
+
|
||||
+ memset (temp_filenames, '\0', sizeof (temp_filenames));
|
||||
+ new_argv = alloca ((nargs + 3) * sizeof (const char *));
|
||||
+ memcpy (new_argv, argv, (nargs + 1) * sizeof (const char *));
|
||||
+ new_argv[nargs++] = "-frandom-seed=0";
|
||||
+ new_argv[nargs] = NULL;
|
||||
+ if (new_argv[out_arg][2] == '\0')
|
||||
+ new_argv[out_arg + 1] = "-";
|
||||
+ else
|
||||
+ new_argv[out_arg] = "-o-";
|
||||
+
|
||||
+ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS + 1; ++attempt)
|
||||
+ {
|
||||
+ int fd = -1;
|
||||
+ int status;
|
||||
+
|
||||
+ temp_filenames[attempt * 2] = make_temp_file (".out");
|
||||
+ temp_filenames[attempt * 2 + 1] = make_temp_file (".err");
|
||||
+
|
||||
+ if (attempt == RETRY_ICE_ATTEMPTS)
|
||||
+ {
|
||||
+ int i;
|
||||
+ int fd1, fd2;
|
||||
+ struct stat st1, st2;
|
||||
+ size_t n, len;
|
||||
+ char *buf;
|
||||
+
|
||||
+ buf = xmalloc (8192);
|
||||
+
|
||||
+ for (i = 0; i < 2; ++i)
|
||||
+ {
|
||||
+ fd1 = open (temp_filenames[i], O_RDONLY);
|
||||
+ fd2 = open (temp_filenames[2 + i], O_RDONLY);
|
||||
+
|
||||
+ if (fd1 < 0 || fd2 < 0)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (st1.st_size != st2.st_size)
|
||||
+ {
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ for (n = st1.st_size; n; n -= len)
|
||||
+ {
|
||||
+ len = n;
|
||||
+ if (len > 4096)
|
||||
+ len = 4096;
|
||||
+
|
||||
+ if (read (fd1, buf, len) != (int) len
|
||||
+ || read (fd2, buf + 4096, len) != (int) len)
|
||||
+ {
|
||||
+ i = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (memcmp (buf, buf + 4096, len) != 0)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ close (fd1);
|
||||
+ close (fd2);
|
||||
+
|
||||
+ if (n)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ free (buf);
|
||||
+ if (i == -1)
|
||||
+ break;
|
||||
+
|
||||
+ if (i != 2)
|
||||
+ {
|
||||
+ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ fd = open (temp_filenames[attempt * 2], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ break;
|
||||
+ write (fd, "//", 2);
|
||||
+ for (i = 0; i < nargs; i++)
|
||||
+ {
|
||||
+ write (fd, " ", 1);
|
||||
+ write (fd, new_argv[i], strlen (new_argv[i]));
|
||||
+ }
|
||||
+ write (fd, "\n", 1);
|
||||
+ new_argv[nargs] = "-E";
|
||||
+ new_argv[nargs + 1] = NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* Fork a subprocess; wait and retry if it fails. */
|
||||
+ sleep_interval = 1;
|
||||
+ pid = -1;
|
||||
+ for (retries = 0; retries < 4; retries++)
|
||||
+ {
|
||||
+ pid = fork ();
|
||||
+ if (pid >= 0)
|
||||
+ break;
|
||||
+ sleep (sleep_interval);
|
||||
+ sleep_interval *= 2;
|
||||
+ }
|
||||
+
|
||||
+ if (pid < 0)
|
||||
+ break;
|
||||
+ else if (pid == 0)
|
||||
+ {
|
||||
+ if (attempt != RETRY_ICE_ATTEMPTS)
|
||||
+ fd = open (temp_filenames[attempt * 2], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ exit (-1);
|
||||
+ if (fd != 1)
|
||||
+ {
|
||||
+ close (1);
|
||||
+ dup (fd);
|
||||
+ close (fd);
|
||||
+ }
|
||||
+
|
||||
+ fd = open (temp_filenames[attempt * 2 + 1], O_RDWR);
|
||||
+ if (fd < 0)
|
||||
+ exit (-1);
|
||||
+ if (fd != 2)
|
||||
+ {
|
||||
+ close (2);
|
||||
+ dup (fd);
|
||||
+ close (fd);
|
||||
+ }
|
||||
+
|
||||
+ if (prog == new_argv[0])
|
||||
+ execvp (prog, (char *const *) new_argv);
|
||||
+ else
|
||||
+ execv (new_argv[0], (char *const *) new_argv);
|
||||
+ exit (-1);
|
||||
+ }
|
||||
+
|
||||
+ if (waitpid (pid, &status, 0) < 0)
|
||||
+ break;
|
||||
+
|
||||
+ if (attempt < RETRY_ICE_ATTEMPTS
|
||||
+ && (! WIFEXITED (status) || WEXITSTATUS (status) != ICE_EXIT_CODE))
|
||||
+ {
|
||||
+ notice ("The bug is not reproducible, so it is likely a hardware or OS problem.\n");
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (attempt == RETRY_ICE_ATTEMPTS)
|
||||
+ {
|
||||
+ close (fd);
|
||||
+ if (WIFEXITED (status)
|
||||
+ && WEXITSTATUS (status) == SUCCESS_EXIT_CODE)
|
||||
+ {
|
||||
+ notice ("Preprocessed source stored into %s file, please attach this to your bugreport.\n",
|
||||
+ temp_filenames[attempt * 2]);
|
||||
+ /* Make sure it is not deleted. */
|
||||
+ free (temp_filenames[attempt * 2]);
|
||||
+ temp_filenames[attempt * 2] = NULL;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS * 2 + 2; attempt++)
|
||||
+ if (temp_filenames[attempt])
|
||||
+ {
|
||||
+ unlink (temp_filenames[attempt]);
|
||||
+ free (temp_filenames[attempt]);
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/* Search for a file named NAME trying various prefixes including the
|
||||
user's -B prefix and some standard ones.
|
||||
Return the absolute file name found. If nothing is found, return NAME. */
|
||||
--- gcc/Makefile.in.orig 2007-09-30 10:48:13.000000000 +0000
|
||||
+++ gcc/Makefile.in 2007-09-30 10:48:39.000000000 +0000
|
||||
@@ -192,6 +192,7 @@
|
||||
build/gengtype-lex.o-warn = -Wno-error
|
||||
# SYSCALLS.c misses prototypes
|
||||
SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
|
||||
+build/gcc.o-warn = -Wno-error
|
||||
|
||||
# All warnings have to be shut off in stage1 if the compiler used then
|
||||
# isn't gcc; configure determines that. WARN_CFLAGS will be either
|
||||
@@ -1,25 +0,0 @@
|
||||
Add /sw/include and /opt/include based on the original
|
||||
zecke-no-host-includes.patch patch. The original patch checked for
|
||||
/usr/include, /sw/include and /opt/include and then triggered a failure and
|
||||
aborted.
|
||||
|
||||
Instead, we add the two missing items to the current scan. If the user
|
||||
wants this to be a failure, they can add "-Werror=poison-system-directories".
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
|
||||
Index: gcc-4_5-branch/gcc/incpath.c
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/incpath.c
|
||||
+++ gcc-4_5-branch/gcc/incpath.c
|
||||
@@ -365,7 +365,9 @@ merge_include_chains (const char *sysroo
|
||||
{
|
||||
if ((!strncmp (p->name, "/usr/include", 12))
|
||||
|| (!strncmp (p->name, "/usr/local/include", 18))
|
||||
- || (!strncmp (p->name, "/usr/X11R6/include", 18)))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
|
||||
+ || (!strncmp (p->name, "/sw/include", 11))
|
||||
+ || (!strncmp (p->name, "/opt/include", 12)))
|
||||
warning (OPT_Wpoison_system_directories,
|
||||
"include location \"%s\" is unsafe for "
|
||||
"cross-compilation",
|
||||
@@ -1,83 +0,0 @@
|
||||
gcc: add poison parameters detection
|
||||
|
||||
Add the logic that, if not configured with "--enable-target-optspace",
|
||||
gcc will meet error when build target app with "-Os" option.
|
||||
This could avoid potential binary crash.
|
||||
|
||||
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
|
||||
|
||||
Index: gcc-4_5-branch/gcc/config.in
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config.in
|
||||
+++ gcc-4_5-branch/gcc/config.in
|
||||
@@ -138,6 +138,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to enable target optspace support. */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_TARGET_OPTSPACE
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
Index: gcc-4_5-branch/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/configure
|
||||
+++ gcc-4_5-branch/gcc/configure
|
||||
@@ -915,6 +915,7 @@ enable_version_specific_runtime_libs
|
||||
with_slibdir
|
||||
enable_poison_system_directories
|
||||
enable_plugin
|
||||
+enable_target_optspace
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
host_alias
|
||||
@@ -25658,6 +25659,13 @@ $as_echo "#define ENABLE_PLUGIN 1" >>con
|
||||
|
||||
fi
|
||||
|
||||
+if test x"$enable_target_optspace" != x; then :
|
||||
+
|
||||
+$as_echo "#define ENABLE_TARGET_OPTSPACE 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+
|
||||
# Configure the subdirectories
|
||||
# AC_CONFIG_SUBDIRS($subdirs)
|
||||
|
||||
Index: gcc-4_5-branch/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/configure.ac
|
||||
+++ gcc-4_5-branch/gcc/configure.ac
|
||||
@@ -4659,6 +4659,11 @@ if test x"$enable_plugin" = x"yes"; then
|
||||
AC_DEFINE(ENABLE_PLUGIN, 1, [Define to enable plugin support.])
|
||||
fi
|
||||
|
||||
+AC_SUBST(enable_target_optspace)
|
||||
+if test x"$enable_target_optspace" != x; then
|
||||
+ AC_DEFINE(ENABLE_TARGET_OPTSPACE, 1, [Define to enable target optspace support.])
|
||||
+fi
|
||||
+
|
||||
# Configure the subdirectories
|
||||
# AC_CONFIG_SUBDIRS($subdirs)
|
||||
|
||||
Index: gcc-4_5-branch/gcc/opts.c
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/opts.c
|
||||
+++ gcc-4_5-branch/gcc/opts.c
|
||||
@@ -953,6 +953,11 @@ decode_options (unsigned int argc, const
|
||||
else
|
||||
set_param_value ("min-crossjump-insns", initial_min_crossjump_insns);
|
||||
|
||||
+#ifndef ENABLE_TARGET_OPTSPACE
|
||||
+ if (optimize_size == 1)
|
||||
+ error ("Do not use -Os option if --enable-target-optspace is not set.");
|
||||
+#endif
|
||||
+
|
||||
if (first_time_p)
|
||||
{
|
||||
/* Initialize whether `char' is signed. */
|
||||
@@ -1,201 +0,0 @@
|
||||
gcc/
|
||||
2008-07-02 Joseph Myers <joseph@codesourcery.com>
|
||||
* c-incpath.c: Include toplev.h.
|
||||
(merge_include_chains): Use warning instead of cpp_error for
|
||||
system directory poisoning diagnostic.
|
||||
* Makefile.in (c-incpath.o): Depend on toplev.h.
|
||||
* gcc.c (LINK_COMMAND_SPEC): Pass
|
||||
--error-poison-system-directories if
|
||||
-Werror=poison-system-directories.
|
||||
|
||||
2007-06-13 Joseph Myers <joseph@codesourcery.com>
|
||||
* common.opt (--Wno-poison-system-directories): New.
|
||||
* doc/invoke.texi (-Wno-poison-system-directories): Document.
|
||||
* c-incpath.c: Include flags.h.
|
||||
(merge_include_chains): Check flag_poison_system_directories.
|
||||
* gcc.c (LINK_COMMAND_SPEC): Pass --no-poison-system-directories
|
||||
to linker if -Wno-poison-system-directories.
|
||||
* Makefile.in (c-incpath.o): Depend on $(FLAGS_H).
|
||||
|
||||
2007-03-20 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
* configure.ac (--enable-poison-system-directories): New option.
|
||||
* configure, config.in: Regenerate.
|
||||
* c-incpath.c (merge_include_chains): If
|
||||
ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of
|
||||
/usr/include, /usr/local/include or /usr/X11R6/include.
|
||||
|
||||
Index: gcc-4.5.0/gcc/common.opt
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/common.opt 2010-03-17 20:01:09.000000000 -0700
|
||||
+++ gcc-4.5.0/gcc/common.opt 2010-06-25 11:35:39.965383734 -0700
|
||||
@@ -152,6 +152,10 @@
|
||||
Common Var(warn_padded) Warning
|
||||
Warn when padding is required to align structure members
|
||||
|
||||
+Wpoison-system-directories
|
||||
+Common Var(flag_poison_system_directories) Init(1) Warning
|
||||
+Warn for -I and -L options using system directories if cross compiling
|
||||
+
|
||||
Wshadow
|
||||
Common Var(warn_shadow) Warning
|
||||
Warn when one local variable shadows another
|
||||
Index: gcc-4.5.0/gcc/config.in
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/config.in 2010-04-14 02:30:07.000000000 -0700
|
||||
+++ gcc-4.5.0/gcc/config.in 2010-06-25 11:35:39.969383588 -0700
|
||||
@@ -132,6 +132,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to warn for use of native system header directories */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
Index: gcc-4.5.0/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/configure.ac 2010-06-25 11:34:01.433382161 -0700
|
||||
+++ gcc-4.5.0/gcc/configure.ac 2010-06-25 11:35:39.969383588 -0700
|
||||
@@ -4276,6 +4276,16 @@
|
||||
fi)
|
||||
AC_SUBST(slibdir)
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system header directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system header directories])
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
AC_SUBST(subdirs)
|
||||
AC_SUBST(srcdir)
|
||||
Index: gcc-4.5.0/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/doc/invoke.texi 2010-04-06 07:02:22.000000000 -0700
|
||||
+++ gcc-4.5.0/gcc/doc/invoke.texi 2010-06-25 11:35:39.992666345 -0700
|
||||
@@ -252,6 +252,7 @@
|
||||
-Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol
|
||||
-Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
|
||||
-Wpointer-arith -Wno-pointer-to-int-cast @gol
|
||||
+-Wno-poison-system-directories @gol
|
||||
-Wredundant-decls @gol
|
||||
-Wreturn-type -Wsequence-point -Wshadow @gol
|
||||
-Wsign-compare -Wsign-conversion -Wstack-protector @gol
|
||||
@@ -3603,6 +3604,14 @@
|
||||
option will @emph{not} warn about unknown pragmas in system
|
||||
headers---for that, @option{-Wunknown-pragmas} must also be used.
|
||||
|
||||
+@item -Wno-poison-system-directories
|
||||
+@opindex Wno-poison-system-directories
|
||||
+Do not warn for @option{-I} or @option{-L} options using system
|
||||
+directories such as @file{/usr/include} when cross compiling. This
|
||||
+option is intended for use in chroot environments when such
|
||||
+directories contain the correct headers and libraries for the target
|
||||
+system rather than the host.
|
||||
+
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
Index: gcc-4.5.0/gcc/gcc.c
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/gcc.c 2010-02-11 04:23:08.000000000 -0800
|
||||
+++ gcc-4.5.0/gcc/gcc.c 2010-06-25 11:35:40.009381858 -0700
|
||||
@@ -792,6 +792,8 @@
|
||||
%{flto} %{fwhopr} %l " LINK_PIE_SPEC \
|
||||
"%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
|
||||
+ %{Wno-poison-system-directories:--no-poison-system-directories}\
|
||||
+ %{Werror=poison-system-directories:--error-poison-system-directories}\
|
||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
|
||||
%{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
|
||||
%{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\
|
||||
Index: gcc-4.5.0/gcc/incpath.c
|
||||
===================================================================
|
||||
--- gcc-4.5.0.orig/gcc/incpath.c 2009-11-25 02:55:54.000000000 -0800
|
||||
+++ gcc-4.5.0/gcc/incpath.c 2010-06-25 11:35:40.017209818 -0700
|
||||
@@ -353,6 +353,24 @@
|
||||
}
|
||||
fprintf (stderr, _("End of search list.\n"));
|
||||
}
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (flag_poison_system_directories)
|
||||
+ {
|
||||
+ struct cpp_dir *p;
|
||||
+
|
||||
+ for (p = heads[QUOTE]; p; p = p->next)
|
||||
+ {
|
||||
+ if ((!strncmp (p->name, "/usr/include", 12))
|
||||
+ || (!strncmp (p->name, "/usr/local/include", 18))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18)))
|
||||
+ warning (OPT_Wpoison_system_directories,
|
||||
+ "include location \"%s\" is unsafe for "
|
||||
+ "cross-compilation",
|
||||
+ p->name);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Use given -I paths for #include "..." but not #include <...>, and
|
||||
diff -ur gcc-4.5.0.orig/gcc/Makefile.in gcc-4.5.0/gcc/Makefile.in
|
||||
--- gcc-4.5.0.orig/gcc/Makefile.in 2010-09-29 17:13:49.164088845 -0500
|
||||
+++ gcc-4.5.0/gcc/Makefile.in 2010-09-29 18:48:19.300178501 -0500
|
||||
@@ -1965,7 +1965,7 @@
|
||||
|
||||
incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
|
||||
intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
|
||||
- $(MACHMODE_H)
|
||||
+ $(MACHMODE_H) $(FLAGS_H) toplev.h
|
||||
|
||||
c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
|
||||
$(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) $(FLAGS_H) $(FUNCTION_H) output.h \
|
||||
diff -ur gcc-4.5.0.orig/gcc/configure gcc-4.5.0/gcc/configure
|
||||
--- gcc-4.5.0.orig/gcc/configure 2010-09-29 14:58:31.702054881 -0500
|
||||
+++ gcc-4.5.0/gcc/configure 2010-09-29 18:46:31.486068500 -0500
|
||||
@@ -913,6 +913,7 @@
|
||||
enable_maintainer_mode
|
||||
enable_version_specific_runtime_libs
|
||||
with_slibdir
|
||||
+enable_poison_system_directories
|
||||
enable_plugin
|
||||
enable_target_optspace
|
||||
'
|
||||
@@ -1621,6 +1622,8 @@
|
||||
--enable-version-specific-runtime-libs
|
||||
specify that runtime libraries should be
|
||||
installed in a compiler-specific directory
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system header directories
|
||||
--enable-plugin enable plugin support
|
||||
|
||||
Optional Packages:
|
||||
@@ -25339,6 +25377,19 @@
|
||||
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
|
||||
|
||||
@@ -1,221 +0,0 @@
|
||||
commit de784bee66a1ec1d0dad00d9eedbe9b1667dd883
|
||||
Author: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Mon Dec 20 15:29:31 2010 +0000
|
||||
|
||||
* config/rs6000/freebsd.h (SVR4_ASM_SPEC): Don't define.
|
||||
(DBX_REGISTER_NUMBER): Define.
|
||||
* config/rs6000/lynx.h (DBX_REGISTER_NUMBER): Define.
|
||||
* config/rs6000/netbsd.h (DBX_REGISTER_NUMBER): Define.
|
||||
* config/rs6000/sysv4.h (SIZE_TYPE): Define.
|
||||
(ASM_SPEC): Define without using SVR4_ASM_SPEC.
|
||||
(DBX_REGISTER_NUMBER): Undefine.
|
||||
* config.gcc (powerpc-*-eabispe*, powerpc-*-eabisimaltivec*,
|
||||
powerpc-*-eabisim*, powerpc-*-elf*, powerpc-*-eabialtivec*,
|
||||
powerpc-xilinx-eabi*, powerpc-*-eabi*, powerpc-*-rtems*,
|
||||
powerpc-*-linux* | powerpc64-*-linux*, powerpc64-*-gnu*,
|
||||
powerpc-*-gnu-gnualtivec*, powerpc-*-gnu*,
|
||||
powerpc-wrs-vxworks|powerpc-wrs-vxworksae, powerpcle-*-elf*,
|
||||
powerpcle-*-eabisim*, powerpcle-*-eabi*): Don't use svr4.h.
|
||||
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168085 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
Index: gcc-4_5-branch/gcc/config.gcc
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config.gcc 2011-09-17 11:11:28.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config.gcc 2011-09-17 11:16:32.543298716 -0700
|
||||
@@ -1989,48 +1989,48 @@ powerpc-*-netbsd*)
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
;;
|
||||
powerpc-*-eabispe*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabispe.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabispe.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-spe rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-*-eabisimaltivec*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h rs6000/eabialtivec.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h rs6000/eabialtivec.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-*-eabisim*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-*-elf*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
;;
|
||||
powerpc-*-eabialtivec*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabialtivec.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabialtivec.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-xilinx-eabi*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/singlefp.h rs6000/xfpu.h rs6000/xilinx.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/singlefp.h rs6000/xfpu.h rs6000/xilinx.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm rs6000/t-xilinx"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-*-eabi*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpc-*-rtems*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/rtems.h rtems.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/rtems.h rtems.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-rtems t-rtems rs6000/t-ppccomm"
|
||||
;;
|
||||
@@ -2079,12 +2079,12 @@ powerpc-*-linux* | powerpc64-*-linux*)
|
||||
fi
|
||||
;;
|
||||
powerpc64-*-gnu*)
|
||||
- tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/default64.h rs6000/linux64.h rs6000/gnu.h glibc-stdint.h"
|
||||
+ tm_file="${tm_file} elfos.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/default64.h rs6000/linux64.h rs6000/gnu.h glibc-stdint.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt"
|
||||
tmake_file="t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu"
|
||||
;;
|
||||
powerpc-*-gnu-gnualtivec*)
|
||||
- tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h glibc-stdint.h"
|
||||
+ tm_file="${cpu_type}/${cpu_type}.h elfos.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h glibc-stdint.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
|
||||
if test x$enable_threads = xyes; then
|
||||
@@ -2092,7 +2092,7 @@ powerpc-*-gnu-gnualtivec*)
|
||||
fi
|
||||
;;
|
||||
powerpc-*-gnu*)
|
||||
- tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h glibc-stdint.h"
|
||||
+ tm_file="${cpu_type}/${cpu_type}.h elfos.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h glibc-stdint.h"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
if test x$enable_threads = xyes; then
|
||||
@@ -2100,7 +2100,7 @@ powerpc-*-gnu*)
|
||||
fi
|
||||
;;
|
||||
powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
|
||||
- tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
|
||||
+ tm_file="${tm_file} elfos.h freebsd-spec.h rs6000/sysv4.h"
|
||||
tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppccomm rs6000/t-vxworks"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
extra_headers=ppc-asm.h
|
||||
@@ -2126,18 +2126,18 @@ powerpc-*-lynxos*)
|
||||
gas=yes
|
||||
;;
|
||||
powerpcle-*-elf*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
;;
|
||||
powerpcle-*-eabisim*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
powerpcle-*-eabi*)
|
||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h"
|
||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
use_gcc_stdint=wrap
|
||||
Index: gcc-4_5-branch/gcc/config/rs6000/freebsd.h
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/rs6000/freebsd.h 2011-06-16 17:58:58.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/rs6000/freebsd.h 2011-09-17 11:13:13.623298761 -0700
|
||||
@@ -69,6 +69,4 @@
|
||||
/* Override rs6000.h definition. */
|
||||
#undef ASM_APP_OFF
|
||||
#define ASM_APP_OFF "#NO_APP\n"
|
||||
-/* Define SVR4_ASM_SPEC, we use GAS by default. See svr4.h for details. */
|
||||
-#define SVR4_ASM_SPEC \
|
||||
- "%{v:-V} %{Wa,*:%*}"
|
||||
+#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
|
||||
Index: gcc-4_5-branch/gcc/config/rs6000/lynx.h
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/rs6000/lynx.h 2011-06-16 17:58:58.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/rs6000/lynx.h 2011-09-17 11:13:13.623298761 -0700
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Definitions for Rs6000 running LynxOS.
|
||||
- Copyright (C) 1995, 1996, 2000, 2002, 2003, 2004, 2005, 2007
|
||||
+ Copyright (C) 1995, 1996, 2000, 2002, 2003, 2004, 2005, 2007, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by David Henkel-Wallace, Cygnus Support (gumby@cygnus.com)
|
||||
Rewritten by Adam Nemet, LynuxWorks Inc.
|
||||
@@ -105,6 +105,8 @@
|
||||
#undef HAVE_AS_TLS
|
||||
#define HAVE_AS_TLS 0
|
||||
|
||||
+#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
|
||||
+
|
||||
#ifdef CRT_BEGIN
|
||||
/* This function is part of crtbegin*.o which is at the beginning of
|
||||
the link and is called from .fini which is usually toward the end
|
||||
Index: gcc-4_5-branch/gcc/config/rs6000/netbsd.h
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/rs6000/netbsd.h 2011-06-16 17:58:58.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/rs6000/netbsd.h 2011-09-17 11:13:13.623298761 -0700
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Definitions of target machine for GNU compiler,
|
||||
for PowerPC NetBSD systems.
|
||||
- Copyright 2002, 2003, 2007, 2008 Free Software Foundation, Inc.
|
||||
+ Copyright 2002, 2003, 2007, 2008, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Wasabi Systems, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
@@ -89,3 +89,5 @@
|
||||
|
||||
#undef TARGET_VERSION
|
||||
#define TARGET_VERSION fprintf (stderr, " (NetBSD/powerpc ELF)");
|
||||
+
|
||||
+#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
|
||||
Index: gcc-4_5-branch/gcc/config/rs6000/sysv4.h
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config/rs6000/sysv4.h 2011-09-17 11:11:29.000000000 -0700
|
||||
+++ gcc-4_5-branch/gcc/config/rs6000/sysv4.h 2011-09-17 11:13:13.623298761 -0700
|
||||
@@ -293,6 +293,10 @@ do { \
|
||||
#define RESTORE_FP_PREFIX "_restfpr_"
|
||||
#define RESTORE_FP_SUFFIX ""
|
||||
|
||||
+/* Type used for size_t, as a string used in a declaration. */
|
||||
+#undef SIZE_TYPE
|
||||
+#define SIZE_TYPE "unsigned int"
|
||||
+
|
||||
/* Type used for ptrdiff_t, as a string used in a declaration. */
|
||||
#define PTRDIFF_TYPE "int"
|
||||
|
||||
@@ -588,9 +592,8 @@ extern int fixuplabelno;
|
||||
/* Override svr4.h definition. */
|
||||
#undef ASM_SPEC
|
||||
#define ASM_SPEC "%(asm_cpu) \
|
||||
-%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
|
||||
-SVR4_ASM_SPEC \
|
||||
-"%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
|
||||
+%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
|
||||
+%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
|
||||
%{memb|msdata=eabi: -memb} \
|
||||
%{mlittle|mlittle-endian:-mlittle; \
|
||||
mbig|mbig-endian :-mbig; \
|
||||
@@ -1120,3 +1123,5 @@ ncrtn.o%s"
|
||||
|
||||
/* This target uses the sysv4.opt file. */
|
||||
#define TARGET_USES_SYSV4_OPT 1
|
||||
+
|
||||
+#undef DBX_REGISTER_NUMBER
|
||||
@@ -1,117 +0,0 @@
|
||||
backport http://gcc.gnu.org/viewcvs?view=revision&revision=162404
|
||||
from trunk
|
||||
|
||||
Which fixes http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43698
|
||||
|
||||
2010-07-22 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/43698
|
||||
* config/arm/arm.md: Split arm_rev into *arm_rev
|
||||
and *thumb1_rev. Set *arm_rev to be predicable.
|
||||
|
||||
2010-07-22 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/43698
|
||||
* gcc.target/arm/pr43698.c: New test.
|
||||
|
||||
|
||||
/scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
Usage: date [OPTION]... [+FORMAT]
|
||||
Display the current time in the given FORMAT.
|
||||
|
||||
-d, --date=STRING display time described by STRING, not `now'
|
||||
-f, --file=DATEFILE like --date once for each line of DATEFILE
|
||||
-R, --rfc-822 output RFC-822 compliant date string
|
||||
-u, --utc, --universal print or set Coordinated Universal Time
|
||||
--help display this help and exit
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /bin/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /bin/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /bin/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /scratch/oe/sysroots/i686-linux/usr/share/quilt/compat/date
|
||||
date is /bin/date
|
||||
date
|
||||
Khem
|
||||
Index: gcc-4.5/gcc/config/arm/arm.md
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/config/arm/arm.md 2010-07-20 20:31:25.000000000 -0700
|
||||
+++ gcc-4.5/gcc/config/arm/arm.md 2010-07-22 14:55:54.303169081 -0700
|
||||
@@ -11197,15 +11197,21 @@
|
||||
(set_attr "length" "4")]
|
||||
)
|
||||
|
||||
-(define_insn "arm_rev"
|
||||
+(define_insn "*arm_rev"
|
||||
[(set (match_operand:SI 0 "s_register_operand" "=r")
|
||||
(bswap:SI (match_operand:SI 1 "s_register_operand" "r")))]
|
||||
- "TARGET_EITHER && arm_arch6"
|
||||
- "rev\t%0, %1"
|
||||
- [(set (attr "length")
|
||||
- (if_then_else (eq_attr "is_thumb" "yes")
|
||||
- (const_int 2)
|
||||
- (const_int 4)))]
|
||||
+ "TARGET_32BIT && arm_arch6"
|
||||
+ "rev%?\t%0, %1"
|
||||
+ [(set_attr "predicable" "yes")
|
||||
+ (set_attr "length" "4")]
|
||||
+)
|
||||
+
|
||||
+(define_insn "*thumb1_rev"
|
||||
+ [(set (match_operand:SI 0 "s_register_operand" "=l")
|
||||
+ (bswap:SI (match_operand:SI 1 "s_register_operand" "l")))]
|
||||
+ "TARGET_THUMB1 && arm_arch6"
|
||||
+ "rev\t%0, %1"
|
||||
+ [(set_attr "length" "2")]
|
||||
)
|
||||
|
||||
(define_expand "arm_legacy_rev"
|
||||
Index: gcc-4.5/gcc/testsuite/gcc.target/arm/pr43698.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gcc-4.5/gcc/testsuite/gcc.target/arm/pr43698.c 2010-07-22 14:56:35.406670213 -0700
|
||||
@@ -0,0 +1,39 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-Os -march=armv7-a" } */
|
||||
+#include <stdint.h>
|
||||
+#include <stdlib.h>
|
||||
+
|
||||
+
|
||||
+char do_reverse_endian = 0;
|
||||
+
|
||||
+# define bswap_32(x) \
|
||||
+ ((((x) & 0xff000000) >> 24) | \
|
||||
+ (((x) & 0x00ff0000) >> 8) | \
|
||||
+ (((x) & 0x0000ff00) << 8) | \
|
||||
+ (((x) & 0x000000ff) << 24))
|
||||
+
|
||||
+#define EGET(X) \
|
||||
+ (__extension__ ({ \
|
||||
+ uint64_t __res; \
|
||||
+ if (!do_reverse_endian) { __res = (X); \
|
||||
+ } else if (sizeof(X) == 4) { __res = bswap_32((X)); \
|
||||
+ } \
|
||||
+ __res; \
|
||||
+ }))
|
||||
+
|
||||
+void __attribute__((noinline)) X(char **phdr, char **data, int *phoff)
|
||||
+{
|
||||
+ *phdr = *data + EGET(*phoff);
|
||||
+}
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ char *phdr;
|
||||
+ char *data = (char *)0x40164000;
|
||||
+ int phoff = 0x34;
|
||||
+ X(&phdr, &data, &phoff);
|
||||
+ if (phdr != (char *)0x40164034)
|
||||
+ abort ();
|
||||
+ exit (0);
|
||||
+}
|
||||
+
|
||||
@@ -1,63 +0,0 @@
|
||||
Hi,
|
||||
|
||||
The attached patch fixes Bugzilla 45847
|
||||
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45847). When compiling
|
||||
without -mvectorize-with-neon-quad and vectorizing scalar widening
|
||||
operations that widen words to double words, there are no corresponding
|
||||
vector types for DI scalar types. For this scenario, a call to
|
||||
get_vect_type_for_scalar_type() returns NULL and an absent NULL-check
|
||||
caused this segfault. The attached patch adds this NULL-check. Also,
|
||||
this is consistent with all the other places where a NULL-check follows
|
||||
a call to get_vect_type_for_scalar_type() in tree-vect-patterns.c.
|
||||
|
||||
Regression tested with arm-linux-gnueabi. OK?
|
||||
|
||||
--
|
||||
Tejas Belagod
|
||||
ARM.
|
||||
|
||||
gcc/
|
||||
|
||||
2010-10-05 Tejas Belagod <tejas.belagod@arm.com>
|
||||
|
||||
* tree-vect-patterns.c (vect_recog_widen_mult_pattern): Add NULL
|
||||
check for vectype_out returned by get_vectype_for_scalar_type().
|
||||
|
||||
testsuite/
|
||||
|
||||
2010-10-05 Tejas Belagod <tejas.belagod@arm.com>
|
||||
|
||||
* gcc.dg/vect/pr45847.c: New test.
|
||||
|
||||
Index: gcc-4.5/gcc/testsuite/gcc.dg/vect/pr45847.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ gcc-4.5/gcc/testsuite/gcc.dg/vect/pr45847.c
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* { dg-do compile } */
|
||||
+
|
||||
+
|
||||
+long long foo (long long *__restrict a, int *__restrict b, int *__restrict c )
|
||||
+{
|
||||
+ int i;
|
||||
+ long long sum=0;
|
||||
+ for (i=0;i<256;i++)
|
||||
+ sum += (long long)b[i] * c[i];
|
||||
+
|
||||
+ return sum;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
+
|
||||
Index: gcc-4.5/gcc/tree-vect-patterns.c
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/tree-vect-patterns.c
|
||||
+++ gcc-4.5/gcc/tree-vect-patterns.c
|
||||
@@ -411,6 +411,7 @@ vect_recog_widen_mult_pattern (gimple la
|
||||
/* Check target support */
|
||||
vectype = get_vectype_for_scalar_type (half_type0);
|
||||
if (!vectype
|
||||
+ || !get_vectype_for_scalar_type (type)
|
||||
|| !supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt, vectype,
|
||||
&dummy, &dummy, &dummy_code,
|
||||
&dummy_code, &dummy_int, &dummy_vec))
|
||||
@@ -1,67 +0,0 @@
|
||||
Index: gcc-4.5/libstdc++-v3/config/locale/generic/c_locale.h
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/libstdc++-v3/config/locale/generic/c_locale.h 2010-06-30 22:30:53.993316002 -0700
|
||||
+++ gcc-4.5/libstdc++-v3/config/locale/generic/c_locale.h 2010-06-30 22:31:26.043316001 -0700
|
||||
@@ -41,12 +41,17 @@
|
||||
|
||||
#include <clocale>
|
||||
#include <cstddef>
|
||||
+#include <features.h>
|
||||
+#include <ctype.h>
|
||||
|
||||
#define _GLIBCXX_NUM_CATEGORIES 0
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
-
|
||||
- typedef int* __c_locale;
|
||||
+#ifdef __UCLIBC__
|
||||
+ typedef __ctype_touplow_t* __c_locale;
|
||||
+#else
|
||||
+ typedef int* __c_locale;
|
||||
+#endif
|
||||
|
||||
// Convert numeric value of type double and long double to string and
|
||||
// return length of string. If vsnprintf is available use it, otherwise
|
||||
Index: gcc-4.5/libstdc++-v3/config/os/gnu-linux/ctype_base.h
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2010-06-30 22:30:54.013316002 -0700
|
||||
+++ gcc-4.5/libstdc++-v3/config/os/gnu-linux/ctype_base.h 2010-06-30 22:31:26.053316001 -0700
|
||||
@@ -33,14 +33,21 @@
|
||||
*/
|
||||
|
||||
// Information as gleaned from /usr/include/ctype.h
|
||||
-
|
||||
+
|
||||
+#include <features.h>
|
||||
+#include <ctype.h>
|
||||
+
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
/// @brief Base class for ctype.
|
||||
struct ctype_base
|
||||
{
|
||||
// Non-standard typedefs.
|
||||
- typedef const int* __to_type;
|
||||
+#ifdef __UCLIBC__
|
||||
+ typedef const __ctype_touplow_t* __to_type;
|
||||
+#else
|
||||
+ typedef const int* __to_type;
|
||||
+#endif
|
||||
|
||||
// NB: Offsets into ctype<char>::_M_table force a particular size
|
||||
// on the mask type. Because of this, we don't use an enum.
|
||||
Index: gcc-4.5/libstdc++-v3/config/locale/generic/c_locale.cc
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/libstdc++-v3/config/locale/generic/c_locale.cc 2010-06-28 12:12:42.000000000 -0700
|
||||
+++ gcc-4.5/libstdc++-v3/config/locale/generic/c_locale.cc 2010-06-30 22:31:26.063316001 -0700
|
||||
@@ -256,5 +256,10 @@ _GLIBCXX_END_NAMESPACE
|
||||
#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
|
||||
#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
|
||||
extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
|
||||
+#ifdef __UCLIBC__
|
||||
+// This is because __c_locale is of type __ctype_touplow_t* which is short on uclibc. for glibc its int*
|
||||
+_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPs, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPs);
|
||||
+#else
|
||||
_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
|
||||
+#endif
|
||||
#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
|
||||
@@ -1,212 +0,0 @@
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
commit 3cb9bbfa927aa187048534f9069202c017a78e38
|
||||
Author: ppluzhnikov <ppluzhnikov@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Wed May 11 18:28:14 2011 +0000
|
||||
|
||||
2011-05-11 Satoru Takabayashi <satorux@google.com>
|
||||
Paul Pluzhnikov <ppluzhnikov@google.com>
|
||||
|
||||
* gcc/doc/install.texi (Configuration): Document
|
||||
--with-linker-hash-style.
|
||||
* gcc/gcc.c (init_spec): Handle LINKER_HASH_STYLE.
|
||||
* gcc/config.in: Add LINKER_HASH_STYLE.
|
||||
* gcc/configure.ac: Add --with-linker-hash-style.
|
||||
* gcc/configure: Regenerate.
|
||||
|
||||
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173668 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
Index: gcc-4_5-branch/gcc/config.in
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/config.in 2011-12-03 13:41:00.000000000 -0800
|
||||
+++ gcc-4_5-branch/gcc/config.in 2011-12-03 13:44:46.287530329 -0800
|
||||
@@ -113,6 +113,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* The linker hash style */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef LINKER_HASH_STYLE
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define to enable LTO support. */
|
||||
#ifndef USED_FOR_TARGET
|
||||
#undef ENABLE_LTO
|
||||
Index: gcc-4_5-branch/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/configure 2011-12-03 13:41:00.000000000 -0800
|
||||
+++ gcc-4_5-branch/gcc/configure 2011-12-03 13:46:12.747530321 -0800
|
||||
@@ -600,6 +600,7 @@
|
||||
|
||||
ac_subst_vars='LTLIBOBJS
|
||||
LIBOBJS
|
||||
+enable_target_optspace
|
||||
enable_plugin
|
||||
pluginlibs
|
||||
LIBELFINC
|
||||
@@ -915,7 +916,7 @@
|
||||
with_slibdir
|
||||
enable_poison_system_directories
|
||||
enable_plugin
|
||||
-enable_target_optspace
|
||||
+with_linker_hash_style
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
host_alias
|
||||
@@ -1663,6 +1664,8 @@
|
||||
with the compiler
|
||||
--with-system-zlib use installed libz
|
||||
--with-slibdir=DIR shared libraries in DIR [LIBDIR]
|
||||
+ --with-linker-hash-style={sysv,gnu,both}
|
||||
+ specify the linker hash style
|
||||
|
||||
Some influential environment variables:
|
||||
CC C compiler command
|
||||
@@ -17115,7 +17118,7 @@
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17114 "configure"
|
||||
+#line 17121 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -17221,7 +17224,7 @@
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
-#line 17220 "configure"
|
||||
+#line 17227 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -25659,12 +25662,42 @@
|
||||
|
||||
fi
|
||||
|
||||
-if test x"$enable_target_optspace" != x; then :
|
||||
+
|
||||
+if test x"$enable_target_optspace" != x; then
|
||||
|
||||
$as_echo "#define ENABLE_TARGET_OPTSPACE 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
+# Specify what hash style to use by default.
|
||||
+
|
||||
+# Check whether --with-linker-hash-style was given.
|
||||
+if test "${with_linker_hash_style+set}" = set; then :
|
||||
+ withval=$with_linker_hash_style; case x"$withval" in
|
||||
+ xsysv)
|
||||
+ LINKER_HASH_STYLE=sysv
|
||||
+ ;;
|
||||
+ xgnu)
|
||||
+ LINKER_HASH_STYLE=gnu
|
||||
+ ;;
|
||||
+ xboth)
|
||||
+ LINKER_HASH_STYLE=both
|
||||
+ ;;
|
||||
+ *)
|
||||
+ as_fn_error "$withval is an invalid option to --with-linker-hash-style" "$LINENO" 5
|
||||
+ ;;
|
||||
+ esac
|
||||
+else
|
||||
+ LINKER_HASH_STYLE=''
|
||||
+fi
|
||||
+
|
||||
+if test x"${LINKER_HASH_STYLE}" != x; then
|
||||
+
|
||||
+cat >>confdefs.h <<_ACEOF
|
||||
+#define LINKER_HASH_STYLE "$LINKER_HASH_STYLE"
|
||||
+_ACEOF
|
||||
+
|
||||
+fi
|
||||
|
||||
# Configure the subdirectories
|
||||
# AC_CONFIG_SUBDIRS($subdirs)
|
||||
Index: gcc-4_5-branch/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/configure.ac 2011-12-03 13:41:00.000000000 -0800
|
||||
+++ gcc-4_5-branch/gcc/configure.ac 2011-12-03 13:41:04.499530358 -0800
|
||||
@@ -4664,6 +4664,30 @@
|
||||
AC_DEFINE(ENABLE_TARGET_OPTSPACE, 1, [Define to enable target optspace support.])
|
||||
fi
|
||||
|
||||
+# Specify what hash style to use by default.
|
||||
+AC_ARG_WITH([linker-hash-style],
|
||||
+[AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
|
||||
+ [specify the linker hash style])],
|
||||
+[case x"$withval" in
|
||||
+ xsysv)
|
||||
+ LINKER_HASH_STYLE=sysv
|
||||
+ ;;
|
||||
+ xgnu)
|
||||
+ LINKER_HASH_STYLE=gnu
|
||||
+ ;;
|
||||
+ xboth)
|
||||
+ LINKER_HASH_STYLE=both
|
||||
+ ;;
|
||||
+ *)
|
||||
+ AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
|
||||
+ ;;
|
||||
+ esac],
|
||||
+[LINKER_HASH_STYLE=''])
|
||||
+if test x"${LINKER_HASH_STYLE}" != x; then
|
||||
+ AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
|
||||
+ [The linker hash style])
|
||||
+fi
|
||||
+
|
||||
# Configure the subdirectories
|
||||
# AC_CONFIG_SUBDIRS($subdirs)
|
||||
|
||||
Index: gcc-4_5-branch/gcc/doc/install.texi
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/doc/install.texi 2011-12-03 13:15:09.000000000 -0800
|
||||
+++ gcc-4_5-branch/gcc/doc/install.texi 2011-12-03 13:41:04.499530358 -0800
|
||||
@@ -1630,6 +1630,11 @@
|
||||
support @option{--build-id} option, a warning is issued and the
|
||||
@option{--enable-linker-build-id} option is ignored. The default is off.
|
||||
|
||||
+@item --with-linker-hash-style=@var{choice}
|
||||
+Tells GCC to pass @option{--hash-style=@var{choice}} option to the
|
||||
+linker for all final links. @var{choice} can be one of
|
||||
+@samp{sysv}, @samp{gnu}, and @samp{both} where @samp{sysv} is the default.
|
||||
+
|
||||
@item --enable-gnu-unique-object
|
||||
@itemx --disable-gnu-unique-object
|
||||
Tells GCC to use the gnu_unique_object relocation for C++ template
|
||||
Index: gcc-4_5-branch/gcc/gcc.c
|
||||
===================================================================
|
||||
--- gcc-4_5-branch.orig/gcc/gcc.c 2011-12-03 13:41:00.000000000 -0800
|
||||
+++ gcc-4_5-branch/gcc/gcc.c 2011-12-03 13:41:04.499530358 -0800
|
||||
@@ -1917,7 +1917,8 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
-#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC
|
||||
+#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC || \
|
||||
+ defined LINKER_HASH_STYLE
|
||||
# ifdef LINK_BUILDID_SPEC
|
||||
/* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before. */
|
||||
obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof(LINK_BUILDID_SPEC) - 1);
|
||||
@@ -1926,6 +1927,16 @@
|
||||
/* Prepend LINK_EH_SPEC to whatever link_spec we had before. */
|
||||
obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
|
||||
# endif
|
||||
+# ifdef LINKER_HASH_STYLE
|
||||
+ /* Prepend --hash-style=LINKER_HASH_STYLE to whatever link_spec we had
|
||||
+ before. */
|
||||
+ {
|
||||
+ static const char hash_style[] = "--hash-style=";
|
||||
+ obstack_grow (&obstack, hash_style, sizeof(hash_style) - 1);
|
||||
+ obstack_grow (&obstack, LINKER_HASH_STYLE, sizeof(LINKER_HASH_STYLE) - 1);
|
||||
+ obstack_1grow (&obstack, ' ');
|
||||
+ }
|
||||
+# endif
|
||||
obstack_grow0 (&obstack, link_spec, strlen (link_spec));
|
||||
link_spec = XOBFINISH (&obstack, const char *);
|
||||
#endif
|
||||
@@ -1,9 +0,0 @@
|
||||
the svn patch changed the BASE-VER to 4.5.1, bring it back to 4.5.0
|
||||
- Nitin A Kamble nitin.a.kamble@intel.com
|
||||
- 2010/07/20
|
||||
|
||||
--- gcc-4.5.0/gcc/BASE-VER 2010-07-20 00:57:37.000000000 -0700
|
||||
+++ gcc-4.5.0.new/gcc/BASE-VER 2010-07-20 01:06:17.000000000 -0700
|
||||
@@ -1 +1 @@
|
||||
-4.5.1
|
||||
+4.5.0
|
||||
@@ -1,40 +0,0 @@
|
||||
2010-06-07 Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
* libsupc++/eh_arm.cc (__cxa_end_cleanup): Use .pushsection/.popsection
|
||||
to emit inline assembly into .text section.
|
||||
|
||||
Index: gcc-4.5/libstdc++-v3/libsupc++/eh_arm.cc
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/libstdc++-v3/libsupc++/eh_arm.cc 2010-06-04 23:20:18.000000000 -0700
|
||||
+++ gcc-4.5/libstdc++-v3/libsupc++/eh_arm.cc 2010-06-08 11:27:34.247541722 -0700
|
||||
@@ -157,22 +157,26 @@ __gnu_end_cleanup(void)
|
||||
// Assembly wrapper to call __gnu_end_cleanup without clobbering r1-r3.
|
||||
// Also push r4 to preserve stack alignment.
|
||||
#ifdef __thumb__
|
||||
-asm (".global __cxa_end_cleanup\n"
|
||||
+asm (" .pushsection .text.__cxa_end_cleanup\n"
|
||||
+" .global __cxa_end_cleanup\n"
|
||||
" .type __cxa_end_cleanup, \"function\"\n"
|
||||
" .thumb_func\n"
|
||||
"__cxa_end_cleanup:\n"
|
||||
" push\t{r1, r2, r3, r4}\n"
|
||||
" bl\t__gnu_end_cleanup\n"
|
||||
" pop\t{r1, r2, r3, r4}\n"
|
||||
-" bl\t_Unwind_Resume @ Never returns\n");
|
||||
+" bl\t_Unwind_Resume @ Never returns\n"
|
||||
+" .popsection\n");
|
||||
#else
|
||||
-asm (".global __cxa_end_cleanup\n"
|
||||
+asm (" .pushsection .text.__cxa_end_cleanup\n"
|
||||
+" .global __cxa_end_cleanup\n"
|
||||
" .type __cxa_end_cleanup, \"function\"\n"
|
||||
"__cxa_end_cleanup:\n"
|
||||
" stmfd\tsp!, {r1, r2, r3, r4}\n"
|
||||
" bl\t__gnu_end_cleanup\n"
|
||||
" ldmfd\tsp!, {r1, r2, r3, r4}\n"
|
||||
-" bl\t_Unwind_Resume @ Never returns\n");
|
||||
+" bl\t_Unwind_Resume @ Never returns\n"
|
||||
+" .popsection\n");
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,71 +0,0 @@
|
||||
#! /bin/sh -e
|
||||
|
||||
# DP: Build and install libstdc++_pic.a library.
|
||||
|
||||
dir=
|
||||
if [ $# -eq 3 -a "$2" = '-d' ]; then
|
||||
pdir="-d $3"
|
||||
dir="$3/"
|
||||
elif [ $# -ne 1 ]; then
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
fi
|
||||
case "$1" in
|
||||
-patch)
|
||||
patch $pdir -f --no-backup-if-mismatch -p0 < $0
|
||||
;;
|
||||
-unpatch)
|
||||
patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
|
||||
;;
|
||||
*)
|
||||
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
|
||||
exit 1
|
||||
esac
|
||||
exit 0
|
||||
|
||||
diff -ur libstdc++-v3/src/Makefile.am libstdc++-v3/src/Makefile.am
|
||||
--- libstdc++-v3/src/Makefile.am~ 2004-04-16 21:04:05.000000000 +0200
|
||||
+++ libstdc++-v3/src/Makefile.am 2004-07-03 20:22:43.000000000 +0200
|
||||
@@ -210,6 +210,10 @@
|
||||
$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
|
||||
|
||||
|
||||
+install-exec-local:
|
||||
+ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
|
||||
+ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
|
||||
+
|
||||
# Added bits to build debug library.
|
||||
if GLIBCXX_BUILD_DEBUG
|
||||
all-local: build_debug
|
||||
diff -ur libstdc++-v3/src/Makefile.in libstdc++-v3/src/Makefile.in
|
||||
--- libstdc++-v3/src/Makefile.in 2004-07-03 06:41:13.000000000 +0200
|
||||
+++ libstdc++-v3/src/Makefile.in 2004-07-03 20:25:05.000000000 +0200
|
||||
@@ -611,7 +611,7 @@
|
||||
|
||||
install-data-am: install-data-local
|
||||
|
||||
-install-exec-am: install-toolexeclibLTLIBRARIES
|
||||
+install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
@@ -644,6 +644,7 @@
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-data-local install-exec \
|
||||
+ install-exec-local \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip install-toolexeclibLTLIBRARIES installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
@@ -729,6 +730,11 @@
|
||||
install_debug:
|
||||
(cd ${debugdir} && $(MAKE) \
|
||||
toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
|
||||
+
|
||||
+install-exec-local:
|
||||
+ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o || touch libstdc++_pic.a
|
||||
+ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
|
||||
+
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,207 +0,0 @@
|
||||
2010-06-28 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
* doc/invoke.texi (-Wno-poison-system-directories): Document.
|
||||
* gcc.c (LINK_COMMAND_SPEC): Pass --no-poison-system-directories
|
||||
if -Wno-poison-system-directories and --error-poison-system-directories
|
||||
if -Werror=poison-system-directories to linker.
|
||||
* incpath.c: Include flags.h. Include toplev.h.
|
||||
(merge_include_chains): If ENABLE_POISON_SYSTEM_DIRECTORIES defined
|
||||
and flag_poison_system_directories is true, warn for use of
|
||||
/usr/include, /usr/local/include or /usr/X11R6/include.
|
||||
* Makefile.in (incpath.o): Depend on $(FLAGS_H) and toplev.h.
|
||||
* common.opt (--Wno-poison-system-directories): New.
|
||||
* configure.ac (--enable-poison-system-directories): New option.
|
||||
* configure: Regenerate.
|
||||
* config.in: Regenerate.
|
||||
|
||||
Index: gcc-4.5/gcc/Makefile.in
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/Makefile.in 2010-09-23 16:44:12.000000000 -0700
|
||||
+++ gcc-4.5/gcc/Makefile.in 2010-09-23 16:46:33.552416860 -0700
|
||||
@@ -1969,7 +1969,7 @@ gcc.srcextra: gengtype-lex.c
|
||||
|
||||
incpath.o: incpath.c incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
|
||||
intl.h prefix.h coretypes.h $(TM_H) cppdefault.h $(TARGET_H) \
|
||||
- $(MACHMODE_H)
|
||||
+ $(MACHMODE_H) $(FLAGS_H) toplev.h
|
||||
|
||||
c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
|
||||
$(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) $(FLAGS_H) $(FUNCTION_H) output.h \
|
||||
Index: gcc-4.5/gcc/common.opt
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/common.opt 2010-07-11 16:14:47.000000000 -0700
|
||||
+++ gcc-4.5/gcc/common.opt 2010-09-23 16:46:33.556418045 -0700
|
||||
@@ -152,6 +152,10 @@ Wpadded
|
||||
Common Var(warn_padded) Warning
|
||||
Warn when padding is required to align structure members
|
||||
|
||||
+Wpoison-system-directories
|
||||
+Common Var(flag_poison_system_directories) Init(1)
|
||||
+Warn for -I and -L options using system directories if cross compiling
|
||||
+
|
||||
Wshadow
|
||||
Common Var(warn_shadow) Warning
|
||||
Warn when one local variable shadows another
|
||||
Index: gcc-4.5/gcc/config.in
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/config.in 2010-07-11 16:14:46.000000000 -0700
|
||||
+++ gcc-4.5/gcc/config.in 2010-09-23 16:46:33.556418045 -0700
|
||||
@@ -132,6 +132,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to warn for use of native system header directories */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
Index: gcc-4.5/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/configure 2010-09-23 16:44:11.000000000 -0700
|
||||
+++ gcc-4.5/gcc/configure 2010-09-23 16:46:33.572415719 -0700
|
||||
@@ -913,6 +913,7 @@ with_system_zlib
|
||||
enable_maintainer_mode
|
||||
enable_version_specific_runtime_libs
|
||||
with_slibdir
|
||||
+enable_poison_system_directories
|
||||
enable_plugin
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
@@ -1620,6 +1621,8 @@ Optional Features:
|
||||
--enable-version-specific-runtime-libs
|
||||
specify that runtime libraries should be
|
||||
installed in a compiler-specific directory
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system header directories
|
||||
--enable-plugin enable plugin support
|
||||
|
||||
Optional Packages:
|
||||
@@ -25345,6 +25348,19 @@ fi
|
||||
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
|
||||
|
||||
Index: gcc-4.5/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/configure.ac 2010-09-23 16:44:11.000000000 -0700
|
||||
+++ gcc-4.5/gcc/configure.ac 2010-09-23 16:46:33.576417624 -0700
|
||||
@@ -4439,6 +4439,16 @@ else
|
||||
fi)
|
||||
AC_SUBST(slibdir)
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system header directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system header directories])
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
AC_SUBST(subdirs)
|
||||
AC_SUBST(srcdir)
|
||||
Index: gcc-4.5/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/doc/invoke.texi 2010-09-23 15:33:28.000000000 -0700
|
||||
+++ gcc-4.5/gcc/doc/invoke.texi 2010-09-23 16:46:33.584416934 -0700
|
||||
@@ -252,6 +252,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded @gol
|
||||
-Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
|
||||
-Wpointer-arith -Wno-pointer-to-int-cast @gol
|
||||
+-Wno-poison-system-directories @gol
|
||||
-Wredundant-decls @gol
|
||||
-Wreturn-type -Wsequence-point -Wshadow @gol
|
||||
-Wsign-compare -Wsign-conversion -Wstack-protector @gol
|
||||
@@ -3603,6 +3604,14 @@ code. However, note that using @option{
|
||||
option will @emph{not} warn about unknown pragmas in system
|
||||
headers---for that, @option{-Wunknown-pragmas} must also be used.
|
||||
|
||||
+@item -Wno-poison-system-directories
|
||||
+@opindex Wno-poison-system-directories
|
||||
+Do not warn for @option{-I} or @option{-L} options using system
|
||||
+directories such as @file{/usr/include} when cross compiling. This
|
||||
+option is intended for use in chroot environments when such
|
||||
+directories contain the correct headers and libraries for the target
|
||||
+system rather than the host.
|
||||
+
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
Index: gcc-4.5/gcc/gcc.c
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/gcc.c 2010-07-11 16:14:46.000000000 -0700
|
||||
+++ gcc-4.5/gcc/gcc.c 2010-09-23 16:46:33.588417920 -0700
|
||||
@@ -792,6 +792,8 @@ proper position among the other output f
|
||||
%{flto} %{fwhopr} %l " LINK_PIE_SPEC \
|
||||
"%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
|
||||
+ %{Wno-poison-system-directories:--no-poison-system-directories}\
|
||||
+ %{Werror=poison-system-directories:--error-poison-system-directories}\
|
||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
|
||||
%{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)\
|
||||
%{fprofile-arcs|fprofile-generate*|coverage:-lgcov}\
|
||||
Index: gcc-4.5/gcc/incpath.c
|
||||
===================================================================
|
||||
--- gcc-4.5.orig/gcc/incpath.c 2010-07-11 16:14:44.000000000 -0700
|
||||
+++ gcc-4.5/gcc/incpath.c 2010-09-23 16:46:33.588417920 -0700
|
||||
@@ -30,6 +30,8 @@
|
||||
#include "intl.h"
|
||||
#include "incpath.h"
|
||||
#include "cppdefault.h"
|
||||
+#include "flags.h"
|
||||
+#include "toplev.h"
|
||||
|
||||
/* Microsoft Windows does not natively support inodes.
|
||||
VMS has non-numeric inodes. */
|
||||
@@ -353,6 +355,24 @@ merge_include_chains (const char *sysroo
|
||||
}
|
||||
fprintf (stderr, _("End of search list.\n"));
|
||||
}
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (flag_poison_system_directories)
|
||||
+ {
|
||||
+ struct cpp_dir *p;
|
||||
+
|
||||
+ for (p = heads[QUOTE]; p; p = p->next)
|
||||
+ {
|
||||
+ if ((!strncmp (p->name, "/usr/include", 12))
|
||||
+ || (!strncmp (p->name, "/usr/local/include", 18))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18)))
|
||||
+ warning (OPT_Wpoison_system_directories,
|
||||
+ "include location \"%s\" is unsafe for "
|
||||
+ "cross-compilation",
|
||||
+ p->name);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Use given -I paths for #include "..." but not #include <...>, and
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,62 +0,0 @@
|
||||
2010-07-07 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2010-03-08 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
* doc/invoke.texi: Document ARM -mcpu=cortex-m4.
|
||||
* config/arm/arm.c (all_architectures): Change v7e-m default to
|
||||
cortexm4.
|
||||
* config/arm/arm-cores.def: Add cortex-m4.
|
||||
* config/arm/arm-tune.md: Regenerate.
|
||||
|
||||
=== modified file 'gcc/config/arm/arm-cores.def'
|
||||
--- old/gcc/config/arm/arm-cores.def 2009-11-20 17:37:30 +0000
|
||||
+++ new/gcc/config/arm/arm-cores.def 2010-07-29 15:53:39 +0000
|
||||
@@ -123,6 +123,7 @@
|
||||
ARM_CORE("cortex-a9", cortexa9, 7A, FL_LDSCHED, 9e)
|
||||
ARM_CORE("cortex-r4", cortexr4, 7R, FL_LDSCHED, 9e)
|
||||
ARM_CORE("cortex-r4f", cortexr4f, 7R, FL_LDSCHED, 9e)
|
||||
+ARM_CORE("cortex-m4", cortexm4, 7EM, FL_LDSCHED, 9e)
|
||||
ARM_CORE("cortex-m3", cortexm3, 7M, FL_LDSCHED, 9e)
|
||||
ARM_CORE("cortex-m1", cortexm1, 6M, FL_LDSCHED, 9e)
|
||||
ARM_CORE("cortex-m0", cortexm0, 6M, FL_LDSCHED, 9e)
|
||||
|
||||
=== modified file 'gcc/config/arm/arm-tune.md'
|
||||
--- old/gcc/config/arm/arm-tune.md 2009-11-20 17:37:30 +0000
|
||||
+++ new/gcc/config/arm/arm-tune.md 2010-07-29 15:53:39 +0000
|
||||
@@ -1,5 +1,5 @@
|
||||
;; -*- buffer-read-only: t -*-
|
||||
;; Generated automatically by gentune.sh from arm-cores.def
|
||||
(define_attr "tune"
|
||||
- "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,cortexa5,cortexa8,cortexa9,cortexr4,cortexr4f,cortexm3,cortexm1,cortexm0"
|
||||
+ "arm2,arm250,arm3,arm6,arm60,arm600,arm610,arm620,arm7,arm7d,arm7di,arm70,arm700,arm700i,arm710,arm720,arm710c,arm7100,arm7500,arm7500fe,arm7m,arm7dm,arm7dmi,arm8,arm810,strongarm,strongarm110,strongarm1100,strongarm1110,arm7tdmi,arm7tdmis,arm710t,arm720t,arm740t,arm9,arm9tdmi,arm920,arm920t,arm922t,arm940t,ep9312,arm10tdmi,arm1020t,arm9e,arm946es,arm966es,arm968es,arm10e,arm1020e,arm1022e,xscale,iwmmxt,iwmmxt2,arm926ejs,arm1026ejs,arm1136js,arm1136jfs,arm1176jzs,arm1176jzfs,mpcorenovfp,mpcore,arm1156t2s,arm1156t2fs,cortexa5,cortexa8,cortexa9,cortexr4,cortexr4f,cortexm4,cortexm3,cortexm1,cortexm0"
|
||||
(const (symbol_ref "((enum attr_tune) arm_tune)")))
|
||||
|
||||
=== modified file 'gcc/config/arm/arm.c'
|
||||
--- old/gcc/config/arm/arm.c 2010-04-02 07:32:00 +0000
|
||||
+++ new/gcc/config/arm/arm.c 2010-07-29 15:53:39 +0000
|
||||
@@ -782,7 +782,7 @@
|
||||
{"armv7-a", cortexa8, "7A", FL_CO_PROC | FL_FOR_ARCH7A, NULL},
|
||||
{"armv7-r", cortexr4, "7R", FL_CO_PROC | FL_FOR_ARCH7R, NULL},
|
||||
{"armv7-m", cortexm3, "7M", FL_CO_PROC | FL_FOR_ARCH7M, NULL},
|
||||
- {"armv7e-m", cortexm3, "7EM", FL_CO_PROC | FL_FOR_ARCH7EM, NULL},
|
||||
+ {"armv7e-m", cortexm4, "7EM", FL_CO_PROC | FL_FOR_ARCH7EM, NULL},
|
||||
{"ep9312", ep9312, "4T", FL_LDSCHED | FL_CIRRUS | FL_FOR_ARCH4, NULL},
|
||||
{"iwmmxt", iwmmxt, "5TE", FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT , NULL},
|
||||
{"iwmmxt2", iwmmxt2, "5TE", FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT , NULL},
|
||||
|
||||
=== modified file 'gcc/doc/invoke.texi'
|
||||
--- old/gcc/doc/invoke.texi 2010-07-29 14:59:35 +0000
|
||||
+++ new/gcc/doc/invoke.texi 2010-07-29 15:53:39 +0000
|
||||
@@ -9826,7 +9826,7 @@
|
||||
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
|
||||
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
|
||||
@samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9},
|
||||
-@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m3},
|
||||
+@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m4}, @samp{cortex-m3},
|
||||
@samp{cortex-m1},
|
||||
@samp{cortex-m0},
|
||||
@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,674 +0,0 @@
|
||||
2010-07-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Julian Brown <julian@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
* config/arm/arm.c (arm_canonicalize_comparison): Canonicalize DImode
|
||||
comparisons. Adjust to take both operands.
|
||||
(arm_select_cc_mode): Handle DImode comparisons.
|
||||
(arm_gen_compare_reg): Generate a scratch register for DImode
|
||||
comparisons which require one. Use xor for Thumb equality checks.
|
||||
(arm_const_double_by_immediates): New.
|
||||
(arm_print_operand): Allow 'Q' and 'R' for constants.
|
||||
(get_arm_condition_code): Handle new CC_CZmode and CC_NCVmode.
|
||||
* config/arm/arm.h (CANONICALIZE_COMPARISON): Always use
|
||||
arm_canonicalize_comparison.
|
||||
* config/arm/arm-modes.def: Add CC_CZmode and CC_NCVmode.
|
||||
* config/arm/arm-protos.h (arm_canonicalize_comparison): Update
|
||||
prototype.
|
||||
(arm_const_double_by_immediates): Declare.
|
||||
* config/arm/constraints.md (Di): New constraint.
|
||||
* config/arm/predicates.md (arm_immediate_di_operand)
|
||||
(arm_di_operand, cmpdi_operand): New.
|
||||
* config/arm/arm.md (cbranchdi4): Handle non-Cirrus also.
|
||||
(*arm_cmpdi_insn, *arm_cmpdi_unsigned)
|
||||
(*arm_cmpdi_zero, *thumb_cmpdi_zero): New insns.
|
||||
(cstoredi4): Handle non-Cirrus also.
|
||||
|
||||
gcc/testsuite/
|
||||
* gcc.c-torture/execute/20100416-1.c: New test case.
|
||||
|
||||
2010-07-08 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from upstream (originally from Sourcery G++ 4.4):
|
||||
|
||||
2010-07-02 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
|
||||
=== modified file 'gcc/config/arm/arm-modes.def'
|
||||
Index: gcc-4.5.3/gcc/config/arm/arm-modes.def
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/arm-modes.def
|
||||
+++ gcc-4.5.3/gcc/config/arm/arm-modes.def
|
||||
@@ -35,10 +35,16 @@ ADJUST_FLOAT_FORMAT (HF, ((arm_fp16_form
|
||||
CC_NOOVmode should be used with SImode integer equalities.
|
||||
CC_Zmode should be used if only the Z flag is set correctly
|
||||
CC_Nmode should be used if only the N (sign) flag is set correctly
|
||||
+ CC_CZmode should be used if only the C and Z flags are correct
|
||||
+ (used for DImode unsigned comparisons).
|
||||
+ CC_NCVmode should be used if only the N, C, and V flags are correct
|
||||
+ (used for DImode signed comparisons).
|
||||
CCmode should be used otherwise. */
|
||||
|
||||
CC_MODE (CC_NOOV);
|
||||
CC_MODE (CC_Z);
|
||||
+CC_MODE (CC_CZ);
|
||||
+CC_MODE (CC_NCV);
|
||||
CC_MODE (CC_SWP);
|
||||
CC_MODE (CCFP);
|
||||
CC_MODE (CCFPE);
|
||||
Index: gcc-4.5.3/gcc/config/arm/arm-protos.h
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/arm-protos.h
|
||||
+++ gcc-4.5.3/gcc/config/arm/arm-protos.h
|
||||
@@ -49,8 +49,7 @@ extern int arm_hard_regno_mode_ok (unsig
|
||||
extern int const_ok_for_arm (HOST_WIDE_INT);
|
||||
extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
|
||||
HOST_WIDE_INT, rtx, rtx, int);
|
||||
-extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, enum machine_mode,
|
||||
- rtx *);
|
||||
+extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *, rtx *);
|
||||
extern int legitimate_pic_operand_p (rtx);
|
||||
extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
|
||||
extern rtx legitimize_tls_address (rtx, rtx);
|
||||
@@ -116,6 +115,7 @@ extern void arm_reload_in_hi (rtx *);
|
||||
extern void arm_reload_out_hi (rtx *);
|
||||
extern int arm_const_double_inline_cost (rtx);
|
||||
extern bool arm_const_double_by_parts (rtx);
|
||||
+extern bool arm_const_double_by_immediates (rtx);
|
||||
extern const char *fp_immediate_constant (rtx);
|
||||
extern void arm_emit_call_insn (rtx, rtx);
|
||||
extern const char *output_call (rtx *);
|
||||
Index: gcc-4.5.3/gcc/config/arm/arm.c
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/arm.c
|
||||
+++ gcc-4.5.3/gcc/config/arm/arm.c
|
||||
@@ -3191,13 +3191,82 @@ arm_gen_constant (enum rtx_code code, en
|
||||
immediate value easier to load. */
|
||||
|
||||
enum rtx_code
|
||||
-arm_canonicalize_comparison (enum rtx_code code, enum machine_mode mode,
|
||||
- rtx * op1)
|
||||
+arm_canonicalize_comparison (enum rtx_code code, rtx *op0, rtx *op1)
|
||||
{
|
||||
- unsigned HOST_WIDE_INT i = INTVAL (*op1);
|
||||
- unsigned HOST_WIDE_INT maxval;
|
||||
+ enum machine_mode mode;
|
||||
+ unsigned HOST_WIDE_INT i, maxval;
|
||||
+
|
||||
+ mode = GET_MODE (*op0);
|
||||
+ if (mode == VOIDmode)
|
||||
+ mode = GET_MODE (*op1);
|
||||
+
|
||||
maxval = (((unsigned HOST_WIDE_INT) 1) << (GET_MODE_BITSIZE(mode) - 1)) - 1;
|
||||
|
||||
+ /* For DImode, we have GE/LT/GEU/LTU comparisons. In ARM mode
|
||||
+ we can also use cmp/cmpeq for GTU/LEU. GT/LE must be either
|
||||
+ reversed or (for constant OP1) adjusted to GE/LT. Similarly
|
||||
+ for GTU/LEU in Thumb mode. */
|
||||
+ if (mode == DImode)
|
||||
+ {
|
||||
+ rtx tem;
|
||||
+
|
||||
+ /* To keep things simple, always use the Cirrus cfcmp64 if it is
|
||||
+ available. */
|
||||
+ if (TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK)
|
||||
+ return code;
|
||||
+
|
||||
+ if (code == GT || code == LE
|
||||
+ || (!TARGET_ARM && (code == GTU || code == LEU)))
|
||||
+ {
|
||||
+ /* Missing comparison. First try to use an available
|
||||
+ comparison. */
|
||||
+ if (GET_CODE (*op1) == CONST_INT)
|
||||
+ {
|
||||
+ i = INTVAL (*op1);
|
||||
+ switch (code)
|
||||
+ {
|
||||
+ case GT:
|
||||
+ case LE:
|
||||
+ if (i != maxval
|
||||
+ && arm_const_double_by_immediates (GEN_INT (i + 1)))
|
||||
+ {
|
||||
+ *op1 = GEN_INT (i + 1);
|
||||
+ return code == GT ? GE : LT;
|
||||
+ }
|
||||
+ break;
|
||||
+ case GTU:
|
||||
+ case LEU:
|
||||
+ if (i != ~((unsigned HOST_WIDE_INT) 0)
|
||||
+ && arm_const_double_by_immediates (GEN_INT (i + 1)))
|
||||
+ {
|
||||
+ *op1 = GEN_INT (i + 1);
|
||||
+ return code == GTU ? GEU : LTU;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ gcc_unreachable ();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* If that did not work, reverse the condition. */
|
||||
+ tem = *op0;
|
||||
+ *op0 = *op1;
|
||||
+ *op1 = tem;
|
||||
+ return swap_condition (code);
|
||||
+ }
|
||||
+
|
||||
+ return code;
|
||||
+ }
|
||||
+
|
||||
+ /* Comparisons smaller than DImode. Only adjust comparisons against
|
||||
+ an out-of-range constant. */
|
||||
+ if (GET_CODE (*op1) != CONST_INT
|
||||
+ || const_ok_for_arm (INTVAL (*op1))
|
||||
+ || const_ok_for_arm (- INTVAL (*op1)))
|
||||
+ return code;
|
||||
+
|
||||
+ i = INTVAL (*op1);
|
||||
+
|
||||
switch (code)
|
||||
{
|
||||
case EQ:
|
||||
@@ -9913,6 +9982,55 @@ arm_select_cc_mode (enum rtx_code op, rt
|
||||
&& (rtx_equal_p (XEXP (x, 0), y) || rtx_equal_p (XEXP (x, 1), y)))
|
||||
return CC_Cmode;
|
||||
|
||||
+ if (GET_MODE (x) == DImode || GET_MODE (y) == DImode)
|
||||
+ {
|
||||
+ /* To keep things simple, always use the Cirrus cfcmp64 if it is
|
||||
+ available. */
|
||||
+ if (TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK)
|
||||
+ return CCmode;
|
||||
+
|
||||
+ switch (op)
|
||||
+ {
|
||||
+ case EQ:
|
||||
+ case NE:
|
||||
+ /* A DImode comparison against zero can be implemented by
|
||||
+ or'ing the two halves together. */
|
||||
+ if (y == const0_rtx)
|
||||
+ return CC_Zmode;
|
||||
+
|
||||
+ /* We can do an equality test in three Thumb instructions. */
|
||||
+ if (!TARGET_ARM)
|
||||
+ return CC_Zmode;
|
||||
+
|
||||
+ /* FALLTHROUGH */
|
||||
+
|
||||
+ case LTU:
|
||||
+ case LEU:
|
||||
+ case GTU:
|
||||
+ case GEU:
|
||||
+ /* DImode unsigned comparisons can be implemented by cmp +
|
||||
+ cmpeq without a scratch register. Not worth doing in
|
||||
+ Thumb-2. */
|
||||
+ if (TARGET_ARM)
|
||||
+ return CC_CZmode;
|
||||
+
|
||||
+ /* FALLTHROUGH */
|
||||
+
|
||||
+ case LT:
|
||||
+ case LE:
|
||||
+ case GT:
|
||||
+ case GE:
|
||||
+ /* DImode signed and unsigned comparisons can be implemented
|
||||
+ by cmp + sbcs with a scratch register, but that does not
|
||||
+ set the Z flag - we must reverse GT/LE/GTU/LEU. */
|
||||
+ gcc_assert (op != EQ && op != NE);
|
||||
+ return CC_NCVmode;
|
||||
+
|
||||
+ default:
|
||||
+ gcc_unreachable ();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return CCmode;
|
||||
}
|
||||
|
||||
@@ -9922,10 +10040,39 @@ arm_select_cc_mode (enum rtx_code op, rt
|
||||
rtx
|
||||
arm_gen_compare_reg (enum rtx_code code, rtx x, rtx y)
|
||||
{
|
||||
- enum machine_mode mode = SELECT_CC_MODE (code, x, y);
|
||||
- rtx cc_reg = gen_rtx_REG (mode, CC_REGNUM);
|
||||
+ enum machine_mode mode;
|
||||
+ rtx cc_reg;
|
||||
+ int dimode_comparison = GET_MODE (x) == DImode || GET_MODE (y) == DImode;
|
||||
|
||||
- emit_set_insn (cc_reg, gen_rtx_COMPARE (mode, x, y));
|
||||
+ /* We might have X as a constant, Y as a register because of the predicates
|
||||
+ used for cmpdi. If so, force X to a register here. */
|
||||
+ if (dimode_comparison && !REG_P (x))
|
||||
+ x = force_reg (DImode, x);
|
||||
+
|
||||
+ mode = SELECT_CC_MODE (code, x, y);
|
||||
+ cc_reg = gen_rtx_REG (mode, CC_REGNUM);
|
||||
+
|
||||
+ if (dimode_comparison
|
||||
+ && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)
|
||||
+ && mode != CC_CZmode)
|
||||
+ {
|
||||
+ rtx clobber, set;
|
||||
+
|
||||
+ /* To compare two non-zero values for equality, XOR them and
|
||||
+ then compare against zero. Not used for ARM mode; there
|
||||
+ CC_CZmode is cheaper. */
|
||||
+ if (mode == CC_Zmode && y != const0_rtx)
|
||||
+ {
|
||||
+ x = expand_binop (DImode, xor_optab, x, y, NULL_RTX, 0, OPTAB_WIDEN);
|
||||
+ y = const0_rtx;
|
||||
+ }
|
||||
+ /* A scratch register is required. */
|
||||
+ clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (SImode));
|
||||
+ set = gen_rtx_SET (VOIDmode, cc_reg, gen_rtx_COMPARE (mode, x, y));
|
||||
+ emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
|
||||
+ }
|
||||
+ else
|
||||
+ emit_set_insn (cc_reg, gen_rtx_COMPARE (mode, x, y));
|
||||
|
||||
return cc_reg;
|
||||
}
|
||||
@@ -11254,6 +11401,34 @@ arm_const_double_by_parts (rtx val)
|
||||
return false;
|
||||
}
|
||||
|
||||
+/* Return true if it is possible to inline both the high and low parts
|
||||
+ of a 64-bit constant into 32-bit data processing instructions. */
|
||||
+bool
|
||||
+arm_const_double_by_immediates (rtx val)
|
||||
+{
|
||||
+ enum machine_mode mode = GET_MODE (val);
|
||||
+ rtx part;
|
||||
+
|
||||
+ if (mode == VOIDmode)
|
||||
+ mode = DImode;
|
||||
+
|
||||
+ part = gen_highpart_mode (SImode, mode, val);
|
||||
+
|
||||
+ gcc_assert (GET_CODE (part) == CONST_INT);
|
||||
+
|
||||
+ if (!const_ok_for_arm (INTVAL (part)))
|
||||
+ return false;
|
||||
+
|
||||
+ part = gen_lowpart (SImode, val);
|
||||
+
|
||||
+ gcc_assert (GET_CODE (part) == CONST_INT);
|
||||
+
|
||||
+ if (!const_ok_for_arm (INTVAL (part)))
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
/* Scan INSN and note any of its operands that need fixing.
|
||||
If DO_PUSHES is false we do not actually push any of the fixups
|
||||
needed. The function returns TRUE if any fixups were needed/pushed.
|
||||
@@ -15150,8 +15325,18 @@ arm_print_operand (FILE *stream, rtx x,
|
||||
the value being loaded is big-wordian or little-wordian. The
|
||||
order of the two register loads can matter however, if the address
|
||||
of the memory location is actually held in one of the registers
|
||||
- being overwritten by the load. */
|
||||
+ being overwritten by the load.
|
||||
+
|
||||
+ The 'Q' and 'R' constraints are also available for 64-bit
|
||||
+ constants. */
|
||||
case 'Q':
|
||||
+ if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
|
||||
+ {
|
||||
+ rtx part = gen_lowpart (SImode, x);
|
||||
+ fprintf (stream, "#" HOST_WIDE_INT_PRINT_DEC, INTVAL (part));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (GET_CODE (x) != REG || REGNO (x) > LAST_ARM_REGNUM)
|
||||
{
|
||||
output_operand_lossage ("invalid operand for code '%c'", code);
|
||||
@@ -15162,6 +15347,18 @@ arm_print_operand (FILE *stream, rtx x,
|
||||
return;
|
||||
|
||||
case 'R':
|
||||
+ if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)
|
||||
+ {
|
||||
+ enum machine_mode mode = GET_MODE (x);
|
||||
+ rtx part;
|
||||
+
|
||||
+ if (mode == VOIDmode)
|
||||
+ mode = DImode;
|
||||
+ part = gen_highpart_mode (SImode, mode, x);
|
||||
+ fprintf (stream, "#" HOST_WIDE_INT_PRINT_DEC, INTVAL (part));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (GET_CODE (x) != REG || REGNO (x) > LAST_ARM_REGNUM)
|
||||
{
|
||||
output_operand_lossage ("invalid operand for code '%c'", code);
|
||||
@@ -15854,6 +16051,28 @@ get_arm_condition_code (rtx comparison)
|
||||
default: gcc_unreachable ();
|
||||
}
|
||||
|
||||
+ case CC_CZmode:
|
||||
+ switch (comp_code)
|
||||
+ {
|
||||
+ case NE: return ARM_NE;
|
||||
+ case EQ: return ARM_EQ;
|
||||
+ case GEU: return ARM_CS;
|
||||
+ case GTU: return ARM_HI;
|
||||
+ case LEU: return ARM_LS;
|
||||
+ case LTU: return ARM_CC;
|
||||
+ default: gcc_unreachable ();
|
||||
+ }
|
||||
+
|
||||
+ case CC_NCVmode:
|
||||
+ switch (comp_code)
|
||||
+ {
|
||||
+ case GE: return ARM_GE;
|
||||
+ case LT: return ARM_LT;
|
||||
+ case GEU: return ARM_CS;
|
||||
+ case LTU: return ARM_CC;
|
||||
+ default: gcc_unreachable ();
|
||||
+ }
|
||||
+
|
||||
case CCmode:
|
||||
switch (comp_code)
|
||||
{
|
||||
Index: gcc-4.5.3/gcc/config/arm/arm.h
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/arm.h
|
||||
+++ gcc-4.5.3/gcc/config/arm/arm.h
|
||||
@@ -2253,19 +2253,7 @@ extern int making_const_table;
|
||||
: reverse_condition (code))
|
||||
|
||||
#define CANONICALIZE_COMPARISON(CODE, OP0, OP1) \
|
||||
- do \
|
||||
- { \
|
||||
- if (GET_CODE (OP1) == CONST_INT \
|
||||
- && ! (const_ok_for_arm (INTVAL (OP1)) \
|
||||
- || (const_ok_for_arm (- INTVAL (OP1))))) \
|
||||
- { \
|
||||
- rtx const_op = OP1; \
|
||||
- CODE = arm_canonicalize_comparison ((CODE), GET_MODE (OP0), \
|
||||
- &const_op); \
|
||||
- OP1 = const_op; \
|
||||
- } \
|
||||
- } \
|
||||
- while (0)
|
||||
+ (CODE) = arm_canonicalize_comparison (CODE, &(OP0), &(OP1))
|
||||
|
||||
/* The arm5 clz instruction returns 32. */
|
||||
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
|
||||
Index: gcc-4.5.3/gcc/config/arm/arm.md
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/arm.md
|
||||
+++ gcc-4.5.3/gcc/config/arm/arm.md
|
||||
@@ -6718,17 +6718,45 @@
|
||||
operands[3])); DONE;"
|
||||
)
|
||||
|
||||
-;; this uses the Cirrus DI compare instruction
|
||||
(define_expand "cbranchdi4"
|
||||
[(set (pc) (if_then_else
|
||||
(match_operator 0 "arm_comparison_operator"
|
||||
- [(match_operand:DI 1 "cirrus_fp_register" "")
|
||||
- (match_operand:DI 2 "cirrus_fp_register" "")])
|
||||
+ [(match_operand:DI 1 "cmpdi_operand" "")
|
||||
+ (match_operand:DI 2 "cmpdi_operand" "")])
|
||||
(label_ref (match_operand 3 "" ""))
|
||||
(pc)))]
|
||||
- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK"
|
||||
- "emit_jump_insn (gen_cbranch_cc (operands[0], operands[1], operands[2],
|
||||
- operands[3])); DONE;"
|
||||
+ "TARGET_32BIT"
|
||||
+ "{
|
||||
+ rtx swap = NULL_RTX;
|
||||
+ enum rtx_code code = GET_CODE (operands[0]);
|
||||
+
|
||||
+ /* We should not have two constants. */
|
||||
+ gcc_assert (GET_MODE (operands[1]) == DImode
|
||||
+ || GET_MODE (operands[2]) == DImode);
|
||||
+
|
||||
+ /* Flip unimplemented DImode comparisons to a form that
|
||||
+ arm_gen_compare_reg can handle. */
|
||||
+ switch (code)
|
||||
+ {
|
||||
+ case GT:
|
||||
+ swap = gen_rtx_LT (VOIDmode, operands[2], operands[1]); break;
|
||||
+ case LE:
|
||||
+ swap = gen_rtx_GE (VOIDmode, operands[2], operands[1]); break;
|
||||
+ case GTU:
|
||||
+ swap = gen_rtx_LTU (VOIDmode, operands[2], operands[1]); break;
|
||||
+ case LEU:
|
||||
+ swap = gen_rtx_GEU (VOIDmode, operands[2], operands[1]); break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ if (swap)
|
||||
+ emit_jump_insn (gen_cbranch_cc (swap, operands[2], operands[1],
|
||||
+ operands[3]));
|
||||
+ else
|
||||
+ emit_jump_insn (gen_cbranch_cc (operands[0], operands[1], operands[2],
|
||||
+ operands[3]));
|
||||
+ DONE;
|
||||
+ }"
|
||||
)
|
||||
|
||||
(define_insn "*cbranchsi4_insn"
|
||||
@@ -7880,6 +7908,52 @@
|
||||
(const_string "alu_shift_reg")))]
|
||||
)
|
||||
|
||||
+;; DImode comparisons. The generic code generates branches that
|
||||
+;; if-conversion can not reduce to a conditional compare, so we do
|
||||
+;; that directly.
|
||||
+
|
||||
+(define_insn "*arm_cmpdi_insn"
|
||||
+ [(set (reg:CC_NCV CC_REGNUM)
|
||||
+ (compare:CC_NCV (match_operand:DI 0 "s_register_operand" "r")
|
||||
+ (match_operand:DI 1 "arm_di_operand" "rDi")))
|
||||
+ (clobber (match_scratch:SI 2 "=r"))]
|
||||
+ "TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK)"
|
||||
+ "cmp\\t%Q0, %Q1\;sbcs\\t%2, %R0, %R1"
|
||||
+ [(set_attr "conds" "set")
|
||||
+ (set_attr "length" "8")]
|
||||
+)
|
||||
+
|
||||
+(define_insn "*arm_cmpdi_unsigned"
|
||||
+ [(set (reg:CC_CZ CC_REGNUM)
|
||||
+ (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "r")
|
||||
+ (match_operand:DI 1 "arm_di_operand" "rDi")))]
|
||||
+ "TARGET_ARM"
|
||||
+ "cmp%?\\t%R0, %R1\;cmpeq\\t%Q0, %Q1"
|
||||
+ [(set_attr "conds" "set")
|
||||
+ (set_attr "length" "8")]
|
||||
+)
|
||||
+
|
||||
+(define_insn "*arm_cmpdi_zero"
|
||||
+ [(set (reg:CC_Z CC_REGNUM)
|
||||
+ (compare:CC_Z (match_operand:DI 0 "s_register_operand" "r")
|
||||
+ (const_int 0)))
|
||||
+ (clobber (match_scratch:SI 1 "=r"))]
|
||||
+ "TARGET_32BIT"
|
||||
+ "orr%.\\t%1, %Q0, %R0"
|
||||
+ [(set_attr "conds" "set")]
|
||||
+)
|
||||
+
|
||||
+(define_insn "*thumb_cmpdi_zero"
|
||||
+ [(set (reg:CC_Z CC_REGNUM)
|
||||
+ (compare:CC_Z (match_operand:DI 0 "s_register_operand" "l")
|
||||
+ (const_int 0)))
|
||||
+ (clobber (match_scratch:SI 1 "=l"))]
|
||||
+ "TARGET_THUMB1"
|
||||
+ "orr\\t%1, %Q0, %R0"
|
||||
+ [(set_attr "conds" "set")
|
||||
+ (set_attr "length" "2")]
|
||||
+)
|
||||
+
|
||||
;; Cirrus SF compare instruction
|
||||
(define_insn "*cirrus_cmpsf"
|
||||
[(set (reg:CCFP CC_REGNUM)
|
||||
@@ -8183,17 +8257,44 @@
|
||||
operands[2], operands[3])); DONE;"
|
||||
)
|
||||
|
||||
-;; this uses the Cirrus DI compare instruction
|
||||
(define_expand "cstoredi4"
|
||||
[(set (match_operand:SI 0 "s_register_operand" "")
|
||||
(match_operator:SI 1 "arm_comparison_operator"
|
||||
- [(match_operand:DI 2 "cirrus_fp_register" "")
|
||||
- (match_operand:DI 3 "cirrus_fp_register" "")]))]
|
||||
- "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_MAVERICK"
|
||||
- "emit_insn (gen_cstore_cc (operands[0], operands[1],
|
||||
- operands[2], operands[3])); DONE;"
|
||||
-)
|
||||
+ [(match_operand:DI 2 "cmpdi_operand" "")
|
||||
+ (match_operand:DI 3 "cmpdi_operand" "")]))]
|
||||
+ "TARGET_32BIT"
|
||||
+ "{
|
||||
+ rtx swap = NULL_RTX;
|
||||
+ enum rtx_code code = GET_CODE (operands[1]);
|
||||
|
||||
+ /* We should not have two constants. */
|
||||
+ gcc_assert (GET_MODE (operands[2]) == DImode
|
||||
+ || GET_MODE (operands[3]) == DImode);
|
||||
+
|
||||
+ /* Flip unimplemented DImode comparisons to a form that
|
||||
+ arm_gen_compare_reg can handle. */
|
||||
+ switch (code)
|
||||
+ {
|
||||
+ case GT:
|
||||
+ swap = gen_rtx_LT (VOIDmode, operands[3], operands[2]); break;
|
||||
+ case LE:
|
||||
+ swap = gen_rtx_GE (VOIDmode, operands[3], operands[2]); break;
|
||||
+ case GTU:
|
||||
+ swap = gen_rtx_LTU (VOIDmode, operands[3], operands[2]); break;
|
||||
+ case LEU:
|
||||
+ swap = gen_rtx_GEU (VOIDmode, operands[3], operands[2]); break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ if (swap)
|
||||
+ emit_insn (gen_cstore_cc (operands[0], swap, operands[3],
|
||||
+ operands[2]));
|
||||
+ else
|
||||
+ emit_insn (gen_cstore_cc (operands[0], operands[1], operands[2],
|
||||
+ operands[3]));
|
||||
+ DONE;
|
||||
+ }"
|
||||
+)
|
||||
|
||||
(define_expand "cstoresi_eq0_thumb1"
|
||||
[(parallel
|
||||
Index: gcc-4.5.3/gcc/config/arm/constraints.md
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/constraints.md
|
||||
+++ gcc-4.5.3/gcc/config/arm/constraints.md
|
||||
@@ -29,7 +29,7 @@
|
||||
;; in Thumb-1 state: I, J, K, L, M, N, O
|
||||
|
||||
;; The following multi-letter normal constraints have been used:
|
||||
-;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv, Dy
|
||||
+;; in ARM/Thumb-2 state: Da, Db, Dc, Dn, Dl, DL, Dv, Dy, Di
|
||||
;; in Thumb-1 state: Pa, Pb
|
||||
;; in Thumb-2 state: Ps, Pt
|
||||
|
||||
@@ -191,6 +191,13 @@
|
||||
(match_test "TARGET_32BIT && arm_const_double_inline_cost (op) == 4
|
||||
&& !(optimize_size || arm_ld_sched)")))
|
||||
|
||||
+(define_constraint "Di"
|
||||
+ "@internal
|
||||
+ In ARM/Thumb-2 state a const_int or const_double where both the high
|
||||
+ and low SImode words can be generated as immediates in 32-bit instructions."
|
||||
+ (and (match_code "const_double,const_int")
|
||||
+ (match_test "TARGET_32BIT && arm_const_double_by_immediates (op)")))
|
||||
+
|
||||
(define_constraint "Dn"
|
||||
"@internal
|
||||
In ARM/Thumb-2 state a const_vector which can be loaded with a Neon vmov
|
||||
Index: gcc-4.5.3/gcc/config/arm/predicates.md
|
||||
===================================================================
|
||||
--- gcc-4.5.3.orig/gcc/config/arm/predicates.md
|
||||
+++ gcc-4.5.3/gcc/config/arm/predicates.md
|
||||
@@ -101,6 +101,12 @@
|
||||
(and (match_code "const_int")
|
||||
(match_test "const_ok_for_arm (INTVAL (op))")))
|
||||
|
||||
+;; A constant value which fits into two instructions, each taking
|
||||
+;; an arithmetic constant operand for one of the words.
|
||||
+(define_predicate "arm_immediate_di_operand"
|
||||
+ (and (match_code "const_int,const_double")
|
||||
+ (match_test "arm_const_double_by_immediates (op)")))
|
||||
+
|
||||
(define_predicate "arm_neg_immediate_operand"
|
||||
(and (match_code "const_int")
|
||||
(match_test "const_ok_for_arm (-INTVAL (op))")))
|
||||
@@ -130,6 +136,10 @@
|
||||
(ior (match_operand 0 "arm_rhs_operand")
|
||||
(match_operand 0 "arm_not_immediate_operand")))
|
||||
|
||||
+(define_predicate "arm_di_operand"
|
||||
+ (ior (match_operand 0 "s_register_operand")
|
||||
+ (match_operand 0 "arm_immediate_di_operand")))
|
||||
+
|
||||
;; True if the operand is a memory reference which contains an
|
||||
;; offsettable address.
|
||||
(define_predicate "offsettable_memory_operand"
|
||||
@@ -538,3 +548,12 @@
|
||||
(and (match_code "const_int")
|
||||
(match_test "INTVAL (op) >= 0 && INTVAL (op) <= 15")))
|
||||
|
||||
+;; Predicates for named expanders that overlap multiple ISAs.
|
||||
+
|
||||
+(define_predicate "cmpdi_operand"
|
||||
+ (if_then_else (match_test "TARGET_HARD_FLOAT && TARGET_MAVERICK")
|
||||
+ (and (match_test "TARGET_ARM")
|
||||
+ (match_operand 0 "cirrus_fp_register"))
|
||||
+ (and (match_test "TARGET_32BIT")
|
||||
+ (match_operand 0 "arm_di_operand"))))
|
||||
+
|
||||
Index: gcc-4.5.3/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ gcc-4.5.3/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
|
||||
@@ -0,0 +1,40 @@
|
||||
+void abort(void);
|
||||
+
|
||||
+int
|
||||
+movegt(int x, int y, long long a)
|
||||
+{
|
||||
+ int i;
|
||||
+ int ret = 0;
|
||||
+ for (i = 0; i < y; i++)
|
||||
+ {
|
||||
+ if (a >= (long long) 0xf000000000000000LL)
|
||||
+ ret = x;
|
||||
+ else
|
||||
+ ret = y;
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+struct test
|
||||
+{
|
||||
+ long long val;
|
||||
+ int ret;
|
||||
+} tests[] = {
|
||||
+ { 0xf000000000000000LL, -1 },
|
||||
+ { 0xefffffffffffffffLL, 1 },
|
||||
+ { 0xf000000000000001LL, -1 },
|
||||
+ { 0x0000000000000000LL, -1 },
|
||||
+ { 0x8000000000000000LL, 1 },
|
||||
+};
|
||||
+
|
||||
+int
|
||||
+main()
|
||||
+{
|
||||
+ int i;
|
||||
+ for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
|
||||
+ {
|
||||
+ if (movegt (-1, 1, tests[i].val) != tests[i].ret)
|
||||
+ abort ();
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
@@ -1,244 +0,0 @@
|
||||
2010-07-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from mainline (originally on Sourcery G++ 4.4):
|
||||
|
||||
2010-07-02 Julian Brown <julian@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR target/43703
|
||||
|
||||
gcc/
|
||||
* config/arm/vec-common.md (add<mode>3, sub<mode>3, smin<mode>3)
|
||||
(smax<mode>3): Disable for NEON float modes when
|
||||
flag_unsafe_math_optimizations is false.
|
||||
* config/arm/neon.md (*add<mode>3_neon, *sub<mode>3_neon)
|
||||
(*mul<mode>3_neon)
|
||||
(mul<mode>3add<mode>_neon, mul<mode>3neg<mode>add<mode>_neon)
|
||||
(reduc_splus_<mode>, reduc_smin_<mode>, reduc_smax_<mode>): Disable
|
||||
for NEON float modes when flag_unsafe_math_optimizations is false.
|
||||
(quad_halves_<code>v4sf): Only enable if flag_unsafe_math_optimizations
|
||||
is true.
|
||||
* doc/invoke.texi (ARM Options): Add note about floating point
|
||||
vectorization requiring -funsafe-math-optimizations.
|
||||
|
||||
gcc/testsuite/
|
||||
* gcc.dg/vect/vect.exp: Add -ffast-math for NEON.
|
||||
* gcc.dg/vect/vect-reduc-6.c: Add XFAIL for NEON.
|
||||
|
||||
2010-07-08 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from upstream (originally from Sourcery G++ 4.4):
|
||||
|
||||
=== modified file 'gcc/config/arm/neon.md'
|
||||
--- old/gcc/config/arm/neon.md 2010-07-29 15:59:12 +0000
|
||||
+++ new/gcc/config/arm/neon.md 2010-07-29 17:03:20 +0000
|
||||
@@ -819,7 +819,7 @@
|
||||
[(set (match_operand:VDQ 0 "s_register_operand" "=w")
|
||||
(plus:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
|
||||
(match_operand:VDQ 2 "s_register_operand" "w")))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
"vadd.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
|
||||
[(set (attr "neon_type")
|
||||
(if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
|
||||
@@ -853,7 +853,7 @@
|
||||
[(set (match_operand:VDQ 0 "s_register_operand" "=w")
|
||||
(minus:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
|
||||
(match_operand:VDQ 2 "s_register_operand" "w")))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
"vsub.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
|
||||
[(set (attr "neon_type")
|
||||
(if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
|
||||
@@ -888,7 +888,7 @@
|
||||
[(set (match_operand:VDQ 0 "s_register_operand" "=w")
|
||||
(mult:VDQ (match_operand:VDQ 1 "s_register_operand" "w")
|
||||
(match_operand:VDQ 2 "s_register_operand" "w")))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
"vmul.<V_if_elem>\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
|
||||
[(set (attr "neon_type")
|
||||
(if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
|
||||
@@ -910,7 +910,7 @@
|
||||
(plus:VDQ (mult:VDQ (match_operand:VDQ 2 "s_register_operand" "w")
|
||||
(match_operand:VDQ 3 "s_register_operand" "w"))
|
||||
(match_operand:VDQ 1 "s_register_operand" "0")))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
"vmla.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
|
||||
[(set (attr "neon_type")
|
||||
(if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
|
||||
@@ -932,7 +932,7 @@
|
||||
(minus:VDQ (match_operand:VDQ 1 "s_register_operand" "0")
|
||||
(mult:VDQ (match_operand:VDQ 2 "s_register_operand" "w")
|
||||
(match_operand:VDQ 3 "s_register_operand" "w"))))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
"vmls.<V_if_elem>\t%<V_reg>0, %<V_reg>2, %<V_reg>3"
|
||||
[(set (attr "neon_type")
|
||||
(if_then_else (ne (symbol_ref "<Is_float_mode>") (const_int 0))
|
||||
@@ -1361,7 +1361,7 @@
|
||||
(parallel [(const_int 0) (const_int 1)]))
|
||||
(vec_select:V2SF (match_dup 1)
|
||||
(parallel [(const_int 2) (const_int 3)]))))]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && flag_unsafe_math_optimizations"
|
||||
"<VQH_mnem>.f32\t%P0, %e1, %f1"
|
||||
[(set_attr "vqh_mnem" "<VQH_mnem>")
|
||||
(set (attr "neon_type")
|
||||
@@ -1496,7 +1496,7 @@
|
||||
(define_expand "reduc_splus_<mode>"
|
||||
[(match_operand:VD 0 "s_register_operand" "")
|
||||
(match_operand:VD 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
neon_pairwise_reduce (operands[0], operands[1], <MODE>mode,
|
||||
&gen_neon_vpadd_internal<mode>);
|
||||
@@ -1506,7 +1506,7 @@
|
||||
(define_expand "reduc_splus_<mode>"
|
||||
[(match_operand:VQ 0 "s_register_operand" "")
|
||||
(match_operand:VQ 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
rtx step1 = gen_reg_rtx (<V_HALF>mode);
|
||||
rtx res_d = gen_reg_rtx (<V_HALF>mode);
|
||||
@@ -1541,7 +1541,7 @@
|
||||
(define_expand "reduc_smin_<mode>"
|
||||
[(match_operand:VD 0 "s_register_operand" "")
|
||||
(match_operand:VD 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
neon_pairwise_reduce (operands[0], operands[1], <MODE>mode,
|
||||
&gen_neon_vpsmin<mode>);
|
||||
@@ -1551,7 +1551,7 @@
|
||||
(define_expand "reduc_smin_<mode>"
|
||||
[(match_operand:VQ 0 "s_register_operand" "")
|
||||
(match_operand:VQ 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
rtx step1 = gen_reg_rtx (<V_HALF>mode);
|
||||
rtx res_d = gen_reg_rtx (<V_HALF>mode);
|
||||
@@ -1566,7 +1566,7 @@
|
||||
(define_expand "reduc_smax_<mode>"
|
||||
[(match_operand:VD 0 "s_register_operand" "")
|
||||
(match_operand:VD 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
neon_pairwise_reduce (operands[0], operands[1], <MODE>mode,
|
||||
&gen_neon_vpsmax<mode>);
|
||||
@@ -1576,7 +1576,7 @@
|
||||
(define_expand "reduc_smax_<mode>"
|
||||
[(match_operand:VQ 0 "s_register_operand" "")
|
||||
(match_operand:VQ 1 "s_register_operand" "")]
|
||||
- "TARGET_NEON"
|
||||
+ "TARGET_NEON && (!<Is_float_mode> || flag_unsafe_math_optimizations)"
|
||||
{
|
||||
rtx step1 = gen_reg_rtx (<V_HALF>mode);
|
||||
rtx res_d = gen_reg_rtx (<V_HALF>mode);
|
||||
|
||||
=== modified file 'gcc/config/arm/vec-common.md'
|
||||
--- old/gcc/config/arm/vec-common.md 2009-11-11 14:23:03 +0000
|
||||
+++ new/gcc/config/arm/vec-common.md 2010-07-29 17:03:20 +0000
|
||||
@@ -57,7 +57,8 @@
|
||||
[(set (match_operand:VALL 0 "s_register_operand" "")
|
||||
(plus:VALL (match_operand:VALL 1 "s_register_operand" "")
|
||||
(match_operand:VALL 2 "s_register_operand" "")))]
|
||||
- "TARGET_NEON
|
||||
+ "(TARGET_NEON && ((<MODE>mode != V2SFmode && <MODE>mode != V4SFmode)
|
||||
+ || flag_unsafe_math_optimizations))
|
||||
|| (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
|
||||
{
|
||||
})
|
||||
@@ -66,7 +67,8 @@
|
||||
[(set (match_operand:VALL 0 "s_register_operand" "")
|
||||
(minus:VALL (match_operand:VALL 1 "s_register_operand" "")
|
||||
(match_operand:VALL 2 "s_register_operand" "")))]
|
||||
- "TARGET_NEON
|
||||
+ "(TARGET_NEON && ((<MODE>mode != V2SFmode && <MODE>mode != V4SFmode)
|
||||
+ || flag_unsafe_math_optimizations))
|
||||
|| (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
|
||||
{
|
||||
})
|
||||
@@ -75,7 +77,9 @@
|
||||
[(set (match_operand:VALLW 0 "s_register_operand" "")
|
||||
(mult:VALLW (match_operand:VALLW 1 "s_register_operand" "")
|
||||
(match_operand:VALLW 2 "s_register_operand" "")))]
|
||||
- "TARGET_NEON || (<MODE>mode == V4HImode && TARGET_REALLY_IWMMXT)"
|
||||
+ "(TARGET_NEON && ((<MODE>mode != V2SFmode && <MODE>mode != V4SFmode)
|
||||
+ || flag_unsafe_math_optimizations))
|
||||
+ || (<MODE>mode == V4HImode && TARGET_REALLY_IWMMXT)"
|
||||
{
|
||||
})
|
||||
|
||||
@@ -83,7 +87,8 @@
|
||||
[(set (match_operand:VALLW 0 "s_register_operand" "")
|
||||
(smin:VALLW (match_operand:VALLW 1 "s_register_operand" "")
|
||||
(match_operand:VALLW 2 "s_register_operand" "")))]
|
||||
- "TARGET_NEON
|
||||
+ "(TARGET_NEON && ((<MODE>mode != V2SFmode && <MODE>mode != V4SFmode)
|
||||
+ || flag_unsafe_math_optimizations))
|
||||
|| (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
|
||||
{
|
||||
})
|
||||
@@ -101,7 +106,8 @@
|
||||
[(set (match_operand:VALLW 0 "s_register_operand" "")
|
||||
(smax:VALLW (match_operand:VALLW 1 "s_register_operand" "")
|
||||
(match_operand:VALLW 2 "s_register_operand" "")))]
|
||||
- "TARGET_NEON
|
||||
+ "(TARGET_NEON && ((<MODE>mode != V2SFmode && <MODE>mode != V4SFmode)
|
||||
+ || flag_unsafe_math_optimizations))
|
||||
|| (TARGET_REALLY_IWMMXT && VALID_IWMMXT_REG_MODE (<MODE>mode))"
|
||||
{
|
||||
})
|
||||
|
||||
=== modified file 'gcc/doc/invoke.texi'
|
||||
--- old/gcc/doc/invoke.texi 2010-07-29 15:53:39 +0000
|
||||
+++ new/gcc/doc/invoke.texi 2010-07-29 17:03:20 +0000
|
||||
@@ -9874,6 +9874,14 @@
|
||||
If @option{-msoft-float} is specified this specifies the format of
|
||||
floating point values.
|
||||
|
||||
+If the selected floating-point hardware includes the NEON extension
|
||||
+(e.g. @option{-mfpu}=@samp{neon}), note that floating-point
|
||||
+operations will not be used by GCC's auto-vectorization pass unless
|
||||
+@option{-funsafe-math-optimizations} is also specified. This is
|
||||
+because NEON hardware does not fully implement the IEEE 754 standard for
|
||||
+floating-point arithmetic (in particular denormal values are treated as
|
||||
+zero), so the use of NEON instructions may lead to a loss of precision.
|
||||
+
|
||||
@item -mfp16-format=@var{name}
|
||||
@opindex mfp16-format
|
||||
Specify the format of the @code{__fp16} half-precision floating-point type.
|
||||
|
||||
=== modified file 'gcc/testsuite/gcc.dg/vect/vect-reduc-6.c'
|
||||
--- old/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c 2007-09-04 12:05:19 +0000
|
||||
+++ new/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c 2010-07-29 17:03:20 +0000
|
||||
@@ -49,5 +49,6 @@
|
||||
}
|
||||
|
||||
/* need -ffast-math to vectorizer these loops. */
|
||||
-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
|
||||
+/* ARM NEON passes -ffast-math to these tests, so expect this to fail. */
|
||||
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail arm_neon_ok } } } */
|
||||
/* { dg-final { cleanup-tree-dump "vect" } } */
|
||||
|
||||
=== modified file 'gcc/testsuite/gcc.dg/vect/vect.exp'
|
||||
--- old/gcc/testsuite/gcc.dg/vect/vect.exp 2010-07-29 15:38:15 +0000
|
||||
+++ new/gcc/testsuite/gcc.dg/vect/vect.exp 2010-07-29 17:03:20 +0000
|
||||
@@ -102,6 +102,10 @@
|
||||
set dg-do-what-default run
|
||||
} elseif [is-effective-target arm_neon_ok] {
|
||||
eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
|
||||
+ # NEON does not support denormals, so is not used for vectorization by
|
||||
+ # default to avoid loss of precision. We must pass -ffast-math to test
|
||||
+ # vectorization of float operations.
|
||||
+ lappend DEFAULT_VECTCFLAGS "-ffast-math"
|
||||
if [is-effective-target arm_neon_hw] {
|
||||
set dg-do-what-default run
|
||||
} else {
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2009-05-21 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.3:
|
||||
|
||||
2009-04-04 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Issue #5104
|
||||
PR tree-optimization/39604
|
||||
|
||||
gcc/testsuite
|
||||
* g++.dg/tree-ssa/sink-1.C: New.
|
||||
|
||||
gcc/
|
||||
* tree_ssa-sink.c (sink_code_in_bb): Do not sink statements out
|
||||
of a lexical block containing variable definitions.
|
||||
|
||||
2010-07-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from mainline (originally on Sourcery G++ 4.4):
|
||||
|
||||
2010-07-02 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
=== added file 'gcc/testsuite/g++.dg/tree-ssa/sink-1.C'
|
||||
--- old/gcc/testsuite/g++.dg/tree-ssa/sink-1.C 1970-01-01 00:00:00 +0000
|
||||
+++ new/gcc/testsuite/g++.dg/tree-ssa/sink-1.C 2010-07-30 12:14:18 +0000
|
||||
@@ -0,0 +1,50 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O1" } */
|
||||
+
|
||||
+class A {
|
||||
+ public:
|
||||
+ A() {}
|
||||
+ virtual ~A() {}
|
||||
+ void * dostuff();
|
||||
+
|
||||
+ virtual int dovirtual() = 0;
|
||||
+};
|
||||
+
|
||||
+
|
||||
+class B : public A {
|
||||
+ public:
|
||||
+ B() {}
|
||||
+ int dovirtual() { return 0;}
|
||||
+ virtual ~B() {};
|
||||
+};
|
||||
+
|
||||
+class C : public B {
|
||||
+ public:
|
||||
+ C() {}
|
||||
+ virtual ~C() {};
|
||||
+};
|
||||
+
|
||||
+void* A::dostuff()
|
||||
+{
|
||||
+ return (void*)dovirtual();
|
||||
+}
|
||||
+
|
||||
+/* tree-ssa-sink was sinking the inlined destructor for STUFF out of
|
||||
+ the first inner block and into the second one, where it was ending up
|
||||
+ after the inlined constructor for STUFF2. This is bad because
|
||||
+ cfgexpand aliases STUFF and STUFF2 to the same storage at -O1
|
||||
+ (i.e., without -fstrict-aliasing), with the result that STUFF2's
|
||||
+ vtable was getting trashed. */
|
||||
+
|
||||
+int main() {
|
||||
+ {
|
||||
+ B stuff;
|
||||
+ stuff.dostuff();
|
||||
+ }
|
||||
+ {
|
||||
+ C stuff2;
|
||||
+ stuff2.dostuff();
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
||||
=== modified file 'gcc/tree-ssa-sink.c'
|
||||
--- old/gcc/tree-ssa-sink.c 2009-11-28 16:21:00 +0000
|
||||
+++ new/gcc/tree-ssa-sink.c 2010-07-30 12:14:18 +0000
|
||||
@@ -470,6 +470,47 @@
|
||||
last = false;
|
||||
continue;
|
||||
}
|
||||
+
|
||||
+ /* We cannot move statements that contain references to block-scope
|
||||
+ variables out of that block, as this may lead to incorrect aliasing
|
||||
+ when we lay out the stack frame in cfgexpand.c.
|
||||
+ In lieu of more sophisticated analysis, be very conservative here
|
||||
+ and prohibit moving any statement that references memory out of a
|
||||
+ block with variables. */
|
||||
+ if (gimple_references_memory_p (stmt))
|
||||
+ {
|
||||
+ tree fromblock = gimple_block (stmt);
|
||||
+ while (fromblock
|
||||
+ && fromblock != current_function_decl
|
||||
+ && !BLOCK_VARS (fromblock))
|
||||
+ fromblock = BLOCK_SUPERCONTEXT (fromblock);
|
||||
+ if (fromblock && fromblock != current_function_decl)
|
||||
+ {
|
||||
+ gimple tostmt;
|
||||
+ tree toblock;
|
||||
+
|
||||
+ if (gsi_end_p (togsi))
|
||||
+ tostmt = gimple_seq_last_stmt (gsi_seq (togsi));
|
||||
+ else
|
||||
+ tostmt = gsi_stmt (togsi);
|
||||
+ if (tostmt)
|
||||
+ toblock = gimple_block (tostmt);
|
||||
+ else
|
||||
+ toblock = NULL;
|
||||
+ while (toblock
|
||||
+ && toblock != current_function_decl
|
||||
+ && toblock != fromblock)
|
||||
+ toblock = BLOCK_SUPERCONTEXT (toblock);
|
||||
+ if (!toblock || toblock != fromblock)
|
||||
+ {
|
||||
+ if (!gsi_end_p (gsi))
|
||||
+ gsi_prev (&gsi);
|
||||
+ last = false;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (dump_file, "Sinking ");
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
2010-07-10 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2009-05-28 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
Merged from Sourcery G++ 4.3:
|
||||
|
||||
libgcc/
|
||||
* config.host (arm*-*-linux*, arm*-*-uclinux*, arm*-*-eabi*)
|
||||
(arm*-*-symbianelf): Add arm/t-divmod-ef to tmake_file.
|
||||
* Makefile.in (LIB2_DIVMOD_EXCEPTION_FLAGS): Set to previous
|
||||
default if not set by a target-specific Makefile fragment.
|
||||
(lib2-divmod-o, lib2-divmod-s-o): Use above.
|
||||
* config/arm/t-divmod-ef: New.
|
||||
|
||||
2010-07-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
=== modified file 'libgcc/Makefile.in'
|
||||
--- old/libgcc/Makefile.in 2010-03-30 12:08:52 +0000
|
||||
+++ new/libgcc/Makefile.in 2010-07-30 12:21:02 +0000
|
||||
@@ -400,18 +400,24 @@
|
||||
endif
|
||||
endif
|
||||
|
||||
+ifeq ($(LIB2_DIVMOD_EXCEPTION_FLAGS),)
|
||||
+# Provide default flags for compiling divmod functions, if they haven't been
|
||||
+# set already by a target-specific Makefile fragment.
|
||||
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions
|
||||
+endif
|
||||
+
|
||||
# Build LIB2_DIVMOD_FUNCS.
|
||||
lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
|
||||
$(lib2-divmod-o): %$(objext): $(gcc_srcdir)/libgcc2.c
|
||||
$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
|
||||
- -fexceptions -fnon-call-exceptions $(vis_hide)
|
||||
+ $(LIB2_DIVMOD_EXCEPTION_FLAGS) $(vis_hide)
|
||||
libgcc-objects += $(lib2-divmod-o)
|
||||
|
||||
ifeq ($(enable_shared),yes)
|
||||
lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
|
||||
$(lib2-divmod-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
|
||||
$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
|
||||
- -fexceptions -fnon-call-exceptions
|
||||
+ $(LIB2_DIVMOD_EXCEPTION_FLAGS)
|
||||
libgcc-s-objects += $(lib2-divmod-s-o)
|
||||
endif
|
||||
|
||||
|
||||
=== modified file 'libgcc/config.host'
|
||||
--- old/libgcc/config.host 2010-04-02 02:02:18 +0000
|
||||
+++ new/libgcc/config.host 2010-07-30 12:21:02 +0000
|
||||
@@ -208,12 +208,15 @@
|
||||
arm*-*-netbsd*)
|
||||
;;
|
||||
arm*-*-linux*) # ARM GNU/Linux with ELF
|
||||
+ tmake_file="${tmake_file} arm/t-divmod-ef"
|
||||
;;
|
||||
arm*-*-uclinux*) # ARM ucLinux
|
||||
+ tmake_file="${tmake_file} arm/t-divmod-ef"
|
||||
;;
|
||||
arm*-*-ecos-elf)
|
||||
;;
|
||||
arm*-*-eabi* | arm*-*-symbianelf* )
|
||||
+ tmake_file="${tmake_file} arm/t-divmod-ef"
|
||||
;;
|
||||
arm*-*-rtems*)
|
||||
;;
|
||||
|
||||
=== added directory 'libgcc/config/arm'
|
||||
=== added file 'libgcc/config/arm/t-divmod-ef'
|
||||
--- old/libgcc/config/arm/t-divmod-ef 1970-01-01 00:00:00 +0000
|
||||
+++ new/libgcc/config/arm/t-divmod-ef 2010-07-30 12:21:02 +0000
|
||||
@@ -0,0 +1,4 @@
|
||||
+# On ARM, specifying -fnon-call-exceptions will needlessly pull in
|
||||
+# the unwinder in simple programs which use 64-bit division. Omitting
|
||||
+# the option is safe.
|
||||
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
2009-09-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
libgcc/
|
||||
* shared-object.mk (c_flags-$(base)$(objext)): New.
|
||||
($(base)$(objext)): Use above.
|
||||
($(base)_s$(objext)): Likewise.
|
||||
* static-object.mk (c_flags-$(base)$(objext)): New.
|
||||
($(base)$(objext)): Use above.
|
||||
|
||||
2010-07-10 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2009-05-28 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
Merged from Sourcery G++ 4.3:
|
||||
|
||||
=== modified file 'libgcc/shared-object.mk'
|
||||
--- old/libgcc/shared-object.mk 2008-07-03 18:22:00 +0000
|
||||
+++ new/libgcc/shared-object.mk 2010-07-30 13:11:02 +0000
|
||||
@@ -8,11 +8,13 @@
|
||||
|
||||
ifeq ($(suffix $o),.c)
|
||||
|
||||
+c_flags-$(base)$(objext) := $(c_flags)
|
||||
$(base)$(objext): $o
|
||||
- $(gcc_compile) $(c_flags) -c $< $(vis_hide)
|
||||
+ $(gcc_compile) $(c_flags-$@) -c $< $(vis_hide)
|
||||
|
||||
+c_flags-$(base)_s$(objext) := $(c_flags)
|
||||
$(base)_s$(objext): $o
|
||||
- $(gcc_s_compile) $(c_flags) -c $<
|
||||
+ $(gcc_s_compile) $(c_flags-$@) -c $<
|
||||
|
||||
else
|
||||
|
||||
|
||||
=== modified file 'libgcc/static-object.mk'
|
||||
--- old/libgcc/static-object.mk 2007-01-04 04:22:37 +0000
|
||||
+++ new/libgcc/static-object.mk 2010-07-30 13:11:02 +0000
|
||||
@@ -8,8 +8,9 @@
|
||||
|
||||
ifeq ($(suffix $o),.c)
|
||||
|
||||
+c_flags-$(base)$(objext) := $(c_flags)
|
||||
$(base)$(objext): $o
|
||||
- $(gcc_compile) $(c_flags) -c $< $(vis_hide)
|
||||
+ $(gcc_compile) $(c_flags-$@) -c $< $(vis_hide)
|
||||
|
||||
else
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,138 +0,0 @@
|
||||
2010-07-12 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2009-10-06 Paul Brook <paul@codesourcery.com>
|
||||
Issue #3869
|
||||
gcc/
|
||||
* target.h (gcc_target): Add warn_func_result.
|
||||
* target-def.h (TARGET_WARN_FUNC_RESULT): Define and use.
|
||||
* tree-cfg.h (execute_warn_function_return): Use
|
||||
targetm.warn_func_result.
|
||||
* config/arm/arm.c (TARGET_WARN_FUNC_RESULT): Define.
|
||||
(arm_warn_func_result): New function.
|
||||
|
||||
gcc/testuite/
|
||||
* gcc.target/arm/naked-3.c: New test.
|
||||
|
||||
2010-07-10 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
=== modified file 'gcc/config/arm/arm.c'
|
||||
--- old/gcc/config/arm/arm.c 2010-07-29 16:58:56 +0000
|
||||
+++ new/gcc/config/arm/arm.c 2010-07-30 13:58:02 +0000
|
||||
@@ -214,6 +214,7 @@
|
||||
static int arm_issue_rate (void);
|
||||
static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
|
||||
static bool arm_allocate_stack_slots_for_args (void);
|
||||
+static bool arm_warn_func_result (void);
|
||||
static const char *arm_invalid_parameter_type (const_tree t);
|
||||
static const char *arm_invalid_return_type (const_tree t);
|
||||
static tree arm_promoted_type (const_tree t);
|
||||
@@ -378,6 +379,9 @@
|
||||
#undef TARGET_TRAMPOLINE_ADJUST_ADDRESS
|
||||
#define TARGET_TRAMPOLINE_ADJUST_ADDRESS arm_trampoline_adjust_address
|
||||
|
||||
+#undef TARGET_WARN_FUNC_RESULT
|
||||
+#define TARGET_WARN_FUNC_RESULT arm_warn_func_result
|
||||
+
|
||||
#undef TARGET_DEFAULT_SHORT_ENUMS
|
||||
#define TARGET_DEFAULT_SHORT_ENUMS arm_default_short_enums
|
||||
|
||||
@@ -2008,6 +2012,14 @@
|
||||
return !IS_NAKED (arm_current_func_type ());
|
||||
}
|
||||
|
||||
+static bool
|
||||
+arm_warn_func_result (void)
|
||||
+{
|
||||
+ /* Naked functions are implemented entirely in assembly, including the
|
||||
+ return sequence, so suppress warnings about this. */
|
||||
+ return !IS_NAKED (arm_current_func_type ());
|
||||
+}
|
||||
+
|
||||
|
||||
/* Output assembler code for a block containing the constant parts
|
||||
of a trampoline, leaving space for the variable parts.
|
||||
|
||||
=== modified file 'gcc/target-def.h'
|
||||
--- old/gcc/target-def.h 2010-03-24 20:44:48 +0000
|
||||
+++ new/gcc/target-def.h 2010-07-30 13:58:02 +0000
|
||||
@@ -212,6 +212,10 @@
|
||||
#define TARGET_EXTRA_LIVE_ON_ENTRY hook_void_bitmap
|
||||
#endif
|
||||
|
||||
+#ifndef TARGET_WARN_FUNC_RESULT
|
||||
+#define TARGET_WARN_FUNC_RESULT hook_bool_void_true
|
||||
+#endif
|
||||
+
|
||||
#ifndef TARGET_ASM_FILE_START_APP_OFF
|
||||
#define TARGET_ASM_FILE_START_APP_OFF false
|
||||
#endif
|
||||
@@ -1020,6 +1024,7 @@
|
||||
TARGET_EMUTLS, \
|
||||
TARGET_OPTION_HOOKS, \
|
||||
TARGET_EXTRA_LIVE_ON_ENTRY, \
|
||||
+ TARGET_WARN_FUNC_RESULT, \
|
||||
TARGET_UNWIND_TABLES_DEFAULT, \
|
||||
TARGET_HAVE_NAMED_SECTIONS, \
|
||||
TARGET_HAVE_SWITCHABLE_BSS_SECTIONS, \
|
||||
|
||||
=== modified file 'gcc/target.h'
|
||||
--- old/gcc/target.h 2010-03-27 10:27:39 +0000
|
||||
+++ new/gcc/target.h 2010-07-30 13:58:02 +0000
|
||||
@@ -1171,6 +1171,10 @@
|
||||
bits in the bitmap passed in. */
|
||||
void (*live_on_entry) (bitmap);
|
||||
|
||||
+ /* Return false if warnings about missing return statements or suspect
|
||||
+ noreturn attributes should be suppressed for the current function. */
|
||||
+ bool (*warn_func_result) (void);
|
||||
+
|
||||
/* True if unwinding tables should be generated by default. */
|
||||
bool unwind_tables_default;
|
||||
|
||||
|
||||
=== added file 'gcc/testsuite/gcc.target/arm/naked-3.c'
|
||||
--- old/gcc/testsuite/gcc.target/arm/naked-3.c 1970-01-01 00:00:00 +0000
|
||||
+++ new/gcc/testsuite/gcc.target/arm/naked-3.c 2010-07-30 13:58:02 +0000
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -Wall" } */
|
||||
+/* Check that we do not get warnings about missing return statements
|
||||
+ or bogus looking noreturn functions. */
|
||||
+int __attribute__((naked))
|
||||
+foo(void)
|
||||
+{
|
||||
+ __asm__ volatile ("mov r0, #1\r\nbx lr\n");
|
||||
+}
|
||||
+
|
||||
+int __attribute__((naked,noreturn))
|
||||
+bar(void)
|
||||
+{
|
||||
+ __asm__ volatile ("frob r0\n");
|
||||
+}
|
||||
|
||||
=== modified file 'gcc/tree-cfg.c'
|
||||
--- old/gcc/tree-cfg.c 2010-03-16 12:31:38 +0000
|
||||
+++ new/gcc/tree-cfg.c 2010-07-30 13:58:02 +0000
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "value-prof.h"
|
||||
#include "pointer-set.h"
|
||||
#include "tree-inline.h"
|
||||
+#include "target.h"
|
||||
|
||||
/* This file contains functions for building the Control Flow Graph (CFG)
|
||||
for a function tree. */
|
||||
@@ -7092,6 +7093,9 @@
|
||||
edge e;
|
||||
edge_iterator ei;
|
||||
|
||||
+ if (!targetm.warn_func_result())
|
||||
+ return 0;
|
||||
+
|
||||
/* If we have a path to EXIT, then we do return. */
|
||||
if (TREE_THIS_VOLATILE (cfun->decl)
|
||||
&& EDGE_COUNT (EXIT_BLOCK_PTR->preds) > 0)
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
2010-07-15 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
Backport from mainline (originally from Sourcery G++ 4.4):
|
||||
|
||||
gcc/cp/
|
||||
2010-04-07 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
PR c++/42556
|
||||
* typeck2.c (split_nonconstant_init_1): Drop empty CONSTRUCTOR
|
||||
when all of its elements are non-constant and have been split out.
|
||||
|
||||
gcc/testsuite/
|
||||
2010-04-07 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
PR c++/42556
|
||||
* g++.dg/init/pr42556.C: New test.
|
||||
|
||||
2010-07-12 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
=== modified file 'gcc/cp/typeck2.c'
|
||||
--- old/gcc/cp/typeck2.c 2010-02-23 18:32:20 +0000
|
||||
+++ new/gcc/cp/typeck2.c 2010-07-30 14:05:57 +0000
|
||||
@@ -549,13 +549,15 @@
|
||||
expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
|
||||
|
||||
static void
|
||||
-split_nonconstant_init_1 (tree dest, tree init)
|
||||
+split_nonconstant_init_1 (tree dest, tree *initp)
|
||||
{
|
||||
unsigned HOST_WIDE_INT idx;
|
||||
+ tree init = *initp;
|
||||
tree field_index, value;
|
||||
tree type = TREE_TYPE (dest);
|
||||
tree inner_type = NULL;
|
||||
bool array_type_p = false;
|
||||
+ HOST_WIDE_INT num_type_elements, num_initialized_elements;
|
||||
|
||||
switch (TREE_CODE (type))
|
||||
{
|
||||
@@ -567,6 +569,7 @@
|
||||
case RECORD_TYPE:
|
||||
case UNION_TYPE:
|
||||
case QUAL_UNION_TYPE:
|
||||
+ num_initialized_elements = 0;
|
||||
FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
|
||||
field_index, value)
|
||||
{
|
||||
@@ -589,12 +592,13 @@
|
||||
sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
|
||||
NULL_TREE);
|
||||
|
||||
- split_nonconstant_init_1 (sub, value);
|
||||
+ split_nonconstant_init_1 (sub, &value);
|
||||
}
|
||||
else if (!initializer_constant_valid_p (value, inner_type))
|
||||
{
|
||||
tree code;
|
||||
tree sub;
|
||||
+ HOST_WIDE_INT inner_elements;
|
||||
|
||||
/* FIXME: Ordered removal is O(1) so the whole function is
|
||||
worst-case quadratic. This could be fixed using an aside
|
||||
@@ -617,9 +621,22 @@
|
||||
code = build2 (INIT_EXPR, inner_type, sub, value);
|
||||
code = build_stmt (input_location, EXPR_STMT, code);
|
||||
add_stmt (code);
|
||||
+
|
||||
+ inner_elements = count_type_elements (inner_type, true);
|
||||
+ if (inner_elements < 0)
|
||||
+ num_initialized_elements = -1;
|
||||
+ else if (num_initialized_elements >= 0)
|
||||
+ num_initialized_elements += inner_elements;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ num_type_elements = count_type_elements (type, true);
|
||||
+ /* If all elements of the initializer are non-constant and
|
||||
+ have been split out, we don't need the empty CONSTRUCTOR. */
|
||||
+ if (num_type_elements > 0
|
||||
+ && num_type_elements == num_initialized_elements)
|
||||
+ *initp = NULL;
|
||||
break;
|
||||
|
||||
case VECTOR_TYPE:
|
||||
@@ -655,7 +672,7 @@
|
||||
if (TREE_CODE (init) == CONSTRUCTOR)
|
||||
{
|
||||
code = push_stmt_list ();
|
||||
- split_nonconstant_init_1 (dest, init);
|
||||
+ split_nonconstant_init_1 (dest, &init);
|
||||
code = pop_stmt_list (code);
|
||||
DECL_INITIAL (dest) = init;
|
||||
TREE_READONLY (dest) = 0;
|
||||
|
||||
=== added file 'gcc/testsuite/g++.dg/init/pr42556.C'
|
||||
--- old/gcc/testsuite/g++.dg/init/pr42556.C 1970-01-01 00:00:00 +0000
|
||||
+++ new/gcc/testsuite/g++.dg/init/pr42556.C 2010-07-30 14:05:57 +0000
|
||||
@@ -0,0 +1,10 @@
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-fdump-tree-gimple" }
|
||||
+
|
||||
+void foo (int a, int b, int c, int d)
|
||||
+{
|
||||
+ int v[4] = {a, b, c, d};
|
||||
+}
|
||||
+
|
||||
+// { dg-final { scan-tree-dump-not "v = {}" "gimple" } }
|
||||
+// { dg-final { cleanup-tree-dump "gimple" } }
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
Backport from mainline (originally from Sourcery G++ 4.4):
|
||||
|
||||
gcc/
|
||||
2010-07-07 Jie Zhang <jie@codesourcery.com>
|
||||
* genautomata.c (output_automata_list_min_issue_delay_code):
|
||||
Correctly decompress min_issue_delay.
|
||||
|
||||
2010-07-15 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
Issue #8980
|
||||
|
||||
Backport from mainline (originally from Sourcery G++ 4.4):
|
||||
|
||||
=== modified file 'gcc/genautomata.c'
|
||||
--- old/gcc/genautomata.c 2009-11-25 10:55:54 +0000
|
||||
+++ new/gcc/genautomata.c 2010-07-30 14:21:58 +0000
|
||||
@@ -7865,12 +7865,15 @@
|
||||
{
|
||||
fprintf (output_file, ") / %d];\n",
|
||||
automaton->min_issue_delay_table_compression_factor);
|
||||
- fprintf (output_file, " %s = (%s >> (8 - (",
|
||||
+ fprintf (output_file, " %s = (%s >> (8 - ((",
|
||||
TEMPORARY_VARIABLE_NAME, TEMPORARY_VARIABLE_NAME);
|
||||
output_translate_vect_name (output_file, automaton);
|
||||
+ fprintf (output_file, " [%s] + ", INTERNAL_INSN_CODE_NAME);
|
||||
+ fprintf (output_file, "%s->", CHIP_PARAMETER_NAME);
|
||||
+ output_chip_member_name (output_file, automaton);
|
||||
+ fprintf (output_file, " * %d)", automaton->insn_equiv_classes_num);
|
||||
fprintf
|
||||
- (output_file, " [%s] %% %d + 1) * %d)) & %d;\n",
|
||||
- INTERNAL_INSN_CODE_NAME,
|
||||
+ (output_file, " %% %d + 1) * %d)) & %d;\n",
|
||||
automaton->min_issue_delay_table_compression_factor,
|
||||
8 / automaton->min_issue_delay_table_compression_factor,
|
||||
(1 << (8 / automaton->min_issue_delay_table_compression_factor))
|
||||
|
||||
@@ -1,714 +0,0 @@
|
||||
2010-07-15 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
2010-06-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
* tree-ssa-loop-ivopts.c (adjust_setup_cost): New function.
|
||||
(get_computation_cost_at): Use it.
|
||||
(determine_use_iv_cost_condition): Likewise.
|
||||
(determine_iv_cost): Likewise.
|
||||
|
||||
2010-07-05 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR middle-end/42505
|
||||
|
||||
gcc/
|
||||
* tree-ssa-loop-ivopts.c (determine_set_costs): Delete obsolete
|
||||
comments about cost model.
|
||||
(try_add_cand_for): Add second strategy for choosing initial set
|
||||
based on original IVs, controlled by ORIGINALP argument.
|
||||
(get_initial_solution): Add ORIGINALP argument.
|
||||
(find_optimal_iv_set_1): New function, split from find_optimal_iv_set.
|
||||
(find_optimal_iv_set): Try two different strategies for choosing
|
||||
the IV set, and return the one with lower cost.
|
||||
|
||||
gcc/testsuite/
|
||||
* gcc.target/arm/pr42505.c: New test case.
|
||||
|
||||
2010-07-10 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR middle-end/42505
|
||||
|
||||
gcc/
|
||||
* tree-inline.c (estimate_num_insns): Refactor builtin complexity
|
||||
lookup code into....
|
||||
* builtins.c (is_simple_builtin, is_inexpensive_builtin): ...these
|
||||
new functions.
|
||||
* tree.h (is_simple_builtin, is_inexpensive_builtin): Declare.
|
||||
* cfgloopanal.c (target_clobbered_regs): Define.
|
||||
(init_set_costs): Initialize target_clobbered_regs.
|
||||
(estimate_reg_pressure_cost): Add call_p argument. When true,
|
||||
adjust the number of available registers to exclude the
|
||||
call-clobbered registers.
|
||||
* cfgloop.h (target_clobbered_regs): Declare.
|
||||
(estimate_reg_pressure_cost): Adjust declaration.
|
||||
* tree-ssa-loop-ivopts.c (struct ivopts_data): Add body_includes_call.
|
||||
(ivopts_global_cost_for_size): Pass it to estimate_reg_pressure_cost.
|
||||
(determine_set_costs): Dump target_clobbered_regs.
|
||||
(loop_body_includes_call): New function.
|
||||
(tree_ssa_iv_optimize_loop): Use it to initialize new field.
|
||||
* loop-invariant.c (gain_for_invariant): Adjust arguments to pass
|
||||
call_p flag through.
|
||||
(best_gain_for_invariant): Likewise.
|
||||
(find_invariants_to_move): Likewise.
|
||||
(move_single_loop_invariants): Likewise, using already-computed
|
||||
has_call field.
|
||||
|
||||
2010-07-15 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
Issue #8497, #8893
|
||||
|
||||
=== modified file 'gcc/builtins.c'
|
||||
--- old/gcc/builtins.c 2010-04-13 12:47:11 +0000
|
||||
+++ new/gcc/builtins.c 2010-08-02 13:51:23 +0000
|
||||
@@ -13624,3 +13624,123 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
+
|
||||
+/* Return true if DECL is a builtin that expands to a constant or similarly
|
||||
+ simple code. */
|
||||
+bool
|
||||
+is_simple_builtin (tree decl)
|
||||
+{
|
||||
+ if (decl && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
|
||||
+ switch (DECL_FUNCTION_CODE (decl))
|
||||
+ {
|
||||
+ /* Builtins that expand to constants. */
|
||||
+ case BUILT_IN_CONSTANT_P:
|
||||
+ case BUILT_IN_EXPECT:
|
||||
+ case BUILT_IN_OBJECT_SIZE:
|
||||
+ case BUILT_IN_UNREACHABLE:
|
||||
+ /* Simple register moves or loads from stack. */
|
||||
+ case BUILT_IN_RETURN_ADDRESS:
|
||||
+ case BUILT_IN_EXTRACT_RETURN_ADDR:
|
||||
+ case BUILT_IN_FROB_RETURN_ADDR:
|
||||
+ case BUILT_IN_RETURN:
|
||||
+ case BUILT_IN_AGGREGATE_INCOMING_ADDRESS:
|
||||
+ case BUILT_IN_FRAME_ADDRESS:
|
||||
+ case BUILT_IN_VA_END:
|
||||
+ case BUILT_IN_STACK_SAVE:
|
||||
+ case BUILT_IN_STACK_RESTORE:
|
||||
+ /* Exception state returns or moves registers around. */
|
||||
+ case BUILT_IN_EH_FILTER:
|
||||
+ case BUILT_IN_EH_POINTER:
|
||||
+ case BUILT_IN_EH_COPY_VALUES:
|
||||
+ return true;
|
||||
+
|
||||
+ default:
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+/* Return true if DECL is a builtin that is not expensive, i.e., they are
|
||||
+ most probably expanded inline into reasonably simple code. This is a
|
||||
+ superset of is_simple_builtin. */
|
||||
+bool
|
||||
+is_inexpensive_builtin (tree decl)
|
||||
+{
|
||||
+ if (!decl)
|
||||
+ return false;
|
||||
+ else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_MD)
|
||||
+ return true;
|
||||
+ else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
|
||||
+ switch (DECL_FUNCTION_CODE (decl))
|
||||
+ {
|
||||
+ case BUILT_IN_ABS:
|
||||
+ case BUILT_IN_ALLOCA:
|
||||
+ case BUILT_IN_BSWAP32:
|
||||
+ case BUILT_IN_BSWAP64:
|
||||
+ case BUILT_IN_CLZ:
|
||||
+ case BUILT_IN_CLZIMAX:
|
||||
+ case BUILT_IN_CLZL:
|
||||
+ case BUILT_IN_CLZLL:
|
||||
+ case BUILT_IN_CTZ:
|
||||
+ case BUILT_IN_CTZIMAX:
|
||||
+ case BUILT_IN_CTZL:
|
||||
+ case BUILT_IN_CTZLL:
|
||||
+ case BUILT_IN_FFS:
|
||||
+ case BUILT_IN_FFSIMAX:
|
||||
+ case BUILT_IN_FFSL:
|
||||
+ case BUILT_IN_FFSLL:
|
||||
+ case BUILT_IN_IMAXABS:
|
||||
+ case BUILT_IN_FINITE:
|
||||
+ case BUILT_IN_FINITEF:
|
||||
+ case BUILT_IN_FINITEL:
|
||||
+ case BUILT_IN_FINITED32:
|
||||
+ case BUILT_IN_FINITED64:
|
||||
+ case BUILT_IN_FINITED128:
|
||||
+ case BUILT_IN_FPCLASSIFY:
|
||||
+ case BUILT_IN_ISFINITE:
|
||||
+ case BUILT_IN_ISINF_SIGN:
|
||||
+ case BUILT_IN_ISINF:
|
||||
+ case BUILT_IN_ISINFF:
|
||||
+ case BUILT_IN_ISINFL:
|
||||
+ case BUILT_IN_ISINFD32:
|
||||
+ case BUILT_IN_ISINFD64:
|
||||
+ case BUILT_IN_ISINFD128:
|
||||
+ case BUILT_IN_ISNAN:
|
||||
+ case BUILT_IN_ISNANF:
|
||||
+ case BUILT_IN_ISNANL:
|
||||
+ case BUILT_IN_ISNAND32:
|
||||
+ case BUILT_IN_ISNAND64:
|
||||
+ case BUILT_IN_ISNAND128:
|
||||
+ case BUILT_IN_ISNORMAL:
|
||||
+ case BUILT_IN_ISGREATER:
|
||||
+ case BUILT_IN_ISGREATEREQUAL:
|
||||
+ case BUILT_IN_ISLESS:
|
||||
+ case BUILT_IN_ISLESSEQUAL:
|
||||
+ case BUILT_IN_ISLESSGREATER:
|
||||
+ case BUILT_IN_ISUNORDERED:
|
||||
+ case BUILT_IN_VA_ARG_PACK:
|
||||
+ case BUILT_IN_VA_ARG_PACK_LEN:
|
||||
+ case BUILT_IN_VA_COPY:
|
||||
+ case BUILT_IN_TRAP:
|
||||
+ case BUILT_IN_SAVEREGS:
|
||||
+ case BUILT_IN_POPCOUNTL:
|
||||
+ case BUILT_IN_POPCOUNTLL:
|
||||
+ case BUILT_IN_POPCOUNTIMAX:
|
||||
+ case BUILT_IN_POPCOUNT:
|
||||
+ case BUILT_IN_PARITYL:
|
||||
+ case BUILT_IN_PARITYLL:
|
||||
+ case BUILT_IN_PARITYIMAX:
|
||||
+ case BUILT_IN_PARITY:
|
||||
+ case BUILT_IN_LABS:
|
||||
+ case BUILT_IN_LLABS:
|
||||
+ case BUILT_IN_PREFETCH:
|
||||
+ return true;
|
||||
+
|
||||
+ default:
|
||||
+ return is_simple_builtin (decl);
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
|
||||
=== modified file 'gcc/cfgloop.h'
|
||||
--- old/gcc/cfgloop.h 2009-11-25 10:55:54 +0000
|
||||
+++ new/gcc/cfgloop.h 2010-08-02 13:51:23 +0000
|
||||
@@ -622,13 +622,14 @@
|
||||
/* The properties of the target. */
|
||||
|
||||
extern unsigned target_avail_regs;
|
||||
+extern unsigned target_clobbered_regs;
|
||||
extern unsigned target_res_regs;
|
||||
extern unsigned target_reg_cost [2];
|
||||
extern unsigned target_spill_cost [2];
|
||||
|
||||
/* Register pressure estimation for induction variable optimizations & loop
|
||||
invariant motion. */
|
||||
-extern unsigned estimate_reg_pressure_cost (unsigned, unsigned, bool);
|
||||
+extern unsigned estimate_reg_pressure_cost (unsigned, unsigned, bool, bool);
|
||||
extern void init_set_costs (void);
|
||||
|
||||
/* Loop optimizer initialization. */
|
||||
|
||||
=== modified file 'gcc/cfgloopanal.c'
|
||||
--- old/gcc/cfgloopanal.c 2009-09-30 08:57:56 +0000
|
||||
+++ new/gcc/cfgloopanal.c 2010-08-02 13:51:23 +0000
|
||||
@@ -320,6 +320,8 @@
|
||||
/* The properties of the target. */
|
||||
|
||||
unsigned target_avail_regs; /* Number of available registers. */
|
||||
+unsigned target_clobbered_regs; /* Number of available registers that are
|
||||
+ call-clobbered. */
|
||||
unsigned target_res_regs; /* Number of registers reserved for temporary
|
||||
expressions. */
|
||||
unsigned target_reg_cost[2]; /* The cost for register when there still
|
||||
@@ -342,10 +344,15 @@
|
||||
unsigned i;
|
||||
|
||||
target_avail_regs = 0;
|
||||
+ target_clobbered_regs = 0;
|
||||
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
if (TEST_HARD_REG_BIT (reg_class_contents[GENERAL_REGS], i)
|
||||
&& !fixed_regs[i])
|
||||
- target_avail_regs++;
|
||||
+ {
|
||||
+ target_avail_regs++;
|
||||
+ if (call_used_regs[i])
|
||||
+ target_clobbered_regs++;
|
||||
+ }
|
||||
|
||||
target_res_regs = 3;
|
||||
|
||||
@@ -379,20 +386,29 @@
|
||||
|
||||
/* Estimates cost of increased register pressure caused by making N_NEW new
|
||||
registers live around the loop. N_OLD is the number of registers live
|
||||
- around the loop. */
|
||||
+ around the loop. If CALL_P is true, also take into account that
|
||||
+ call-used registers may be clobbered in the loop body, reducing the
|
||||
+ number of available registers before we spill. */
|
||||
|
||||
unsigned
|
||||
-estimate_reg_pressure_cost (unsigned n_new, unsigned n_old, bool speed)
|
||||
+estimate_reg_pressure_cost (unsigned n_new, unsigned n_old, bool speed,
|
||||
+ bool call_p)
|
||||
{
|
||||
unsigned cost;
|
||||
unsigned regs_needed = n_new + n_old;
|
||||
+ unsigned available_regs = target_avail_regs;
|
||||
+
|
||||
+ /* If there is a call in the loop body, the call-clobbered registers
|
||||
+ are not available for loop invariants. */
|
||||
+ if (call_p)
|
||||
+ available_regs = available_regs - target_clobbered_regs;
|
||||
|
||||
/* If we have enough registers, we should use them and not restrict
|
||||
the transformations unnecessarily. */
|
||||
- if (regs_needed + target_res_regs <= target_avail_regs)
|
||||
+ if (regs_needed + target_res_regs <= available_regs)
|
||||
return 0;
|
||||
|
||||
- if (regs_needed <= target_avail_regs)
|
||||
+ if (regs_needed <= available_regs)
|
||||
/* If we are close to running out of registers, try to preserve
|
||||
them. */
|
||||
cost = target_reg_cost [speed] * n_new;
|
||||
|
||||
=== modified file 'gcc/loop-invariant.c'
|
||||
--- old/gcc/loop-invariant.c 2010-04-02 18:54:46 +0000
|
||||
+++ new/gcc/loop-invariant.c 2010-08-02 13:51:23 +0000
|
||||
@@ -1173,11 +1173,13 @@
|
||||
/* Calculates gain for eliminating invariant INV. REGS_USED is the number
|
||||
of registers used in the loop, NEW_REGS is the number of new variables
|
||||
already added due to the invariant motion. The number of registers needed
|
||||
- for it is stored in *REGS_NEEDED. */
|
||||
+ for it is stored in *REGS_NEEDED. SPEED and CALL_P are flags passed
|
||||
+ through to estimate_reg_pressure_cost. */
|
||||
|
||||
static int
|
||||
gain_for_invariant (struct invariant *inv, unsigned *regs_needed,
|
||||
- unsigned *new_regs, unsigned regs_used, bool speed)
|
||||
+ unsigned *new_regs, unsigned regs_used,
|
||||
+ bool speed, bool call_p)
|
||||
{
|
||||
int comp_cost, size_cost;
|
||||
|
||||
@@ -1188,9 +1190,9 @@
|
||||
if (! flag_ira_loop_pressure)
|
||||
{
|
||||
size_cost = (estimate_reg_pressure_cost (new_regs[0] + regs_needed[0],
|
||||
- regs_used, speed)
|
||||
+ regs_used, speed, call_p)
|
||||
- estimate_reg_pressure_cost (new_regs[0],
|
||||
- regs_used, speed));
|
||||
+ regs_used, speed, call_p));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1245,7 +1247,8 @@
|
||||
|
||||
static int
|
||||
best_gain_for_invariant (struct invariant **best, unsigned *regs_needed,
|
||||
- unsigned *new_regs, unsigned regs_used, bool speed)
|
||||
+ unsigned *new_regs, unsigned regs_used,
|
||||
+ bool speed, bool call_p)
|
||||
{
|
||||
struct invariant *inv;
|
||||
int i, gain = 0, again;
|
||||
@@ -1261,7 +1264,7 @@
|
||||
continue;
|
||||
|
||||
again = gain_for_invariant (inv, aregs_needed, new_regs, regs_used,
|
||||
- speed);
|
||||
+ speed, call_p);
|
||||
if (again > gain)
|
||||
{
|
||||
gain = again;
|
||||
@@ -1314,7 +1317,7 @@
|
||||
/* Determines which invariants to move. */
|
||||
|
||||
static void
|
||||
-find_invariants_to_move (bool speed)
|
||||
+find_invariants_to_move (bool speed, bool call_p)
|
||||
{
|
||||
int gain;
|
||||
unsigned i, regs_used, regs_needed[N_REG_CLASSES], new_regs[N_REG_CLASSES];
|
||||
@@ -1353,7 +1356,8 @@
|
||||
new_regs[ira_reg_class_cover[i]] = 0;
|
||||
}
|
||||
while ((gain = best_gain_for_invariant (&inv, regs_needed,
|
||||
- new_regs, regs_used, speed)) > 0)
|
||||
+ new_regs, regs_used,
|
||||
+ speed, call_p)) > 0)
|
||||
{
|
||||
set_move_mark (inv->invno, gain);
|
||||
if (! flag_ira_loop_pressure)
|
||||
@@ -1554,7 +1558,8 @@
|
||||
init_inv_motion_data ();
|
||||
|
||||
find_invariants (loop);
|
||||
- find_invariants_to_move (optimize_loop_for_speed_p (loop));
|
||||
+ find_invariants_to_move (optimize_loop_for_speed_p (loop),
|
||||
+ LOOP_DATA (loop)->has_call);
|
||||
move_invariants (loop);
|
||||
|
||||
free_inv_motion_data ();
|
||||
|
||||
=== added file 'gcc/testsuite/gcc.target/arm/pr42505.c'
|
||||
--- old/gcc/testsuite/gcc.target/arm/pr42505.c 1970-01-01 00:00:00 +0000
|
||||
+++ new/gcc/testsuite/gcc.target/arm/pr42505.c 2010-08-02 13:51:23 +0000
|
||||
@@ -0,0 +1,23 @@
|
||||
+/* { dg-options "-mthumb -Os -march=armv5te" } */
|
||||
+/* { dg-require-effective-target arm_thumb1_ok } */
|
||||
+/* { dg-final { scan-assembler-not "str\[\\t \]*r.,\[\\t \]*.sp," } } */
|
||||
+
|
||||
+struct A {
|
||||
+ int f1;
|
||||
+ int f2;
|
||||
+};
|
||||
+
|
||||
+int func(int c);
|
||||
+
|
||||
+/* This function should not need to spill anything to the stack. */
|
||||
+int test(struct A* src, struct A* dst, int count)
|
||||
+{
|
||||
+ while (count--) {
|
||||
+ if (!func(src->f2)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ *dst++ = *src++;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
|
||||
=== modified file 'gcc/tree-inline.c'
|
||||
--- old/gcc/tree-inline.c 2010-03-18 20:07:13 +0000
|
||||
+++ new/gcc/tree-inline.c 2010-08-02 13:51:23 +0000
|
||||
@@ -3246,34 +3246,13 @@
|
||||
if (POINTER_TYPE_P (funtype))
|
||||
funtype = TREE_TYPE (funtype);
|
||||
|
||||
- if (decl && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_MD)
|
||||
+ if (is_simple_builtin (decl))
|
||||
+ return 0;
|
||||
+ else if (is_inexpensive_builtin (decl))
|
||||
cost = weights->target_builtin_call_cost;
|
||||
else
|
||||
cost = weights->call_cost;
|
||||
|
||||
- if (decl && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
|
||||
- switch (DECL_FUNCTION_CODE (decl))
|
||||
- {
|
||||
- case BUILT_IN_CONSTANT_P:
|
||||
- return 0;
|
||||
- case BUILT_IN_EXPECT:
|
||||
- return 0;
|
||||
-
|
||||
- /* Prefetch instruction is not expensive. */
|
||||
- case BUILT_IN_PREFETCH:
|
||||
- cost = weights->target_builtin_call_cost;
|
||||
- break;
|
||||
-
|
||||
- /* Exception state returns or moves registers around. */
|
||||
- case BUILT_IN_EH_FILTER:
|
||||
- case BUILT_IN_EH_POINTER:
|
||||
- case BUILT_IN_EH_COPY_VALUES:
|
||||
- return 0;
|
||||
-
|
||||
- default:
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
if (decl)
|
||||
funtype = TREE_TYPE (decl);
|
||||
|
||||
|
||||
=== modified file 'gcc/tree-ssa-loop-ivopts.c'
|
||||
--- old/gcc/tree-ssa-loop-ivopts.c 2010-04-01 15:18:07 +0000
|
||||
+++ new/gcc/tree-ssa-loop-ivopts.c 2010-08-02 13:51:23 +0000
|
||||
@@ -257,6 +257,9 @@
|
||||
|
||||
/* Are we optimizing for speed? */
|
||||
bool speed;
|
||||
+
|
||||
+ /* Whether the loop body includes any function calls. */
|
||||
+ bool body_includes_call;
|
||||
};
|
||||
|
||||
/* An assignment of iv candidates to uses. */
|
||||
@@ -2926,6 +2929,20 @@
|
||||
return get_computation_at (loop, use, cand, use->stmt);
|
||||
}
|
||||
|
||||
+/* Adjust the cost COST for being in loop setup rather than loop body.
|
||||
+ If we're optimizing for space, the loop setup overhead is constant;
|
||||
+ if we're optimizing for speed, amortize it over the per-iteration cost. */
|
||||
+static unsigned
|
||||
+adjust_setup_cost (struct ivopts_data *data, unsigned cost)
|
||||
+{
|
||||
+ if (cost == INFTY)
|
||||
+ return cost;
|
||||
+ else if (optimize_loop_for_speed_p (data->current_loop))
|
||||
+ return cost / AVG_LOOP_NITER (data->current_loop);
|
||||
+ else
|
||||
+ return cost;
|
||||
+}
|
||||
+
|
||||
/* Returns cost of addition in MODE. */
|
||||
|
||||
static unsigned
|
||||
@@ -3838,8 +3855,8 @@
|
||||
/* Symbol + offset should be compile-time computable so consider that they
|
||||
are added once to the variable, if present. */
|
||||
if (var_present && (symbol_present || offset))
|
||||
- cost.cost += add_cost (TYPE_MODE (ctype), speed)
|
||||
- / AVG_LOOP_NITER (data->current_loop);
|
||||
+ cost.cost += adjust_setup_cost (data,
|
||||
+ add_cost (TYPE_MODE (ctype), speed));
|
||||
|
||||
/* Having offset does not affect runtime cost in case it is added to
|
||||
symbol, but it increases complexity. */
|
||||
@@ -4104,7 +4121,7 @@
|
||||
elim_cost = force_var_cost (data, bound, &depends_on_elim);
|
||||
/* The bound is a loop invariant, so it will be only computed
|
||||
once. */
|
||||
- elim_cost.cost /= AVG_LOOP_NITER (data->current_loop);
|
||||
+ elim_cost.cost = adjust_setup_cost (data, elim_cost.cost);
|
||||
}
|
||||
else
|
||||
elim_cost = infinite_cost;
|
||||
@@ -4351,7 +4368,7 @@
|
||||
cost_base = force_var_cost (data, base, NULL);
|
||||
cost_step = add_cost (TYPE_MODE (TREE_TYPE (base)), data->speed);
|
||||
|
||||
- cost = cost_step + cost_base.cost / AVG_LOOP_NITER (current_loop);
|
||||
+ cost = cost_step + adjust_setup_cost (data, cost_base.cost);
|
||||
|
||||
/* Prefer the original ivs unless we may gain something by replacing it.
|
||||
The reason is to make debugging simpler; so this is not relevant for
|
||||
@@ -4404,7 +4421,8 @@
|
||||
{
|
||||
/* We add size to the cost, so that we prefer eliminating ivs
|
||||
if possible. */
|
||||
- return size + estimate_reg_pressure_cost (size, data->regs_used, data->speed);
|
||||
+ return size + estimate_reg_pressure_cost (size, data->regs_used, data->speed,
|
||||
+ data->body_includes_call);
|
||||
}
|
||||
|
||||
/* For each size of the induction variable set determine the penalty. */
|
||||
@@ -4419,30 +4437,11 @@
|
||||
struct loop *loop = data->current_loop;
|
||||
bitmap_iterator bi;
|
||||
|
||||
- /* We use the following model (definitely improvable, especially the
|
||||
- cost function -- TODO):
|
||||
-
|
||||
- We estimate the number of registers available (using MD data), name it A.
|
||||
-
|
||||
- We estimate the number of registers used by the loop, name it U. This
|
||||
- number is obtained as the number of loop phi nodes (not counting virtual
|
||||
- registers and bivs) + the number of variables from outside of the loop.
|
||||
-
|
||||
- We set a reserve R (free regs that are used for temporary computations,
|
||||
- etc.). For now the reserve is a constant 3.
|
||||
-
|
||||
- Let I be the number of induction variables.
|
||||
-
|
||||
- -- if U + I + R <= A, the cost is I * SMALL_COST (just not to encourage
|
||||
- make a lot of ivs without a reason).
|
||||
- -- if A - R < U + I <= A, the cost is I * PRES_COST
|
||||
- -- if U + I > A, the cost is I * PRES_COST and
|
||||
- number of uses * SPILL_COST * (U + I - A) / (U + I) is added. */
|
||||
-
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
fprintf (dump_file, "Global costs:\n");
|
||||
fprintf (dump_file, " target_avail_regs %d\n", target_avail_regs);
|
||||
+ fprintf (dump_file, " target_clobbered_regs %d\n", target_clobbered_regs);
|
||||
fprintf (dump_file, " target_reg_cost %d\n", target_reg_cost[data->speed]);
|
||||
fprintf (dump_file, " target_spill_cost %d\n", target_spill_cost[data->speed]);
|
||||
}
|
||||
@@ -5062,11 +5061,13 @@
|
||||
}
|
||||
|
||||
/* Tries to extend the sets IVS in the best possible way in order
|
||||
- to express the USE. */
|
||||
+ to express the USE. If ORIGINALP is true, prefer candidates from
|
||||
+ the original set of IVs, otherwise favor important candidates not
|
||||
+ based on any memory object. */
|
||||
|
||||
static bool
|
||||
try_add_cand_for (struct ivopts_data *data, struct iv_ca *ivs,
|
||||
- struct iv_use *use)
|
||||
+ struct iv_use *use, bool originalp)
|
||||
{
|
||||
comp_cost best_cost, act_cost;
|
||||
unsigned i;
|
||||
@@ -5085,7 +5086,8 @@
|
||||
iv_ca_set_no_cp (data, ivs, use);
|
||||
}
|
||||
|
||||
- /* First try important candidates not based on any memory object. Only if
|
||||
+ /* If ORIGINALP is true, try to find the original IV for the use. Otherwise
|
||||
+ first try important candidates not based on any memory object. Only if
|
||||
this fails, try the specific ones. Rationale -- in loops with many
|
||||
variables the best choice often is to use just one generic biv. If we
|
||||
added here many ivs specific to the uses, the optimization algorithm later
|
||||
@@ -5097,7 +5099,10 @@
|
||||
{
|
||||
cand = iv_cand (data, i);
|
||||
|
||||
- if (cand->iv->base_object != NULL_TREE)
|
||||
+ if (originalp && cand->pos !=IP_ORIGINAL)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!originalp && cand->iv->base_object != NULL_TREE)
|
||||
continue;
|
||||
|
||||
if (iv_ca_cand_used_p (ivs, cand))
|
||||
@@ -5133,8 +5138,13 @@
|
||||
continue;
|
||||
|
||||
/* Already tried this. */
|
||||
- if (cand->important && cand->iv->base_object == NULL_TREE)
|
||||
- continue;
|
||||
+ if (cand->important)
|
||||
+ {
|
||||
+ if (originalp && cand->pos == IP_ORIGINAL)
|
||||
+ continue;
|
||||
+ if (!originalp && cand->iv->base_object == NULL_TREE)
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
if (iv_ca_cand_used_p (ivs, cand))
|
||||
continue;
|
||||
@@ -5168,13 +5178,13 @@
|
||||
/* Finds an initial assignment of candidates to uses. */
|
||||
|
||||
static struct iv_ca *
|
||||
-get_initial_solution (struct ivopts_data *data)
|
||||
+get_initial_solution (struct ivopts_data *data, bool originalp)
|
||||
{
|
||||
struct iv_ca *ivs = iv_ca_new (data);
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < n_iv_uses (data); i++)
|
||||
- if (!try_add_cand_for (data, ivs, iv_use (data, i)))
|
||||
+ if (!try_add_cand_for (data, ivs, iv_use (data, i), originalp))
|
||||
{
|
||||
iv_ca_free (&ivs);
|
||||
return NULL;
|
||||
@@ -5246,14 +5256,12 @@
|
||||
solution and remove the unused ivs while this improves the cost. */
|
||||
|
||||
static struct iv_ca *
|
||||
-find_optimal_iv_set (struct ivopts_data *data)
|
||||
+find_optimal_iv_set_1 (struct ivopts_data *data, bool originalp)
|
||||
{
|
||||
- unsigned i;
|
||||
struct iv_ca *set;
|
||||
- struct iv_use *use;
|
||||
|
||||
/* Get the initial solution. */
|
||||
- set = get_initial_solution (data);
|
||||
+ set = get_initial_solution (data, originalp);
|
||||
if (!set)
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
@@ -5276,11 +5284,46 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ return set;
|
||||
+}
|
||||
+
|
||||
+static struct iv_ca *
|
||||
+find_optimal_iv_set (struct ivopts_data *data)
|
||||
+{
|
||||
+ unsigned i;
|
||||
+ struct iv_ca *set, *origset;
|
||||
+ struct iv_use *use;
|
||||
+ comp_cost cost, origcost;
|
||||
+
|
||||
+ /* Determine the cost based on a strategy that starts with original IVs,
|
||||
+ and try again using a strategy that prefers candidates not based
|
||||
+ on any IVs. */
|
||||
+ origset = find_optimal_iv_set_1 (data, true);
|
||||
+ set = find_optimal_iv_set_1 (data, false);
|
||||
+
|
||||
+ if (!origset && !set)
|
||||
+ return NULL;
|
||||
+
|
||||
+ origcost = origset ? iv_ca_cost (origset) : infinite_cost;
|
||||
+ cost = set ? iv_ca_cost (set) : infinite_cost;
|
||||
+
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
- comp_cost cost = iv_ca_cost (set);
|
||||
- fprintf (dump_file, "Final cost %d (complexity %d)\n\n", cost.cost, cost.complexity);
|
||||
- }
|
||||
+ fprintf (dump_file, "Original cost %d (complexity %d)\n\n",
|
||||
+ origcost.cost, origcost.complexity);
|
||||
+ fprintf (dump_file, "Final cost %d (complexity %d)\n\n",
|
||||
+ cost.cost, cost.complexity);
|
||||
+ }
|
||||
+
|
||||
+ /* Choose the one with the best cost. */
|
||||
+ if (compare_costs (origcost, cost) <= 0)
|
||||
+ {
|
||||
+ if (set)
|
||||
+ iv_ca_free (&set);
|
||||
+ set = origset;
|
||||
+ }
|
||||
+ else if (origset)
|
||||
+ iv_ca_free (&origset);
|
||||
|
||||
for (i = 0; i < n_iv_uses (data); i++)
|
||||
{
|
||||
@@ -5768,6 +5811,25 @@
|
||||
VEC_free (iv_cand_p, heap, data->iv_candidates);
|
||||
}
|
||||
|
||||
+/* Returns true if the loop body BODY includes any function calls. */
|
||||
+
|
||||
+static bool
|
||||
+loop_body_includes_call (basic_block *body, unsigned num_nodes)
|
||||
+{
|
||||
+ gimple_stmt_iterator gsi;
|
||||
+ unsigned i;
|
||||
+
|
||||
+ for (i = 0; i < num_nodes; i++)
|
||||
+ for (gsi = gsi_start_bb (body[i]); !gsi_end_p (gsi); gsi_next (&gsi))
|
||||
+ {
|
||||
+ gimple stmt = gsi_stmt (gsi);
|
||||
+ if (is_gimple_call (stmt)
|
||||
+ && !is_inexpensive_builtin (gimple_call_fndecl (stmt)))
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* Optimizes the LOOP. Returns true if anything changed. */
|
||||
|
||||
static bool
|
||||
@@ -5799,6 +5861,7 @@
|
||||
}
|
||||
|
||||
body = get_loop_body (loop);
|
||||
+ data->body_includes_call = loop_body_includes_call (body, loop->num_nodes);
|
||||
renumber_gimple_stmt_uids_in_blocks (body, loop->num_nodes);
|
||||
free (body);
|
||||
|
||||
|
||||
=== modified file 'gcc/tree.h'
|
||||
--- old/gcc/tree.h 2010-04-02 18:54:46 +0000
|
||||
+++ new/gcc/tree.h 2010-08-02 13:51:23 +0000
|
||||
@@ -4962,6 +4962,8 @@
|
||||
extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int,
|
||||
tree, tree);
|
||||
extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
|
||||
+extern bool is_simple_builtin (tree);
|
||||
+extern bool is_inexpensive_builtin (tree);
|
||||
|
||||
/* In convert.c */
|
||||
extern tree strip_float_extensions (tree);
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
2010-07-15 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
2010-02-25 Maxim Kuvyrkov <maxim@codesourcery.com>
|
||||
|
||||
gcc/
|
||||
* tree.c (initializer_zerop): Handle STRING_CST.
|
||||
|
||||
2010-07-15 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
=== modified file 'gcc/tree.c'
|
||||
--- old/gcc/tree.c 2010-04-01 15:18:07 +0000
|
||||
+++ new/gcc/tree.c 2010-08-02 16:32:37 +0000
|
||||
@@ -9335,6 +9335,19 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
+ case STRING_CST:
|
||||
+ {
|
||||
+ int i;
|
||||
+
|
||||
+ /* We need to loop through all elements to handle cases like
|
||||
+ "\0" and "\0foobar". */
|
||||
+ for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
|
||||
+ if (TREE_STRING_POINTER (init)[i] != '\0')
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,433 +0,0 @@
|
||||
2010-07-16 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
Issue #7688
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
gcc/
|
||||
2010-07-12 Jie Zhang <jie@codesourcery.com>
|
||||
* postreload.c (reg_symbol_ref[]): New.
|
||||
(move2add_use_add2_insn): New.
|
||||
(move2add_use_add3_insn): New.
|
||||
(reload_cse_move2add): Handle SYMBOL + OFFSET case.
|
||||
(move2add_note_store): Likewise.
|
||||
|
||||
2010-07-15 Yao Qi <yao@codesourcery.com>
|
||||
|
||||
Merge from Sourcery G++ 4.4:
|
||||
|
||||
=== modified file 'gcc/postreload.c'
|
||||
--- old/gcc/postreload.c 2010-03-16 10:50:42 +0000
|
||||
+++ new/gcc/postreload.c 2010-08-02 16:55:34 +0000
|
||||
@@ -1160,17 +1160,19 @@
|
||||
information about register contents we have would be costly, so we
|
||||
use move2add_last_label_luid to note where the label is and then
|
||||
later disable any optimization that would cross it.
|
||||
- reg_offset[n] / reg_base_reg[n] / reg_mode[n] are only valid if
|
||||
- reg_set_luid[n] is greater than move2add_last_label_luid. */
|
||||
+ reg_offset[n] / reg_base_reg[n] / reg_symbol_ref[n] / reg_mode[n]
|
||||
+ are only valid if reg_set_luid[n] is greater than
|
||||
+ move2add_last_label_luid. */
|
||||
static int reg_set_luid[FIRST_PSEUDO_REGISTER];
|
||||
|
||||
/* If reg_base_reg[n] is negative, register n has been set to
|
||||
- reg_offset[n] in mode reg_mode[n] .
|
||||
+ reg_offset[n] or reg_symbol_ref[n] + reg_offset[n] in mode reg_mode[n].
|
||||
If reg_base_reg[n] is non-negative, register n has been set to the
|
||||
sum of reg_offset[n] and the value of register reg_base_reg[n]
|
||||
before reg_set_luid[n], calculated in mode reg_mode[n] . */
|
||||
static HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER];
|
||||
static int reg_base_reg[FIRST_PSEUDO_REGISTER];
|
||||
+static rtx reg_symbol_ref[FIRST_PSEUDO_REGISTER];
|
||||
static enum machine_mode reg_mode[FIRST_PSEUDO_REGISTER];
|
||||
|
||||
/* move2add_luid is linearly increased while scanning the instructions
|
||||
@@ -1190,6 +1192,151 @@
|
||||
&& TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (OUTMODE), \
|
||||
GET_MODE_BITSIZE (INMODE))))
|
||||
|
||||
+/* This function is called with INSN that sets REG to (SYM + OFF),
|
||||
+ while REG is known to already have value (SYM + offset).
|
||||
+ This function tries to change INSN into an add instruction
|
||||
+ (set (REG) (plus (REG) (OFF - offset))) using the known value.
|
||||
+ It also updates the information about REG's known value. */
|
||||
+
|
||||
+static void
|
||||
+move2add_use_add2_insn (rtx reg, rtx sym, rtx off, rtx insn)
|
||||
+{
|
||||
+ rtx pat = PATTERN (insn);
|
||||
+ rtx src = SET_SRC (pat);
|
||||
+ int regno = REGNO (reg);
|
||||
+ rtx new_src = gen_int_mode (INTVAL (off) - reg_offset[regno],
|
||||
+ GET_MODE (reg));
|
||||
+ bool speed = optimize_bb_for_speed_p (BLOCK_FOR_INSN (insn));
|
||||
+
|
||||
+ /* (set (reg) (plus (reg) (const_int 0))) is not canonical;
|
||||
+ use (set (reg) (reg)) instead.
|
||||
+ We don't delete this insn, nor do we convert it into a
|
||||
+ note, to avoid losing register notes or the return
|
||||
+ value flag. jump2 already knows how to get rid of
|
||||
+ no-op moves. */
|
||||
+ if (new_src == const0_rtx)
|
||||
+ {
|
||||
+ /* If the constants are different, this is a
|
||||
+ truncation, that, if turned into (set (reg)
|
||||
+ (reg)), would be discarded. Maybe we should
|
||||
+ try a truncMN pattern? */
|
||||
+ if (INTVAL (off) == reg_offset [regno])
|
||||
+ validate_change (insn, &SET_SRC (pat), reg, 0);
|
||||
+ }
|
||||
+ else if (rtx_cost (new_src, PLUS, speed) < rtx_cost (src, SET, speed)
|
||||
+ && have_add2_insn (reg, new_src))
|
||||
+ {
|
||||
+ rtx tem = gen_rtx_PLUS (GET_MODE (reg), reg, new_src);
|
||||
+ validate_change (insn, &SET_SRC (pat), tem, 0);
|
||||
+ }
|
||||
+ else if (sym == NULL_RTX && GET_MODE (reg) != BImode)
|
||||
+ {
|
||||
+ enum machine_mode narrow_mode;
|
||||
+ for (narrow_mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
|
||||
+ narrow_mode != VOIDmode
|
||||
+ && narrow_mode != GET_MODE (reg);
|
||||
+ narrow_mode = GET_MODE_WIDER_MODE (narrow_mode))
|
||||
+ {
|
||||
+ if (have_insn_for (STRICT_LOW_PART, narrow_mode)
|
||||
+ && ((reg_offset[regno]
|
||||
+ & ~GET_MODE_MASK (narrow_mode))
|
||||
+ == (INTVAL (off)
|
||||
+ & ~GET_MODE_MASK (narrow_mode))))
|
||||
+ {
|
||||
+ rtx narrow_reg = gen_rtx_REG (narrow_mode,
|
||||
+ REGNO (reg));
|
||||
+ rtx narrow_src = gen_int_mode (INTVAL (off),
|
||||
+ narrow_mode);
|
||||
+ rtx new_set =
|
||||
+ gen_rtx_SET (VOIDmode,
|
||||
+ gen_rtx_STRICT_LOW_PART (VOIDmode,
|
||||
+ narrow_reg),
|
||||
+ narrow_src);
|
||||
+ if (validate_change (insn, &PATTERN (insn),
|
||||
+ new_set, 0))
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ reg_set_luid[regno] = move2add_luid;
|
||||
+ reg_base_reg[regno] = -1;
|
||||
+ reg_mode[regno] = GET_MODE (reg);
|
||||
+ reg_symbol_ref[regno] = sym;
|
||||
+ reg_offset[regno] = INTVAL (off);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* This function is called with INSN that sets REG to (SYM + OFF),
|
||||
+ but REG doesn't have known value (SYM + offset). This function
|
||||
+ tries to find another register which is known to already have
|
||||
+ value (SYM + offset) and change INSN into an add instruction
|
||||
+ (set (REG) (plus (the found register) (OFF - offset))) if such
|
||||
+ a register is found. It also updates the information about
|
||||
+ REG's known value. */
|
||||
+
|
||||
+static void
|
||||
+move2add_use_add3_insn (rtx reg, rtx sym, rtx off, rtx insn)
|
||||
+{
|
||||
+ rtx pat = PATTERN (insn);
|
||||
+ rtx src = SET_SRC (pat);
|
||||
+ int regno = REGNO (reg);
|
||||
+ int min_cost = INT_MAX;
|
||||
+ int min_regno;
|
||||
+ bool speed = optimize_bb_for_speed_p (BLOCK_FOR_INSN (insn));
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
|
||||
+ if (reg_set_luid[i] > move2add_last_label_luid
|
||||
+ && reg_mode[i] == GET_MODE (reg)
|
||||
+ && reg_base_reg[i] < 0
|
||||
+ && reg_symbol_ref[i] != NULL_RTX
|
||||
+ && rtx_equal_p (sym, reg_symbol_ref[i]))
|
||||
+ {
|
||||
+ rtx new_src = gen_int_mode (INTVAL (off) - reg_offset[i],
|
||||
+ GET_MODE (reg));
|
||||
+ /* (set (reg) (plus (reg) (const_int 0))) is not canonical;
|
||||
+ use (set (reg) (reg)) instead.
|
||||
+ We don't delete this insn, nor do we convert it into a
|
||||
+ note, to avoid losing register notes or the return
|
||||
+ value flag. jump2 already knows how to get rid of
|
||||
+ no-op moves. */
|
||||
+ if (new_src == const0_rtx)
|
||||
+ {
|
||||
+ min_cost = 0;
|
||||
+ min_regno = i;
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ int cost = rtx_cost (new_src, PLUS, speed);
|
||||
+ if (cost < min_cost)
|
||||
+ {
|
||||
+ min_cost = cost;
|
||||
+ min_regno = i;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (min_cost < rtx_cost (src, SET, speed))
|
||||
+ {
|
||||
+ rtx tem;
|
||||
+
|
||||
+ tem = gen_rtx_REG (GET_MODE (reg), min_regno);
|
||||
+ if (i != min_regno)
|
||||
+ {
|
||||
+ rtx new_src = gen_int_mode (INTVAL (off) - reg_offset[min_regno],
|
||||
+ GET_MODE (reg));
|
||||
+ tem = gen_rtx_PLUS (GET_MODE (reg), tem, new_src);
|
||||
+ }
|
||||
+ validate_change (insn, &SET_SRC (pat), tem, 0);
|
||||
+ }
|
||||
+ reg_set_luid[regno] = move2add_luid;
|
||||
+ reg_base_reg[regno] = -1;
|
||||
+ reg_mode[regno] = GET_MODE (reg);
|
||||
+ reg_symbol_ref[regno] = sym;
|
||||
+ reg_offset[regno] = INTVAL (off);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
reload_cse_move2add (rtx first)
|
||||
{
|
||||
@@ -1197,7 +1344,13 @@
|
||||
rtx insn;
|
||||
|
||||
for (i = FIRST_PSEUDO_REGISTER - 1; i >= 0; i--)
|
||||
- reg_set_luid[i] = 0;
|
||||
+ {
|
||||
+ reg_set_luid[i] = 0;
|
||||
+ reg_offset[i] = 0;
|
||||
+ reg_base_reg[i] = 0;
|
||||
+ reg_symbol_ref[i] = NULL_RTX;
|
||||
+ reg_mode[i] = VOIDmode;
|
||||
+ }
|
||||
|
||||
move2add_last_label_luid = 0;
|
||||
move2add_luid = 2;
|
||||
@@ -1245,65 +1398,11 @@
|
||||
(set (STRICT_LOW_PART (REGX)) (CONST_INT B))
|
||||
*/
|
||||
|
||||
- if (CONST_INT_P (src) && reg_base_reg[regno] < 0)
|
||||
+ if (CONST_INT_P (src)
|
||||
+ && reg_base_reg[regno] < 0
|
||||
+ && reg_symbol_ref[regno] == NULL_RTX)
|
||||
{
|
||||
- rtx new_src = gen_int_mode (INTVAL (src) - reg_offset[regno],
|
||||
- GET_MODE (reg));
|
||||
- bool speed = optimize_bb_for_speed_p (BLOCK_FOR_INSN (insn));
|
||||
-
|
||||
- /* (set (reg) (plus (reg) (const_int 0))) is not canonical;
|
||||
- use (set (reg) (reg)) instead.
|
||||
- We don't delete this insn, nor do we convert it into a
|
||||
- note, to avoid losing register notes or the return
|
||||
- value flag. jump2 already knows how to get rid of
|
||||
- no-op moves. */
|
||||
- if (new_src == const0_rtx)
|
||||
- {
|
||||
- /* If the constants are different, this is a
|
||||
- truncation, that, if turned into (set (reg)
|
||||
- (reg)), would be discarded. Maybe we should
|
||||
- try a truncMN pattern? */
|
||||
- if (INTVAL (src) == reg_offset [regno])
|
||||
- validate_change (insn, &SET_SRC (pat), reg, 0);
|
||||
- }
|
||||
- else if (rtx_cost (new_src, PLUS, speed) < rtx_cost (src, SET, speed)
|
||||
- && have_add2_insn (reg, new_src))
|
||||
- {
|
||||
- rtx tem = gen_rtx_PLUS (GET_MODE (reg), reg, new_src);
|
||||
- validate_change (insn, &SET_SRC (pat), tem, 0);
|
||||
- }
|
||||
- else if (GET_MODE (reg) != BImode)
|
||||
- {
|
||||
- enum machine_mode narrow_mode;
|
||||
- for (narrow_mode = GET_CLASS_NARROWEST_MODE (MODE_INT);
|
||||
- narrow_mode != VOIDmode
|
||||
- && narrow_mode != GET_MODE (reg);
|
||||
- narrow_mode = GET_MODE_WIDER_MODE (narrow_mode))
|
||||
- {
|
||||
- if (have_insn_for (STRICT_LOW_PART, narrow_mode)
|
||||
- && ((reg_offset[regno]
|
||||
- & ~GET_MODE_MASK (narrow_mode))
|
||||
- == (INTVAL (src)
|
||||
- & ~GET_MODE_MASK (narrow_mode))))
|
||||
- {
|
||||
- rtx narrow_reg = gen_rtx_REG (narrow_mode,
|
||||
- REGNO (reg));
|
||||
- rtx narrow_src = gen_int_mode (INTVAL (src),
|
||||
- narrow_mode);
|
||||
- rtx new_set =
|
||||
- gen_rtx_SET (VOIDmode,
|
||||
- gen_rtx_STRICT_LOW_PART (VOIDmode,
|
||||
- narrow_reg),
|
||||
- narrow_src);
|
||||
- if (validate_change (insn, &PATTERN (insn),
|
||||
- new_set, 0))
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- reg_set_luid[regno] = move2add_luid;
|
||||
- reg_mode[regno] = GET_MODE (reg);
|
||||
- reg_offset[regno] = INTVAL (src);
|
||||
+ move2add_use_add2_insn (reg, NULL_RTX, src, insn);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1373,6 +1472,51 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+ /* Try to transform
|
||||
+ (set (REGX) (CONST (PLUS (SYMBOL_REF) (CONST_INT A))))
|
||||
+ ...
|
||||
+ (set (REGY) (CONST (PLUS (SYMBOL_REF) (CONST_INT B))))
|
||||
+ to
|
||||
+ (set (REGX) (CONST (PLUS (SYMBOL_REF) (CONST_INT A))))
|
||||
+ ...
|
||||
+ (set (REGY) (CONST (PLUS (REGX) (CONST_INT B-A)))) */
|
||||
+ if ((GET_CODE (src) == SYMBOL_REF
|
||||
+ || (GET_CODE (src) == CONST
|
||||
+ && GET_CODE (XEXP (src, 0)) == PLUS
|
||||
+ && GET_CODE (XEXP (XEXP (src, 0), 0)) == SYMBOL_REF
|
||||
+ && CONST_INT_P (XEXP (XEXP (src, 0), 1))))
|
||||
+ && dbg_cnt (cse2_move2add))
|
||||
+ {
|
||||
+ rtx sym, off;
|
||||
+
|
||||
+ if (GET_CODE (src) == SYMBOL_REF)
|
||||
+ {
|
||||
+ sym = src;
|
||||
+ off = const0_rtx;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ sym = XEXP (XEXP (src, 0), 0);
|
||||
+ off = XEXP (XEXP (src, 0), 1);
|
||||
+ }
|
||||
+
|
||||
+ /* If the reg already contains the value which is sum of
|
||||
+ sym and some constant value, we can use an add2 insn. */
|
||||
+ if (reg_set_luid[regno] > move2add_last_label_luid
|
||||
+ && MODES_OK_FOR_MOVE2ADD (GET_MODE (reg), reg_mode[regno])
|
||||
+ && reg_base_reg[regno] < 0
|
||||
+ && reg_symbol_ref[regno] != NULL_RTX
|
||||
+ && rtx_equal_p (sym, reg_symbol_ref[regno]))
|
||||
+ move2add_use_add2_insn (reg, sym, off, insn);
|
||||
+
|
||||
+ /* Otherwise, we have to find a register whose value is sum
|
||||
+ of sym and some constant value. */
|
||||
+ else
|
||||
+ move2add_use_add3_insn (reg, sym, off, insn);
|
||||
+
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
|
||||
for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
|
||||
@@ -1386,7 +1530,7 @@
|
||||
reg_set_luid[regno] = 0;
|
||||
}
|
||||
}
|
||||
- note_stores (PATTERN (insn), move2add_note_store, NULL);
|
||||
+ note_stores (PATTERN (insn), move2add_note_store, insn);
|
||||
|
||||
/* If INSN is a conditional branch, we try to extract an
|
||||
implicit set out of it. */
|
||||
@@ -1408,7 +1552,7 @@
|
||||
{
|
||||
rtx implicit_set =
|
||||
gen_rtx_SET (VOIDmode, XEXP (cnd, 0), XEXP (cnd, 1));
|
||||
- move2add_note_store (SET_DEST (implicit_set), implicit_set, 0);
|
||||
+ move2add_note_store (SET_DEST (implicit_set), implicit_set, insn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1426,13 +1570,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
-/* SET is a SET or CLOBBER that sets DST.
|
||||
+/* SET is a SET or CLOBBER that sets DST. DATA is the insn which
|
||||
+ contains SET.
|
||||
Update reg_set_luid, reg_offset and reg_base_reg accordingly.
|
||||
Called from reload_cse_move2add via note_stores. */
|
||||
|
||||
static void
|
||||
-move2add_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED)
|
||||
+move2add_note_store (rtx dst, const_rtx set, void *data)
|
||||
{
|
||||
+ rtx insn = (rtx) data;
|
||||
unsigned int regno = 0;
|
||||
unsigned int nregs = 0;
|
||||
unsigned int i;
|
||||
@@ -1466,6 +1612,38 @@
|
||||
nregs = hard_regno_nregs[regno][mode];
|
||||
|
||||
if (SCALAR_INT_MODE_P (GET_MODE (dst))
|
||||
+ && nregs == 1 && GET_CODE (set) == SET)
|
||||
+ {
|
||||
+ rtx note, sym = NULL_RTX;
|
||||
+ HOST_WIDE_INT off;
|
||||
+
|
||||
+ note = find_reg_equal_equiv_note (insn);
|
||||
+ if (note && GET_CODE (XEXP (note, 0)) == SYMBOL_REF)
|
||||
+ {
|
||||
+ sym = XEXP (note, 0);
|
||||
+ off = 0;
|
||||
+ }
|
||||
+ else if (note && GET_CODE (XEXP (note, 0)) == CONST
|
||||
+ && GET_CODE (XEXP (XEXP (note, 0), 0)) == PLUS
|
||||
+ && GET_CODE (XEXP (XEXP (XEXP (note, 0), 0), 0)) == SYMBOL_REF
|
||||
+ && CONST_INT_P (XEXP (XEXP (XEXP (note, 0), 0), 1)))
|
||||
+ {
|
||||
+ sym = XEXP (XEXP (XEXP (note, 0), 0), 0);
|
||||
+ off = INTVAL (XEXP (XEXP (XEXP (note, 0), 0), 1));
|
||||
+ }
|
||||
+
|
||||
+ if (sym != NULL_RTX)
|
||||
+ {
|
||||
+ reg_base_reg[regno] = -1;
|
||||
+ reg_symbol_ref[regno] = sym;
|
||||
+ reg_offset[regno] = off;
|
||||
+ reg_mode[regno] = mode;
|
||||
+ reg_set_luid[regno] = move2add_luid;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (SCALAR_INT_MODE_P (GET_MODE (dst))
|
||||
&& nregs == 1 && GET_CODE (set) == SET
|
||||
&& GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
|
||||
&& GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
|
||||
@@ -1525,6 +1703,7 @@
|
||||
case CONST_INT:
|
||||
/* Start tracking the register as a constant. */
|
||||
reg_base_reg[regno] = -1;
|
||||
+ reg_symbol_ref[regno] = NULL_RTX;
|
||||
reg_offset[regno] = INTVAL (SET_SRC (set));
|
||||
/* We assign the same luid to all registers set to constants. */
|
||||
reg_set_luid[regno] = move2add_last_label_luid + 1;
|
||||
@@ -1545,6 +1724,7 @@
|
||||
if (reg_set_luid[base_regno] <= move2add_last_label_luid)
|
||||
{
|
||||
reg_base_reg[base_regno] = base_regno;
|
||||
+ reg_symbol_ref[base_regno] = NULL_RTX;
|
||||
reg_offset[base_regno] = 0;
|
||||
reg_set_luid[base_regno] = move2add_luid;
|
||||
reg_mode[base_regno] = mode;
|
||||
@@ -1558,6 +1738,7 @@
|
||||
/* Copy base information from our base register. */
|
||||
reg_set_luid[regno] = reg_set_luid[base_regno];
|
||||
reg_base_reg[regno] = reg_base_reg[base_regno];
|
||||
+ reg_symbol_ref[regno] = reg_symbol_ref[base_regno];
|
||||
|
||||
/* Compute the sum of the offsets or constants. */
|
||||
reg_offset[regno] = trunc_int_for_mode (offset
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
2010-08-03 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
||||
gcc/
|
||||
2010-07-28 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
* config/arm/arm.c (arm_pcs_default): Remove static.
|
||||
* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_PCS or
|
||||
__ARM_PCS_VFP to indicate soft/hard-float calling convention.
|
||||
(arm_pcs_default): Declare.
|
||||
|
||||
2010-07-16 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
Issue #7688
|
||||
|
||||
=== modified file 'gcc/config/arm/arm.c'
|
||||
--- old/gcc/config/arm/arm.c 2010-08-02 13:42:24 +0000
|
||||
+++ new/gcc/config/arm/arm.c 2010-08-03 13:55:46 +0000
|
||||
@@ -704,7 +704,7 @@
|
||||
/* The maximum number of insns to be used when loading a constant. */
|
||||
static int arm_constant_limit = 3;
|
||||
|
||||
-static enum arm_pcs arm_pcs_default;
|
||||
+enum arm_pcs arm_pcs_default;
|
||||
|
||||
/* For an explanation of these variables, see final_prescan_insn below. */
|
||||
int arm_ccfsm_state;
|
||||
|
||||
=== modified file 'gcc/config/arm/arm.h'
|
||||
--- old/gcc/config/arm/arm.h 2010-07-29 16:58:56 +0000
|
||||
+++ new/gcc/config/arm/arm.h 2010-08-03 10:40:56 +0000
|
||||
@@ -94,7 +94,13 @@
|
||||
if (arm_arch_iwmmxt) \
|
||||
builtin_define ("__IWMMXT__"); \
|
||||
if (TARGET_AAPCS_BASED) \
|
||||
- builtin_define ("__ARM_EABI__"); \
|
||||
+ { \
|
||||
+ if (arm_pcs_default == ARM_PCS_AAPCS_VFP) \
|
||||
+ builtin_define ("__ARM_PCS_VFP"); \
|
||||
+ else if (arm_pcs_default == ARM_PCS_AAPCS) \
|
||||
+ builtin_define ("__ARM_PCS"); \
|
||||
+ builtin_define ("__ARM_EABI__"); \
|
||||
+ } \
|
||||
} while (0)
|
||||
|
||||
/* The various ARM cores. */
|
||||
@@ -1648,6 +1654,9 @@
|
||||
ARM_PCS_UNKNOWN
|
||||
};
|
||||
|
||||
+/* Default procedure calling standard of current compilation unit. */
|
||||
+extern enum arm_pcs arm_pcs_default;
|
||||
+
|
||||
/* A C type for declaring a variable that is used as the first argument of
|
||||
`FUNCTION_ARG' and other related values. */
|
||||
typedef struct
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user