Gabriel Corona [Tue, 4 Mar 2014 09:12:26 +0000 (10:12 +0100)]
[mc] Add support for inheritance
DW_TAG_inheritance relations are stored with DW_TAG_member and handled
by the same logic but are flaged as DW_TAG_inheritance.
Gabriel Corona [Thu, 20 Mar 2014 08:33:31 +0000 (09:33 +0100)]
[mc] Fix documentation of the field 'full_type'
The field 'other_object_same_type' was changed into 'full_type' but
the description of the field was not changed accordingly.
Gabriel Corona [Tue, 18 Mar 2014 15:47:14 +0000 (16:47 +0100)]
[mc] Fix compile_warnings
Gabriel Corona [Tue, 18 Mar 2014 14:51:51 +0000 (15:51 +0100)]
[mc] Use reference to types intead of type IDs
We do not need to pass the type ID+object_info everywhere.
It is much simpler to pass a pointer to the type (dw_type_t):
* remove 'info', 'other_info' parameters;
* remove cumbersome 'switch_types' logic (code duplication);
* remove type ID confusion in mm_diff (the type ID of each block was
stored but not the originating ELF obejct leading to an ambiguity);
* the code is now generalisable to more than 2 ELF objects;
* remove type lookups (by name, by ID) which are all resolved at
initialisation time.
Gabriel Corona [Tue, 18 Mar 2014 13:40:20 +0000 (14:40 +0100)]
[mc] Fix type name handling
* use a suitable prefix for type names (struct/class/union);
* rename "types_by_name" into "full_types_by_name" to be more
descriptive.
Gabriel Corona [Tue, 18 Mar 2014 11:51:30 +0000 (12:51 +0100)]
[mc] Fix mismatch between expected snapshot address and passed process address
Function 'compare_areas_with_type' expects snapshot addresses but was
passed process/real addresses in a recursive call.
It is very easy to mix the two types of addresses :/
Gabriel Corona [Mon, 10 Mar 2014 13:11:30 +0000 (14:11 +0100)]
[mc] Add location field in struct/class-members
Store location expression for fields when its location expression is
more complex than a simple offset.
Gabriel Corona [Mon, 10 Mar 2014 12:53:28 +0000 (13:53 +0100)]
[mc] Pass arguments everywhere in the state comparator code
A reference to the snapshot will be needed to resolve complexe
locations.
Gabriel Corona [Mon, 10 Mar 2014 09:47:15 +0000 (10:47 +0100)]
[mc] Remove useless code in MC_unwind_stack_frame
Gabriel Corona [Mon, 10 Mar 2014 09:24:26 +0000 (10:24 +0100)]
[mc] DW_OP_deref
This is used when using C++ inheritance.
Gabriel Corona [Fri, 7 Mar 2014 13:48:01 +0000 (14:48 +0100)]
[mc] Remove old code (mc_location_t)
Gabriel Corona [Fri, 7 Mar 2014 13:07:36 +0000 (14:07 +0100)]
[mc] Use new expression evaluation code frame_base
Gabriel Corona [Fri, 7 Mar 2014 11:49:47 +0000 (12:49 +0100)]
[mc] Implement DW_OP_call_frame_cfa using libunwind
This is used by DWARF4 for DW_AT_frame_base.
We need to implement this in order to use the new DWARf expression
code for DW_AT_frame_base resolution (used in DWARF4
libpthread_nonshared.a).
Gabriel Corona [Fri, 7 Mar 2014 10:29:07 +0000 (11:29 +0100)]
[mc] Use new DWARF expression code for variables
Gabriel Corona [Thu, 6 Mar 2014 14:06:56 +0000 (15:06 +0100)]
[mc] Partial implementation of DWARF expression evaluator
In order to resolve complexe location expressions of (C++ object)
inheritance relationships, it is necessary to implement a real DWARF
expression stack machine.
Gabriel Corona [Thu, 6 Mar 2014 12:29:59 +0000 (13:29 +0100)]
Merge branch 'mc' into mc++
Gabriel Corona [Thu, 6 Mar 2014 12:25:38 +0000 (13:25 +0100)]
[mc] Fix bug when trying to handle DW_OP_regN in MC_dwarf_resolve_location
MC_dwarf_resolve_location is supposed to return the *address* of a
given variable. However, the DW_OP_regN returned the value of the
register and not an address address of a variable with its content.
It should be possible to get such an addresse (the registers are saved
on the stack) but the feature does not seem to be implemented in
libunwind.
Gabriel Corona [Thu, 6 Mar 2014 12:07:19 +0000 (13:07 +0100)]
[mc] Support DWARF4 DW_FORM_sec_offset (found in libpthread_nonshared.a)
Add support to DWARF4 DW_FORM_sec_offset in order to handle DWARF4
libpthread_nonshared.a.
We do not yet handle DWARF3 and 4 but only DWARF2. It is not a big
problem as it is possible to ask GCC to generate DWARF2 with:
-gdwarf-2.
However, even with this option, some static/non-shared libraries might
be included such as libpthread_nonshared.a which might be compiled
with DWARF4 information. This happen in Debian testing (2014-03-06).
Dwarf_Attribute attr;
dwarf_attr_integrate(child, DW_AT_data_member_location, &attr);
- int form = dwarf_whatform(&attr);
+ int form = dwarf_whatform(&attr);
int klass = MC_dwarf_form_get_class(form);
switch (klass) {
case MC_DW_CLASS_EXPRLOC:
@@ -850,7 +850,8 @@ static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, D
variable->name = xbt_strdup(MC_dwarf_attr_string(die, DW_AT_name));
variable->type_origin = MC_dwarf_at_type(die);
- int klass = MC_dwarf_form_get_class(dwarf_whatform(&attr_location));
+ int form = dwarf_whatform(&attr_location);
+ int klass = form == DW_FORM_sec_offset ? MC_DW_CLASS_CONSTANT : MC_dwarf_form_get_class(form);
switch (klass) {
case MC_DW_CLASS_EXPRLOC:
case MC_DW_CLASS_BLOCK:
@@ -882,8 +883,8 @@ static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, D
variable->location = MC_dwarf_get_location_list(info, die, &attr_location);
break;
default:
- xbt_die("Unexpected calss 0x%x (%i) list for location in <%p>%s",
- klass, klass, (void*) variable->dwarf_offset, variable->name);
+ xbt_die("Unexpected form 0x%x (%i), class 0x%x (%i) list for location in <%p>%s",
+ form, form, klass, klass, (void*) variable->dwarf_offset, variable->name);
}
// The current code needs a variable name,
Gabriel Corona [Mon, 3 Mar 2014 14:59:15 +0000 (15:59 +0100)]
[mc] Add support for DW_TAG_unspecified_type (nullptr_t in C++11)
Gabriel Corona [Mon, 3 Mar 2014 12:30:45 +0000 (13:30 +0100)]
[mc] Bring back old code for MPI_Finalize (disabled)
Some test (probenull) do not terminate with the new code of
MPI_Finalize.
Gabriel Corona [Fri, 28 Feb 2014 08:33:45 +0000 (09:33 +0100)]
Merge branch 'mc++' into mc-merge
Gabriel Corona [Mon, 24 Feb 2014 09:10:56 +0000 (10:10 +0100)]
[mc] Fix broken tests with surf++ (because simcall number have changed)
* do not print the simcall numbers as they are not stable;
* remove them from test expected output of tests.
Gabriel Corona [Tue, 25 Feb 2014 14:42:10 +0000 (15:42 +0100)]
[mc] Log some information for the prefiltering phase of state comparator
Gabriel Corona [Tue, 25 Feb 2014 12:21:12 +0000 (13:21 +0100)]
[mc] Handle DW_TAG_class_type as DW_TAG_structure_type (C++)
Gabriel Corona [Tue, 25 Feb 2014 12:09:35 +0000 (13:09 +0100)]
Merge branch 'mc' into mc++
Gabriel Corona [Tue, 25 Feb 2014 11:49:58 +0000 (12:49 +0100)]
Merge bugfix from branch mc-refactor
Conflicts:
src/xbt/mmalloc/mm_diff.c
Gabriel Corona [Tue, 25 Feb 2014 11:47:47 +0000 (12:47 +0100)]
Merge branches 'mc'
Gabriel Corona [Tue, 25 Feb 2014 11:47:17 +0000 (12:47 +0100)]
[mc] Fix format strings
Gabriel Corona [Tue, 25 Feb 2014 11:38:24 +0000 (12:38 +0100)]
Merge bugfix
Gabriel Corona [Tue, 25 Feb 2014 11:36:26 +0000 (12:36 +0100)]
[mc] Fix buf introduces by previous commit
Comparing a size with a DIE tag.
Gabriel Corona [Tue, 25 Feb 2014 11:32:34 +0000 (12:32 +0100)]
[mc] Handle reference_type and rvalue_reference_type as pointer_type (C++)
Gabriel Corona [Tue, 25 Feb 2014 10:03:38 +0000 (11:03 +0100)]
[mc] Skip declaration of data_members (C++)
Skip declaration in in header:
struct foo {
[...]
static int bar
}
We are interested in (.cpp):
int foo:bar = 42;
Gabriel Corona [Tue, 25 Feb 2014 09:51:50 +0000 (10:51 +0100)]
[mc] Skip variables/members which are compile time constants
The current code expect location for each variable/member and it is
missing for constants.
Gabriel Corona [Tue, 25 Feb 2014 09:36:35 +0000 (10:36 +0100)]
[mc] Fix typos
A dwarg is a mix of a dwarf and a warg?
Gabriel Corona [Tue, 25 Feb 2014 09:16:28 +0000 (10:16 +0100)]
[mc] Handle DW_AT_start_scope (for constants)
Gabriel Corona [Tue, 25 Feb 2014 08:55:45 +0000 (09:55 +0100)]
[mc] Handle DW_TAG_namespace (C++)
Marion Guthmuller [Mon, 24 Feb 2014 17:44:02 +0000 (18:44 +0100)]
model-checker : smpi examples for the communication pattern detection
Marion Guthmuller [Mon, 24 Feb 2014 17:40:20 +0000 (18:40 +0100)]
model-checker : print comm pattern
Marion Guthmuller [Mon, 24 Feb 2014 17:39:18 +0000 (18:39 +0100)]
model-checker : use separate configuration flags for comm determinism and send determinism detection
Marion Guthmuller [Mon, 24 Feb 2014 16:03:37 +0000 (17:03 +0100)]
model-checker : check if action not NULL before using it
Gabriel Corona [Mon, 24 Feb 2014 14:11:40 +0000 (15:11 +0100)]
[mc] Basic namespace support (for types)
Gabriel Corona [Mon, 24 Feb 2014 13:00:00 +0000 (14:00 +0100)]
[mc] Do not use linkage_name as a name
If needed, it would be better to use a separate field.
Gabriel Corona [Mon, 24 Feb 2014 12:54:45 +0000 (13:54 +0100)]
[mc] Add MC_dwarf_tag_classify()
Add MC_dwarf_tag_classify(tag) which regroupe different similar
DW_TAG_* items classes. This is in preparation for upcoming
modifications of the DIE handling code.
Gabriel Corona [Mon, 24 Feb 2014 12:22:10 +0000 (13:22 +0100)]
[mc] Do not try to handle scopes inside a subprogram
The variables of a subprogram scopes were merged in the information
about subprogram without any information on its range of validity (for
which range of IP the variable is valid).
As this handling of scopes was broken, this commit ignore the scopes within a
subprogram.
We need to:
* either add frame_t as child of frame_t to represent scope;
* or attach validity information on each variables
This one is needed anyway in order to handle DW_AT_start_scope.
* or both.
Use frame_t for DW_TAG_inlined_subprogram and validity range for
real scope.
- if(dwarf_offdie(dwarf, offset+length, &die)!=NULL) {
- MC_dwarf_handle_die(info, &die, &die, NULL);
+ if(dwarf_offdie(dwarf, offset+length, &unit_die)!=NULL) {
+ Dwarf_Die child;
+ int res;
+ for (res=dwarf_child(&unit_die, &child); res==0; res=dwarf_siblingof(&child,&child)) {
+ MC_dwarf_handle_die(info, &child, &unit_die, NULL);
+ }
}
offset = next_offset;
}
Gabriel Corona [Mon, 24 Feb 2014 11:03:24 +0000 (12:03 +0100)]
[mc] Use dynar instead of dict for storing functions
Multiple instances of the same function with the same name can be
found in a given program:
* different local static functions;
* same inline functions;
* overloads (C++);
* ...
Gabriel Corona [Mon, 24 Feb 2014 09:51:16 +0000 (10:51 +0100)]
[mc] Move MC_ignore_local_variable and MC_ignore_global_variable to initialisation code
Gabriel Corona [Mon, 24 Feb 2014 09:35:01 +0000 (10:35 +0100)]
[mc] Add missing DW_FORM_data1 (enable C++ support)
For some reason DW_FORM_data1 was only used in C++ compile units.
Gabriel Corona [Mon, 24 Feb 2014 09:04:38 +0000 (10:04 +0100)]
Merge 'master' into mc
Conflicts:
src/mc/mc_checkpoint.c
src/mc/mc_global.c
src/mc/mc_private.h
Gabriel Corona [Mon, 24 Feb 2014 08:27:07 +0000 (09:27 +0100)]
Merge branch 'mc-perf' into mc
Gabriel Corona [Mon, 24 Feb 2014 08:27:01 +0000 (09:27 +0100)]
Fix compilation
Arnaud Giersch [Fri, 21 Feb 2014 16:24:46 +0000 (17:24 +0100)]
Use the full jar here.
Arnaud Giersch [Fri, 21 Feb 2014 14:44:49 +0000 (15:44 +0100)]
Add an option to control whether native libraries are bundled into jar file.
May be usefull for e.g. Debian packages.
Arnaud Giersch [Wed, 27 Nov 2013 15:37:49 +0000 (16:37 +0100)]
Isolate generation of the NATIVE path for the jar file.
Now it can be obtained by running:
java -classpath simgrid.jar org.simgrid.msg.NativeLib
Use it also when finalizing the jar file.
Arnaud Giersch [Fri, 21 Feb 2014 15:58:59 +0000 (16:58 +0100)]
distcheck again.
Arnaud Giersch [Fri, 21 Feb 2014 15:05:09 +0000 (16:05 +0100)]
Cosmetics.
Pierre Veyre [Fri, 21 Feb 2014 15:16:46 +0000 (16:16 +0100)]
Disk usage computation bug fix
Gabriel Corona [Fri, 21 Feb 2014 14:21:41 +0000 (15:21 +0100)]
[mc] Avoid resolving TLS over and over again
Pierre Veyre [Fri, 21 Feb 2014 13:46:17 +0000 (14:46 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Pierre Veyre [Fri, 21 Feb 2014 13:45:52 +0000 (14:45 +0100)]
MSG_file_write() bug fix + tesh files improvements
Paul Bédaride [Fri, 21 Feb 2014 12:44:40 +0000 (13:44 +0100)]
Update changelog and news
Paul Bédaride [Fri, 21 Feb 2014 12:44:15 +0000 (13:44 +0100)]
Clean surf
Paul Bédaride [Fri, 21 Feb 2014 10:41:00 +0000 (11:41 +0100)]
Add script to generate multi-platform jar
Arnaud Giersch [Fri, 21 Feb 2014 09:31:29 +0000 (10:31 +0100)]
Make check_dist_archive accept the newly created .gitversion.
Augustin Degomme [Fri, 21 Feb 2014 09:43:41 +0000 (10:43 +0100)]
Changelog update
Augustin Degomme [Fri, 21 Feb 2014 09:42:58 +0000 (10:42 +0100)]
this was not needed anymore
Paul Bédaride [Fri, 21 Feb 2014 09:26:46 +0000 (10:26 +0100)]
Add .gitversion to dist
Gabriel Corona [Fri, 21 Feb 2014 09:04:09 +0000 (10:04 +0100)]
[mc] Merge add_compared_pointers and already_compared_pointers into add_compared_pointers
Avoid doing the binary search twice.
Arnaud Giersch [Thu, 20 Feb 2014 14:26:15 +0000 (15:26 +0100)]
Fix warnings with make simgrid_documentation.
Paul Bédaride [Thu, 20 Feb 2014 15:23:35 +0000 (16:23 +0100)]
FIX: forget to update filename in DefinePackage.cmake
Paul Bédaride [Thu, 20 Feb 2014 15:14:42 +0000 (16:14 +0100)]
Add SG version and Git version in MANIFEST.MF
Pierre Veyre [Thu, 20 Feb 2014 14:04:55 +0000 (15:04 +0100)]
Fix MSG_storage_get_proporties() bug
Gabriel Corona [Thu, 20 Feb 2014 11:26:24 +0000 (12:26 +0100)]
[mc] Avoid (slow) type lookups by name or ID (xbt_dict_get_or_null)
Gabriel Corona [Thu, 20 Feb 2014 10:56:22 +0000 (11:56 +0100)]
[mc] Move mc_find_frame_base in mc_dwarf.c where it belongs
Gabriel Corona [Thu, 20 Feb 2014 10:54:46 +0000 (11:54 +0100)]
[mc] Use resolved addresses in entry.low_pc and entry.high_pc
Gabriel Corona [Thu, 20 Feb 2014 10:41:03 +0000 (11:41 +0100)]
[mc] Use resolved addresses in frame->low_pc and frame->high_pc
Pierre Veyre [Thu, 20 Feb 2014 09:21:05 +0000 (10:21 +0100)]
Missing commit for introduce model specific properties for storage_type
Pierre Veyre [Thu, 20 Feb 2014 09:05:29 +0000 (10:05 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Pierre Veyre [Thu, 20 Feb 2014 09:04:49 +0000 (10:04 +0100)]
Introduce model specific properties for storage_type
Arnaud Giersch [Wed, 19 Feb 2014 14:41:11 +0000 (15:41 +0100)]
Cleanup.
Paul Bédaride [Wed, 19 Feb 2014 10:18:40 +0000 (11:18 +0100)]
Update changelog
Paul Bédaride [Wed, 19 Feb 2014 10:18:21 +0000 (11:18 +0100)]
Fix normalize-pointers script
Arnaud Giersch [Tue, 18 Feb 2014 17:15:43 +0000 (18:15 +0100)]
Inform user when model-checking has been disabled because of HAVE_MMALLOC.
Also use HAVE_MC instead on enable_model-checking in cmake's final report.
Arnaud Giersch [Tue, 18 Feb 2014 16:13:03 +0000 (17:13 +0100)]
Fix some overflows in msg_vm on 32bits archs.
Arnaud Giersch [Tue, 18 Feb 2014 16:22:28 +0000 (17:22 +0100)]
Reindent function.
Gabriel Corona [Tue, 18 Feb 2014 10:38:14 +0000 (11:38 +0100)]
[mc] Do not waste time calling libunwind get_proc_name in the hot spots
In typical executions, nearly 50% of the time was spent in libunwind
get_proc_name.
The algorithm to find the function for a given IP (instruction
pointer) was:
(proc_name, offset) = get_proc_name(ip) // Slow!
dwarf_ip = ip - offset
function = functions_by_name[proc_name]
We added a structure mapping IP ranges to functions and the algorithm
is now:
function = functions_by_ip[ip]
Instead of relying on libunwind, we use the DWARF information to find
the corresponding DWARF TAG_subprogram DIEs directly.
The secution time on some MPICH tests is nearly halved.
Notes:
* It was necessary to disable the support for inlined_subprograms
which was broken anyway: the inlined_subprogram entries should be
stored as children of their parent subprogram (as a block). We need
to add support for scope blocks inside a suprogram to handle this
correctly.
* Currently the translation between process virtual addresses and
DWARF virtual addresses is handled in many different places. We
should change this to process it only when parsing the DWARF DIEs
and be done with it.
Marion Guthmuller [Tue, 18 Feb 2014 14:41:16 +0000 (15:41 +0100)]
model-checker : conflit
Marion Guthmuller [Tue, 18 Feb 2014 14:33:43 +0000 (15:33 +0100)]
model-checker : minor fix
Marion Guthmuller [Tue, 18 Feb 2014 14:33:13 +0000 (15:33 +0100)]
model-checker : new configuration flag for the detection of determinism in communications schemes
Marion Guthmuller [Tue, 18 Feb 2014 14:02:56 +0000 (15:02 +0100)]
model-checker : remove or comment some printf
Marion Guthmuller [Tue, 18 Feb 2014 13:46:55 +0000 (14:46 +0100)]
model-checker : fix comm destroy for send detached and MC enabled
Marion Guthmuller [Tue, 18 Feb 2014 13:44:13 +0000 (14:44 +0100)]
model-checker : try to fix the model-checker in case of send detached
Arnaud Giersch [Mon, 17 Feb 2014 09:55:22 +0000 (10:55 +0100)]
Remove obsolete comment.
Arnaud Giersch [Fri, 14 Feb 2014 15:37:47 +0000 (16:37 +0100)]
Remove useless length modifier 'l' in %l[efg] for printf.
It's indeed wrong in C90, and useless in C99.
Paul Bédaride [Tue, 18 Feb 2014 13:39:44 +0000 (14:39 +0100)]
Fill java-cloud-migration tesh file
Marion Guthmuller [Tue, 18 Feb 2014 13:26:28 +0000 (14:26 +0100)]
model-checker : wait with timeout is always dependant with another transition
Paul Bédaride [Tue, 18 Feb 2014 13:26:13 +0000 (14:26 +0100)]
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
Marion Guthmuller [Tue, 18 Feb 2014 13:19:01 +0000 (14:19 +0100)]
fix debug log
alebre [Tue, 18 Feb 2014 13:17:49 +0000 (14:17 +0100)]
Fix java cloud migration test - Adrien
Marion Guthmuller [Tue, 18 Feb 2014 13:16:27 +0000 (14:16 +0100)]
model-checker : use MC_assert instead of assert for the verification of mpich3 integrated tests
Paul Bédaride [Tue, 18 Feb 2014 13:08:46 +0000 (14:08 +0100)]
Fix java cloud