diff --git a/binutils-2.22-gold-casts.patch b/binutils-2.22-gold-casts.patch new file mode 100644 index 0000000..aa0d215 --- /dev/null +++ b/binutils-2.22-gold-casts.patch @@ -0,0 +1,263 @@ +diff -cp ../binutils-2.22.orig/gold/dwarf_reader.cc gold/dwarf_reader.cc +*** ../binutils-2.22.orig/gold/dwarf_reader.cc 2012-01-13 12:20:00.279690374 +0000 +--- gold/dwarf_reader.cc 2012-01-13 12:22:26.500694442 +0000 +*************** Sized_dwarf_line_info: +*** 491,498 **** + && (shndx == -1U || lsm.shndx == -1U || shndx == lsm.shndx)) + { + Offset_to_lineno_entry entry +! = { lsm.address, this->current_header_index_, +! lsm.file_num, true, lsm.line_num }; + std::vector& + map(this->line_number_map_[lsm.shndx]); + // If we see two consecutive entries with the same +--- 491,498 ---- + && (shndx == -1U || lsm.shndx == -1U || shndx == lsm.shndx)) + { + Offset_to_lineno_entry entry +! = { (off_t) lsm.address, this->current_header_index_, +! (unsigned int) lsm.file_num, true, lsm.line_num }; + std::vector& + map(this->line_number_map_[lsm.shndx]); + // If we see two consecutive entries with the same +Common subdirectories: ../binutils-2.22.orig/gold/gcctestdir1 and gold/gcctestdir1 +Common subdirectories: ../binutils-2.22.orig/gold/gcctestdir2 and gold/gcctestdir2 +Common subdirectories: ../binutils-2.22.orig/gold/gcctestdir2-r and gold/gcctestdir2-r +diff -cp ../binutils-2.22.orig/gold/i386.cc gold/i386.cc +*** ../binutils-2.22.orig/gold/i386.cc 2012-01-13 12:20:00.355690373 +0000 +--- gold/i386.cc 2012-01-13 12:23:48.407696800 +0000 +*************** Target_i386::do_code_fill(section_size_t +*** 3480,3529 **** + } + + // Nop sequences of various lengths. +! const char nop1[1] = { 0x90 }; // nop +! const char nop2[2] = { 0x66, 0x90 }; // xchg %ax %ax +! const char nop3[3] = { 0x8d, 0x76, 0x00 }; // leal 0(%esi),%esi +! const char nop4[4] = { 0x8d, 0x74, 0x26, 0x00}; // leal 0(%esi,1),%esi +! const char nop5[5] = { 0x90, 0x8d, 0x74, 0x26, // nop + 0x00 }; // leal 0(%esi,1),%esi +! const char nop6[6] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00 }; +! const char nop7[7] = { 0x8d, 0xb4, 0x26, 0x00, // leal 0L(%esi,1),%esi + 0x00, 0x00, 0x00 }; +! const char nop8[8] = { 0x90, 0x8d, 0xb4, 0x26, // nop + 0x00, 0x00, 0x00, 0x00 }; // leal 0L(%esi,1),%esi +! const char nop9[9] = { 0x89, 0xf6, 0x8d, 0xbc, // movl %esi,%esi + 0x27, 0x00, 0x00, 0x00, // leal 0L(%edi,1),%edi + 0x00 }; +! const char nop10[10] = { 0x8d, 0x76, 0x00, 0x8d, // leal 0(%esi),%esi + 0xbc, 0x27, 0x00, 0x00, // leal 0L(%edi,1),%edi + 0x00, 0x00 }; +! const char nop11[11] = { 0x8d, 0x74, 0x26, 0x00, // leal 0(%esi,1),%esi + 0x8d, 0xbc, 0x27, 0x00, // leal 0L(%edi,1),%edi + 0x00, 0x00, 0x00 }; +! const char nop12[12] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00, 0x8d, 0xbf, // leal 0L(%edi),%edi + 0x00, 0x00, 0x00, 0x00 }; +! const char nop13[13] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00, 0x8d, 0xbc, // leal 0L(%edi,1),%edi + 0x27, 0x00, 0x00, 0x00, + 0x00 }; +! const char nop14[14] = { 0x8d, 0xb4, 0x26, 0x00, // leal 0L(%esi,1),%esi + 0x00, 0x00, 0x00, 0x8d, // leal 0L(%edi,1),%edi + 0xbc, 0x27, 0x00, 0x00, + 0x00, 0x00 }; +! const char nop15[15] = { 0xeb, 0x0d, 0x90, 0x90, // jmp .+15 + 0x90, 0x90, 0x90, 0x90, // nop,nop,nop,... + 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90 }; + +! const char* nops[16] = { + NULL, + nop1, nop2, nop3, nop4, nop5, nop6, nop7, + nop8, nop9, nop10, nop11, nop12, nop13, nop14, nop15 + }; + +! return std::string(nops[length], length); + } + + // Return the value to use for the base of a DW_EH_PE_datarel offset +--- 3480,3529 ---- + } + + // Nop sequences of various lengths. +! const unsigned char nop1[1] = { 0x90 }; // nop +! const unsigned char nop2[2] = { 0x66, 0x90 }; // xchg %ax %ax +! const unsigned char nop3[3] = { 0x8d, 0x76, 0x00 }; // leal 0(%esi),%esi +! const unsigned char nop4[4] = { 0x8d, 0x74, 0x26, 0x00}; // leal 0(%esi,1),%esi +! const unsigned char nop5[5] = { 0x90, 0x8d, 0x74, 0x26, // nop + 0x00 }; // leal 0(%esi,1),%esi +! const unsigned char nop6[6] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00 }; +! const unsigned char nop7[7] = { 0x8d, 0xb4, 0x26, 0x00, // leal 0L(%esi,1),%esi + 0x00, 0x00, 0x00 }; +! const unsigned char nop8[8] = { 0x90, 0x8d, 0xb4, 0x26, // nop + 0x00, 0x00, 0x00, 0x00 }; // leal 0L(%esi,1),%esi +! const unsigned char nop9[9] = { 0x89, 0xf6, 0x8d, 0xbc, // movl %esi,%esi + 0x27, 0x00, 0x00, 0x00, // leal 0L(%edi,1),%edi + 0x00 }; +! const unsigned char nop10[10] = { 0x8d, 0x76, 0x00, 0x8d, // leal 0(%esi),%esi + 0xbc, 0x27, 0x00, 0x00, // leal 0L(%edi,1),%edi + 0x00, 0x00 }; +! const unsigned char nop11[11] = { 0x8d, 0x74, 0x26, 0x00, // leal 0(%esi,1),%esi + 0x8d, 0xbc, 0x27, 0x00, // leal 0L(%edi,1),%edi + 0x00, 0x00, 0x00 }; +! const unsigned char nop12[12] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00, 0x8d, 0xbf, // leal 0L(%edi),%edi + 0x00, 0x00, 0x00, 0x00 }; +! const unsigned char nop13[13] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi + 0x00, 0x00, 0x8d, 0xbc, // leal 0L(%edi,1),%edi + 0x27, 0x00, 0x00, 0x00, + 0x00 }; +! const unsigned char nop14[14] = { 0x8d, 0xb4, 0x26, 0x00, // leal 0L(%esi,1),%esi + 0x00, 0x00, 0x00, 0x8d, // leal 0L(%edi,1),%edi + 0xbc, 0x27, 0x00, 0x00, + 0x00, 0x00 }; +! const unsigned char nop15[15] = { 0xeb, 0x0d, 0x90, 0x90, // jmp .+15 + 0x90, 0x90, 0x90, 0x90, // nop,nop,nop,... + 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90 }; + +! const unsigned char* nops[16] = { + NULL, + nop1, nop2, nop3, nop4, nop5, nop6, nop7, + nop8, nop9, nop10, nop11, nop12, nop13, nop14, nop15 + }; + +! return std::string((const char *) nops[length], length); + } + + // Return the value to use for the base of a DW_EH_PE_datarel offset +Common subdirectories: ../binutils-2.22.orig/gold/po and gold/po +diff -cp ../binutils-2.22.orig/gold/resolve.cc gold/resolve.cc +*** ../binutils-2.22.orig/gold/resolve.cc 2012-01-13 12:20:00.288690373 +0000 +--- gold/resolve.cc 2012-01-13 12:24:29.576697764 +0000 +*************** Symbol_table::resolve(Sized_symbol +*** 336,344 **** + && to->name()[0] == '_' && to->name()[1] == 'Z') + { + Symbol_location fromloc +! = { object, orig_st_shndx, sym.get_st_value() }; + Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary), +! to->value() }; + this->candidate_odr_violations_[to->name()].insert(fromloc); + this->candidate_odr_violations_[to->name()].insert(toloc); + } +--- 336,344 ---- + && to->name()[0] == '_' && to->name()[1] == 'Z') + { + Symbol_location fromloc +! = { object, orig_st_shndx, (off_t) sym.get_st_value() }; + Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary), +! (off_t) to->value() }; + this->candidate_odr_violations_[to->name()].insert(fromloc); + this->candidate_odr_violations_[to->name()].insert(toloc); + } +Common subdirectories: ../binutils-2.22.orig/gold/testsuite and gold/testsuite +diff -cp ../binutils-2.22.orig/gold/x86_64.cc gold/x86_64.cc +*** ../binutils-2.22.orig/gold/x86_64.cc 2012-01-13 12:21:24.880692697 +0000 +--- gold/x86_64.cc 2012-01-13 12:25:36.219699685 +0000 +*************** Target_x86_64::do_code_fill(section_size +*** 3867,3916 **** + } + + // Nop sequences of various lengths. +! const char nop1[1] = { 0x90 }; // nop +! const char nop2[2] = { 0x66, 0x90 }; // xchg %ax %ax +! const char nop3[3] = { 0x0f, 0x1f, 0x00 }; // nop (%rax) +! const char nop4[4] = { 0x0f, 0x1f, 0x40, 0x00}; // nop 0(%rax) +! const char nop5[5] = { 0x0f, 0x1f, 0x44, 0x00, // nop 0(%rax,%rax,1) + 0x00 }; +! const char nop6[6] = { 0x66, 0x0f, 0x1f, 0x44, // nopw 0(%rax,%rax,1) + 0x00, 0x00 }; +! const char nop7[7] = { 0x0f, 0x1f, 0x80, 0x00, // nopl 0L(%rax) + 0x00, 0x00, 0x00 }; +! const char nop8[8] = { 0x0f, 0x1f, 0x84, 0x00, // nopl 0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00 }; +! const char nop9[9] = { 0x66, 0x0f, 0x1f, 0x84, // nopw 0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00, + 0x00 }; +! const char nop10[10] = { 0x66, 0x2e, 0x0f, 0x1f, // nopw %cs:0L(%rax,%rax,1) + 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00 }; +! const char nop11[11] = { 0x66, 0x66, 0x2e, 0x0f, // data16 + 0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00 }; +! const char nop12[12] = { 0x66, 0x66, 0x66, 0x2e, // data16; data16 + 0x0f, 0x1f, 0x84, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00 }; +! const char nop13[13] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x2e, 0x0f, 0x1f, 0x84, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00, + 0x00 }; +! const char nop14[14] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x66, 0x2e, 0x0f, 0x1f, // data16 + 0x84, 0x00, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00 }; +! const char nop15[15] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x66, 0x66, 0x2e, 0x0f, // data16; data16 + 0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00 }; + +! const char* nops[16] = { + NULL, + nop1, nop2, nop3, nop4, nop5, nop6, nop7, + nop8, nop9, nop10, nop11, nop12, nop13, nop14, nop15 + }; + +! return std::string(nops[length], length); + } + + // Return the addend to use for a target specific relocation. The +--- 3867,3916 ---- + } + + // Nop sequences of various lengths. +! const unsigned char nop1[1] = { 0x90 }; // nop +! const unsigned char nop2[2] = { 0x66, 0x90 }; // xchg %ax %ax +! const unsigned char nop3[3] = { 0x0f, 0x1f, 0x00 }; // nop (%rax) +! const unsigned char nop4[4] = { 0x0f, 0x1f, 0x40, 0x00}; // nop 0(%rax) +! const unsigned char nop5[5] = { 0x0f, 0x1f, 0x44, 0x00, // nop 0(%rax,%rax,1) + 0x00 }; +! const unsigned char nop6[6] = { 0x66, 0x0f, 0x1f, 0x44, // nopw 0(%rax,%rax,1) + 0x00, 0x00 }; +! const unsigned char nop7[7] = { 0x0f, 0x1f, 0x80, 0x00, // nopl 0L(%rax) + 0x00, 0x00, 0x00 }; +! const unsigned char nop8[8] = { 0x0f, 0x1f, 0x84, 0x00, // nopl 0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00 }; +! const unsigned char nop9[9] = { 0x66, 0x0f, 0x1f, 0x84, // nopw 0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00, + 0x00 }; +! const unsigned char nop10[10] = { 0x66, 0x2e, 0x0f, 0x1f, // nopw %cs:0L(%rax,%rax,1) + 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00 }; +! const unsigned char nop11[11] = { 0x66, 0x66, 0x2e, 0x0f, // data16 + 0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00 }; +! const unsigned char nop12[12] = { 0x66, 0x66, 0x66, 0x2e, // data16; data16 + 0x0f, 0x1f, 0x84, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00 }; +! const unsigned char nop13[13] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x2e, 0x0f, 0x1f, 0x84, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00, 0x00, + 0x00 }; +! const unsigned char nop14[14] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x66, 0x2e, 0x0f, 0x1f, // data16 + 0x84, 0x00, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00 }; +! const unsigned char nop15[15] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16 + 0x66, 0x66, 0x2e, 0x0f, // data16; data16 + 0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1) + 0x00, 0x00, 0x00 }; + +! const unsigned char* nops[16] = { + NULL, + nop1, nop2, nop3, nop4, nop5, nop6, nop7, + nop8, nop9, nop10, nop11, nop12, nop13, nop14, nop15 + }; + +! return std::string((const char *) nops[length], length); + } + + // Return the addend to use for a target specific relocation. The diff --git a/binutils.spec b/binutils.spec index 953afd1..76242bb 100644 --- a/binutils.spec +++ b/binutils.spec @@ -17,7 +17,7 @@ Summary: A GNU collection of binary utilities Name: %{?cross}binutils%{?_with_debug:-debug} Version: 2.22 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ Group: Development/Tools URL: http://sources.redhat.com/binutils @@ -35,6 +35,7 @@ Patch05: binutils-2.20.51.0.2-set-long-long.patch Patch06: binutils-2.20.51.0.10-copy-osabi.patch Patch07: binutils-2.20.51.0.10-sec-merge-emit.patch Patch08: binutils-2.20.51.0.2-build-id.patch +Patch09: binutils-2.22-gold-casts.patch %define gold_arches %ix86 x86_64 @@ -133,6 +134,7 @@ using libelf instead of BFD. %patch06 -p0 -b .copy-osabi~ %patch07 -p0 -b .sec-merge-emit~ %patch08 -p0 -b .build-id~ +%patch09 -p0 -b .gold-cast~ # We cannot run autotools as there is an exact requirement of autoconf-2.59. @@ -427,6 +429,9 @@ exit 0 %endif # %{isnative} %changelog +* Fri Jan 13 2012 Nick Clifton - 2.22-3 +- Add casts for building gold with 4.7 version of gcc. + * Thu Jan 12 2012 Fedora Release Engineering - 2.22-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild