Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : fix memory leak
[simgrid.git] / README.coding
index 481dfe9..e48b67f 100644 (file)
@@ -16,19 +16,19 @@ having all of them in the same package makes the installation easier
 for end-users. Moreover, it enables to share the compilation chain and
 eases the development.
 
 for end-users. Moreover, it enables to share the compilation chain and
 eases the development.
 
-The tree is not splited on projects, but on file finality:
+The tree is not split on projects, but on file finality:
  include/            -> all *public* headers
  include/xbt/*.h     -> one file per module
 
  src/include -> another location for protected headers. Used by SURF, and
                 other should be converted, since this is the Right Thing.
 
  include/            -> all *public* headers
  include/xbt/*.h     -> one file per module
 
  src/include -> another location for protected headers. Used by SURF, and
                 other should be converted, since this is the Right Thing.
 
- testsuite/ -> The more test the better. 
+ testsuite/ -> The more test the better.
                Same organization than src/ and include/
                Tests are allowed to load some headers of the module they test.
               All tests should be listed in run_test.in so that they get
                Same organization than src/ and include/
                Tests are allowed to load some headers of the module they test.
               All tests should be listed in run_test.in so that they get
-               run on 'make check'. 
-                 
+               run on 'make check'.
+
  examples/ -> Supposed to be copy/pastable by the user, so keep it clear and
                 avoid any kind of trick. In particular, do only include the
                 public headers here.
  examples/ -> Supposed to be copy/pastable by the user, so keep it clear and
                 avoid any kind of trick. In particular, do only include the
                 public headers here.
@@ -52,25 +52,25 @@ FIXME: this list of arguments is still to be discussed, maybe
 *****************************************************
 
 It may sound strange, but the type naming convention was source of intense
 *****************************************************
 
 It may sound strange, but the type naming convention was source of intense
-discution between da SimGrid posse members. The convention we came to may not
+discussion between da SimGrid posse members. The convention we came to may not
 be the best solution, but it has the merit to exist and leave everyone work.
 So please stick to it.
 
 be the best solution, but it has the merit to exist and leave everyone work.
 So please stick to it.
 
-  - ???_t is a valid type (builded with typedef)
+  - ???_t is a valid type (built with typedef)
   - s_toto_t is a structure (access to fields with .)
   - s_toto   is a structure needing 'struct' keyword to be used
   - e_toto_t is an enum
   - u_toto_t is an union
   - u_toto   is an union needing 'union' keyword to be used
   -   toto_t is an 'object' (struct*)
   - s_toto_t is a structure (access to fields with .)
   - s_toto   is a structure needing 'struct' keyword to be used
   - e_toto_t is an enum
   - u_toto_t is an union
   - u_toto   is an union needing 'union' keyword to be used
   -   toto_t is an 'object' (struct*)
-  
+
 Please to not call toto_t something else than an 'object' (ie, something you
 have to call _new and _free on it).
 
 Please to not call toto_t something else than an 'object' (ie, something you
 have to call _new and _free on it).
 
-Exemple:
+Example:
   typedef struct s_toto {} s_toto_t, *toto_t;
   typedef enum {} e_toto_t;
   typedef struct s_toto {} s_toto_t, *toto_t;
   typedef enum {} e_toto_t;
-  
+
 Moreover, only toto_t (and e_toto_t) are public. The rest (mainly s_toto_t)
 is private.
 
 Moreover, only toto_t (and e_toto_t) are public. The rest (mainly s_toto_t)
 is private.
 
@@ -86,21 +86,27 @@ MALLOC:
  Don't use it, or you'll have to check the result (and do some dirty stuff
  on AIX). Use xbt_malloc (or even better, xbt_new) instead.
 
  Don't use it, or you'll have to check the result (and do some dirty stuff
  on AIX). Use xbt_malloc (or even better, xbt_new) instead.
 
-SIZE_T
+SIZE_T (FIXME: obsolete?)
  If possible, avoid size_t and use unsigned long instead. If not,
  #include <sys/types.h> in all files manipulating size_t
  If possible, avoid size_t and use unsigned long instead. If not,
  #include <sys/types.h> in all files manipulating size_t
- do cast it to unsigned long before printing (and use %lu)
-PRINTF pointer difference
+ do cast it to unsigned long before printing (and use %lu),
+ or use %zu.
+
+PRINTF pointer difference (FIXME: advertise %td instead?)
  printf ("diff = %ld\n", (long) (pointer2 - pointer1));
  printf ("diff = %ld\n", (long) (pointer2 - pointer1));
-  
 
 
-**             
+INLINE functions
+ The definition of a inline function must be visible when it is used.
+ As such, an inline function should be defined (an not only declared)
+ in header file (.h) with attributes 'static XBT_INLINE'.  It should
+ not be defined in source file (.c).
+
+**
 ** Commenting the source: doxygen
 **
 ****************************************************
 
 ** Commenting the source: doxygen
 **
 ****************************************************
 
-The global structure of the documentation is in doc/modules.doc 
+The global structure of the documentation is in doc/modules.doc
 
 The structure of each module (xbt, msg, etc) is in doc/module-<module>.doc
 
 
 The structure of each module (xbt, msg, etc) is in doc/module-<module>.doc
 
@@ -113,26 +119,26 @@ users can see the intended order).
 The documentation of each type and macro are also in the public header since
 this is were they live.
 
 The documentation of each type and macro are also in the public header since
 this is were they live.
 
-The documentation of each function must be in the C file were it lives. 
+The documentation of each function must be in the C file were it lives.
 
 Any public element (function, type and macro) must have a @brief part.
 
 **
 
 Any public element (function, type and macro) must have a @brief part.
 
 **
-** XBT virtualization mecanism (FIXME:this section is deprecated)
+** XBT virtualization mechanism (FIXME: this section is deprecated)
 **
 ****************************************************
 
 **
 ****************************************************
 
-There is some functionnalities that we want to virtualize in XBT. We
+There is some functionalities that we want to virtualize in XBT. We
 want xbt_time to give the simulated clock when running on top of the
 simulator, and the host clock when running on a real system. This
 could be placed in GRAS (and was, historically), but there is some
 want xbt_time to give the simulated clock when running on top of the
 simulator, and the host clock when running on a real system. This
 could be placed in GRAS (and was, historically), but there is some
-reason to lower it down to XBT. 
+reason to lower it down to XBT.
 
 Here is the used naming scheme:
 
 
 Here is the used naming scheme:
 
-  - xbt_<module>_<func>(): functions working both in SG and RL  
+  - xbt_<module>_<func>(): functions working both in SG and RL
   - xbt_os_<module>_<func>(): RL functions usable even in simulator
   - xbt_os_<module>_<func>(): RL functions usable even in simulator
-    
+
     That way, in libsimgrid, we still can use native functions if we
     want to. It may for example be useful to get the real time when
     implementing the simulator. Think of the SIGINT handler, which
     That way, in libsimgrid, we still can use native functions if we
     want to. It may for example be useful to get the real time when
     implementing the simulator. Think of the SIGINT handler, which
@@ -142,17 +148,17 @@ Here is the used naming scheme:
 Here is the file layout:
 
   - xbt_rl_<module>.c: native implementation (xbt_<module>_<func>()).
 Here is the file layout:
 
   - xbt_rl_<module>.c: native implementation (xbt_<module>_<func>()).
-    Simply call the corresponding xbt_os_<module>_<func>.     
+    Simply call the corresponding xbt_os_<module>_<func>.
     Part only of libgras.so
     Part only of libgras.so
-    
+
   - xbt_sg_<module>.c: SIMIX implementation xbt_<module>_<func>()).
   - xbt_sg_<module>.c: SIMIX implementation xbt_<module>_<func>()).
-    Simply call the corresponding SIMIX implementation. 
+    Simply call the corresponding SIMIX implementation.
     Part only of libsimgrid.so
     Part only of libsimgrid.so
-    
+
   - xbt_os_<module>.c: body of the functions implementing natively the
     stuff (xbt_os_<module>_<func>()).
     Part of both libgras.so and libsimgrid.so
   - xbt_os_<module>.c: body of the functions implementing natively the
     stuff (xbt_os_<module>_<func>()).
     Part of both libgras.so and libsimgrid.so
-    
+
 Since there is almost nothing in xbt_rl_module.c and xbt_sg_module.c,
 it'd be better to use symbol aliasing here (to declare in the object
 code that the same function have two names), but I'm still
 Since there is almost nothing in xbt_rl_module.c and xbt_sg_module.c,
 it'd be better to use symbol aliasing here (to declare in the object
 code that the same function have two names), but I'm still
@@ -163,8 +169,25 @@ investigating the portability of the thing to windows.
 * SimGrid Hacker Survival Guide (FIXME: should be betterly placed)
 ********************************
 
 * SimGrid Hacker Survival Guide (FIXME: should be betterly placed)
 ********************************
 
+* Before pushing any change, don't forget to check if the compilation
+  passes with compiler optimizations and warnings turned on:
+      cmake -Denable_compile_optimizations=ON \
+            -Denable_compile_warnings=ON
+
+* If you want to debug memory allocation problems, here are a few hints:
+  - disable compiler optimizations, to have better backtraces;
+  - disable the mallocators, or it will be hard to match malloc's with
+    free's;
+  - disable model checking, unless your problem lies in the model
+    checker part of SimGrid (MC brings its own malloc implementation,
+    which valgrind doesn't understand).
+  All this is configured with:
+      cmake -Denable_model-checking=OFF \
+            -Denable_mallocators=OFF \
+            -Denable_compile_optimizations=OFF
+
 * If you break the logs (for example while hacking in the dynars), you
   want to define XBT_LOG_MAYDAY at the beginning of log.h. It will
 * If you break the logs (for example while hacking in the dynars), you
   want to define XBT_LOG_MAYDAY at the beginning of log.h. It will
-  desactivate the whole logging mecanism, switching to printfs
+  deactivate the whole logging mechanism, switching to printfs
   instead. SimGrid becomes incredibly verbose when doing so, but it
   instead. SimGrid becomes incredibly verbose when doing so, but it
-  you let you fixing the dynars.
\ No newline at end of file
+  you let you fixing the dynars.