diff --git a/SConscript b/SConscript index 47665fe81787337d0d6911e78ff7f972eaa14f31..932057a93c601dc177601a387794d7153b1b8f44 100644 --- a/SConscript +++ b/SConscript @@ -19,6 +19,8 @@ import os Import('env') env.Replace(debug=ARGUMENTS.get("debug",0)) +env.Append(CFLAGS=" -DUSE_ELFIO ") +env.Append(CXXFLAGS=" -DUSE_ELFIO ") if int(env['debug']) == 1: print "Setting debug mode" env.Append(CFLAGS=" -g ") diff --git a/src/ehp.cpp b/src/ehp.cpp index bcc41fc4569107d7098c121735c8011d96678e47..02b6305dfbbe89d377a224c0245feb17d3d323e6 100644 --- a/src/ehp.cpp +++ b/src/ehp.cpp @@ -290,7 +290,7 @@ template <int ptrsize> void eh_program_insn_t<ptrsize>::print(uint64_t &pc, int64_t caf) const { // make sure uint8_t is an unsigned char. - static_assert(std::is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); + static_assert(is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); auto &data=program_bytes; auto opcode=program_bytes[0]; @@ -502,10 +502,10 @@ void eh_program_insn_t<ptrsize>::print(uint64_t &pc, int64_t caf) const } template <int ptrsize> -std::tuple<std::string, int64_t, int64_t> eh_program_insn_t<ptrsize>::decode() const +tuple<string, int64_t, int64_t> eh_program_insn_t<ptrsize>::decode() const { // make sure uint8_t is an unsigned char. - static_assert(std::is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); + static_assert(is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); auto& data = program_bytes; auto opcode = program_bytes[0]; @@ -520,51 +520,51 @@ std::tuple<std::string, int64_t, int64_t> eh_program_insn_t<ptrsize>::decode() c { case 1: // case DW_CFA_advance_loc: - return std::make_tuple("cf_advance_loc", +opcode_lower6, 0); + return make_tuple("cf_advance_loc", +opcode_lower6, 0); case 2: if(eh_frame_util_t<ptrsize>::read_uleb128(uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); // case DW_CFA_offset: - return std::make_tuple("offset", +opcode_lower6, uleb); + return make_tuple("offset", +opcode_lower6, uleb); case 3: // case DW_CFA_restore (register #): - return std::make_tuple("restore", +opcode_lower6, 0); + return make_tuple("restore", +opcode_lower6, 0); case 0: switch(opcode_lower6) { case DW_CFA_nop: - return std::make_tuple("nop", 0, 0); + return make_tuple("nop", 0, 0); case DW_CFA_remember_state: - return std::make_tuple("remember_state", 0, 0); + return make_tuple("remember_state", 0, 0); case DW_CFA_restore_state: - return std::make_tuple("restore_state", 0, 0); + return make_tuple("restore_state", 0, 0); // takes single uleb128 case DW_CFA_undefined: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("undefined", uleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("undefined", uleb, 0); case DW_CFA_same_value: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("same_value", uleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("same_value", uleb, 0); case DW_CFA_restore_extended: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("restore_extended", uleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("restore_extended", uleb, 0); case DW_CFA_def_cfa_register: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("def_cfa_register", uleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("def_cfa_register", uleb, 0); case DW_CFA_def_cfa_offset: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("def_cfa_offset", uleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("def_cfa_offset", uleb, 0); case DW_CFA_set_loc: { auto arg = uintptr_t(0xDEADBEEF); @@ -577,75 +577,75 @@ std::tuple<std::string, int64_t, int64_t> eh_program_insn_t<ptrsize>::decode() c arg = *(uint64_t*)&data.data()[pos]; break; } - return std::make_tuple("set_loc", arg, 0); + return make_tuple("set_loc", arg, 0); } case DW_CFA_advance_loc1: { auto loc = *(uint8_t*)(&data.data()[pos]); - return std::make_tuple("advance_loc", loc, 0); + return make_tuple("advance_loc", loc, 0); } case DW_CFA_advance_loc2: { auto loc = *(uint16_t*)(&data.data()[pos]); - return std::make_tuple("advance_loc", loc, 0); + return make_tuple("advance_loc", loc, 0); } case DW_CFA_advance_loc4: { auto loc = *(uint32_t*)(&data.data()[pos]); - return std::make_tuple("advance_loc", loc, 0); + return make_tuple("advance_loc", loc, 0); } case DW_CFA_offset_extended: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); if(eh_frame_util_t<ptrsize>::read_uleb128( uleb2, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("offset_extended", uleb, uleb2); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("offset_extended", uleb, uleb2); case DW_CFA_register: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); if(eh_frame_util_t<ptrsize>::read_uleb128( uleb2, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("register", uleb, uleb2); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("register", uleb, uleb2); case DW_CFA_def_cfa: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); if(eh_frame_util_t<ptrsize>::read_uleb128( uleb2, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("def_cfa", uleb, uleb2); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("def_cfa", uleb, uleb2); case DW_CFA_def_cfa_sf: if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); if(eh_frame_util_t<ptrsize>::read_sleb128( sleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("def_cfa_sf", uleb, sleb); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("def_cfa_sf", uleb, sleb); case DW_CFA_def_cfa_offset_sf: { if(eh_frame_util_t<ptrsize>::read_sleb128( sleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("def_cfa_offset_sf", sleb, 0); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("def_cfa_offset_sf", sleb, 0); } case DW_CFA_offset_extended_sf: { if(eh_frame_util_t<ptrsize>::read_uleb128( uleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); + return make_tuple("unexpected_error", 0, 0); if(eh_frame_util_t<ptrsize>::read_sleb128( sleb, pos, (const uint8_t* const)data.data(), max)) - return std::make_tuple("unexpected_error", 0, 0); - return std::make_tuple("offset_extended_sf", uleb, sleb); + return make_tuple("unexpected_error", 0, 0); + return make_tuple("offset_extended_sf", uleb, sleb); } case DW_CFA_def_cfa_expression: @@ -658,10 +658,10 @@ std::tuple<std::string, int64_t, int64_t> eh_program_insn_t<ptrsize>::decode() c case DW_CFA_GNU_window_save: case DW_CFA_GNU_negative_offset_extended: default: - return std::make_tuple("unhandled_instruction", 0, 0); + return make_tuple("unhandled_instruction", 0, 0); } default: - return std::make_tuple("unhandled_instruction", 0, 0); + return make_tuple("unhandled_instruction", 0, 0); } } @@ -919,7 +919,7 @@ template <int ptrsize> bool eh_program_insn_t<ptrsize>::advance(uint64_t &cur_addr, uint64_t CAF) const { // make sure uint8_t is an unsigned char. - static_assert(std::is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); + static_assert(is_same<unsigned char, uint8_t>::value, "uint8_t is not unsigned char"); auto &data=program_bytes; auto opcode=program_bytes[0]; @@ -2004,7 +2004,7 @@ unique_ptr<const EHFrameParser_t> EHFrameParser_t::factory( else if(ptrsize==8) ret_val=new split_eh_frame_impl_t<8>(eh_frame_sr,eh_frame_hdr_sr,gcc_except_table_sr); else - throw std::out_of_range("ptrsize must be 4 or 8"); + throw out_of_range("ptrsize must be 4 or 8"); ret_val->parse(); diff --git a/src/ehp_priv.hpp b/src/ehp_priv.hpp index b7bb414d48e67a3e6ec6b0641658d0b52e4f895e..c399a966f53850433fe0f3ce5b51e4dede29db8f 100644 --- a/src/ehp_priv.hpp +++ b/src/ehp_priv.hpp @@ -89,7 +89,7 @@ class eh_program_insn_t : public EHProgramInstruction_t eh_program_insn_t(const string &s) ; void print(uint64_t &pc, int64_t caf) const; - std::tuple<std::string, int64_t, int64_t> decode() const; + tuple<string, int64_t, int64_t> decode() const; uint64_t getSize() const { return program_bytes.size(); } void push_byte(uint8_t c) ;