1 /* Copyright (c) 2015. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
7 #ifndef SIMGRID_MC_CLIENT_H
8 #define SIMGRID_MC_CLIENT_H
10 #include "src/internal_config.h"
17 #include <simgrid/simix.h>
19 #include "src/mc/mc_protocol.h"
20 #include "src/mc/Channel.hpp"
25 /** Model-checked-side of the communication protocol
27 * Send messages to the model-checker and handles message from it.
29 class XBT_PUBLIC() Client {
33 static std::unique_ptr<Client> client_;
36 explicit Client(int fd) : active_(true), channel_(fd) {}
37 void handleMessages();
38 Channel const& getChannel() const { return channel_; }
39 Channel& getChannel() { return channel_; }
41 void reportAssertionFailure(const char* description = nullptr);
42 void ignoreMemory(void* addr, std::size_t size);
43 void ignoreHeap(void* addr, std::size_t size);
44 void unignoreHeap(void* addr, std::size_t size);
45 void declareSymbol(const char *name, int* value);
47 void declareStack(void *stack, size_t size, smx_process_t process, ucontext_t* context);
51 // TODO, remove the singleton antipattern.
52 static Client* initialize();
65 void MC_ignore(void* addr, std::size_t size);