| Index: src/client/linux/minidump_writer/minidump_writer.cc
|
| diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc
|
| index 65e655ac34fbdd6c0ded2facdd0d61ee88f93d3e..e9ab3dbc58a2dc4d9a4b64907b15debe26e300f6 100644
|
| --- a/src/client/linux/minidump_writer/minidump_writer.cc
|
| +++ b/src/client/linux/minidump_writer/minidump_writer.cc
|
| @@ -509,7 +509,7 @@ class MinidumpWriter {
|
| continue;
|
|
|
| MDRawModule mod;
|
| - if (!FillRawModule(mapping, true, i, mod, NULL))
|
| + if (!FillRawModule(mapping, true, i, &mod, NULL))
|
| return false;
|
| list.CopyIndexAfterObject(j++, &mod, MD_MODULE_SIZE);
|
| }
|
| @@ -518,7 +518,7 @@ class MinidumpWriter {
|
| iter != mapping_list_.end();
|
| ++iter) {
|
| MDRawModule mod;
|
| - if (!FillRawModule(iter->first, false, 0, mod, iter->second))
|
| + if (!FillRawModule(iter->first, false, 0, &mod, iter->second))
|
| return false;
|
| list.CopyIndexAfterObject(j++, &mod, MD_MODULE_SIZE);
|
| }
|
| @@ -532,12 +532,12 @@ class MinidumpWriter {
|
| bool FillRawModule(const MappingInfo& mapping,
|
| bool member,
|
| unsigned int mapping_id,
|
| - MDRawModule& mod,
|
| + MDRawModule* mod,
|
| const uint8_t* identifier) {
|
| - my_memset(&mod, 0, MD_MODULE_SIZE);
|
| + my_memset(mod, 0, MD_MODULE_SIZE);
|
|
|
| - mod.base_of_image = mapping.start_addr;
|
| - mod.size_of_image = mapping.size;
|
| + mod->base_of_image = mapping.start_addr;
|
| + mod->size_of_image = mapping.size;
|
|
|
| uint8_t cv_buf[MDCVInfoPDB70_minsize + NAME_MAX];
|
| uint8_t* cv_ptr = cv_buf;
|
| @@ -572,12 +572,12 @@ class MinidumpWriter {
|
| my_memcpy(cv_ptr, file_name, file_name_len + 1);
|
| cv.Copy(cv_buf, MDCVInfoPDB70_minsize + file_name_len + 1);
|
|
|
| - mod.cv_record = cv.location();
|
| + mod->cv_record = cv.location();
|
|
|
| MDLocationDescriptor ld;
|
| if (!minidump_writer_.WriteString(file_path, my_strlen(file_path), &ld))
|
| return false;
|
| - mod.module_name_rva = ld.rva;
|
| + mod->module_name_rva = ld.rva;
|
| return true;
|
| }
|
|
|
| @@ -684,17 +684,14 @@ class MinidumpWriter {
|
| }
|
|
|
| #ifdef __mips__
|
| - if (dyn.d_tag == DT_MIPS_RLD_MAP) {
|
| - r_debug = reinterpret_cast<struct r_debug*>(dyn.d_un.d_ptr);
|
| - continue;
|
| - }
|
| + const int32_t debug_tag = DT_MIPS_RLD_MAP;
|
| #else
|
| - if (dyn.d_tag == DT_DEBUG) {
|
| + const int32_t debug_tag = DT_DEBUG;
|
| +#endif
|
| + if (dyn.d_tag == debug_tag) {
|
| r_debug = reinterpret_cast<struct r_debug*>(dyn.d_un.d_ptr);
|
| continue;
|
| - }
|
| -#endif
|
| - else if (dyn.d_tag == DT_NULL) {
|
| + } else if (dyn.d_tag == DT_NULL) {
|
| break;
|
| }
|
| }
|
| @@ -836,15 +833,14 @@ class MinidumpWriter {
|
| ProcCpuInfoReader* const reader = new(allocator) ProcCpuInfoReader(fd);
|
| const char* field;
|
| while (reader->GetNextField(&field)) {
|
| - for (size_t i = 0;
|
| - i < sizeof(cpu_info_table) / sizeof(cpu_info_table[0]);
|
| - i++) {
|
| - CpuInfoEntry* entry = &cpu_info_table[i];
|
| - if (i > 0 && entry->found) {
|
| + bool is_first_entry = true;
|
| + for (CpuInfoEntry& entry : cpu_info_table) {
|
| + if (!is_first_entry && entry.found) {
|
| // except for the 'processor' field, ignore repeated values.
|
| continue;
|
| }
|
| - if (!my_strcmp(field, entry->info_name)) {
|
| + is_first_entry = false;
|
| + if (!my_strcmp(field, entry.info_name)) {
|
| size_t value_len;
|
| const char* value = reader->GetValueAndLen(&value_len);
|
| if (value_len == 0)
|
| @@ -854,8 +850,8 @@ class MinidumpWriter {
|
| if (my_read_decimal_ptr(&val, value) == value)
|
| continue;
|
|
|
| - entry->value = static_cast<int>(val);
|
| - entry->found = true;
|
| + entry.value = static_cast<int>(val);
|
| + entry.found = true;
|
| }
|
| }
|
|
|
| @@ -871,10 +867,8 @@ class MinidumpWriter {
|
| }
|
|
|
| // make sure we got everything we wanted
|
| - for (size_t i = 0;
|
| - i < sizeof(cpu_info_table) / sizeof(cpu_info_table[0]);
|
| - i++) {
|
| - if (!cpu_info_table[i].found) {
|
| + for (const CpuInfoEntry& entry : cpu_info_table) {
|
| + if (!entry.found) {
|
| return false;
|
| }
|
| }
|
| @@ -1010,18 +1004,15 @@ class MinidumpWriter {
|
| new(allocator) ProcCpuInfoReader(fd);
|
| const char* field;
|
| while (reader->GetNextField(&field)) {
|
| - for (size_t i = 0;
|
| - i < sizeof(cpu_id_entries)/sizeof(cpu_id_entries[0]);
|
| - ++i) {
|
| - const CpuIdEntry* entry = &cpu_id_entries[i];
|
| - if (my_strcmp(entry->field, field) != 0)
|
| + for (const CpuInfoEntry& entry : cpu_info_table) {
|
| + if (my_strcmp(entry.field, field) != 0)
|
| continue;
|
| uintptr_t result = 0;
|
| const char* value = reader->GetValue();
|
| const char* p = value;
|
| if (value[0] == '0' && value[1] == 'x') {
|
| p = my_read_hex_ptr(&result, value+2);
|
| - } else if (entry->format == 'x') {
|
| + } else if (entry.format == 'x') {
|
| p = my_read_hex_ptr(&result, value);
|
| } else {
|
| p = my_read_decimal_ptr(&result, value);
|
| @@ -1029,8 +1020,8 @@ class MinidumpWriter {
|
| if (p == value)
|
| continue;
|
|
|
| - result &= (1U << entry->bit_length)-1;
|
| - result <<= entry->bit_lshift;
|
| + result &= (1U << entry.bit_length)-1;
|
| + result <<= entry.bit_lshift;
|
| sys_info->cpu.arm_cpu_info.cpuid |=
|
| static_cast<uint32_t>(result);
|
| }
|
| @@ -1084,7 +1075,7 @@ class MinidumpWriter {
|
| const char* tag = value;
|
| size_t tag_len = value_len;
|
| const char* p = my_strchr(tag, ' ');
|
| - if (p != NULL) {
|
| + if (p) {
|
| tag_len = static_cast<size_t>(p - tag);
|
| value += tag_len + 1;
|
| value_len -= tag_len + 1;
|
| @@ -1092,14 +1083,10 @@ class MinidumpWriter {
|
| tag_len = strlen(tag);
|
| value_len = 0;
|
| }
|
| - for (size_t i = 0;
|
| - i != sizeof(cpu_features_entries) /
|
| - sizeof(cpu_features_entries[0]);
|
| - ++i) {
|
| - const CpuFeaturesEntry* entry = &cpu_features_entries[i];
|
| - if (tag_len == strlen(entry->tag) &&
|
| - !memcmp(tag, entry->tag, tag_len)) {
|
| - sys_info->cpu.arm_cpu_info.elf_hwcaps |= entry->hwcaps;
|
| + for (const CpuInfoEntry& entry : cpu_features_entries) {
|
| + if (tag_len == strlen(entry.tag) &&
|
| + !memcmp(tag, entry.tag, tag_len)) {
|
| + sys_info->cpu.arm_cpu_info.elf_hwcaps |= entry.hwcaps;
|
| break;
|
| }
|
| }
|
|
|