Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp =================================================================== --- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -1847,6 +1847,7 @@ std::string os_name; std::string vendor_name; std::string triple; + uint32_t proc_arch_eflags = 0; uint32_t pointer_byte_size = 0; StringExtractor extractor; ByteOrder byte_order = eByteOrderInvalid; @@ -1883,6 +1884,9 @@ } else if (name.equals("pid")) { if (!value.getAsInteger(16, pid)) ++num_keys_decoded; + } else if (name.equals("eflags")) { + if (!value.getAsInteger(16,proc_arch_eflags)) + ++num_keys_decoded; } } if (num_keys_decoded > 0) @@ -1895,6 +1899,7 @@ // Set the ArchSpec from the triple if we have it. if (!triple.empty()) { m_process_arch.SetTriple(triple.c_str()); + m_process_arch.SetFlags(proc_arch_eflags); if (pointer_byte_size) { assert(pointer_byte_size == m_process_arch.GetAddressByteSize()); } Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp =================================================================== --- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp +++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp @@ -1212,9 +1212,15 @@ // Nothing. break; } - - if (proc_triple.isArch64Bit()) - response.PutCString("ptrsize:8;"); + // In case of MIPS64, pointer size is depend on ELF ABI + // For N32 the pointer size is 4 and for N64 it is 8 + response.Printf("eflags:%" PRIx32 ";", proc_arch.GetFlags()); + if (proc_triple.isArch64Bit()) { + if (proc_arch.IsMIPS()) { + response.Printf("ptrsize:%d;", proc_arch.GetAddressByteSize()); + } else + response.PutCString("ptrsize:8;"); + } else if (proc_triple.isArch32Bit()) response.PutCString("ptrsize:4;"); else if (proc_triple.isArch16Bit())