-/* Copyright (c) 2008-2017. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2008-2019. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "src/mc/ObjectInformation.hpp"
#include "src/mc/Type.hpp"
#include "src/mc/Variable.hpp"
+#include "src/mc/mc_config.hpp"
#include "src/mc/mc_dwarf.hpp"
#include "src/mc/mc_forward.hpp"
#include "src/mc/mc_private.hpp"
#include "src/mc/mc_smx.hpp"
-#include "src/mc/mc_snapshot.hpp"
+#include "src/mc/sosp/mc_snapshot.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, xbt, "Logging specific to mc_compare in mc");
*
* It can hash pairs: the standard hash currently doesn't include this.
*/
-template<class X> struct hash : public std::hash<X> {};
+template <class X> class hash : public std::hash<X> {
+};
template <class X, class Y> class hash<std::pair<X, Y>> {
public:
// This is in snapshot do not use them directly:
const malloc_info* heapinfos1 = snapshot1->read<malloc_info*>(
- (std::uint64_t)heapinfo_address, simgrid::mc::ProcessIndexMissing);
+ RemotePtr<malloc_info*>((std::uint64_t)heapinfo_address), simgrid::mc::ProcessIndexMissing);
const malloc_info* heapinfos2 = snapshot2->read<malloc_info*>(
- (std::uint64_t)heapinfo_address, simgrid::mc::ProcessIndexMissing);
+ RemotePtr<malloc_info*>((std::uint64_t)heapinfo_address), simgrid::mc::ProcessIndexMissing);
while (i1 < state.heaplimit) {
else
return MC_snapshot_region_memcmp(real_area1, heap_region1, real_area2, heap_region2, type->byte_size) != 0;
}
- break;
case DW_TAG_enumeration_type:
if (area_size != -1 && type->byte_size != area_size)
break;
default:
return 0;
- break;
}
for (int i = 0; i < type->element_count; i++) {
// TODO, add support for variable stride (DW_AT_byte_stride)
return 0;
}
- if (type_size != -1) {
- if (type_size != (ssize_t) heapinfo1->busy_block.busy_size
- && type_size != (ssize_t) heapinfo2->busy_block.busy_size
- && (type->name.empty() || type->name == "struct s_smx_context")) {
- if (match_pairs)
- state.match_equals(previous);
- return -1;
- }
+ if (type_size != -1 && type_size != (ssize_t)heapinfo1->busy_block.busy_size &&
+ type_size != (ssize_t)heapinfo2->busy_block.busy_size &&
+ (type->name.empty() || type->name == "struct s_smx_context")) {
+ if (match_pairs)
+ state.match_equals(previous);
+ return -1;
}
if (heapinfo1->busy_block.size != heapinfo2->busy_block.size)
}
// Check if the blocks are already matched together:
- if (state.equals_to1_(block1, frag1).valid_ && state.equals_to2_(block2, frag2).valid_) {
- if (offset1==offset2 && state.fragmentsEqual(block1, frag1, block2, frag2)) {
- if (match_pairs)
- state.match_equals(previous);
- return 0;
- }
+ if (state.equals_to1_(block1, frag1).valid_ && state.equals_to2_(block2, frag2).valid_ && offset1 == offset2 &&
+ state.fragmentsEqual(block1, frag1, block2, frag2)) {
+ if (match_pairs)
+ state.match_equals(previous);
+ return 0;
}
// Compare the size of both fragments:
if (heapinfo1->busy_frag.frag_size[frag1] != heapinfo2->busy_frag.frag_size[frag2]) {
break;
default:
return 0;
- break;
}
for (i = 0; i < type->element_count; i++) {
size_t off = i * elm_size;
return (addr_pointed1 != addr_pointed2);
}
- break;
}
case DW_TAG_structure_type:
case DW_TAG_class_type:
break;
case DW_TAG_subroutine_type:
return -1;
- break;
default:
XBT_VERB("Unknown case: %d", type->type);
break;