From 76677ad0511926923fd951df8d73efb783ced103 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Sat, 17 Dec 2011 22:39:52 +0000 Subject: [PATCH] 2011-12-17 Cary Coutant * dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Add casts. * resolve.cc (Symbol_table::resolve): Likewise. * i386.cc (Target_i386::do_code_fill): Use char constants for nop arrays. * x86_64.cc (Target_x86_64::do_code_fill): Likewise. --- gold/ChangeLog | 8 ++++++ gold/dwarf_reader.cc | 6 ++-- gold/i386.cc | 81 +++++++++++++++++++++++++++++----------------------- gold/resolve.cc | 4 +-- gold/x86_64.cc | 81 +++++++++++++++++++++++++++++----------------------- 5 files changed, 104 insertions(+), 76 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index e3abb30..fed9a65 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,11 @@ +2011-12-17 Cary Coutant + + * dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Add casts. + * resolve.cc (Symbol_table::resolve): Likewise. + * i386.cc (Target_i386::do_code_fill): Use char constants for nop + arrays. + * x86_64.cc (Target_x86_64::do_code_fill): Likewise. + 2011-12-16 Ian Lance Taylor * output.h (Output_data_reloc_generic::add): Only call diff --git a/gold/dwarf_reader.cc b/gold/dwarf_reader.cc index 3dc33e4..e1c3c97 100644 --- a/gold/dwarf_reader.cc +++ b/gold/dwarf_reader.cc @@ -491,8 +491,10 @@ Sized_dwarf_line_info::read_lines(unsigned const char* lineptr && (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 }; + = { static_cast(lsm.address), + this->current_header_index_, + static_cast(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 diff --git a/gold/i386.cc b/gold/i386.cc index 191a915..efb6248 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -3474,42 +3474,51 @@ Target_i386::do_code_fill(section_size_type length) const } // 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 nop1[1] = { '\x90' }; // nop + const char nop2[2] = { '\x66', '\x90' }; // xchg %ax %ax + const char nop3[3] = { '\x8d', '\x76', '\x00' }; // leal 0(%esi),%esi + const char nop4[4] = { '\x8d', '\x74', '\x26', // leal 0(%esi,1),%esi + '\x00'}; + const char nop5[5] = { '\x90', '\x8d', '\x74', // nop + '\x26', '\x00' }; // leal 0(%esi,1),%esi + const char nop6[6] = { '\x8d', '\xb6', '\x00', // leal 0L(%esi),%esi + '\x00', '\x00', '\x00' }; + const char nop7[7] = { '\x8d', '\xb4', '\x26', // leal 0L(%esi,1),%esi + '\x00', '\x00', '\x00', + '\x00' }; + const char nop8[8] = { '\x90', '\x8d', '\xb4', // nop + '\x26', '\x00', '\x00', // leal 0L(%esi,1),%esi + '\x00', '\x00' }; + const char nop9[9] = { '\x89', '\xf6', '\x8d', // movl %esi,%esi + '\xbc', '\x27', '\x00', // leal 0L(%edi,1),%edi + '\x00', '\x00', '\x00' }; + const char nop10[10] = { '\x8d', '\x76', '\x00', // leal 0(%esi),%esi + '\x8d', '\xbc', '\x27', // leal 0L(%edi,1),%edi + '\x00', '\x00', '\x00', + '\x00' }; + const char nop11[11] = { '\x8d', '\x74', '\x26', // leal 0(%esi,1),%esi + '\x00', '\x8d', '\xbc', // leal 0L(%edi,1),%edi + '\x27', '\x00', '\x00', + '\x00', '\x00' }; + const char nop12[12] = { '\x8d', '\xb6', '\x00', // leal 0L(%esi),%esi + '\x00', '\x00', '\x00', // leal 0L(%edi),%edi + '\x8d', '\xbf', '\x00', + '\x00', '\x00', '\x00' }; + const char nop13[13] = { '\x8d', '\xb6', '\x00', // leal 0L(%esi),%esi + '\x00', '\x00', '\x00', // leal 0L(%edi,1),%edi + '\x8d', '\xbc', '\x27', + '\x00', '\x00', '\x00', + '\x00' }; + const char nop14[14] = { '\x8d', '\xb4', '\x26', // leal 0L(%esi,1),%esi + '\x00', '\x00', '\x00', // leal 0L(%edi,1),%edi + '\x00', '\x8d', '\xbc', + '\x27', '\x00', '\x00', + '\x00', '\x00' }; + const char nop15[15] = { '\xeb', '\x0d', '\x90', // jmp .+15 + '\x90', '\x90', '\x90', // nop,nop,nop,... + '\x90', '\x90', '\x90', + '\x90', '\x90', '\x90', + '\x90', '\x90', '\x90' }; const char* nops[16] = { NULL, diff --git a/gold/resolve.cc b/gold/resolve.cc index 2a68876..780038a 100644 --- a/gold/resolve.cc +++ b/gold/resolve.cc @@ -336,9 +336,9 @@ Symbol_table::resolve(Sized_symbol* to, && to->name()[0] == '_' && to->name()[1] == 'Z') { Symbol_location fromloc - = { object, orig_st_shndx, sym.get_st_value() }; + = { object, orig_st_shndx, static_cast(sym.get_st_value()) }; Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary), - to->value() }; + static_cast(to->value()) }; this->candidate_odr_violations_[to->name()].insert(fromloc); this->candidate_odr_violations_[to->name()].insert(toloc); } diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 0762926..e7c981b 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -3861,42 +3861,51 @@ Target_x86_64::do_code_fill(section_size_type length) const } // 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 nop1[1] = { '\x90' }; // nop + const char nop2[2] = { '\x66', '\x90' }; // xchg %ax %ax + const char nop3[3] = { '\x0f', '\x1f', '\x00' }; // nop (%rax) + const char nop4[4] = { '\x0f', '\x1f', '\x40', // nop 0(%rax) + '\x00'}; + const char nop5[5] = { '\x0f', '\x1f', '\x44', // nop 0(%rax,%rax,1) + '\x00', '\x00' }; + const char nop6[6] = { '\x66', '\x0f', '\x1f', // nopw 0(%rax,%rax,1) + '\x44', '\x00', '\x00' }; + const char nop7[7] = { '\x0f', '\x1f', '\x80', // nopl 0L(%rax) + '\x00', '\x00', '\x00', + '\x00' }; + const char nop8[8] = { '\x0f', '\x1f', '\x84', // nopl 0L(%rax,%rax,1) + '\x00', '\x00', '\x00', + '\x00', '\x00' }; + const char nop9[9] = { '\x66', '\x0f', '\x1f', // nopw 0L(%rax,%rax,1) + '\x84', '\x00', '\x00', + '\x00', '\x00', '\x00' }; + const char nop10[10] = { '\x66', '\x2e', '\x0f', // nopw %cs:0L(%rax,%rax,1) + '\x1f', '\x84', '\x00', + '\x00', '\x00', '\x00', + '\x00' }; + const char nop11[11] = { '\x66', '\x66', '\x2e', // data16 + '\x0f', '\x1f', '\x84', // nopw %cs:0L(%rax,%rax,1) + '\x00', '\x00', '\x00', + '\x00', '\x00' }; + const char nop12[12] = { '\x66', '\x66', '\x66', // data16; data16 + '\x2e', '\x0f', '\x1f', // nopw %cs:0L(%rax,%rax,1) + '\x84', '\x00', '\x00', + '\x00', '\x00', '\x00' }; + const char nop13[13] = { '\x66', '\x66', '\x66', // data16; data16; data16 + '\x66', '\x2e', '\x0f', // nopw %cs:0L(%rax,%rax,1) + '\x1f', '\x84', '\x00', + '\x00', '\x00', '\x00', + '\x00' }; + const char nop14[14] = { '\x66', '\x66', '\x66', // data16; data16; data16 + '\x66', '\x66', '\x2e', // data16 + '\x0f', '\x1f', '\x84', // nopw %cs:0L(%rax,%rax,1) + '\x00', '\x00', '\x00', + '\x00', '\x00' }; + const char nop15[15] = { '\x66', '\x66', '\x66', // data16; data16; data16 + '\x66', '\x66', '\x66', // data16; data16 + '\x2e', '\x0f', '\x1f', // nopw %cs:0L(%rax,%rax,1) + '\x84', '\x00', '\x00', + '\x00', '\x00', '\x00' }; const char* nops[16] = { NULL, -- 2.7.4