aboutsummaryrefslogtreecommitdiffstats
path: root/lib/runtime_tools
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-08-30 20:55:08 +0200
committerSverker Eriksson <[email protected]>2017-08-30 20:55:08 +0200
commit7c67bbddb53c364086f66260701bc54a61c9659c (patch)
tree92ab0d4b91d5e2f6e7a3f9d61ea25089e8a71fe0 /lib/runtime_tools
parent97dc5e7f396129222419811c173edc7fa767b0f8 (diff)
parent3b7a6ffddc819bf305353a593904cea9e932e7dc (diff)
downloadotp-7c67bbddb53c364086f66260701bc54a61c9659c.tar.gz
otp-7c67bbddb53c364086f66260701bc54a61c9659c.tar.bz2
otp-7c67bbddb53c364086f66260701bc54a61c9659c.zip
Merge tag 'OTP-19.0' into sverker/19/binary_to_atom-utf8-crash/ERL-474/OTP-14590
Diffstat (limited to 'lib/runtime_tools')
-rw-r--r--lib/runtime_tools/Makefile23
-rw-r--r--lib/runtime_tools/c_src/Makefile.in116
-rw-r--r--lib/runtime_tools/c_src/dtrace_user.d21
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c637
-rw-r--r--lib/runtime_tools/c_src/dyntrace_lttng.h367
-rw-r--r--lib/runtime_tools/c_src/trace_file_drv.c64
-rw-r--r--lib/runtime_tools/c_src/trace_ip_drv.c41
-rw-r--r--lib/runtime_tools/doc/specs/.gitignore1
-rw-r--r--lib/runtime_tools/doc/src/LTTng.xml595
-rw-r--r--lib/runtime_tools/doc/src/Makefile35
-rw-r--r--lib/runtime_tools/doc/src/book.xml25
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml412
-rw-r--r--lib/runtime_tools/doc/src/dyntrace.xml25
-rw-r--r--lib/runtime_tools/doc/src/erts_alloc_config.xml23
-rw-r--r--lib/runtime_tools/doc/src/fascicules.xml2
-rw-r--r--lib/runtime_tools/doc/src/msacc.xml305
-rw-r--r--lib/runtime_tools/doc/src/notes.xml351
-rw-r--r--lib/runtime_tools/doc/src/notes_history.xml23
-rw-r--r--lib/runtime_tools/doc/src/part.xml26
-rw-r--r--lib/runtime_tools/doc/src/part_notes.xml25
-rw-r--r--lib/runtime_tools/doc/src/part_notes_history.xml23
-rw-r--r--lib/runtime_tools/doc/src/ref_man.xml27
-rw-r--r--lib/runtime_tools/doc/src/runtime_tools_app.xml23
-rw-r--r--lib/runtime_tools/doc/src/specs.xml5
-rw-r--r--lib/runtime_tools/doc/src/system_information.xml99
-rw-r--r--lib/runtime_tools/examples/dist.d21
-rw-r--r--lib/runtime_tools/examples/dist.systemtap21
-rw-r--r--lib/runtime_tools/examples/driver1.d21
-rw-r--r--lib/runtime_tools/examples/driver1.systemtap21
-rw-r--r--lib/runtime_tools/examples/efile_drv.d21
-rw-r--r--lib/runtime_tools/examples/efile_drv.systemtap21
-rw-r--r--lib/runtime_tools/examples/function-calls.d21
-rw-r--r--lib/runtime_tools/examples/function-calls.systemtap21
-rw-r--r--lib/runtime_tools/examples/garbage-collection.d21
-rw-r--r--lib/runtime_tools/examples/garbage-collection.systemtap21
-rw-r--r--lib/runtime_tools/examples/memory1.d21
-rw-r--r--lib/runtime_tools/examples/memory1.systemtap21
-rw-r--r--lib/runtime_tools/examples/messages.d21
-rw-r--r--lib/runtime_tools/examples/messages.systemtap21
-rw-r--r--lib/runtime_tools/examples/port1.d21
-rw-r--r--lib/runtime_tools/examples/port1.systemtap21
-rw-r--r--lib/runtime_tools/examples/process-scheduling.d21
-rw-r--r--lib/runtime_tools/examples/process-scheduling.systemtap21
-rw-r--r--lib/runtime_tools/examples/spawn-exit.d21
-rw-r--r--lib/runtime_tools/examples/spawn-exit.systemtap21
-rw-r--r--lib/runtime_tools/examples/user-probe-n.d21
-rw-r--r--lib/runtime_tools/examples/user-probe-n.systemtap21
-rw-r--r--lib/runtime_tools/examples/user-probe.d21
-rw-r--r--lib/runtime_tools/examples/user-probe.systemtap21
-rw-r--r--lib/runtime_tools/include/observer_backend.hrl21
-rw-r--r--lib/runtime_tools/src/Makefile28
-rw-r--r--lib/runtime_tools/src/appmon_info.erl30
-rw-r--r--lib/runtime_tools/src/dbg.erl236
-rw-r--r--lib/runtime_tools/src/dyntrace.erl75
-rw-r--r--lib/runtime_tools/src/erts_alloc_config.erl200
-rw-r--r--lib/runtime_tools/src/msacc.erl355
-rw-r--r--lib/runtime_tools/src/observer_backend.erl115
-rw-r--r--lib/runtime_tools/src/percept_profile.erl32
-rw-r--r--lib/runtime_tools/src/runtime_tools.app.src30
-rw-r--r--lib/runtime_tools/src/runtime_tools.appup.src31
-rw-r--r--lib/runtime_tools/src/runtime_tools.erl23
-rw-r--r--lib/runtime_tools/src/runtime_tools_sup.erl24
-rw-r--r--lib/runtime_tools/src/system_information.erl834
-rw-r--r--lib/runtime_tools/src/ttb_autostart.erl1
-rw-r--r--lib/runtime_tools/test/Makefile7
-rw-r--r--lib/runtime_tools/test/dbg_SUITE.erl1510
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/Makefile.src8
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c113
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl21
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl21
-rw-r--r--lib/runtime_tools/test/dyntrace_SUITE.erl58
-rw-r--r--lib/runtime_tools/test/dyntrace_lttng_SUITE.erl383
-rw-r--r--lib/runtime_tools/test/erts_alloc_config_SUITE.erl192
-rw-r--r--lib/runtime_tools/test/msacc_SUITE.erl132
-rw-r--r--lib/runtime_tools/test/runtime_tools_SUITE.erl66
-rw-r--r--lib/runtime_tools/test/system_information_SUITE.erl307
-rw-r--r--lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat9875
-rw-r--r--lib/runtime_tools/vsn.mk2
78 files changed, 16710 insertions, 1818 deletions
diff --git a/lib/runtime_tools/Makefile b/lib/runtime_tools/Makefile
index 0094bb036d..eec1ff379b 100644
--- a/lib/runtime_tools/Makefile
+++ b/lib/runtime_tools/Makefile
@@ -1,18 +1,19 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
#
# %CopyrightEnd%
#
diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
index d315a90e18..4530a83aee 100644
--- a/lib/runtime_tools/c_src/Makefile.in
+++ b/lib/runtime_tools/c_src/Makefile.in
@@ -1,18 +1,19 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
#
# %CopyrightEnd%
#
@@ -21,11 +22,6 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
include $(ERL_TOP)/make/$(TARGET)/otp_ded.mk
# ----------------------------------------------------
-# Items from top-level configure
-# ----------------------------------------------------
-DTRACE_ENABLED=@DTRACE_ENABLED@
-DTRACE_ENABLED_2STEP=@DTRACE_ENABLED_2STEP@
-# ----------------------------------------------------
# Application version
# ----------------------------------------------------
include ../vsn.mk
@@ -37,21 +33,18 @@ VSN=$(RUNTIME_TOOLS_VSN)
# be set for that system only.
# ----------------------------------------------------
CC = $(DED_CC)
-CFLAGS = $(DED_CFLAGS)
+CFLAGS = $(DED_CFLAGS) -I./
LD = $(DED_LD)
SHELL = /bin/sh
LIBS = $(DED_LIBS)
LDFLAGS += $(DED_LDFLAGS)
-DTRACE_LIBNAME = dyntrace
+TRACE_LIBNAME = dyntrace trace_file_drv trace_ip_drv
SYSINCLUDE = $(DED_SYS_INCLUDE)
TRACE_DRV_INCLUDES = $(SYSINCLUDE)
-ALL_CFLAGS = $(CFLAGS) @DEFS@ $(TYPE_FLAGS) $(TRACE_DRV_INCLUDES) \
- -I$(OBJDIR) -I$(ERL_TOP)/erts/emulator/$(TARGET)
-
ifeq ($(TYPE),debug)
TYPEMARKER = .debug
TYPE_FLAGS = $(subst -O3,,$(subst -O2,,$(CFLAGS))) -DDEBUG @DEBUG_FLAGS@
@@ -65,6 +58,9 @@ TYPE_FLAGS = $(CFLAGS)
endif
endif
+ALL_CFLAGS = @DEFS@ $(TYPE_FLAGS) $(TRACE_DRV_INCLUDES) \
+ -I$(OBJDIR) -I$(ERL_TOP)/erts/emulator/$(TARGET)
+
ROOTDIR = $(ERL_TOP)/lib
PRIVDIR = ../priv
LIBDIR = $(PRIVDIR)/lib/$(TARGET)
@@ -78,58 +74,16 @@ RELSYSDIR = $(RELEASE_PATH)/lib/runtime_tools-$(VSN)
# ----------------------------------------------------
# Misc Macros
# ----------------------------------------------------
-before_DTrace_OBJS = $(OBJDIR)/dyntrace$(TYPEMARKER).o
-## NIF_MAKEFILE = $(PRIVDIR)/Makefile
-# Higher-level makefiles says that we can only compile on UNIX flavors
-NIF_LIB = $(LIBDIR)/dyntrace$(TYPEMARKER).@DED_EXT@
+TRACE_LIBS = $(foreach LIB, $(TRACE_LIBNAME), $(LIBDIR)/$(LIB)$(TYPEMARKER).@DED_EXT@)
-ifeq ($(HOST_OS),)
-HOST_OS := $(shell $(ERL_TOP)/erts/autoconf/config.guess)
-endif
-
-TRACE_IP_DRV_OBJS = \
- $(OBJDIR)/trace_ip_drv.o
-
-TRACE_FILE_DRV_OBJS = \
- $(OBJDIR)/trace_file_drv.o
-
-ifeq ($(findstring win32,$(TARGET)), win32)
-SOLIBS = $(LIBDIR)/trace_ip_drv.dll $(LIBDIR)/trace_file_drv.dll
-LN=cp
-else
-SOLIBS = $(LIBDIR)/trace_ip_drv.so $(LIBDIR)/trace_file_drv.so
-endif
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
_create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
-debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(NIF_LIB)
-
-ifdef DTRACE_ENABLED
-DTRACE_USER_HEADER=$(OBJDIR)/dtrace_user.h
-$(OBJDIR)/dtrace_user.h: ./dtrace_user.d
- $(dtrace_verbose)dtrace -h -C $(INCLUDES) \
- -s ./dtrace_user.d \
- -o ./dtrace_user.tmp
- $(V_at)sed -e '/^#define[ ]*ERLANG_[A-Z0-9_]*(.*)/y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' ./dtrace_user.tmp > $@
- $(V_at)rm ./dtrace_user.tmp
-else
-DTRACE_USER_HEADER=
-endif
-
-DTRACE_OBJS =
-ifdef DTRACE_ENABLED_2STEP
-DTRACE_OBJS += $(OBJDIR)/dtrace_user.o
-$(OBJDIR)/dtrace_user.o: $(before_DTrace_OBJS) $(OBJDIR)/dtrace_user.h
- $(dtrace_verbose)dtrace -G -C \
- -s ./dtrace_user.d \
- -o $@ $(before_DTrace_OBJS)
-endif
-
-DYNTRACE_OBJS = $(before_DTrace_OBJS) $(DTRACE_OBJS)
+debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(TRACE_LIBS)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -137,50 +91,26 @@ $(OBJDIR):
$(LIBDIR):
-@mkdir -p $(LIBDIR)
-$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c $(DTRACE_USER_HEADER)
- $(V_at)$(INSTALL_DIR) $(OBJDIR)
+$(OBJDIR)/%$(TYPEMARKER).o: %.c dyntrace_lttng.h
$(V_CC) -c -o $@ $(ALL_CFLAGS) $<
-$(NIF_LIB): $(DYNTRACE_OBJS)
- $(V_at)$(INSTALL_DIR) $(LIBDIR)
- $(V_LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
-
-$(OBJDIR)/%.o: %.c
- $(V_CC) -c -o $@ $(ALL_CFLAGS) $<
-
-$(LIBDIR)/trace_ip_drv.so: $(TRACE_IP_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ -lc $(LIBS)
-
-$(LIBDIR)/trace_file_drv.so: $(TRACE_FILE_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ -lc $(LIBS)
-
-$(LIBDIR)/trace_ip_drv.dll: $(TRACE_IP_DRV_OBJS)
- $(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
-$(LIBDIR)/trace_file_drv.dll: $(TRACE_FILE_DRV_OBJS)
+$(LIBDIR)/%$(TYPEMARKER).@DED_EXT@: $(OBJDIR)/%$(TYPEMARKER).o
$(V_LD) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
- rm -f $(SOLIBS) $(TRACE_IP_DRV_OBJS) $(TRACE_FILE_DRV_OBJS)
- rm -f $(LIBDIR)/dyntrace.@DED_EXT@
- rm -f $(LIBDIR)/dyntrace.debug.@DED_EXT@
- rm -f $(LIBDIR)/dyntrace.valgrind.@DED_EXT@
- rm -f $(OBJDIR)/dyntrace.o
- rm -f $(OBJDIR)/dyntrace.debug.o
- rm -f $(OBJDIR)/dyntrace.valgrind.o
+ rm -f $(TRACE_LIBS)
rm -f core *~
docs:
# ----------------------------------------------------
# Release Target
-# ----------------------------------------------------
+# ----------------------------------------------------
include $(ERL_TOP)/make/otp_release_targets.mk
release_spec: opt
- $(INSTALL_DIR) "$(RELSYSDIR)/priv/obj"
$(INSTALL_DIR) "$(RELSYSDIR)/priv/lib"
- $(INSTALL_PROGRAM) $(DYNTRACE_OBJS) "$(RELSYSDIR)/priv/obj"
- $(INSTALL_PROGRAM) $(NIF_LIB) $(SOLIBS) "$(RELSYSDIR)/priv/lib"
+ $(INSTALL_PROGRAM) $(TRACE_LIBS) "$(RELSYSDIR)/priv/lib"
release_docs_spec:
diff --git a/lib/runtime_tools/c_src/dtrace_user.d b/lib/runtime_tools/c_src/dtrace_user.d
index 9e180a3cb2..2b74e9ef6f 100644
--- a/lib/runtime_tools/c_src/dtrace_user.d
+++ b/lib/runtime_tools/c_src/dtrace_user.d
@@ -1,19 +1,20 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012.
+ * Copyright Scott Lystig Fritchie 2011-2016.
* All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/c_src/dyntrace.c b/lib/runtime_tools/c_src/dyntrace.c
index eef03afd1c..3d2de9c21c 100644
--- a/lib/runtime_tools/c_src/dyntrace.c
+++ b/lib/runtime_tools/c_src/dyntrace.c
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
@@ -28,10 +29,13 @@
#include "sys.h"
#include "dtrace-wrapper.h"
#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
-#define HAVE_USE_DTRACE 1
+# define HAVE_USE_DTRACE 1
#endif
-#ifdef HAVE_USE_DTRACE
-#include "dtrace_user.h"
+#if defined(USE_LTTNG)
+# define HAVE_USE_LTTNG 1
+# define TRACEPOINT_DEFINE
+# define TRACEPOINT_CREATE_PROBES
+# include "dyntrace_lttng.h"
#endif
void dtrace_nifenv_str(ErlNifEnv *env, char *process_buf);
@@ -62,11 +66,55 @@ static ERL_NIF_TERM user_trace_s1(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
static ERL_NIF_TERM user_trace_i4s4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+#ifdef HAVE_USE_LTTNG
+static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+static ERL_NIF_TERM enabled_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM enabled_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
+
+
static ErlNifFunc nif_funcs[] = {
{"available", 0, available},
{"user_trace_s1", 1, user_trace_s1},
{"user_trace_i4s4", 9, user_trace_i4s4},
- {"user_trace_n", 10, user_trace_n}
+ {"user_trace_n", 10, user_trace_n},
+#ifdef HAVE_USE_LTTNG
+ {"trace_procs", 5, trace_procs},
+ {"trace_ports", 5, trace_ports},
+ {"trace_running_procs", 5, trace_running_procs},
+ {"trace_running_ports", 5, trace_running_ports},
+ {"trace_call", 5, trace_call},
+ {"trace_send", 5, trace_send},
+ {"trace_receive", 5, trace_receive},
+ {"trace_garbage_collection", 5, trace_garbage_collection},
+ {"enabled_procs", 3, enabled_procs},
+ {"enabled_ports", 3, enabled_ports},
+ {"enabled_running_procs", 3, enabled_running_procs},
+ {"enabled_running_ports", 3, enabled_running_ports},
+ {"enabled_call", 3, enabled_call},
+ {"enabled_send", 3, enabled_send},
+ {"enabled_receive", 3, enabled_receive},
+ {"enabled_garbage_collection", 3, enabled_garbage_collection},
+#endif
+ {"enabled", 3, enabled},
+ {"trace", 5, trace}
};
ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
@@ -74,19 +122,131 @@ ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
static ERL_NIF_TERM atom_true;
static ERL_NIF_TERM atom_false;
static ERL_NIF_TERM atom_error;
+static ERL_NIF_TERM atom_extra;
static ERL_NIF_TERM atom_not_available;
static ERL_NIF_TERM atom_badarg;
static ERL_NIF_TERM atom_ok;
+static ERL_NIF_TERM atom_trace;
+static ERL_NIF_TERM atom_seq_trace;
+static ERL_NIF_TERM atom_remove;
+static ERL_NIF_TERM atom_discard;
+
+#ifdef HAVE_USE_LTTNG
+
+/* gc atoms */
+
+static ERL_NIF_TERM atom_gc_minor_start;
+static ERL_NIF_TERM atom_gc_minor_end;
+static ERL_NIF_TERM atom_gc_major_start;
+static ERL_NIF_TERM atom_gc_major_end;
+
+static ERL_NIF_TERM atom_old_heap_block_size; /* for debug */
+static ERL_NIF_TERM atom_heap_block_size; /* for debug */
+
+/* process 'procs' */
+
+static ERL_NIF_TERM atom_spawn;
+static ERL_NIF_TERM atom_exit;
+static ERL_NIF_TERM atom_register;
+static ERL_NIF_TERM atom_unregister;
+static ERL_NIF_TERM atom_link;
+static ERL_NIF_TERM atom_unlink;
+static ERL_NIF_TERM atom_getting_linked;
+static ERL_NIF_TERM atom_getting_unlinked;
+
+/* process 'running' and 'exiting' */
+
+static ERL_NIF_TERM atom_in;
+static ERL_NIF_TERM atom_out;
+static ERL_NIF_TERM atom_in_exiting;
+static ERL_NIF_TERM atom_out_exiting;
+static ERL_NIF_TERM atom_out_exited;
+
+/* process messages 'send' and 'receive' */
+
+static ERL_NIF_TERM atom_send;
+static ERL_NIF_TERM atom_receive;
+static ERL_NIF_TERM atom_send_to_non_existing_process;
+
+/* ports 'ports' */
+
+static ERL_NIF_TERM atom_open;
+static ERL_NIF_TERM atom_closed;
+
+/* 'call' */
+
+static ERL_NIF_TERM atom_call;
+static ERL_NIF_TERM atom_return_from;
+static ERL_NIF_TERM atom_return_to;
+static ERL_NIF_TERM atom_exception_from;
+#endif
+
static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
{
atom_true = enif_make_atom(env,"true");
atom_false = enif_make_atom(env,"false");
atom_error = enif_make_atom(env,"error");
+ atom_extra = enif_make_atom(env,"extra");
atom_not_available = enif_make_atom(env,"not_available");
atom_badarg = enif_make_atom(env,"badarg");
atom_ok = enif_make_atom(env,"ok");
+ atom_trace = enif_make_atom(env,"trace");
+ atom_seq_trace = enif_make_atom(env,"seq_trace");
+ atom_remove = enif_make_atom(env,"remove");
+ atom_discard = enif_make_atom(env,"discard");
+
+#ifdef HAVE_USE_LTTNG
+
+ /* gc */
+
+ atom_gc_minor_start = enif_make_atom(env,"gc_minor_start");
+ atom_gc_minor_end = enif_make_atom(env,"gc_minor_end");
+ atom_gc_major_start = enif_make_atom(env,"gc_major_start");
+ atom_gc_major_end = enif_make_atom(env,"gc_major_end");
+
+ atom_old_heap_block_size = enif_make_atom(env,"old_heap_block_size");
+ atom_heap_block_size = enif_make_atom(env,"heap_block_size");
+
+ /* process 'proc' */
+
+ atom_spawn = enif_make_atom(env,"spawn");
+ atom_exit = enif_make_atom(env,"exit");
+ atom_register = enif_make_atom(env,"register");
+ atom_unregister = enif_make_atom(env,"unregister");
+ atom_link = enif_make_atom(env,"link");
+ atom_unlink = enif_make_atom(env,"unlink");
+ atom_getting_unlinked = enif_make_atom(env,"getting_unlinked");
+ atom_getting_linked = enif_make_atom(env,"getting_linked");
+
+ /* process 'running' and 'exiting' */
+
+ atom_in = enif_make_atom(env,"in");
+ atom_out = enif_make_atom(env,"out");
+ atom_in_exiting = enif_make_atom(env,"in_exiting");
+ atom_out_exiting = enif_make_atom(env,"out_exiting");
+ atom_out_exited = enif_make_atom(env,"out_exited");
+
+ /* process messages 'send' and 'receive' */
+
+ atom_send = enif_make_atom(env,"send");
+ atom_receive = enif_make_atom(env,"receive");
+ atom_send_to_non_existing_process = enif_make_atom(env,"send_to_non_existing_process");
+
+ /* ports 'ports' */
+
+ atom_open = enif_make_atom(env,"open");
+ atom_closed = enif_make_atom(env,"closed");
+
+ /* 'call' */
+
+ atom_call = enif_make_atom(env,"call");
+ atom_return_from = enif_make_atom(env,"return_from");
+ atom_return_to = enif_make_atom(env,"return_to");
+ atom_exception_from = enif_make_atom(env,"exception_from");
+#endif
+
return 0;
}
@@ -125,3 +285,452 @@ static ERL_NIF_TERM user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
return atom_error;
#endif
}
+
+static ERL_NIF_TERM enabled(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+#ifdef HAVE_USE_LTTNG
+ ASSERT(argc == 3);
+ return atom_trace;
+#endif
+ return atom_remove;
+}
+
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ return atom_ok;
+}
+
+#ifdef HAVE_USE_LTTNG
+static ERL_NIF_TERM enabled_garbage_collection(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_gc_minor_start && LTTNG_ENABLED(gc_minor_start)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_minor_end && LTTNG_ENABLED(gc_minor_end)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_major_start && LTTNG_ENABLED(gc_major_start)) {
+ return atom_trace;
+ } else if (argv[0] == atom_gc_major_end && LTTNG_ENABLED(gc_major_end)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_garbage_collection(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ ERL_NIF_TERM gci, tup;
+ const ERL_NIF_TERM *vals;
+ int arity;
+ unsigned long ohbsz, nhbsz, size;
+
+ ASSERT(argc == 5);
+
+ /* Assume gc info order does not change */
+ gci = argv[3];
+
+ /* get reclaimed or need */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ enif_get_ulong(env, vals[1], &size);
+
+ /* get old heap block size */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ ASSERT(vals[0] == atom_old_heap_block_size);
+ enif_get_ulong(env, vals[1], &ohbsz);
+
+ /* get new heap block size */
+ enif_get_list_cell(env, gci, &tup, &gci);
+ enif_get_tuple(env, tup, &arity, &vals);
+ ASSERT(arity == 2);
+ ASSERT(vals[0] == atom_heap_block_size);
+ enif_get_ulong(env, vals[1], &nhbsz);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (argv[0] == atom_gc_minor_start) {
+ LTTNG4(gc_minor_start, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_minor_end) {
+ LTTNG4(gc_minor_end, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_major_start) {
+ LTTNG4(gc_major_start, pid, size, nhbsz, ohbsz);
+ } else if (argv[0] == atom_gc_major_end) {
+ LTTNG4(gc_major_end, pid, size, nhbsz, ohbsz);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_call(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_call && LTTNG_ENABLED(function_call))
+ return atom_trace;
+ else if (argv[0] == atom_return_from && LTTNG_ENABLED(function_return))
+ return atom_trace;
+ else if (argv[0] == atom_exception_from && LTTNG_ENABLED(function_exception))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ unsigned int len;
+ char undef[] = "undefined";
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (argv[0] == atom_call) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ if (enif_is_list(env, tuple[2])) {
+ enif_get_list_length(env, tuple[2], &len);
+ } else {
+ enif_get_uint(env, tuple[2], &len);
+ }
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_call, pid, mfa, 0);
+ } else {
+ LTTNG3(function_call, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_return_from) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_return, pid, mfa, 0);
+ } else {
+ LTTNG3(function_return, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_return_to) {
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_return, pid, mfa, 0);
+ } else {
+ LTTNG3(function_return, pid, undef, 0);
+ }
+ } else if (argv[0] == atom_exception_from) {
+ const ERL_NIF_TERM* tuple;
+ ERL_NIF_TERM extra;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+ char class[LTTNG_BUFFER_SZ];
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+ enif_get_tuple(env, extra, &arity, &tuple);
+ enif_snprintf(class, LTTNG_BUFFER_SZ, "%T", tuple[0]);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ enif_get_uint(env, tuple[2], &len);
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(function_exception, pid, mfa, class);
+ } else {
+ LTTNG3(function_exception, pid, undef, class);
+ }
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_send(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+ if (LTTNG_ENABLED(message_send))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM extra;
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[2], pid);
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ if (argv[0] == atom_send) {
+ lttng_decl_procbuf(to);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG3(message_send, pid, to, msg);
+ } else if (argv[0] == atom_send_to_non_existing_process) {
+ lttng_decl_procbuf(to);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ /* mark it as non existing ? */
+
+ LTTNG3(message_send, pid, to, msg);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_receive(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ if (LTTNG_ENABLED(message_receive))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ if (argv[0] == atom_receive) {
+ lttng_decl_procbuf(pid);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(argv[2], pid);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG2(message_receive, pid, msg);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_procs(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_spawn && LTTNG_ENABLED(process_spawn)) {
+ return atom_trace;
+ } else if (argv[0] == atom_register && LTTNG_ENABLED(process_register)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unregister && LTTNG_ENABLED(process_register)) {
+ return atom_trace;
+ } else if (argv[0] == atom_link && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unlink && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_linked && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_unlinked && LTTNG_ENABLED(process_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_exit && LTTNG_ENABLED(process_exit)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ lttng_decl_procbuf(to);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ /* spawn */
+ if (argv[0] == atom_spawn) {
+ ERL_NIF_TERM extra;
+ char undef[] = "undefined";
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ unsigned int len;
+ lttng_decl_mfabuf(mfa);
+
+ lttng_pid_to_str(argv[3], to);
+
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ if (enif_get_tuple(env, extra, &arity, &tuple)) {
+ if (enif_is_list(env, tuple[2])) {
+ enif_get_list_length(env, tuple[2], &len);
+ } else {
+ enif_get_uint(env, tuple[2], &len);
+ }
+ lttng_mfa_to_str(tuple[0], tuple[1], len, mfa);
+ LTTNG3(process_spawn, to, pid, mfa);
+ } else {
+ LTTNG3(process_spawn, to, pid, undef);
+ }
+
+ /* register */
+ } else if (argv[0] == atom_register) {
+ char name[LTTNG_BUFFER_SZ];
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG3(process_register, pid, name, "register");
+ } else if (argv[0] == atom_unregister) {
+ char name[LTTNG_BUFFER_SZ];
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG3(process_register, pid, name, "unregister");
+ /* link */
+ } else if (argv[0] == atom_link) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, pid, to, "link");
+ } else if (argv[0] == atom_unlink) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, pid, to, "unlink");
+ } else if (argv[0] == atom_getting_linked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, to, pid, "link");
+ } else if (argv[0] == atom_getting_unlinked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(process_link, to, pid, "unlink");
+ /* exit */
+ } else if (argv[0] == atom_exit) {
+ char reason[LTTNG_BUFFER_SZ];
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ LTTNG2(process_exit, pid, reason);
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_ports(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (argv[0] == atom_open && LTTNG_ENABLED(port_open)) {
+ return atom_trace;
+ } else if (argv[0] == atom_link && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_unlink && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_linked && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_getting_unlinked && LTTNG_ENABLED(port_link)) {
+ return atom_trace;
+ } else if (argv[0] == atom_closed && LTTNG_ENABLED(port_exit)) {
+ return atom_trace;
+ }
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_portbuf(port);
+ lttng_decl_procbuf(to);
+
+ lttng_portid_to_str(argv[2], port);
+
+ /* open and closed */
+ if (argv[0] == atom_open) {
+ ERL_NIF_TERM extra;
+ char driver[LTTNG_BUFFER_SZ];
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[3], pid);
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ enif_snprintf(driver, LTTNG_BUFFER_SZ, "%T", extra);
+ LTTNG3(port_open, pid, driver, port);
+ } else if (argv[0] == atom_closed) {
+ char reason[LTTNG_BUFFER_SZ];
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ LTTNG2(port_exit, port, reason);
+ /* link */
+ } else if (argv[0] == atom_link) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, port, to, "link");
+ } else if (argv[0] == atom_unlink) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, port, to, "unlink");
+ } else if (argv[0] == atom_getting_linked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, to, port, "link");
+ } else if (argv[0] == atom_getting_unlinked) {
+ lttng_pid_to_str(argv[3], to);
+ LTTNG3(port_link, to, port, "unlink");
+ }
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_running_procs(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (LTTNG_ENABLED(process_scheduled))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_running_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ const ERL_NIF_TERM* tuple;
+ char *mfastr = "undefined";
+ int arity;
+ lttng_decl_mfabuf(mfa);
+
+ lttng_pid_to_str(argv[2], pid);
+
+ if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
+ int val;
+ enif_get_int(env, tuple[2], &val);
+ lttng_mfa_to_str(tuple[0], tuple[1], val, mfa);
+ mfastr = mfa;
+ }
+ /* running processes */
+ if (argv[0] == atom_in) {
+ LTTNG3(process_scheduled, pid, mfastr, "in");
+ } else if (argv[0] == atom_out) {
+ LTTNG3(process_scheduled, pid, mfastr, "out");
+ /* exiting */
+ } else if (argv[0] == atom_in_exiting) {
+ LTTNG3(process_scheduled, pid, mfastr, "in_exiting");
+ } else if (argv[0] == atom_out_exiting) {
+ LTTNG3(process_scheduled, pid, mfastr, "out_exiting");
+ } else if (argv[0] == atom_out_exited) {
+ LTTNG3(process_scheduled, pid, mfastr, "out_exited");
+ }
+
+ return atom_ok;
+}
+
+static ERL_NIF_TERM enabled_running_ports(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
+{
+ ASSERT(argc == 3);
+
+ if (LTTNG_ENABLED(port_scheduled))
+ return atom_trace;
+
+ return atom_discard;
+}
+
+static ERL_NIF_TERM trace_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ lttng_decl_procbuf(pid);
+ lttng_decl_mfabuf(where);
+
+ lttng_portid_to_str(argv[2], pid);
+ enif_snprintf(where, LTTNG_BUFFER_SZ, "%T", argv[3]);
+
+ /* running ports */
+ if (argv[0] == atom_in) {
+ LTTNG3(port_scheduled, pid, where, "in");
+ } else if (argv[0] == atom_out) {
+ LTTNG3(port_scheduled, pid, where, "out");
+ /* exiting */
+ } else if (argv[0] == atom_in_exiting) {
+ LTTNG3(port_scheduled, pid, where, "in_exiting");
+ } else if (argv[0] == atom_out_exiting) {
+ LTTNG3(port_scheduled, pid, where, "out_exiting");
+ } else if (argv[0] == atom_out_exited) {
+ LTTNG3(port_scheduled, pid, where, "out_exited");
+ }
+ return atom_ok;
+}
+#endif
diff --git a/lib/runtime_tools/c_src/dyntrace_lttng.h b/lib/runtime_tools/c_src/dyntrace_lttng.h
new file mode 100644
index 0000000000..5e838892d6
--- /dev/null
+++ b/lib/runtime_tools/c_src/dyntrace_lttng.h
@@ -0,0 +1,367 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2016. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER org_erlang_dyntrace
+
+#if !defined(DYNTRACE_LTTNG_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define DYNTRACE_LTTNG_H
+
+#include <lttng/tracepoint.h>
+
+#define LTTNG1(Name, Arg1) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1))
+
+#define LTTNG2(Name, Arg1, Arg2) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2))
+
+#define LTTNG3(Name, Arg1, Arg2, Arg3) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3))
+
+#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+
+#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+
+#define LTTNG_ENABLED(Name) \
+ tracepoint_enabled(org_erlang_dyntrace, Name)
+
+#define LTTNG_BUFFER_SZ (256)
+#define LTTNG_PROC_BUFFER_SZ (16)
+#define LTTNG_PORT_BUFFER_SZ (20)
+#define LTTNG_MFA_BUFFER_SZ (256)
+
+#define lttng_decl_procbuf(Name) \
+ char Name[LTTNG_PROC_BUFFER_SZ]
+
+#define lttng_decl_portbuf(Name) \
+ char Name[LTTNG_PORT_BUFFER_SZ]
+
+#define lttng_decl_mfabuf(Name) \
+ char Name[LTTNG_MFA_BUFFER_SZ]
+
+#define lttng_pid_to_str(pid, name) \
+ enif_snprintf(name, LTTNG_PROC_BUFFER_SZ, "%T", (pid))
+
+#define lttng_portid_to_str(pid, name) \
+ enif_snprintf(name, LTTNG_PORT_BUFFER_SZ, "%T", (pid))
+
+#define lttng_proc_to_str(p, name) \
+ lttng_pid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PID), name)
+
+#define lttng_port_to_str(p, name) \
+ lttng_portid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PORT), name)
+
+#define lttng_mfa_to_str(m,f,a, Name) \
+ enif_snprintf(Name, LTTNG_MFA_BUFFER_SZ, "%T:%T/%lu", (Eterm)(m), (Eterm)(f), (Uint)(a))
+
+/* Process scheduling */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_spawn,
+ TP_ARGS(
+ char*, p,
+ char*, parent,
+ char*, mfa
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(parent, parent)
+ ctf_string(entry, mfa)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_link,
+ TP_ARGS(
+ char*, from,
+ char*, to,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(from, from)
+ ctf_string(to, to)
+ ctf_string(type, type)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_exit,
+ TP_ARGS(
+ char*, p,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_register,
+ TP_ARGS(
+ char*, pid,
+ char*, name,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(name, name)
+ ctf_string(type, type)
+ )
+)
+
+/* Scheduled */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ process_scheduled,
+ TP_ARGS(
+ char*, p,
+ char*, mfa,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(entry, mfa)
+ ctf_string(type, type)
+ )
+)
+
+/* Ports */
+
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_open,
+ TP_ARGS(
+ char*, pid,
+ char*, driver,
+ char*, port
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(driver, driver)
+ ctf_string(port, port)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_exit,
+ TP_ARGS(
+ char*, port,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(port, port)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_link,
+ TP_ARGS(
+ char*, from,
+ char*, to,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(from, from)
+ ctf_string(to, to)
+ ctf_string(type, type)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ port_scheduled,
+ TP_ARGS(
+ char*, p,
+ char*, op,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(entry, op)
+ ctf_string(type, type)
+ )
+)
+
+/* Call tracing */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_call,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ unsigned int, depth
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_integer(unsigned int, depth, depth)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_return,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ unsigned int, depth
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_integer(unsigned int, depth, depth)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ function_exception,
+ TP_ARGS(
+ char*, pid,
+ char*, mfa,
+ char*, type
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(entry, mfa)
+ ctf_string(class, type)
+ )
+)
+
+/* Process messages */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ message_send,
+ TP_ARGS(
+ char*, sender,
+ char*, receiver,
+ char*, msg
+ ),
+ TP_FIELDS(
+ ctf_string(from, sender)
+ ctf_string(to, receiver)
+ ctf_string(message, msg)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ message_receive,
+ TP_ARGS(
+ char*, receiver,
+ char*, msg
+ ),
+ TP_FIELDS(
+ ctf_string(to, receiver)
+ ctf_string(message, msg)
+ )
+)
+
+/* Process Memory */
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_minor_start,
+ TP_ARGS(
+ char*, p,
+ unsigned long, need,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, need, need)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_minor_end,
+ TP_ARGS(
+ char*, p,
+ unsigned long, reclaimed,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, reclaimed, reclaimed)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_major_start,
+ TP_ARGS(
+ char*, p,
+ unsigned long, need,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, need, need)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+TRACEPOINT_EVENT(
+ org_erlang_dyntrace,
+ gc_major_end,
+ TP_ARGS(
+ char*, p,
+ unsigned long, reclaimed,
+ unsigned long, nh,
+ unsigned long, oh
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_integer(unsigned long, reclaimed, reclaimed)
+ ctf_integer(unsigned long, heap, nh)
+ ctf_integer(unsigned long, old_heap, oh)
+ )
+)
+
+#endif /* DYNTRACE_LTTNG_H */
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./dyntrace_lttng.h"
+
+/* This part must be outside protection */
+#include <lttng/tracepoint-event.h>
diff --git a/lib/runtime_tools/c_src/trace_file_drv.c b/lib/runtime_tools/c_src/trace_file_drv.c
index 08bace80ef..e7fd5968c1 100644
--- a/lib/runtime_tools/c_src/trace_file_drv.c
+++ b/lib/runtime_tools/c_src/trace_file_drv.c
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2011. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
@@ -74,12 +75,8 @@
#ifdef DEBUG
-#ifndef __WIN32__
-#define ASSERT(X) do {if (!(X)) {erl_exit(1,"%s",#X);} } while(0)
-#else
#include <assert.h>
#define ASSERT(X) assert(X)
-#endif
#else
#define ASSERT(X)
#endif
@@ -175,6 +172,7 @@ static ErlDrvData trace_file_start(ErlDrvPort port, char *buff);
static void trace_file_stop(ErlDrvData handle);
static void trace_file_output(ErlDrvData handle, char *buff,
ErlDrvSizeT bufflen);
+static void trace_file_outputv(ErlDrvData handle, ErlIOVec *ev);
static void trace_file_finish(void);
static ErlDrvSSizeT trace_file_control(ErlDrvData handle,
unsigned int command,
@@ -217,7 +215,7 @@ ErlDrvEntry trace_file_driver_entry = {
NULL, /* void * that is not used (BC) */
trace_file_control, /* F_PTR control, port_control callback */
trace_file_timeout, /* F_PTR timeout, driver_set_timer callback */
- NULL, /* F_PTR outputv, reserved */
+ trace_file_outputv, /* F_PTR outputv, reserved */
NULL, /* ready_async */
NULL, /* flush */
NULL, /* call */
@@ -326,9 +324,11 @@ static ErlDrvData trace_file_start(ErlDrvPort port, char *buff)
| O_BINARY
#endif
, 0777)) < 0) {
+ int saved_errno = errno;
if (wrap)
driver_free(wrap);
driver_free(data);
+ errno = saved_errno;
return ERL_DRV_ERROR_ERRNO;
}
@@ -364,6 +364,16 @@ static void trace_file_stop(ErlDrvData handle)
/*
** Data sent from erlang to port.
*/
+static void trace_file_outputv(ErlDrvData handle, ErlIOVec *ev)
+{
+ int i;
+ for (i = 0; i < ev->vsize; i++) {
+ if (ev->iov[i].iov_len)
+ trace_file_output(handle, ev->iov[i].iov_base,
+ ev->iov[i].iov_len);
+ }
+}
+
static void trace_file_output(ErlDrvData handle, char *buff,
ErlDrvSizeT bufflen)
{
@@ -524,14 +534,19 @@ static void *my_alloc(size_t size)
** A write wrapper that regards it as an error if not all data was written.
*/
static int do_write(FILETYPE fd, unsigned char *buff, int siz) {
- int w = write(fd, buff, siz);
- if (w != siz) {
- if (w >= 0) {
- errno = ENOSPC;
+ int w;
+ while (1) {
+ w = write(fd, buff, siz);
+ if (w < 0 && errno == EINTR)
+ continue;
+ else if (w != siz) {
+ if (w >= 0) {
+ errno = ENOSPC;
+ }
+ return -1;
}
- return -1;
+ return siz;
}
- return siz;
}
/*
@@ -626,8 +641,10 @@ static void close_unlink_port(TraceFileData *data)
*/
static int wrap_file(TraceFileData *data) {
if (my_flush(data) < 0) {
+ int saved_errno = errno;
close(data->fd);
data->fd = -1;
+ errno = saved_errno;
return -1;
}
close(data->fd);
@@ -643,12 +660,15 @@ static int wrap_file(TraceFileData *data) {
next_name(&data->wrap->del);
}
next_name(&data->wrap->cur);
+try_open:
data->fd = open(data->wrap->cur.name, O_WRONLY | O_TRUNC | O_CREAT
#ifdef O_BINARY
| O_BINARY
#endif
, 0777);
if (data->fd < 0) {
+ if (errno == EINTR)
+ goto try_open;
data->fd = -1;
return -1;
}
diff --git a/lib/runtime_tools/c_src/trace_ip_drv.c b/lib/runtime_tools/c_src/trace_ip_drv.c
index a7d132ca6e..195558f958 100644
--- a/lib/runtime_tools/c_src/trace_ip_drv.c
+++ b/lib/runtime_tools/c_src/trace_ip_drv.c
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 1999-2012. All Rights Reserved.
+ * Copyright Ericsson AB 1999-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
@@ -43,19 +44,8 @@
#endif
#ifdef DEBUG
-# ifndef __WIN32__
- /* erl_exit is not available to dll_drivers on windows. */
- void erl_exit(int, char *, ...);
-# define ASSERT(X) \
- do { \
- if (!(X)) { \
- erl_exit(1,"%s",#X); \
- } \
- } while(0)
-# else
-# include <assert.h>
-# define ASSERT(X) assert(X)
-# endif
+# include <assert.h>
+# define ASSERT(X) assert(X)
#else
# define ASSERT(X)
#endif
@@ -384,6 +374,7 @@ static void trace_ip_output(ErlDrvData handle, char *buff, ErlDrvSizeT bufflen)
}
return;
}
+ ASSERT(!IS_INVALID_SOCKET(data->fd));
if (data->que[data->questart] != NULL) {
trace_ip_ready_output(handle, sock2event(data->fd));
}
@@ -422,6 +413,7 @@ static void trace_ip_ready_input(ErlDrvData handle, ErlDrvEvent fd)
/*
** Maybe accept, we are a listen port...
*/
+ ASSERT(IS_INVALID_SOCKET(data->fd));
if (!IS_INVALID_SOCKET((client = my_accept(data->listenfd)))) {
data->fd = client;
set_nonblocking(client);
@@ -745,6 +737,7 @@ static void close_client(TraceIpData *data)
{
my_driver_select(data, data->fd, FLAG_WRITE | FLAG_READ, SELECT_CLOSE);
data->flags |= FLAG_LISTEN_PORT;
+ data->fd = INVALID_SOCKET;
if (!(data->flags & FLAG_FILL_ALWAYS)) {
clean_que(data);
}
diff --git a/lib/runtime_tools/doc/specs/.gitignore b/lib/runtime_tools/doc/specs/.gitignore
new file mode 100644
index 0000000000..322eebcb06
--- /dev/null
+++ b/lib/runtime_tools/doc/specs/.gitignore
@@ -0,0 +1 @@
+specs_*.xml
diff --git a/lib/runtime_tools/doc/src/LTTng.xml b/lib/runtime_tools/doc/src/LTTng.xml
new file mode 100644
index 0000000000..82a4c79379
--- /dev/null
+++ b/lib/runtime_tools/doc/src/LTTng.xml
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="utf8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+<chapter>
+ <header>
+ <copyright>
+ <year>2016</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ </legalnotice>
+
+ <title>LTTng and Erlang/OTP</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2016-04-27</date>
+ <rev></rev>
+ <file>LTTng.xml</file>
+ </header>
+
+ <section>
+ <title>Introduction</title>
+ <p>The Linux Trace Toolkit: next generation is an open source system software package
+ for correlated tracing of the Linux kernel, user applications and libraries. </p>
+ <p>For more information, please visit <url href="http://lttng.org">http://lttng.org</url></p>
+ </section>
+
+ <section>
+ <title>Building Erlang/OTP with LTTng support</title>
+ <p>
+ Configure and build Erlang with LTTng support:
+ </p>
+ <p>For LTTng to work properly with Erlang/OTP you need
+ the following packages installed:</p>
+
+ <list type="bulleted">
+ <item><p>LTTng-tools: a command line interface to control tracing sessions.</p></item>
+ <item><p>LTTng-UST: user space tracing library.</p></item>
+ </list>
+
+ <p>On Ubuntu this can be installed via <c>aptitude</c>:</p>
+
+ <code type="none">$ sudo aptitude install lttng-tools liblttng-ust-dev</code>
+ <p>See <url href="http://lttng.org/docs/#doc-installing-lttng">Installing LTTng</url>
+ for more information on how to install LTTng on your system.</p>
+
+ <p>After LTTng is properly installed on the system Erlang/OTP can be built with LTTng support.</p>
+
+
+<code type="none">$ ./configure --with-dynamic-trace=lttng
+$ make </code>
+ </section>
+
+ <section>
+ <title>Dyntrace Tracepoints</title>
+ <p>All tracepoints are in the domain of <c>org_erlang_dyntrace</c></p>
+ <p>All Erlang types are the string equivalent in LTTng.</p>
+
+ <p><em>process_spawn</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>parent : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_spawn: { cpu_id = 3 }, { pid = "&lt;0.131.0&gt;", parent = "&lt;0.130.0&gt;", entry = "erlang:apply/2" }</code>
+
+ <p><em>process_link</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>from : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_link: { cpu_id = 3 }, { from = "&lt;0.130.0&gt;", to = "&lt;0.131.0&gt;", type = "link" }</code>
+
+
+ <p><em>process_exit</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_exit: { cpu_id = 3 }, { pid = "&lt;0.130.0&gt;", reason = "normal" }</code>
+
+ <p><em>process_register</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>name : string</c> :: Registered name. Ex. <c>"error_logger"</c></item>
+ <item><c>type : string</c> :: <c>"register" | "unregister"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">process_register: { cpu_id = 0 }, { pid = "&lt;0.128.0&gt;", name = "dyntrace_lttng_SUITE" type = "register" }</code>
+
+ <p><em>process_scheduled</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>type : string</c> :: <c>"in" | "out" | "in_exiting" | "out_exiting" | "out_exited"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">process_scheduled: { cpu_id = 0 }, { pid = "&lt;0.136.0&gt;", entry = "erlang:apply/2", type = "in" }</code>
+
+
+ <p><em>port_open</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_open: { cpu_id = 5 }, { pid = "&lt;0.131.0&gt;", driver = "'/bin/sh -s unix:cmd'", port = "#Port&lt;0.1887&gt;" }</code>
+
+ <p><em>port_exit</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_exit: { cpu_id = 5 }, { port = "#Port&lt;0.1887&gt;", reason = "normal" }</code>
+
+ <p><em>port_link</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>from : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">port_link: { cpu_id = 5 }, { from = "#Port&lt;0.1887&gt;", to = "&lt;0.131.0&gt;", type = "unlink" }</code>
+
+ <p><em>port_scheduled</em></p>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>entry : string</c> :: Callback. Ex. <c>"open"</c></item>
+ <item><c>type : string</c> :: <c>"in" | "out" | "in_exiting" | "out_exiting" | "out_exited"</c></item>
+ </list>
+
+ <p>Example:</p>
+ <code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port&lt;0.1905&gt;", entry = "close", type = "out" }</code>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p><em>function_call</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_call: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code>
+
+ <p><em>function_return</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_return: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code>
+
+ <p><em>function_exception</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
+ <item><c>class : string</c> :: Error reason. Ex. <c>"error"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">function_exception: { cpu_id = 5 }, { pid = "&lt;0.144.0&gt;", entry = "t:call_exc/1", class = "error" }</code>
+
+ <p><em>message_send</em></p>
+ <list type="bulleted">
+ <item><c>from : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>message : string</c> :: Message sent. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">message_send: { cpu_id = 3 }, { from = "#Port&lt;0.1938&gt;", to = "&lt;0.160.0&gt;", message = "{#Port&lt;0.1938&gt;,eof}" }</code>
+
+ <p><em>message_receive</em></p>
+ <list type="bulleted">
+ <item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>message : string</c> :: Message received. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">message_receive: { cpu_id = 7 }, { to = "&lt;0.167.0&gt;", message = "{&lt;0.165.0&gt;,ok}" }</code>
+
+ <p><em>gc_minor_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>need : integer</c> :: Heap need. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 0, heap = 610, old_heap = 0 }</code>
+
+ <p><em>gc_minor_end</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reclaimed : integer</c> :: Heap reclaimed. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 120, heap = 1598, old_heap = 1598 }</code>
+
+ <p><em>gc_major_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>need : integer</c> :: Heap need. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_major_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 8, heap = 2586, old_heap = 1598 }</code>
+
+ <p><em>gc_major_end</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>reclaimed : integer</c> :: Heap reclaimed. Ex. <c>2</c></item>
+ <item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
+ <item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
+ </list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
+ <p>Example:</p>
+ <code type="none">gc_major_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 240, heap = 4185, old_heap = 0 }</code>
+
+ </section>
+
+ <section>
+ <title>BEAM Tracepoints</title>
+ <p>All tracepoints are in the domain of <c>org_erlang_otp</c></p>
+ <p>All Erlang types are the string equivalent in LTTng.</p>
+
+ <p><em>scheduler_poll</em></p>
+ <list type="bulleted">
+ <item><c>scheduler : integer</c> :: Scheduler ID. Ex. <c>1</c></item>
+ <item><c>runnable : integer</c> :: Runnable. Ex. <c>1</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code>
+
+ <p><em>driver_init</em></p>
+ <list type="bulleted">
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>major : integer</c> :: Major version. Ex. <c>3</c></item>
+ <item><c>minor : integer</c> :: Minor version. Ex. <c>1</c></item>
+ <item><c>flags : integer</c> :: Flags. Ex. <c>1</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }</code>
+
+ <p><em>driver_start</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_start: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", driver = "caller_drv", port = "#Port&lt;0.3676&gt;" }</code>
+
+ <p><em>driver_output</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_output: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", port = "#Port&lt;0.3677&gt;", driver = "/bin/sh -s unix:cmd", bytes = 36 }</code>
+
+ <p><em>driver_outputv</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_outputv: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet", bytes = 3 }</code>
+
+ <p><em>driver_ready_input</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_input: { cpu_id = 5 }, { pid = "&lt;0.189.0&gt;", port = "#Port&lt;0.3637&gt;", driver = "inet_gethost 4 " }</code>
+
+ <p><em>driver_ready_output</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_output: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_timeout</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_timeout: { cpu_id = 5 }, { pid = "&lt;0.196.0&gt;", port = "#Port&lt;0.3664&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_stop_select</em></p>
+ <list type="bulleted">
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }</code>
+
+ <p><em>driver_flush</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_flush: { cpu_id = 7 }, { pid = "&lt;0.204.0&gt;", port = "#Port&lt;0.3686&gt;", driver = "tcp_inet" }</code>
+
+ <p><em>driver_stop</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port&lt;0.3673&gt;", driver = "efile" }</code>
+
+ <p><em>driver_process_exit</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+
+ <p><em>driver_ready_async</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_ready_async: { cpu_id = 3 }, { pid = "&lt;0.181.0&gt;", port = "#Port&lt;0.3622&gt;", driver = "efile" }</code>
+
+ <p><em>driver_call</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>command : integer</c> :: Command integer. Ex. <c>1</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_call: { cpu_id = 2 }, { pid = "&lt;0.202.0&gt;", port = "#Port&lt;0.3676&gt;", driver = "caller_drv", command = 0, bytes = 2 }</code>
+
+ <p><em>driver_control</em></p>
+ <list type="bulleted">
+ <item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
+ <item><c>command : integer</c> :: Command integer. Ex. <c>1</c></item>
+ <item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">driver_control: { cpu_id = 3 }, { pid = "&lt;0.32767.8191&gt;", port = "#Port&lt;0.0&gt;", driver = "forker", command = 83, bytes = 32 }</code>
+
+ <p><em>aio_pool_get</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>length : integer</c> :: Async queue length. Ex. <c>0</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port&lt;0.3614&gt;", length = 0 }</code>
+
+ <p><em>aio_pool_put</em></p>
+ <list type="bulleted">
+ <item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
+ <item><c>length : integer</c> :: Async queue length. Ex. <c>-1</c></item>
+ </list>
+ <p>Async queue length is not defined for <c>put</c> operations.</p>
+ <p>Example:</p>
+ <code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port&lt;0.3614&gt;", length = -1 }</code>
+
+ <p><em>carrier_create</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ <item><c>mbc_carriers : integer</c> :: Number of multiblock carriers in instance. Ex. <c>3</c></item>
+ <item><c>mbc_carriers_size : integer</c> :: Total size of multiblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>mbc_blocks : integer</c> :: Number of multiblock blocks in instance. Ex. <c>122</c></item>
+ <item><c>mbc_blocks_size : integer</c> :: Total size of all multiblock blocks in instance. Ex. <c>285296</c></item>
+ <item><c>sbc_carriers : integer</c> :: Number of singleblock carriers in instance. Ex. <c>1</c></item>
+ <item><c>sbc_carriers_size : integer</c> :: Total size of singleblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>sbc_blocks : integer</c> :: Number of singleblocks in instance. Ex. <c>1</c></item>
+ <item><c>sbc_blocks_size : integer</c> :: Total size of all singleblock blocks in instance. Ex. <c>285296</c></item>
+
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
+
+ <p><em>carrier_destroy</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ <item><c>mbc_carriers : integer</c> :: Number of multiblock carriers in instance. Ex. <c>3</c></item>
+ <item><c>mbc_carriers_size : integer</c> :: Total size of multiblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>mbc_blocks : integer</c> :: Number of multiblock blocks in instance. Ex. <c>122</c></item>
+ <item><c>mbc_blocks_size : integer</c> :: Total size of all multiblock blocks in instance. Ex. <c>285296</c></item>
+ <item><c>sbc_carriers : integer</c> :: Number of singleblock carriers in instance. Ex. <c>1</c></item>
+ <item><c>sbc_carriers_size : integer</c> :: Total size of singleblock blocks carriers in instance. Ex. <c>1343488</c></item>
+ <item><c>sbc_blocks : integer</c> :: Number of singleblocks in instance. Ex. <c>1</c></item>
+ <item><c>sbc_blocks_size : integer</c> :: Total size of all singleblock blocks in instance. Ex. <c>285296</c></item>
+
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
+
+ <p><em>carrier_pool_put</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }</code>
+
+ <p><em>carrier_pool_get</em></p>
+ <list type="bulleted">
+ <item><c>type : string</c> :: Carrier type. Ex. <c>"ets_alloc"</c></item>
+ <item><c>instance : integer</c> :: Allocator instance. Ex. <c>1</c></item>
+ <item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
+ </list>
+ <p>Example:</p>
+ <code type="none">carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }</code>
+ </section>
+
+ <section>
+ <title>Example of process tracing</title>
+ <p>An example of process tracing of <c>os_mon</c> and friends.</p>
+
+ <p>Clean start of lttng in a bash shell.</p>
+
+ <pre>$ lttng create erlang-demo
+Spawning a session daemon
+Session erlang-demo created.
+Traces will be written in /home/egil/lttng-traces/erlang-demo-20160526-165920</pre>
+
+ <p>Start an Erlang node with lttng enabled.</p>
+
+ <pre>$ erl
+Erlang/OTP 19 [erts-8.0] [source-4d7b24d] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [lttng]
+
+Eshell V8.0 (abort with ^G)
+1></pre>
+
+ <p>Load the <c>dyntrace</c> module.</p>
+
+ <pre>1> <input>l(dyntrace).</input>
+{module,dyntrace}</pre>
+
+ <p>All tracepoints via dyntrace are now visibile and can be listed through <c>lttng list -u</c>.</p>
+
+ <p>Enable the process_register LTTng tracepoint for Erlang.</p>
+
+ <pre>$ lttng enable-event -u org_erlang_dyntrace:process_register
+UST event org_erlang_dyntrace:process_register created in channel channel0</pre>
+
+ <p>Enable process tracing for new processes and use <c>dyntrace</c> as tracer backend.</p>
+
+ <pre>2> <input>erlang:trace(new,true,[procs,{tracer,dyntrace,[]}]).</input>
+0</pre>
+
+ <p>Start LTTng tracing.</p>
+
+ <pre>$ lttng start
+Tracing started for session erlang-demo</pre>
+
+ <p>Start the <c>os_mon</c> application in Erlang.</p>
+
+ <pre>3> <input>application:ensure_all_started(os_mon).</input>
+{ok,[sasl,os_mon]}</pre>
+
+ <p>Stop LTTng tracing and view the result.</p>
+
+ <pre>$ lttng stop
+Tracing stopped for session erlang-demo
+$ lttng view
+[17:20:42.561168759] (+?.?????????) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.66.0&gt;", name = "sasl_sup", type = "register" }
+[17:20:42.561215519] (+0.000046760) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.67.0&gt;", name = "sasl_safe_sup", type = "register" }
+[17:20:42.562149024] (+0.000933505) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.68.0&gt;", name = "alarm_handler", type = "register" }
+[17:20:42.571035803] (+0.008886779) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.69.0&gt;", name = "release_handler", type = "register" }
+[17:20:42.574939868] (+0.003904065) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.74.0&gt;", name = "os_mon_sup", type = "register" }
+[17:20:42.576818712] (+0.001878844) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.75.0&gt;", name = "disksup", type = "register" }
+[17:20:42.580032013] (+0.003213301) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.76.0&gt;", name = "memsup", type = "register" }
+[17:20:42.583046339] (+0.003014326) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.78.0&gt;", name = "cpu_sup", type = "register" }
+[17:20:42.586206242] (+0.003159903) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.82.0&gt;", name = "timer_server", type = "register" }</pre>
+ </section>
+</chapter>
diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile
index 51d93df418..5ce40bb995 100644
--- a/lib/runtime_tools/doc/src/Makefile
+++ b/lib/runtime_tools/doc/src/Makefile
@@ -1,18 +1,19 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2012. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
#
# %CopyrightEnd%
#
@@ -40,11 +41,11 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
-XML_REF3_FILES = dbg.xml dyntrace.xml erts_alloc_config.xml
+XML_REF3_FILES = dbg.xml dyntrace.xml erts_alloc_config.xml system_information.xml msacc.xml
XML_REF6_FILES = runtime_tools_app.xml
XML_PART_FILES = part_notes.xml part_notes_history.xml part.xml
-XML_CHAPTER_FILES = notes.xml notes_history.xml
+XML_CHAPTER_FILES = notes.xml notes_history.xml LTTng.xml
GENERATED_XML_FILES = DTRACE.xml SYSTEMTAP.xml
@@ -71,12 +72,20 @@ HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+
+TOP_SPECS_FILE = specs.xml
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
XML_FLAGS +=
DVIPS_FLAGS +=
+SPECS_ESRC = ../../src
+
+SPECS_FLAGS = -I../../include -I../../../kernel/src
+
# ----------------------------------------------------
# Targets
# ----------------------------------------------------
diff --git a/lib/runtime_tools/doc/src/book.xml b/lib/runtime_tools/doc/src/book.xml
index 62f145f0a5..e2ab4c6f62 100644
--- a/lib/runtime_tools/doc/src/book.xml
+++ b/lib/runtime_tools/doc/src/book.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE book SYSTEM "book.dtd">
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<copyright>
- <year>1999</year><year>2013</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index d8c82b2459..14a81b2293 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
@@ -35,14 +36,30 @@
<modulesummary>The Text Based Trace Facility</modulesummary>
<description>
<p>This module implements a text based interface to the
- <c>trace/3</c> and the <c>trace_pattern/2</c> BIFs. It makes it
- possible to trace functions, processes and messages on text based
- terminals. It can be used instead of, or as complement to, the
- <c>pman</c> module.
- </p>
- <p>For some examples of how to use <c>dbg</c> from the Erlang
+ <seealso marker="erts:erlang#trace-3"><c>trace/3</c></seealso> and the
+ <seealso marker="erts:erlang#trace_pattern-2"><c>trace_pattern/2</c></seealso> BIFs. It makes it
+ possible to trace functions, processes, ports and messages.
+ </p>
+ <p>
+ To quickly get started on tracing function calls you can use the following
+ code in the Erlang shell:
+ </p>
+ <pre>
+1> dbg:tracer(). %% Start the default trace message receiver
+{ok,&lt;0.36.0>}
+2> dbg:p(all, c). %% Setup call (c) tracing on all processes
+{ok,[{matched,nonode@nohost,26}]}
+3> dbg:tp(lists, seq, x). %% Setup an exception return trace (x) on lists:seq
+{ok,[{matched,nonode@nohost,2},{saved,x}]}
+4> lists:seq(1,10).
+(&lt;0.34.0>) call lists:seq(1,10)
+(&lt;0.34.0>) returned from lists:seq/2 -> [1,2,3,4,5,6,7,8,9,10]
+[1,2,3,4,5,6,7,8,9,10]
+ </pre>
+ <p>
+ For more examples of how to use <c>dbg</c> from the Erlang
shell, see the <seealso marker="#simple_example">simple example</seealso> section.
- </p>
+ </p>
<p>The utilities are also suitable to use in system testing on
large systems, where other tools have too much impact on the
system performance. Some primitive support for sequential tracing
@@ -163,52 +180,67 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Traces <c>Item</c> in accordance to the value specified
by <c>Flags</c>. The variation of <c>Item</c> is listed below:</p>
- <list type="bulleted">
- <item>If the <c>Item</c> is a <c>pid()</c>, the corresponding
- process is traced. The process may be a remote process
- (on another Erlang node). The node must be in the list of
- traced nodes (<seealso marker="#n">see</seealso><c>n/1</c> and <c>tracer/0/2/3</c>).</item>
- <item>If the <c>Item</c> is the atom <c>all</c>, all processes in the
- system as well as all processes created hereafter are
- to be traced. This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is the atom <c>new</c>, no currently existing
- processes are affected, but every process created after the
- call is.This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is the atom <c>existing</c>, all
- existing processes are traced, but new processes will not
- be affected.This also affects all nodes added with the
- <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is an atom other than <c>all</c>,
- <c>new</c> or <c>existing</c>, the process with the
- corresponding registered name is traced.The process may be a
- remote process (on another Erlang node). The node must be added
- with the <c>n/1</c> or <c>tracer/0/2/3</c> function.</item>
- <item>If the <c>Item</c> is an integer, the process <c><![CDATA[<0.Item.0>]]></c> is
- traced.</item>
- <item>If the <c>Item</c> is a tuple <c>{X, Y, Z}</c>, the
- process <c><![CDATA[<X.Y.Z>]]></c> is
- traced. </item>
- <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
- as returned from <c>pid_to_list/1</c>, the process
- <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
- </list>
+ <taglist>
+ <tag><c>pid()</c> or <c>port()</c></tag>
+ <item>The corresponding process or port is traced. The process or port may
+ be a remote process or port (on another Erlang node). The node must
+ be in the list of traced nodes (see <seealso marker="#n-1"><c>n/1</c></seealso>
+ and <seealso marker="#tracer-3"><c>tracer/3</c></seealso>).</item>
+ <tag><c>all</c></tag>
+ <item>All processes and ports in the system as well as all processes and ports
+ created hereafter are to be traced.</item>
+ <tag><c>processes</c></tag>
+ <item>All processes in the system as well as all processes created hereafter are to be traced.</item>
+ <tag><c>ports</c></tag>
+ <item>All ports in the system as well as all ports created hereafter are to be traced.</item>
+ <tag><c>new</c></tag>
+ <item>All processes and ports created after the call is are to be traced.</item>
+ <tag><c>new_processes</c></tag>
+ <item>All processes created after the call is are to be traced.</item>
+ <tag><c>new_ports</c></tag>
+ <item>All ports created after the call is are to be traced.</item>
+ <tag><c>existing</c></tag>
+ <item>All existing processes and ports are traced.</item>
+ <tag><c>existing_processes</c></tag>
+ <item>All existing processes are traced.</item>
+ <tag><c>existing_ports</c></tag>
+ <item>All existing ports are traced.</item>
+ <tag><c>atom()</c></tag>
+ <item>The process or port with the corresponding registered name is traced. The process or
+ port may be a remote process (on another Erlang node). The node must be
+ added with the <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</item>
+ <tag><c>integer()</c></tag>
+ <item>The process <c><![CDATA[<0.Item.0>]]></c> is traced.</item>
+ <tag><c>{X, Y, Z}</c></tag>
+ <item>The process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
+ <tag><c>string()</c></tag>
+ <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
+ as returned from <seealso marker="erts:erlang#pid_to_list-1"><c>pid_to_list/1</c></seealso>,
+ the process <c><![CDATA[<X.Y.Z>]]></c> is traced.
+ </item>
+ </taglist>
+
+ <p>When enabling an <c>Item</c> that represents a group of processes,
+ the <c>Item</c> is enabled on all nodes added with the
+ <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</p>
+
<p><c>Flags</c> can be a single atom,
or a list of flags. The available flags are:
</p>
<taglist>
<tag><c>s (send)</c></tag>
<item>
- <p>Traces the messages the process sends.</p>
+ <p>Traces the messages the process or port sends.</p>
</item>
<tag><c>r (receive)</c></tag>
<item>
- <p>Traces the messages the process receives.</p>
+ <p>Traces the messages the process or port receives.</p>
</item>
<tag><c>m (messages)</c></tag>
<item>
- <p>Traces the messages the process receives and sends.</p>
+ <p>Traces the messages the process or port receives and sends.</p>
</item>
<tag><c>c (call)</c></tag>
<item>
@@ -219,6 +251,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<item>
<p>Traces process related events to the process.</p>
</item>
+ <tag><c>ports</c></tag>
+ <item>
+ <p>Traces port related events to the port.</p>
+ </item>
<tag><c>sos (set on spawn)</c></tag>
<item>
<p>Lets all processes created by the traced
@@ -239,12 +275,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<tag><c>sofl (set on first link)</c></tag>
<item>
<p>This is the same as <c>sol</c>, but only for
- the first call to
- <c>link/1</c> by the traced process.</p>
+ the first call to
+ <seealso marker="erts:erlang#link-1"><c>link/1</c></seealso> by the traced process.</p>
</item>
<tag><c>all</c></tag>
<item>
- <p>Sets all flags.</p>
+ <p>Sets all flags except <c>silent</c>.</p>
</item>
<tag><c>clear</c></tag>
<item>
@@ -253,10 +289,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
</taglist>
<p>The list can also include any of the flags allowed in
- <c>erlang:trace/3</c></p>
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso></p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of
- specifications of how many processes that matched (in the
+ specifications of how many processes and ports that matched (in the
case of a pure pid() exactly 1). The specification of
matched processes is <c>{matched, Node, N}</c>. If the
remote processor call,<c>rpc</c>, to a remote node fails,
@@ -284,9 +320,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</func>
<func>
<name>i() -> ok</name>
- <fsummary>Display information about all traced processes.</fsummary>
+ <fsummary>Display information about all traced processes and ports.</fsummary>
<desc>
- <p>Displays information about all traced processes.</p>
+ <p>Displays information about all traced processes and ports.</p>
</desc>
</func>
<func>
@@ -325,35 +361,41 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function enables call trace for one or more
- functions. All exported functions matching the <c>{Module, Function, Arity}</c> argument will be concerned, but the
+ functions. All exported functions matching the <c>{Module, Function, Arity}</c>
+ argument will be concerned, but the
<c>match_spec()</c> may further narrow down the set of function
calls generating trace messages.</p>
<p>For a description of the <c>match_spec()</c> syntax,
please turn to the
<em>User's guide</em> part of the online
documentation for the runtime system (<em>erts</em>). The
- chapter <em>Match Specification in Erlang</em> explains the
- general match specification "language".</p>
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ explains the general match specification "language".
+ The most common generic match specifications used can be
+ found as <c>Built-inAlias</c>', see
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.
+ </p>
<p>The Module, Function and/or Arity parts of the tuple may
be specified as the atom <c>'_'</c> which is a "wild-card"
matching all modules/functions/arities. Note, if the
Module is specified as <c>'_'</c>, the Function and Arity
parts have to be specified as '_' too. The same holds for the
Functions relation to the Arity.</p>
- <p>All nodes added with <c>n/1</c> or <c>tracer/0/2/3</c> will
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
be affected by this call, and if Module is not <c>'_'</c>
the module will be loaded on all nodes.</p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of specifications of how
- many functions that matched, in the same way as the processes
- are presented in the return value of <c>p/2</c>. </p>
+ many functions that matched, in the same way as the processes and ports
+ are presented in the return value of <seealso marker="#p-2"><c>p/2</c></seealso>. </p>
<p>There may be a tuple <c>{saved, N}</c> in the return value,
if the MatchSpec is other
than []. The integer <c>N</c> may then be used in
subsequent calls to this function and will stand as an
"alias" for the given expression. There are also a couple of
- built-in aliases for common expressions, see <c>ltp/0</c> below
- for details.</p>
+ built-in aliases for common expressions, see
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.</p>
<p>If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples <c>{error, string()}</c> where
@@ -392,11 +434,55 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Set pattern for traced local (as well as global) function calls</fsummary>
<desc>
- <p>This function works as <c>tp/2</c>, but enables
+ <p>This function works as <seealso marker="#tp-2"><c>tp/2</c></seealso>, but enables
tracing for local calls (and local functions) as well as for
global calls (and functions).</p>
</desc>
</func>
+
+
+ <func>
+ <name>tpe(Event, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Set pattern for traced event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchSpec = integer() | Built-inAlias | [] | match_spec()</v>
+ <v>Built-inAlias = x | c | cx</v>
+ <v>MatchDesc = [MatchInfo]</v>
+ <v>MatchInfo = {saved, integer()} | MatchNum</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function associates a match specification with trace event
+ <c>send</c> or <c>'receive'</c>. By default all executed <c>send</c>
+ and <c>'receive'</c> events are traced if enabled for a process.
+ A match specification can be used to filter traced events
+ based on sender, receiver and/or message content.</p>
+ <p>For a description of the <c>match_spec()</c> syntax,
+ please turn to the <em>User's guide</em> part of the online
+ documentation for the runtime system (<em>erts</em>). The
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ explains the general match specification "language".</p>
+ <p>For <c>send</c>, the matching is done on the list <c>[Receiver, Msg]</c>.
+ <c>Receiver</c> is the process or port identity of the receiver and
+ <c>Msg</c> is the message term. The pid of the sending process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>For <c>'receive'</c>, the matching is done on the list <c>[Node, Sender, Msg]</c>.
+ <c>Node</c> is the node name of the sender. <c>Sender</c> is the
+ process or port identity of the sender, or the atom
+ <c>undefined</c> if the sender is not known (which may
+ be the case for remote senders). <c>Msg</c> is the
+ message term. The pid of the receiving process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
+ be affected by this call.</p>
+ <p>The return value is the same as for
+ <seealso marker="#tp-2"><c>tp/2</c></seealso>. The number of matched
+ events are never larger than 1 as <c>tpe/2</c> does not
+ accept any form of wildcards for argument <c>Event</c>.</p>
+ </desc>
+ </func>
<func>
<name>ctp()</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
@@ -439,10 +525,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
- <c>tp/2</c> or <c>tpl/2</c>. Both local and global call trace
+ <seealso marker="#tp-2"><c>tp/2</c></seealso> or <seealso marker="#tpl-2"><c>tpl/2</c></seealso>. Both local and global call trace
is disabled. </p>
<p>The return value reflects how many functions that matched,
- and is constructed as described in <c>tp/2</c>. No tuple
+ and is constructed as described in <seealso marker="#tp-2"><c>tp/2</c></seealso>. No tuple
<c>{saved, N}</c> is however ever returned (for obvious reasons).</p>
</desc>
</func>
@@ -478,8 +564,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpl({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c>ctp/1</c>, but only disables
- tracing set up with <c>tpl/2</c> (not with <c>tp/2</c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>
+ (not with <seealso marker="#tp-2"><c>tp/2</c></seealso>).</p>
</desc>
</func>
<func>
@@ -514,8 +601,25 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpg({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c>ctp/1</c>, but only disables
- tracing set up with <c>tp/2</c> (not with <c>tpl/2</c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tp-2"><c>tp/2</c></seealso>
+ (not with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>).</p>
+ </desc>
+ </func>
+ <func>
+ <name>ctpe(Event) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Clear trace pattern for the specified event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchDesc = [MatchNum]</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function clears match specifications for the specified
+ trace event (<c>send</c> or <c>'receive'</c>). It will revert back
+ to the default behavior of tracing all triggered events.</p>
+ <p>The return value follow the same style as for
+ <seealso marker="#ctp-1"><c>ctp/1</c></seealso>.</p>
</desc>
</func>
<func>
@@ -524,13 +628,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to <c>tp/2</c>, and built-in match specifications.
+ to <seealso marker="#tp-2"><c>tp/2</c></seealso>, and built-in match specifications.
This is very useful, as a complicated
match_spec can be quite awkward to write. Note that the
- match specifications are lost if <c>stop/0</c> is called.</p>
+ match specifications are lost if <seealso marker="#stop-0"><c>stop/0</c></seealso> is called.</p>
<p>Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see <c>wtp/1</c> and <c>rtp/1</c></p>
+ debugging sessions, see <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ and <seealso marker="#rtp-1"><c>rtp/1</c></seealso></p>
<p>There are three built-in trace patterns:
<c>exception_trace</c>, <c>caller_trace</c>
and <c>caller_exception_trace</c> (or <c>x</c>, <c>c</c> and
@@ -553,10 +658,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<fsummary>Delete all saved match specifications.</fsummary>
<desc>
<p>Use this function to "forget" all match specifications
- saved during calls to <c>tp/2</c>.
- This is useful when one wants to restore other match
- specifications from a file with <c>rtp/1</c>. Use
- <c>dtp/1</c> to delete specific saved match specifications. </p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.
+ This is useful when one wants to restore other match
+ specifications from a file with <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. Use
+ <seealso marker="#dtp-1"><c>dtp/1</c></seealso> to delete specific saved match specifications.</p>
</desc>
</func>
<func>
@@ -567,7 +672,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Use this function to "forget" a specific match specification
- saved during calls to <c>tp/2</c>.</p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -579,12 +684,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function will save all match specifications saved
- during the session (during calls to <c>tp/2</c>)
+ during the session (during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>)
and built-in match specifications in a text
file with the name designated by <c>Name</c>. The format
of the file is textual, why it can be edited with an
ordinary text editor, and then restored with
- <c>rtp/1</c>. </p>
+ <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. </p>
<p>Each match spec in the file ends with a full stop
(<c>.</c>) and new (syntactically correct) match
specifications can be added to the file manually.</p>
@@ -602,7 +707,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function reads match specifications from a file
- (possibly) generated by the <c>wtp/1</c> function. It checks
+ (possibly) generated by the <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ function. It checks
the syntax of all match specifications and verifies that
they are correct. The error handling principle is "all or
nothing", i. e. if some of the match specifications are
@@ -610,14 +716,15 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
saved match specifications for the running system. </p>
<p>The match specifications in the file are <em>merged</em>
with the current match specifications, so that no duplicates
- are generated. Use <c>ltp/0</c> to see what numbers were
+ are generated. Use <seealso marker="#ltp-0"><c>ltp/0</c></seealso>
+ to see what numbers were
assigned to the specifications from the file.</p>
<p>The function will return an error, either due to I/O
problems (like a non existing or non readable file) or due
to file format problems. The errors from a bad format file
are in a more or less textual format, which will give a hint
- to what's causing the problem. <marker id="n"></marker>
-</p>
+ to what's causing the problem.
+ </p>
</desc>
</func>
<func>
@@ -629,12 +736,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>The <c>dbg</c> server keeps a list of nodes where tracing
- should be performed. Whenever a <c>tp/2</c> call or a
- <c>p/2</c> call is made, it is executed for all nodes in this
- list including the local node (except for <c>p/2</c> with a
- specific <c>pid()</c> as first argument, in which case the
+ should be performed. Whenever a <seealso marker="#tp-2"><c>tp/2</c></seealso> call or a
+ <seealso marker="#p-2"><c>p/2</c></seealso> call is made, it is executed for all nodes in this
+ list including the local node (except for <seealso marker="#p-2"><c>p/2</c></seealso> with a
+ specific <c>pid()</c> or <c>port()</c> as first argument, in which case the
command is executed only on the node where the designated
- process resides).
+ process or port resides).
</p>
<p>This function adds a remote node (<c>Nodename</c>) to the
list of nodes where tracing is performed. It starts a tracer
@@ -643,17 +750,17 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
distribution). If no tracer process is running on the local
node, the error reason <c>no_local_tracer</c> is returned. The
tracer process on the local node must be started with the
- <c>tracer/0/2</c> function.
+ <seealso marker="#tracer-2"><c>tracer/0/2</c></seealso> function.
</p>
<p>If <c>Nodename</c> is the local node, the error reason
<c>cant_add_local_node</c> is returned.
</p>
- <p>If a trace port (<seealso marker="#trace_port">see</seealso><c>trace_port/2</c>) is
+ <p>If a trace port (see <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>) is
running on the local node, remote nodes can not be traced with
a tracer process. The error reason
<c>cant_trace_remote_pid_to_local_port</c> is returned. A
trace port can however be started on the remote node with the
- <c>tracer/3</c> function.
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.
</p>
<p>The function will also return an error if the node
<c>Nodename</c> is not reachable.</p>
@@ -667,9 +774,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Clears a node from the list of traced nodes. Subsequent
- calls to <c>tp/2</c> and <c>p/2</c> will not consider that
- node, but tracing already activated on the node will continue
- to be in effect.</p>
+ calls to <seealso marker="#tp-2"><c>tp/2</c></seealso> and
+ <seealso marker="#p-2"><c>p/2</c></seealso> will not consider that
+ node, but tracing already activated on the node will continue
+ to be in effect.</p>
<p>Returns <c>ok</c>, cannot fail.</p>
</desc>
</func>
@@ -686,37 +794,42 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to <c>p/2</c> will result in messages sent to the newly
+ to <seealso marker="#p-2"><c>p/2</c></seealso> will result in messages sent to the newly
started trace server.</p>
<p>A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See <c>tracer/2</c> for a description
- of how the trace message handler can be customized. <marker id="tracer2"></marker>
-</p>
- <p>To start a similar tracer on a remote node, use <c>n/1</c>.</p>
+ (i. e. use io:format). See <seealso marker="#tracer-2"><c>tracer/2</c></seealso>
+ for a description of how the trace message handler can be customized.
+ </p>
+ <p>To start a similar tracer on a remote node, use <seealso marker="#n-1"><c>n/1</c></seealso>.</p>
</desc>
</func>
<func>
<name>tracer(Type, Data) -> {ok, pid()} | {error, Error}</name>
<fsummary>Start a tracer server with additional parameters</fsummary>
<type>
- <v>Type = port | process</v>
- <v>Data = PortGenerator | HandlerSpec</v>
- <v>HandlerSpec = {HandlerFun, InitialData}</v>
- <v>HandlerFun = fun() (two arguments)</v>
- <v>InitialData = term()</v>
+ <v>Type = port | process | module</v>
+ <v>Data = PortGenerator | HandlerSpec | ModuleSpec</v>
<v>PortGenerator = fun() (no arguments)</v>
<v>Error = term()</v>
+ <v>HandlerSpec = {HandlerFun, InitialData}</v>
+ <v>HandlerFun = fun() (two arguments)</v>
+ <v>ModuleSpec = fun() (no arguments) | {TracerModule, TracerState}</v>
+ <v>ModuleModule = atom()</v>
+ <v>InitialData = TracerState = term()</v>
</type>
<desc>
<p>This function starts a tracer server with additional
parameters on the local node. The first parameter, the
<c>Type</c>, indicates if trace messages should be handled
- by a receiving process (<c>process</c>) or by a tracer port
- (<c>port</c>). For a description about tracer ports see
- <c>trace_port/2</c>.
+ by a receiving process (<c>process</c>), by a tracer port
+ (<c>port</c>) or by a tracer module
+ (<c>module</c>). For a description about tracer ports see
+ <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>
+ and for a tracer modules see
+ <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>.
</p>
- <p>If <c>Type</c> is a process, a message handler function can
+ <p>If <c>Type</c> is <c>process</c>, a message handler function can
be specified (<c>HandlerSpec</c>). The handler function, which
should be a <c>fun</c> taking two arguments, will be called
for each trace message, with the first argument containing the
@@ -727,18 +840,22 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
choose any appropriate action to take when invoked, and can
save a state for the next invocation by returning it.
</p>
- <p>If <c>Type</c> is a port, then the second parameter should
+ <p>If <c>Type</c> is <c>port</c>, then the second parameter should
be a <em>fun</em> which takes no arguments and returns a
newly opened trace port when called. Such a <em>fun</em> is
- preferably generated by calling <c>trace_port/2</c>.
+ preferably generated by calling <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>.
</p>
+ <p>if <c>Type</c> is <c>module</c>, then the second parameter should
+ be either a tuple describing the <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
+ module to be used for tracing and the state to be used for
+ that tracer module or a fun returning the same tuple.</p>
<p>If an error is returned, it can either be due to a tracer
server already running (<c>{error,already_started}</c>) or
due to the <c>HandlerFun</c> throwing an exception.
</p>
<p>To start a similar tracer on a remote node, use
- <c>tracer/3</c>. <marker id="trace_port"></marker>
-</p>
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso>.
+ </p>
</desc>
</func>
<func>
@@ -748,20 +865,19 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<v>Nodename = atom()</v>
</type>
<desc>
- <p>This function is equivalent to <c>tracer/2</c>, but acts on
+ <p>This function is equivalent to <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but acts on
the given node. A tracer is started on the node
- (<c>Nodename</c>) and the node is added to the list of traced
- nodes.
+ (<c>Nodename</c>) and the node is added to the list of traced nodes.
</p>
<note>
- <p>This function is not equivalent to <c>n/1</c>. While
- <c>n/1</c> starts a process tracer which redirects all trace
+ <p>This function is not equivalent to <seealso marker="#n-1"><c>n/1</c></seealso>. While
+ <seealso marker="#n-1"><c>n/1</c></seealso> starts a process tracer which redirects all trace
information to a process tracer on the local node (i.e. the
- trace control node), <c>tracer/3</c> starts a tracer of any
+ trace control node), <seealso marker="#tracer-3"><c>tracer/3</c></seealso> starts a tracer of any
type which is independent of the tracer on the trace control
node.</p>
</note>
- <p>For details, <seealso marker="#tracer2">see</seealso><c>tracer/2</c>.</p>
+ <p>For details, see <seealso marker="#tracer-2"><c>tracer/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -793,9 +909,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<c>file</c> and the <c>ip</c> trace drivers. The file driver
sends all trace messages into one or several binary files,
from where they later can be fetched and processed with the
- <c>trace_client/2</c> function. The ip driver opens a TCP/IP
+ <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> function. The ip driver opens a TCP/IP
port where it listens for connections. When a client
- (preferably started by calling <c>trace_client/2</c> on
+ (preferably started by calling <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> on
another Erlang node) connects, all trace messages are sent
over the IP network for further processing by the remote
client. </p>
@@ -834,7 +950,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
as fast as they are produced by the runtime system, a special
message is sent, which indicates how many messages that are
dropped. That message will arrive at the handler function
- specified in <c>trace_client/3</c> as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
+ specified in <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso>
+ as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
dropped. In case of heavy tracing, drop's are likely to occur,
and they surely occur if no client is reading the trace
messages.</p>
@@ -888,7 +1005,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
<tag><c>get_listen_port</c></tag>
<item>
- <p>Returns <c>{ok, IpPort}</c> where <c>IpPort</c>is
+ <p>Returns <c>{ok, IpPort}</c> where <c>IpPort</c> is
the IP port number used by the driver listen socket.
Only the ip trace driver supports this operation.</p>
</item>
@@ -911,8 +1028,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
- same way as a tracer process created by the <c>tracer/0</c>
- function.</p>
+ same way as a tracer process created by the
+ <seealso marker="#tracer-0"><c>tracer/0</c></seealso> function.</p>
<p>If <c>Type</c> is <c>file</c>, the client reads all trace
messages stored in the file named <c>Filename</c> or
specified by <c>WrapFilesSpec</c> (must be the same as used
@@ -923,7 +1040,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>follow_file</c>, the client behaves as
in the <c>file</c> case, but keeps trying to read (and
process) more data
- from the file until stopped by <c>stop_trace_client/1</c>.
+ from the file until stopped by <seealso marker="#stop_trace_client-1"><c>stop_trace_client/1</c></seealso>.
<c>WrapFilesSpec</c> is not allowed as second argument
for this <c>Type</c>.</p>
<p>If <c>Type</c> is <c>ip</c>, the client connects to the
@@ -979,10 +1096,10 @@ hello</pre>
<v>InitialData = term()</v>
</type>
<desc>
- <p>This function works exactly as <c>trace_client/2</c>, but
- allows you to write your own handler function. The handler
+ <p>This function works exactly as <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>,
+ but allows you to write your own handler function. The handler
function works mostly as the one described in
- <c>tracer/2</c>, but will also have to be prepared to handle
+ <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but will also have to be prepared to handle
trace messages of the form <c>{drop, N}</c>, where <c>N</c> is
the number of dropped messages. This pseudo trace message will
only occur if the ip trace driver is used.</p>
@@ -1001,7 +1118,8 @@ hello</pre>
<desc>
<p>This function shuts down a previously started trace
client. The <c>Pid</c> argument is the process id returned
- from the <c>trace_client/2</c> or <c>trace_client/3</c> call.</p>
+ from the <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>
+ or <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> call.</p>
</desc>
</func>
<func>
@@ -1016,30 +1134,29 @@ hello</pre>
<fsummary>Return the process or port to which all trace messages are sent.</fsummary>
<type>
<v>Nodename = atom()</v>
- <v>Tracer = port() | pid()</v>
+ <v>Tracer = port() | pid() | {module(), term()}</v>
</type>
<desc>
- <p>Returns the process or port to which all trace
- messages are sent. </p>
+ <p>Returns the process, port or tracer module to which all trace
+ messages are sent.</p>
</desc>
</func>
<func>
- <name>stop() -> stopped</name>
+ <name>stop() -> ok</name>
<fsummary>Stop the <c>dbg</c>server and the tracing of all processes.</fsummary>
<desc>
<p>Stops the <c>dbg</c> server and clears all trace flags for
- all processes and all trace patterns for all functions. Also
+ all processes and all local trace patterns for all functions. Also
shuts down all trace clients and closes all trace ports.</p>
- <p>Note that no trace patterns are affected by this
+ <p>Note that no global trace patterns are affected by this
function.</p>
</desc>
</func>
<func>
- <name>stop_clear() -> stopped</name>
+ <name>stop_clear() -> ok</name>
<fsummary>Stop the <c>dbg</c>server and the tracing of all processes, and clears trace patterns.</fsummary>
<desc>
- <p>Same as stop/0, but also clears all trace patterns on local
- and global functions calls.</p>
+ <p>Same as stop/0, but also clears all trace patterns on global functions calls.</p>
</desc>
</func>
</funcs>
@@ -1155,8 +1272,9 @@ SeqTrace [0]: (&lt;0.30.0>) &lt;0.25.0> ! {dbg,{ok,&lt;0.31.0>}} [Serial: {4,5}]
of causing a deadlock. This will happen if a group leader process generates a trace
message and the tracer process, by calling the trace handler function, sends an IO
request to the same group leader. The problem can only occur if the trace handler
- prints to tty using an <c>io</c> function such as <c>format/2</c>. Note that when
- <c>dbg:p(all,call)</c> is called, IO processes are also traced.
+ prints to tty using an <c>io</c> function such as <seealso marker="stdlib:io#format-2"><c>format/2</c></seealso>.
+ Note that when
+ <c>dbg:p(all,call)</c> is called, IO processes are also traced.
Here's an example:</p>
<pre>
%% Using a default line editing shell
diff --git a/lib/runtime_tools/doc/src/dyntrace.xml b/lib/runtime_tools/doc/src/dyntrace.xml
index f0149d0665..0cdcecab68 100644
--- a/lib/runtime_tools/doc/src/dyntrace.xml
+++ b/lib/runtime_tools/doc/src/dyntrace.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
<header>
<copyright>
- <year>1996</year><year>2012</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/erts_alloc_config.xml b/lib/runtime_tools/doc/src/erts_alloc_config.xml
index 6acf498411..ffc4ec5285 100644
--- a/lib/runtime_tools/doc/src/erts_alloc_config.xml
+++ b/lib/runtime_tools/doc/src/erts_alloc_config.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
<header>
<copyright>
- <year>2007</year><year>2010</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/fascicules.xml b/lib/runtime_tools/doc/src/fascicules.xml
index 5230dc7e90..1a0bd6ec97 100644
--- a/lib/runtime_tools/doc/src/fascicules.xml
+++ b/lib/runtime_tools/doc/src/fascicules.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE fascicules SYSTEM "fascicules.dtd">
<fascicules>
diff --git a/lib/runtime_tools/doc/src/msacc.xml b/lib/runtime_tools/doc/src/msacc.xml
new file mode 100644
index 0000000000..129da3d230
--- /dev/null
+++ b/lib/runtime_tools/doc/src/msacc.xml
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2014</year><year>2014</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ </legalnotice>
+
+ <title>Microstate Accounting</title>
+ <prepared>Lukas Larsson</prepared>
+ <responsible></responsible>
+ <docno>1</docno>
+ <approved></approved>
+ <checked></checked>
+ <date>14-09-30</date>
+ <rev>A</rev>
+ <file>msacc.xml</file>
+ </header>
+ <module>msacc</module>
+ <modulesummary>Convenience functions for microstate accounting</modulesummary>
+ <description>
+ <p>This module implements some convenience functions for analyzing
+ microstate accounting data. For details about how to use the basic api and
+ what the different states represent see
+ <seealso marker="erts:erlang#statistics_microstate_accounting"><c>
+ erlang:statistics(microstate_accounting)</c></seealso>.</p>
+ <marker id="msacc_print_example"></marker>
+ <p><em>Basic Scenario</em></p>
+ <pre>1> <input>msacc:start(1000).</input>
+ok
+2> <input>msacc:print().</input>
+Average thread real-time : 1000513 us
+Accumulated system run-time : 2213 us
+Average scheduler run-time : 1076 us
+
+ Thread aux check_io emulator gc other port sleep
+
+Stats per thread:
+ async( 0) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ async( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ aux( 1) 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99%
+ scheduler( 1) 0.00% 0.03% 0.13% 0.00% 0.01% 0.00% 99.82%
+ scheduler( 2) 0.00% 0.00% 0.00% 0.00% 0.03% 0.00% 99.97%
+
+Stats per type:
+ async 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 100.00%
+ aux 0.00% 0.00% 0.00% 0.00% 0.00% 0.00% 99.99%
+ scheduler 0.00% 0.02% 0.06% 0.00% 0.02% 0.00% 99.89%
+ok
+</pre>
+ <p>This first command enables microstate accounting for 1000 milliseconds.
+ See <seealso marker="#start-0"><c>start/0</c></seealso>,
+ <seealso marker="#stop-0"><c>stop/0</c></seealso>,
+ <seealso marker="#reset-0"><c>reset/0</c></seealso> and
+ <seealso marker="#start-1"><c>start/1</c></seealso> for more details.
+ The second command prints the statistics gathered during that time.
+ First three general statistics are printed.</p>
+ <taglist>
+ <tag>Average real-time</tag>
+ <item>The average time spent collecting data in the threads.
+ This should be close to the time which data was collected.
+ </item>
+ <tag>System run-time</tag>
+ <item>The total run-time of all threads in the system.
+ This is what you get if you call <c>msacc:stats(total_runtime,Stats).</c>
+ </item>
+ <tag>Average scheduler run-time</tag>
+ <item>The average run-time for the schedulers.
+ This is the average amount of time the schedulers did not sleep.</item>
+ </taglist>
+ <p>Then one column per state is printed with a the percentage of time this
+ thread spent in the state out of it's own real-time. After the thread
+ specific time, the accumulated time for each type of thread is printed in
+ a similar format.</p>
+ <p>Since we have the average real-time and the percentage spent in each
+ state we can easily calculate the time spent in each state by multiplying
+ <c>Average thread real-time</c> with <c>Thread state %</c>, i.e. to
+ get the time Scheduler 1 spent in the emulator state we do
+ <c>1000513us * 0.13% = 1300us</c>.</p>
+ </description>
+ <datatypes>
+ <datatype>
+ <name name="msacc_data"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_data_thread"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_data_counters"/>
+ <desc><p>A map containing the different microstate accounting states and
+ the number of microseconds spent in it.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats_thread"/>
+ <desc><p>A map containing information about a specific thread. The
+ percentages in the map can be either run-time or real-time depending
+ on if <c>runtime</c> or <c>realtime</c> was requested from
+ <seealso marker="#stats-2">stats/2</seealso>. <c>system</c> is the
+ percentage of total system time for this specific thread.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_stats_counters"/>
+ <desc><p>A map containing the different microstate accounting states. Each
+ value in the map contains another map with the percentage of time that
+ this thread has spent in the specific state. Both the percentage of
+ <c>system</c> time and the time for that specific <c>thread</c> is part of
+ the map.</p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_type"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_id"/>
+ </datatype>
+ <datatype>
+ <name name="msacc_state"/>
+ <desc><p>The different states that a thread can be in. See
+ <seealso marker="erts:erlang#statistics_microstate_accounting">
+ erlang:statistics(microstate_accounting)</seealso> for details.
+ </p></desc>
+ </datatype>
+ <datatype>
+ <name name="msacc_print_options"/>
+ <desc><p>The different options that can be given to
+ <seealso marker="#print-2"><c>print/2</c></seealso>.
+ </p></desc>
+ </datatype>
+ </datatypes>
+ <funcs>
+ <func>
+ <name name="available" arity="0"/>
+ <fsummary>Check if microstate accounting is available</fsummary>
+ <desc>
+ <p>This function checks whether microstate accounting
+ is available or not.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="start" arity="0"/>
+ <fsummary>Start microstate accounting.</fsummary>
+ <desc>
+ <p>Start microstate accounting. Returns whether it was
+ previously enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="start" arity="1"/>
+ <fsummary>Start microstate accounting for a time.</fsummary>
+ <desc>
+ <p>Resets all counters and then starts microstate accounting
+ for the given milliseconds.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stop" arity="0"/>
+ <fsummary>Stop microstate accounting.</fsummary>
+ <desc>
+ <p>Stop microstate accounting.
+ Returns whether is was previously enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="reset" arity="0"/>
+ <fsummary>Reset microstate accounting counters</fsummary>
+ <desc>
+ <p>Reset microstate accounting counters.
+ Returns whether is was enabled or disabled.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="0"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>
+ Prints the current microstate accounting to standard out.
+ Same as
+ <seealso marker="#print-1">
+ <c>msacc:print(msacc:stats(),#{}).</c>
+ </seealso>
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="1"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to stdout.
+ Same as
+ <seealso marker="#print-1">
+ <c>msacc:print(DataOrStats,#{}).</c>
+ </seealso>
+ </p>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="2"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to standard out.
+ With many states this can be quite verbose. See the top of this
+ reference manual for a brief description of what the fields mean.</p>
+ <p>It is possible to print more specific types of statistics by
+ first manipulating the <c>DataOrStats</c> using
+ <seealso marker="#stats-2"><c>stats/2</c></seealso>.
+ For instance if you want to print the percentage of run-time for each
+ thread you can do:</p>
+ <pre><input>msacc:print(msacc:stats(runtime,msacc:stats())).</input></pre>
+ <p>If you want to only print run-time per thread type you can do:</p>
+ <pre><input>msacc:print(msacc:stats(type,msacc:stats(runtime,msacc:stats()))).</input></pre>
+ <p><em>Options</em></p>
+ <taglist>
+ <tag><c>system</c></tag><item>Print percentage of time spent in each
+ state out of system time as well as thread time.
+ Default: false.</item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="print" arity="3"/>
+ <fsummary>Print microstate statistics</fsummary>
+ <desc>
+ <p>Print the given microstate statistics values to the given file
+ or device. The other arguments behave the same way as for
+ <seealso marker="#print-2"><c>print/2</c></seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="0"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a runtime system independent version of the microstate
+ statistics data presented by
+ <seealso marker="erts:erlang#statistics_microstate_accounting">
+ <c>erlang:statistics(microstate_accounting)</c></seealso>.
+ All counters have been normalized to be in microsecond resolution.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the system time for the given microstate statistics values.
+ System time is the accumulated time of all threads.</p>
+ <taglist>
+ <tag><c>realtime</c></tag>
+ <item>Returns all time recorded for all threads.</item>
+ <tag><c>runtime</c></tag>
+ <item>Returns all time spent doing work for all threads, i.e.
+ all time not spent in the <c>sleep</c> state.</item>
+ </taglist>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns fractions of real-time or run-time spent in the various
+ threads from the given microstate statistics values.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="stats" arity="2" clause_i="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a list of microstate statistics values where the values
+ for all threads of the same type has been merged.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="to_file" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Dumps the current microstate statistics counters to a file that can
+ be parsed with <seealso marker="kernel:file#consult/1">
+ file:consult/1</seealso>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="from_file" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Read a file dump produced by <seealso marker="#to_file/1">
+ to_file(Filename)</seealso>.</p>
+ </desc>
+ </func>
+ </funcs>
+</erlref>
diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index 2281ac4a49..6bec7cb9ca 100644
--- a/lib/runtime_tools/doc/src/notes.xml
+++ b/lib/runtime_tools/doc/src/notes.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">
<chapter>
<header>
<copyright>
- <year>2004</year><year>2013</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
@@ -31,6 +32,330 @@
<p>This document describes the changes made to the Runtime_Tools
application.</p>
+<section><title>Runtime_Tools 1.10</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug in dbg:trace_port/2 that could cause the trace ip
+ driver to produce faulty error reports "...(re)selected
+ before stop_select was called for driver trace_ip_drv".</p>
+ <p>
+ Own Id: OTP-13576 Aux Id: ERL-119 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add microstate accounting</p>
+ <p>
+ Microstate accounting is a way to track which state the
+ different threads within ERTS are in. The main usage area
+ is to pin point performance bottlenecks by checking which
+ states the threads are in and then from there figuring
+ out why and where to optimize.</p>
+ <p>
+ Since checking whether microstate accounting is on or off
+ is relatively expensive only a few of the states are
+ enabled by default and more states can be enabled through
+ configure.</p>
+ <p>
+ There is a convenience module called msacc that has been
+ added to runtime_tools that can assist in gathering and
+ interpreting the data from Microstate accounting.</p>
+ <p>
+ For more information see <seealso
+ marker="erts:erlang#statistics_microstate_accounting">erlang:statistics(microstate_accounting,
+ _)</seealso> and the <seealso
+ marker="runtime_tools:msacc">msacc</seealso> module in
+ runtime_tools.</p>
+ <p>
+ Own Id: OTP-12345</p>
+ </item>
+ <item>
+ <p>
+ Update observer GUI to support tracing on ports, and to
+ set matchspecs for send/receive. This required some minor
+ bugfixes in runtime_tools/dbg.</p>
+ <p>
+ Own Id: OTP-13481</p>
+ </item>
+ <item>
+ <p>
+ Update dbg and ttb to work with a tracer module as tracer
+ and tracing on ports.</p>
+ <p>
+ Own Id: OTP-13500</p>
+ </item>
+ <item>
+ <p>
+ Updated dbg to accept the new trace options
+ <c>monotonic_timestamp</c> and
+ <c>strict_monotonic_timestamp</c>.</p>
+ <p>
+ Own Id: OTP-13502</p>
+ </item>
+ <item>
+ <p>
+ Introduce LTTng tracing via Erlang tracing.</p>
+ <p>
+ For LTTng to be enabled OTP needs to be built with
+ configure option <c>--with-dynamic-trace=lttng</c>.</p>
+ <p>The dynamic trace module <c>dyntrace</c> is now
+ capable to be used as a LTTng sink for Erlang tracing.
+ For a list of all tracepoints, see <seealso
+ marker="runtime_tools:LTTng">Runtime Tools User's
+ Guide</seealso> .</p>
+ <p>This feature also introduces an incompatible change in
+ trace tags. The trace tags <c>gc_start</c> and
+ <c>gc_end</c> has been split into <c>gc_minor_start</c>,
+ <c>gc_minor_end</c> and <c>gc_major_start</c>,
+ <c>gc_major_end</c>.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13532</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.9.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p><c>dbg:trace_client()</c> now uses a read buffer to
+ speed up reading of trace files.</p>
+ <p>
+ Own Id: OTP-13279</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.9.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Clarified dbg:stop documentation</p>
+ <p>
+ Own Id: OTP-13078</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.9.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The <c>trace_file_drv</c> did not handle <c>EINTR</c>
+ correct which caused it to fail when the runtime system
+ received a signal.</p>
+ <p>
+ Own Id: OTP-12890 Aux Id: seq12885 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.9</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Change license text from Erlang Public License to Apache
+ Public License v2</p>
+ <p>
+ Own Id: OTP-12845</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.8.16</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The trace process started by <c>dbg</c> would not always
+ terminate when <c>dbg:stop/0</c> was called.</p>
+ <p>
+ Own Id: OTP-12517</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.8.15</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Add <c>nif_version</c> to <c>erlang:system_info/1</c> in
+ order to get the NIF API version of the runtime system in
+ a way similar to <c>driver_version</c>.</p>
+ <p>
+ Own Id: OTP-12298</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.8.14</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The documentation for the return value of
+ dbg:{stop,stop_clear} functions are now correct (Thanks
+ to Luca Favatella)</p>
+ <p>
+ Own Id: OTP-11603</p>
+ </item>
+ <item>
+ <p>
+ Fix DTrace build on Illumos. (Thanks to Ryan Zezeski.)</p>
+ <p>
+ Own Id: OTP-11622</p>
+ </item>
+ <item>
+ <p>
+ Do not turn off scheduler_wall_time, as it can interfere
+ with other applications usage.</p>
+ <p>
+ Own Id: OTP-11693 Aux Id: seq12528 </p>
+ </item>
+ <item>
+ <p>
+ Application upgrade (appup) files are corrected for the
+ following applications: </p>
+ <p>
+ <c>asn1, common_test, compiler, crypto, debugger,
+ dialyzer, edoc, eldap, erl_docgen, et, eunit, gs, hipe,
+ inets, observer, odbc, os_mon, otp_mibs, parsetools,
+ percept, public_key, reltool, runtime_tools, ssh,
+ syntax_tools, test_server, tools, typer, webtool, wx,
+ xmerl</c></p>
+ <p>
+ A new test utility for testing appup files is added to
+ test_server. This is now used by most applications in
+ OTP.</p>
+ <p>
+ (Thanks to Tobias Schlager)</p>
+ <p>
+ Own Id: OTP-11744</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Allow install path to have unicode characters.</p>
+ <p>
+ Own Id: OTP-10877</p>
+ </item>
+ <item>
+ <p>
+ The <c>erts_alloc_config</c> tool has been updated to
+ produce configurations that better fit todays SMP support
+ in the VM.</p>
+ <p>
+ Own Id: OTP-11662</p>
+ </item>
+ <item>
+ <p>
+ The <seealso
+ marker="kernel:app"><c>app</c></seealso>-file key
+ <seealso
+ marker="kernel:app#runtime_dependencies"><c>runtime_dependencies</c></seealso>
+ has been introduced.</p>
+ <p>
+ Runtime dependencies have been added to all app-files in
+ OTP. Note that these may not be completely correct during
+ OTP 17, but this is actively being worked on.</p>
+ <p>
+ The function <seealso
+ marker="runtime_tools:system_information#sanity_check/0"><c>system_information:sanity_check/0</c></seealso>
+ will verify all declared runtime dependencies in the
+ system when called.</p>
+ <p>
+ Own Id: OTP-11773</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.8.13</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Observer did not produce correct result when ERTS
+ internal memory allocators had been disabled.</p>
+ <p>
+ Own Id: OTP-11520</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Runtime_Tools 1.8.12</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The process trace flag 'silent' is now allowed in call to
+ dbg:p/2.</p>
+ <p>
+ Own Id: OTP-11222</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Runtime_Tools 1.8.11</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -69,7 +394,7 @@
<item>
<p>
Fix Table Viewer refresh crash on no more existing ets
- tables (Thanks to Peti G�mori)</p>
+ tables (Thanks to Peti Gömori)</p>
<p>
Own Id: OTP-10635</p>
</item>
diff --git a/lib/runtime_tools/doc/src/notes_history.xml b/lib/runtime_tools/doc/src/notes_history.xml
index 8fe27f619c..48b868ff5b 100644
--- a/lib/runtime_tools/doc/src/notes_history.xml
+++ b/lib/runtime_tools/doc/src/notes_history.xml
@@ -1,24 +1,25 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">
<chapter>
<header>
<copyright>
<year>2006</year>
- <year>2011</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
The Initial Developer of the Original Code is Ericsson AB.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/part.xml b/lib/runtime_tools/doc/src/part.xml
index 948d4a8020..34acf69fc8 100644
--- a/lib/runtime_tools/doc/src/part.xml
+++ b/lib/runtime_tools/doc/src/part.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE part SYSTEM "part.dtd">
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2012</year><year>2012</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
@@ -33,6 +34,7 @@
<p><em>Runtime Tools</em></p>
</description>
+ <xi:include href="LTTng.xml"/>
<xi:include href="DTRACE.xml"/>
<xi:include href="SYSTEMTAP.xml"/>
</part>
diff --git a/lib/runtime_tools/doc/src/part_notes.xml b/lib/runtime_tools/doc/src/part_notes.xml
index 6f7f610da0..cabf3e39da 100644
--- a/lib/runtime_tools/doc/src/part_notes.xml
+++ b/lib/runtime_tools/doc/src/part_notes.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE part SYSTEM "part.dtd">
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2004</year><year>2009</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/part_notes_history.xml b/lib/runtime_tools/doc/src/part_notes_history.xml
index 2ce1a5de05..dd1991f23a 100644
--- a/lib/runtime_tools/doc/src/part_notes_history.xml
+++ b/lib/runtime_tools/doc/src/part_notes_history.xml
@@ -1,24 +1,25 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE part SYSTEM "part.dtd">
<part>
<header>
<copyright>
<year>2006</year>
- <year>2011</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
The Initial Developer of the Original Code is Ericsson AB.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/ref_man.xml b/lib/runtime_tools/doc/src/ref_man.xml
index df3446cd17..d2fb7a29af 100644
--- a/lib/runtime_tools/doc/src/ref_man.xml
+++ b/lib/runtime_tools/doc/src/ref_man.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE application SYSTEM "application.dtd">
<application xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>1999</year><year>2012</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
</legalnotice>
@@ -35,5 +36,7 @@
<xi:include href="dbg.xml"/>
<xi:include href="dyntrace.xml"/>
<xi:include href="erts_alloc_config.xml"/>
+ <xi:include href="msacc.xml"/>
+ <xi:include href="system_information.xml"/>
</application>
diff --git a/lib/runtime_tools/doc/src/runtime_tools_app.xml b/lib/runtime_tools/doc/src/runtime_tools_app.xml
index 1fd61b84d8..a2cf623977 100644
--- a/lib/runtime_tools/doc/src/runtime_tools_app.xml
+++ b/lib/runtime_tools/doc/src/runtime_tools_app.xml
@@ -1,24 +1,25 @@
-<?xml version="1.0" encoding="latin1" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE appref SYSTEM "appref.dtd">
<appref>
<header>
<copyright>
<year>1999</year>
- <year>2011</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
The Initial Developer of the Original Code is Ericsson AB.
</legalnotice>
diff --git a/lib/runtime_tools/doc/src/specs.xml b/lib/runtime_tools/doc/src/specs.xml
new file mode 100644
index 0000000000..978bd39e55
--- /dev/null
+++ b/lib/runtime_tools/doc/src/specs.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<specs xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="../specs/specs_system_information.xml"/>
+ <xi:include href="../specs/specs_msacc.xml"/>
+</specs>
diff --git a/lib/runtime_tools/doc/src/system_information.xml b/lib/runtime_tools/doc/src/system_information.xml
new file mode 100644
index 0000000000..53dc595e64
--- /dev/null
+++ b/lib/runtime_tools/doc/src/system_information.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2014</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title></title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno>1</docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev></rev>
+ <file>system_information.xml</file>
+ </header>
+ <module>system_information</module>
+ <modulesummary>System Information</modulesummary>
+ <description>
+ <p></p>
+ </description>
+ <funcs>
+ <func>
+ <name name="sanity_check" arity="0"/>
+ <fsummary>Perform a sanity check</fsummary>
+ <desc>
+ <p>Performs a sanity check on the system. If no issues
+ were found, <c>ok</c> is returned. If issues were
+ found, <c>{failed, <anno>Failures</anno>}</c> is
+ returned. All failures found will be part of the
+ <c><anno>Failures</anno></c> list. Currently defined
+ <c><anno>Failure</anno></c> elements in the
+ <c><anno>Failures</anno></c> list:</p>
+ <taglist>
+ <tag><c><anno>InvalidAppFile</anno></c></tag>
+ <item><p>An application has an invalid <c>.app</c> file. The
+ second element identifies the application which has the
+ invalid <c>.app</c> file.</p></item>
+ <tag><c><anno>InvalidApplicationVersion</anno></c></tag>
+ <item><p>An application has an invalid application version.
+ The second element identifies the application version that
+ is invalid.</p></item>
+ <tag><c><anno>MissingRuntimeDependencies</anno></c></tag>
+ <item><p>An application is missing
+ <seealso marker="kernel:app#runtime_dependencies">runtime
+ dependencies</seealso>. The second element identifies the
+ application (with version) that has missing dependencies.
+ The third element contains the missing dependencies.</p>
+ <p>Note that this check use application versions that
+ are loaded, or will be loaded when used. You might have
+ application versions that satisfies all dependencies
+ installed in the system, but if those are not loaded this
+ check will fail. The system will of course also fail when
+ used like this. This may happen when you have multiple
+ <seealso marker="doc/system_principles:versions">branched
+ versions</seealso> of the same application installed in the
+ system, but you do not use a
+ <seealso marker="doc/system_principles:system_principles#BOOTSCRIPT">boot
+ script</seealso> identifing the correct application version.</p>
+ </item>
+ </taglist>
+ <p>Currently the sanity check is limited to verifying
+ runtime dependencies found in the <c>.app</c> files of
+ all applications. More checks will be introduced in the
+ future. This implies that the return type <em>will</em>
+ change in the future.</p>
+ <note><p>An <c>ok</c> return value only means that
+ <c>sanity_check/0</c> did not find any issues, <em>not</em>
+ that no issues exist.</p></note>
+ </desc>
+ </func>
+ <func>
+ <name name="to_file" arity="1"/>
+ <fsummary>Write miscellaneous system information to file</fsummary>
+ <desc><p>Writes miscellaneous system information to file. This
+ information will typically be requested by the Erlang/OTP team
+ at Ericsson AB when reporting an issue.</p></desc>
+ </func>
+ </funcs>
+ </erlref>
+
diff --git a/lib/runtime_tools/examples/dist.d b/lib/runtime_tools/examples/dist.d
index 7e2d7f0e35..3da2171a85 100644
--- a/lib/runtime_tools/examples/dist.d
+++ b/lib/runtime_tools/examples/dist.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/dist.systemtap b/lib/runtime_tools/examples/dist.systemtap
index 8935e19e28..bb20d617e1 100644
--- a/lib/runtime_tools/examples/dist.systemtap
+++ b/lib/runtime_tools/examples/dist.systemtap
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/driver1.d b/lib/runtime_tools/examples/driver1.d
index 4871a8ee69..f63033ce6a 100644
--- a/lib/runtime_tools/examples/driver1.d
+++ b/lib/runtime_tools/examples/driver1.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/driver1.systemtap b/lib/runtime_tools/examples/driver1.systemtap
index deae82f8fb..e1ee8ecffc 100644
--- a/lib/runtime_tools/examples/driver1.systemtap
+++ b/lib/runtime_tools/examples/driver1.systemtap
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/efile_drv.d b/lib/runtime_tools/examples/efile_drv.d
index 2442222552..a470518dd9 100644
--- a/lib/runtime_tools/examples/efile_drv.d
+++ b/lib/runtime_tools/examples/efile_drv.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/efile_drv.systemtap b/lib/runtime_tools/examples/efile_drv.systemtap
index 4b92e67048..29c3637e10 100644
--- a/lib/runtime_tools/examples/efile_drv.systemtap
+++ b/lib/runtime_tools/examples/efile_drv.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/function-calls.d b/lib/runtime_tools/examples/function-calls.d
index ec6090553e..f8ca388228 100644
--- a/lib/runtime_tools/examples/function-calls.d
+++ b/lib/runtime_tools/examples/function-calls.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/function-calls.systemtap b/lib/runtime_tools/examples/function-calls.systemtap
index 4de54cfb5a..9c44b2d014 100644
--- a/lib/runtime_tools/examples/function-calls.systemtap
+++ b/lib/runtime_tools/examples/function-calls.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/garbage-collection.d b/lib/runtime_tools/examples/garbage-collection.d
index ebc40a19ec..7d5a07c6fb 100644
--- a/lib/runtime_tools/examples/garbage-collection.d
+++ b/lib/runtime_tools/examples/garbage-collection.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/garbage-collection.systemtap b/lib/runtime_tools/examples/garbage-collection.systemtap
index 81e9d38196..e414eea821 100644
--- a/lib/runtime_tools/examples/garbage-collection.systemtap
+++ b/lib/runtime_tools/examples/garbage-collection.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/memory1.d b/lib/runtime_tools/examples/memory1.d
index b222aeae62..79f5fa70a5 100644
--- a/lib/runtime_tools/examples/memory1.d
+++ b/lib/runtime_tools/examples/memory1.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/memory1.systemtap b/lib/runtime_tools/examples/memory1.systemtap
index 9374b97d18..04df4d64c4 100644
--- a/lib/runtime_tools/examples/memory1.systemtap
+++ b/lib/runtime_tools/examples/memory1.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/messages.d b/lib/runtime_tools/examples/messages.d
index 08cf52f3d2..d48c807afd 100644
--- a/lib/runtime_tools/examples/messages.d
+++ b/lib/runtime_tools/examples/messages.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/messages.systemtap b/lib/runtime_tools/examples/messages.systemtap
index c58e1168f9..f2ef56a22b 100644
--- a/lib/runtime_tools/examples/messages.systemtap
+++ b/lib/runtime_tools/examples/messages.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/port1.d b/lib/runtime_tools/examples/port1.d
index 1e3bd3d8a9..79266f78ca 100644
--- a/lib/runtime_tools/examples/port1.d
+++ b/lib/runtime_tools/examples/port1.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/port1.systemtap b/lib/runtime_tools/examples/port1.systemtap
index c8af240d85..f7ce03a65e 100644
--- a/lib/runtime_tools/examples/port1.systemtap
+++ b/lib/runtime_tools/examples/port1.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/process-scheduling.d b/lib/runtime_tools/examples/process-scheduling.d
index 6408d7d5f2..30bfcaa21d 100644
--- a/lib/runtime_tools/examples/process-scheduling.d
+++ b/lib/runtime_tools/examples/process-scheduling.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/process-scheduling.systemtap b/lib/runtime_tools/examples/process-scheduling.systemtap
index 4cc3ef555c..b0b74257b3 100644
--- a/lib/runtime_tools/examples/process-scheduling.systemtap
+++ b/lib/runtime_tools/examples/process-scheduling.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/spawn-exit.d b/lib/runtime_tools/examples/spawn-exit.d
index ae690b819a..feeaa7960e 100644
--- a/lib/runtime_tools/examples/spawn-exit.d
+++ b/lib/runtime_tools/examples/spawn-exit.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/spawn-exit.systemtap b/lib/runtime_tools/examples/spawn-exit.systemtap
index 4b69e4aea6..89bca14496 100644
--- a/lib/runtime_tools/examples/spawn-exit.systemtap
+++ b/lib/runtime_tools/examples/spawn-exit.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/user-probe-n.d b/lib/runtime_tools/examples/user-probe-n.d
index 06a3e5c9b9..4b4300fe83 100644
--- a/lib/runtime_tools/examples/user-probe-n.d
+++ b/lib/runtime_tools/examples/user-probe-n.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/user-probe-n.systemtap b/lib/runtime_tools/examples/user-probe-n.systemtap
index 6aa415bb67..25f7503283 100644
--- a/lib/runtime_tools/examples/user-probe-n.systemtap
+++ b/lib/runtime_tools/examples/user-probe-n.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/user-probe.d b/lib/runtime_tools/examples/user-probe.d
index 5cb5d61a76..4806bae783 100644
--- a/lib/runtime_tools/examples/user-probe.d
+++ b/lib/runtime_tools/examples/user-probe.d
@@ -2,18 +2,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/examples/user-probe.systemtap b/lib/runtime_tools/examples/user-probe.systemtap
index 0482235324..1777476e54 100644
--- a/lib/runtime_tools/examples/user-probe.systemtap
+++ b/lib/runtime_tools/examples/user-probe.systemtap
@@ -1,18 +1,19 @@
/*
* %CopyrightBegin%
*
- * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. All Rights Reserved.
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2016. All Rights Reserved.
*
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* %CopyrightEnd%
*/
diff --git a/lib/runtime_tools/include/observer_backend.hrl b/lib/runtime_tools/include/observer_backend.hrl
index 91647a4468..257e525a15 100644
--- a/lib/runtime_tools/include/observer_backend.hrl
+++ b/lib/runtime_tools/include/observer_backend.hrl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
diff --git a/lib/runtime_tools/src/Makefile b/lib/runtime_tools/src/Makefile
index 2347986c53..2c902952a1 100644
--- a/lib/runtime_tools/src/Makefile
+++ b/lib/runtime_tools/src/Makefile
@@ -1,18 +1,19 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2013. All Rights Reserved.
+# Copyright Ericsson AB 1999-2016. All Rights Reserved.
#
-# The contents of this file are subject to the Erlang Public License,
-# Version 1.1, (the "License"); you may not use this file except in
-# compliance with the License. You should have received a copy of the
-# Erlang Public License along with this software. If not, it can be
-# retrieved online at http://www.erlang.org/.
-#
-# Software distributed under the License is distributed on an "AS IS"
-# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-# the License for the specific language governing rights and limitations
-# under the License.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
#
# %CopyrightEnd%
#
@@ -42,8 +43,11 @@ MODULES= \
dbg \
dyntrace \
percept_profile \
+ system_information \
observer_backend \
- ttb_autostart
+ ttb_autostart\
+ msacc
+
HRL_FILES= ../include/observer_backend.hrl
ERL_FILES= $(MODULES:%=%.erl)
diff --git a/lib/runtime_tools/src/appmon_info.erl b/lib/runtime_tools/src/appmon_info.erl
index a728312c97..b5500085a3 100644
--- a/lib/runtime_tools/src/appmon_info.erl
+++ b/lib/runtime_tools/src/appmon_info.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
@@ -306,9 +307,10 @@ do_work(Key, State) ->
{Cmd, Aux, From, _OldRef, Old, Opts} = retrieve(WorkStore, Key),
{ok, Result} = do_work2(Cmd, Aux, From, Old, Opts),
if
- Result==Old -> ok;
- true ->
- From ! {delivery, self(), Cmd, Aux, Result}
+ Result==Old -> ok;
+ true ->
+ From ! {delivery, self(), Cmd, Aux, Result},
+ ok
end,
case get_opt(timeout, Opts) of
at_most_once ->
@@ -392,7 +394,7 @@ del_task(Key, WorkStore) ->
{_Cmd, _Aux, _From, Ref, _Old, Opts} ->
if
Ref /= nil ->
- timer:cancel(Ref),
+ {ok,_} = timer:cancel(Ref),
receive
{do_it, Key} ->
Opts
diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl
index 6b2fb0460f..c0d4665bda 100644
--- a/lib/runtime_tools/src/dbg.erl
+++ b/lib/runtime_tools/src/dbg.erl
@@ -1,24 +1,26 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
-module(dbg).
-export([p/1,p/2,c/3,c/4,i/0,start/0,stop/0,stop_clear/0,tracer/0,
tracer/2, tracer/3, get_tracer/0, get_tracer/1, tp/2, tp/3, tp/4,
+ tpe/2, ctpe/1,
ctp/0, ctp/1, ctp/2, ctp/3, tpl/2, tpl/3, tpl/4, ctpl/0, ctpl/1,
ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3, ltp/0, wtp/1, rtp/1,
dtp/0, dtp/1, n/1, cn/1, ln/0, h/0, h/1]).
@@ -127,7 +129,12 @@ tpl(Module, Pattern) when is_atom(Module) ->
do_tp({Module, '_', '_'}, Pattern, [local]);
tpl({_Module, _Function, _Arity} = X, Pattern) ->
do_tp(X,Pattern,[local]).
-do_tp({_Module, _Function, _Arity} = X, Pattern, Flags)
+
+tpe(Event, Pattern) when Event =:= send;
+ Event =:= 'receive' ->
+ do_tp(Event, Pattern, []).
+
+do_tp(X, Pattern, Flags)
when is_integer(Pattern);
is_atom(Pattern) ->
case ets:lookup(get_pattern_table(), Pattern) of
@@ -136,17 +143,16 @@ do_tp({_Module, _Function, _Arity} = X, Pattern, Flags)
_ ->
{error, unknown_pattern}
end;
-do_tp({Module, _Function, _Arity} = X, Pattern, Flags) when is_list(Pattern) ->
+do_tp(X, Pattern, Flags) when is_list(Pattern) ->
Nodes = req(get_nodes),
- case Module of
- '_' ->
- ok;
- M when is_atom(M) ->
+ case X of
+ {M,_,_} when is_atom(M) ->
%% Try to load M on all nodes
lists:foreach(fun(Node) ->
rpc:call(Node, M, module_info, [])
end,
- Nodes)
+ Nodes);
+ _ -> ok
end,
case lint_tp(Pattern) of
{ok,_} ->
@@ -162,9 +168,9 @@ do_tp({Module, _Function, _Arity} = X, Pattern, Flags) when is_list(Pattern) ->
end.
%% All nodes are handled the same way - also the local node if it is traced
-do_tp_on_nodes(Nodes, MFA, P, Flags) ->
+do_tp_on_nodes(Nodes, X, P, Flags) ->
lists:map(fun(Node) ->
- case rpc:call(Node,erlang,trace_pattern,[MFA,P, Flags]) of
+ case rpc:call(Node,erlang,trace_pattern,[X,P, Flags]) of
N when is_integer(N) ->
{matched, Node, N};
Else ->
@@ -209,13 +215,19 @@ ctpg(Module) when is_atom(Module) ->
do_ctp({Module, '_', '_'}, [global]);
ctpg({_Module, _Function, _Arity} = X) ->
do_ctp(X,[global]).
+
do_ctp({Module, Function, Arity},[]) ->
- do_ctp({Module, Function, Arity},[global]),
+ {ok,_} = do_ctp({Module, Function, Arity},[global]),
do_ctp({Module, Function, Arity},[local]);
do_ctp({_Module, _Function, _Arity}=MFA,Flags) ->
Nodes = req(get_nodes),
{ok,do_tp_on_nodes(Nodes,MFA,false,Flags)}.
+ctpe(Event) when Event =:= send;
+ Event =:= 'receive' ->
+ Nodes = req(get_nodes),
+ {ok,do_tp_on_nodes(Nodes,Event,true,[])}.
+
%%
%% ltp() -> ok
%% List saved and built-in trace patterns.
@@ -259,8 +271,7 @@ wtp(FileName) ->
ok
end,
[]),
- file:close(File),
- ok
+ ok = file:close(File)
end.
%%
@@ -297,7 +308,12 @@ tracer(port, Port) when is_port(Port) ->
start(fun() -> Port end);
tracer(process, {Handler,HandlerData}) ->
- start(fun() -> start_tracer_process(Handler, HandlerData) end).
+ start(fun() -> start_tracer_process(Handler, HandlerData) end);
+
+tracer(module, Fun) when is_function(Fun) ->
+ start(Fun);
+tracer(module, {Module, State}) ->
+ start(fun() -> {Module, State} end).
remote_tracer(port, Fun) when is_function(Fun) ->
@@ -307,7 +323,13 @@ remote_tracer(port, Port) when is_port(Port) ->
remote_start(fun() -> Port end);
remote_tracer(process, {Handler,HandlerData}) ->
- remote_start(fun() -> start_tracer_process(Handler, HandlerData) end).
+ remote_start(fun() -> start_tracer_process(Handler, HandlerData) end);
+
+remote_tracer(module, Fun) when is_function(Fun) ->
+ remote_start(Fun);
+remote_tracer(module, {Module, State}) ->
+ remote_start(fun() -> {Module, State} end).
+
remote_start(StartTracer) ->
case (catch StartTracer()) of
@@ -542,9 +564,8 @@ c(M, F, A, Flags) ->
{error,Reason} -> {error,Reason};
Flags1 ->
tracer(),
- {ok, Tracer} = get_tracer(),
S = self(),
- Pid = spawn(fun() -> c(S, M, F, A, [{tracer, Tracer} | Flags1]) end),
+ Pid = spawn(fun() -> c(S, M, F, A, [get_tracer_flag() | Flags1]) end),
Mref = erlang:monitor(process, Pid),
receive
{'DOWN', Mref, _, _, Reason} ->
@@ -578,7 +599,7 @@ stop() ->
end.
stop_clear() ->
- ctp(),
+ {ok, _} = ctp(),
stop().
%%% Calling the server.
@@ -659,6 +680,9 @@ loop({C,T}=SurviveLinks, Table) ->
reply(From, {error, Reason});
Tracer when is_pid(Tracer); is_port(Tracer) ->
put(node(),{self(),Tracer}),
+ reply(From, {ok,self()});
+ {Module, _State} = Tracer when is_atom(Module) ->
+ put(node(),{self(),Tracer}),
reply(From, {ok,self()})
end;
{_Relay,_Tracer} ->
@@ -709,6 +733,9 @@ loop({C,T}=SurviveLinks, Table) ->
{_LocalRelay,Tracer} when is_port(Tracer) ->
reply(From, {error, cant_trace_remote_pid_to_local_port}),
loop(SurviveLinks, Table);
+ {_LocalRelay,Tracer} when is_tuple(Tracer) ->
+ reply(From, {error, cant_trace_remote_pid_to_local_module}),
+ loop(SurviveLinks, Table);
{_LocalRelay,Tracer} when is_pid(Tracer) ->
case (catch relay(Node, Tracer)) of
{ok,Relay} ->
@@ -763,7 +790,8 @@ loop({C,T}=SurviveLinks, Table) ->
end.
reply(Pid, Reply) ->
- Pid ! {dbg,Reply}.
+ Pid ! {dbg,Reply},
+ ok.
%%% A process-based tracer.
@@ -778,50 +806,50 @@ tracer_init(Handler, HandlerData) ->
tracer_loop(Handler, HandlerData).
tracer_loop(Handler, Hdata) ->
- receive
- Msg ->
- %% Don't match in receive to avoid giving EXIT message higher
- %% priority than the trace messages.
- case Msg of
- {'EXIT',_Pid,_Reason} ->
- ok;
- Trace ->
- NewData = recv_all_traces(Trace, Handler, Hdata),
- tracer_loop(Handler, NewData)
- end
+ {State, Suspended, Traces} = recv_all_traces(),
+ NewHdata = handle_traces(Suspended, Traces, Handler, Hdata),
+ case State of
+ done ->
+ exit(normal);
+ loop ->
+ tracer_loop(Handler, NewHdata)
end.
-
-recv_all_traces(Trace, Handler, Hdata) ->
- Suspended = suspend(Trace, []),
- recv_all_traces(Suspended, Handler, Hdata, [Trace]).
-recv_all_traces(Suspended0, Handler, Hdata, Traces) ->
+recv_all_traces() ->
+ recv_all_traces([], [], infinity).
+
+recv_all_traces(Suspended0, Traces, Timeout) ->
receive
Trace when is_tuple(Trace), element(1, Trace) == trace ->
Suspended = suspend(Trace, Suspended0),
- recv_all_traces(Suspended, Handler, Hdata, [Trace|Traces]);
+ recv_all_traces(Suspended, [Trace|Traces], 0);
Trace when is_tuple(Trace), element(1, Trace) == trace_ts ->
Suspended = suspend(Trace, Suspended0),
- recv_all_traces(Suspended, Handler, Hdata, [Trace|Traces]);
+ recv_all_traces(Suspended, [Trace|Traces], 0);
Trace when is_tuple(Trace), element(1, Trace) == seq_trace ->
Suspended = suspend(Trace, Suspended0),
- recv_all_traces(Suspended, Handler, Hdata, [Trace|Traces]);
+ recv_all_traces(Suspended, [Trace|Traces], 0);
Trace when is_tuple(Trace), element(1, Trace) == drop ->
Suspended = suspend(Trace, Suspended0),
- recv_all_traces(Suspended, Handler, Hdata, [Trace|Traces]);
+ recv_all_traces(Suspended, [Trace|Traces], 0);
+ {'EXIT', _Pid, _Reason} ->
+ {done, Suspended0, Traces};
Other ->
%%% Is this really a good idea?
io:format(user,"** tracer received garbage: ~p~n", [Other]),
- recv_all_traces(Suspended0, Handler, Hdata, Traces)
- after 0 ->
- case catch invoke_handler(Traces, Handler, Hdata) of
- {'EXIT',Reason} ->
- resume(Suspended0),
- exit({trace_handler_crashed,Reason});
- NewHdata ->
- resume(Suspended0),
- NewHdata
- end
+ recv_all_traces(Suspended0, Traces, Timeout)
+ after Timeout ->
+ {loop, Suspended0, Traces}
+ end.
+
+handle_traces(Suspended, Traces, Handler, Hdata) ->
+ case catch invoke_handler(Traces, Handler, Hdata) of
+ {'EXIT',Reason} ->
+ resume(Suspended),
+ exit({trace_handler_crashed,Reason});
+ NewHdata ->
+ resume(Suspended),
+ NewHdata
end.
invoke_handler([Tr|Traces], Handler, Hdata0) ->
@@ -878,9 +906,9 @@ trac(Proc, How, Flags) ->
end
end.
-trac(Node, {_Relay, Tracer}, AtomPid, How, Flags) ->
+trac(Node, {_Replay, Tracer}, AtomPid, How, Flags) ->
case rpc:call(Node, ?MODULE, erlang_trace,
- [AtomPid, How, [{tracer, Tracer} | Flags]]) of
+ [AtomPid, How, [get_tracer_flag(Tracer) | Flags]]) of
N when is_integer(N) ->
{matched, Node, N};
{badrpc,Reason} ->
@@ -916,9 +944,11 @@ do_relay(Parent,RelP) ->
case RelP of
{Type,Data} ->
{ok,Tracer} = remote_tracer(Type,Data),
- Parent ! {started,Tracer};
+ Parent ! {started,Tracer},
+ ok;
Pid when is_pid(Pid) ->
- Parent ! {started,self()}
+ Parent ! {started,self()},
+ ok
end,
do_relay_1(RelP).
@@ -1113,7 +1143,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]);
transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]);
transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]);
transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]);
-transform_flags([all|_],_Acc) -> all();
+transform_flags([all|_],_Acc) -> all()--[silent,running];
transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
case lists:member(F, all()) of
true -> transform_flags(Tail,[F|Acc]);
@@ -1122,9 +1152,10 @@ transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}.
all() ->
- [send,'receive',call,procs,garbage_collection,running,
+ [send,'receive',call,procs,ports,garbage_collection,running,
set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link,
- timestamp,arity,return_to].
+ timestamp,monotonic_timestamp,strict_monotonic_timestamp,
+ arity,return_to,silent,running_procs,running_ports,exiting].
display_info([Node|Nodes]) ->
io:format("~nNode ~w:~n",[Node]),
@@ -1145,24 +1176,34 @@ display_info1([]) ->
ok.
get_info() ->
- get_info(processes(),[]).
+ get_info(processes(),get_info(erlang:ports(),[])).
+get_info([Port|T], Acc) when is_port(Port) ->
+ case pinfo(Port, name) of
+ undefined ->
+ get_info(T,Acc);
+ {name, Name} ->
+ get_info(T,get_tinfo(Port, Name, Acc))
+ end;
get_info([Pid|T],Acc) ->
case pinfo(Pid, initial_call) of
undefined ->
get_info(T,Acc);
{initial_call, Call} ->
- case tinfo(Pid, flags) of
- undefined ->
- get_info(T,Acc);
- {flags,[]} ->
- get_info(T,Acc);
- {flags,Flags} ->
- get_info(T,[{Pid,Call,Flags}|Acc])
- end
+ get_info(T,get_tinfo(Pid, Call, Acc))
end;
get_info([],Acc) -> Acc.
+get_tinfo(P, Id, Acc) ->
+ case tinfo(P, flags) of
+ undefined ->
+ Acc;
+ {flags,[]} ->
+ Acc;
+ {flags,Flags} ->
+ [{P,Id,Flags}|Acc]
+ end.
+
format_trace([]) -> [];
format_trace([Item]) -> [ts(Item)];
format_trace([Item|T]) -> [ts(Item) ," | ", format_trace(T)].
@@ -1187,9 +1228,22 @@ to_pidspec(X) when is_pid(X) ->
true -> X;
false -> {badpid,X}
end;
-to_pidspec(new) -> new;
-to_pidspec(all) -> all;
-to_pidspec(existing) -> existing;
+to_pidspec(X) when is_port(X) ->
+ case erlang:port_info(X) of
+ undefined -> {badport, X};
+ _ -> X
+ end;
+to_pidspec(Tag)
+ when Tag =:= all;
+ Tag =:= ports;
+ Tag =:= processes;
+ Tag =:= new;
+ Tag =:= new_ports;
+ Tag =:= new_processes;
+ Tag =:= existing;
+ Tag =:= existing_ports;
+ Tag =:= existing_processes ->
+ Tag;
to_pidspec(X) when is_atom(X) ->
case whereis(X) of
undefined -> {badpid,X};
@@ -1202,6 +1256,7 @@ to_pidspec(X) -> {badpid,X}.
%%
to_pid(X) when is_pid(X) -> X;
+to_pid(X) when is_port(X) -> X;
to_pid(X) when is_integer(X) -> to_pid({0,X,0});
to_pid({X,Y,Z}) ->
to_pid(lists:concat(["<",integer_to_list(X),".",
@@ -1216,9 +1271,12 @@ to_pid(X) when is_list(X) ->
to_pid(X) -> {badpid,X}.
+pinfo(P, X) when node(P) == node(), is_port(P) -> erlang:port_info(P, X);
pinfo(P, X) when node(P) == node() -> erlang:process_info(P, X);
+pinfo(P, X) when is_port(P) -> check(rpc:call(node(P), erlang, port_info, [P, X]));
pinfo(P, X) -> check(rpc:call(node(P), erlang, process_info, [P, X])).
+
tinfo(P, X) when node(P) == node() -> erlang:trace_info(P, X);
tinfo(P, X) -> check(rpc:call(node(P), erlang, trace_info, [P, X])).
@@ -1255,6 +1313,9 @@ tc_loop(Other, _Handler, _HData) ->
gen_reader(ip, {Host, Portno}) ->
case gen_tcp:connect(Host, Portno, [{active, false}, binary]) of
{ok, Sock} ->
+ %% Just in case this is on the traced node,
+ %% make sure the port is not traced.
+ p(Sock,clear),
mk_reader(fun ip_read/2, Sock);
Error ->
exit(Error)
@@ -1268,13 +1329,15 @@ gen_reader(follow_file, Filename) ->
%% Opens a file and returns a reader (lazy list).
gen_reader_file(ReadFun, Filename) ->
- case file:open(Filename, [read, raw, binary]) of
+ case file:open(Filename, [read, raw, binary, read_ahead]) of
{ok, File} ->
mk_reader(ReadFun, File);
Error ->
exit({client_cannot_open, Error})
end.
+-dialyzer({no_improper_lists, mk_reader/2}).
+
%% Creates and returns a reader (lazy list).
mk_reader(ReadFun, Source) ->
fun() ->
@@ -1293,20 +1356,22 @@ mk_reader(ReadFun, Source) ->
mk_reader_wrap([]) ->
[];
mk_reader_wrap([Hd | _] = WrapFiles) ->
- case file:open(wrap_name(Hd), [read, raw, binary]) of
+ case file:open(wrap_name(Hd), [read, raw, binary, read_ahead]) of
{ok, File} ->
mk_reader_wrap(WrapFiles, File);
Error ->
exit({client_cannot_open, Error})
end.
+-dialyzer({no_improper_lists, mk_reader_wrap/2}).
+
mk_reader_wrap([_Hd | Tail] = WrapFiles, File) ->
fun() ->
case read_term(fun file_read/2, File) of
{ok, Term} ->
[Term | mk_reader_wrap(WrapFiles, File)];
eof ->
- file:close(File),
+ ok = file:close(File),
case Tail of
[_|_] ->
mk_reader_wrap(Tail);
@@ -1406,6 +1471,13 @@ get_tracer() ->
req({get_tracer,node()}).
get_tracer(Node) ->
req({get_tracer,Node}).
+get_tracer_flag() ->
+ {ok, Tracer} = get_tracer(),
+ get_tracer_flag(Tracer).
+get_tracer_flag({Module,State}) ->
+ {tracer, Module, State};
+get_tracer_flag(Port = Pid) when is_port(Port); is_pid(Pid)->
+ {tracer, Pid = Port}.
save_pattern([]) ->
0;
@@ -1786,12 +1858,12 @@ h(get_tracer) ->
" - Returns the process or port to which all trace messages are sent."]);
h(stop) ->
help_display(
- ["stop() -> stopped",
+ ["stop() -> ok",
" - Stops the dbg server and the tracing of all processes.",
" Does not clear any trace patterns."]);
h(stop_clear) ->
help_display(
- ["stop_clear() -> stopped",
+ ["stop_clear() -> ok",
" - Stops the dbg server and the tracing of all processes,",
" and clears all trace patterns."]).
diff --git a/lib/runtime_tools/src/dyntrace.erl b/lib/runtime_tools/src/dyntrace.erl
index f7dbef6929..58c5a773c3 100644
--- a/lib/runtime_tools/src/dyntrace.erl
+++ b/lib/runtime_tools/src/dyntrace.erl
@@ -41,6 +41,27 @@
pn/1, pn/2, pn/3, pn/4, pn/5, pn/6, pn/7, pn/8, pn/9]).
-export([put_tag/1, get_tag/0, get_tag_data/0, spread_tag/1, restore_tag/1]).
+-export([trace/5,
+ trace_procs/5,
+ trace_ports/5,
+ trace_running_procs/5,
+ trace_running_ports/5,
+ trace_call/5,
+ trace_send/5,
+ trace_receive/5,
+ trace_garbage_collection/5]).
+
+-export([enabled_procs/3,
+ enabled_ports/3,
+ enabled_running_procs/3,
+ enabled_running_ports/3,
+ enabled_call/3,
+ enabled_send/3,
+ enabled_receive/3,
+ enabled_garbage_collection/3,
+ enabled/3]).
+
+
-export([user_trace_i4s4/9]). % Know what you're doing!
-on_load(on_load/0).
@@ -125,6 +146,60 @@ user_trace_i4s4(_, _, _, _, _, _, _, _, _) ->
user_trace_n(_, _, _, _, _, _, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
+trace(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_call(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_send(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_receive(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_garbage_collection(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_procs(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_ports(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_running_procs(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_running_ports(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_call(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_send(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_receive(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
+enabled_garbage_collection(_TraceTag, _TracerState, _Tracee) ->
+ erlang:nif_error(nif_not_loaded).
+
%%%
%%% Erlang support functions
%%%
diff --git a/lib/runtime_tools/src/erts_alloc_config.erl b/lib/runtime_tools/src/erts_alloc_config.erl
index 284e88d4a7..514530332c 100644
--- a/lib/runtime_tools/src/erts_alloc_config.erl
+++ b/lib/runtime_tools/src/erts_alloc_config.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% The Initial Developer of the Original Code is Ericsson AB.
%%
@@ -39,6 +40,8 @@
need_config_change,
alloc_util,
instances,
+ strategy,
+ acul,
low_mbc_blocks_size,
high_mbc_blocks_size,
sbct,
@@ -54,8 +57,6 @@
-define(SERVER, '__erts_alloc_config__').
--define(MAX_ALLOCATOR_INSTANCES, 16).
-
-define(KB, 1024).
-define(MB, 1048576).
@@ -99,23 +100,11 @@
{ets_alloc, 131072},
{fix_alloc, 131072},
{eheap_alloc, 524288},
- {ll_alloc, 2097152},
+ {ll_alloc, 131072},
{sl_alloc, 131072},
{temp_alloc, 131072},
{driver_alloc, 131072}]).
--define(MMMBC_DEFAULTS,
- [{binary_alloc, 10},
- {std_alloc, 10},
- {ets_alloc, 10},
- {fix_alloc, 10},
- {eheap_alloc, 10},
- {ll_alloc, 0},
- {sl_alloc, 10},
- {temp_alloc, 10},
- {driver_alloc, 10}]).
-
-
%%%
%%% Exported interface
%%%
@@ -139,7 +128,7 @@ make_config(FileName) when is_list(FileName) ->
case file:open(FileName, [write]) of
{ok, IODev} ->
Res = req({make_config, IODev}),
- file:close(IODev),
+ ok = file:close(IODev),
Res;
Error ->
Error
@@ -211,9 +200,11 @@ server_loop(State) ->
Conf = #conf{segments = ?MBC_MSEG_LIMIT,
format_to = IODev},
Res = mk_config(Conf, State#state.alloc),
- From ! {response, Ref, Res};
+ From ! {response, Ref, Res},
+ ok;
_ ->
- From ! {response, Ref, no_scenario_saved}
+ From ! {response, Ref, no_scenario_saved},
+ ok
end,
State;
{request, From, Ref, stop} ->
@@ -230,20 +221,72 @@ server_loop(State) ->
end,
server_loop(NewState).
-allocator_instances(temp_alloc) ->
- erlang:system_info(schedulers) + 1;
-allocator_instances(ll_alloc) ->
+carrier_migration_support(aoff) ->
+ true;
+carrier_migration_support(aoffcbf) ->
+ true;
+carrier_migration_support(aoffcaobf) ->
+ true;
+carrier_migration_support(_) ->
+ false.
+
+allocator_instances(ll_alloc, Strategy) ->
+ case carrier_migration_support(Strategy) of
+ true -> erlang:system_info(schedulers);
+ false -> 1
+ end;
+allocator_instances(_A, undefined) ->
1;
-allocator_instances(_Allocator) ->
- case erlang:system_info(schedulers) of
- Schdlrs when Schdlrs =< ?MAX_ALLOCATOR_INSTANCES -> Schdlrs;
- _Schdlrs -> ?MAX_ALLOCATOR_INSTANCES
+allocator_instances(_A, _Strategy) ->
+ erlang:system_info(schedulers).
+
+strategy(temp_alloc, _AI) ->
+ af;
+strategy(A, AI) ->
+ try
+ {A, OptList} = lists:keyfind(A, 1, AI),
+ {as, S} = lists:keyfind(as, 1, OptList),
+ S
+ catch
+ _ : _ ->
+ undefined
end.
-
+
+strategy_str(af) ->
+ "A fit";
+strategy_str(gf) ->
+ "Good fit";
+strategy_str(bf) ->
+ "Best fit";
+strategy_str(aobf) ->
+ "Address order best fit";
+strategy_str(aoff) ->
+ "Address order first fit";
+strategy_str(aoffcbf) ->
+ "Address order first fit carrier best fit";
+strategy_str(aoffcaobf) ->
+ "Address order first fit carrier adress order best fit".
+
+default_acul(A, S) ->
+ case carrier_migration_support(S) of
+ false ->
+ 0;
+ true ->
+ case A of
+ ll_alloc -> 85;
+ eheap_alloc -> 45;
+ _ -> 60
+ end
+ end.
+
make_state() ->
+ {_, _, _, AI} = erlang:system_info(allocator),
#state{alloc = lists:map(fun (A) ->
+ S = strategy(A, AI),
#alloc{name = A,
- instances = allocator_instances(A)}
+ strategy = S,
+ acul = default_acul(A, S),
+ instances = allocator_instances(A, S)}
end,
?ALLOCATORS)}.
@@ -345,7 +388,7 @@ do_save_scenario(AlcList) ->
conf_size(Bytes) when is_integer(Bytes), Bytes < 0 ->
exit({bad_value, Bytes});
conf_size(Bytes) when is_integer(Bytes), Bytes < 1*?MB ->
- ?ROUNDUP(?B2KB(Bytes), 128);
+ ?ROUNDUP(?B2KB(Bytes), 256);
conf_size(Bytes) when is_integer(Bytes), Bytes < 10*?MB ->
?ROUNDUP(?B2KB(Bytes), ?B2KB(1*?MB));
conf_size(Bytes) when is_integer(Bytes), Bytes < 100*?MB ->
@@ -376,28 +419,25 @@ mmbcs(#conf{format_to = FTO},
temp_alloc -> BlocksSize;
_ -> BlocksSize div Insts
end,
- case BS > default_mmbcs(A, Insts) of
- true ->
+ DefMMBCS = default_mmbcs(A, Insts),
+ case {Insts, BS > DefMMBCS} of
+ {1, true} ->
MMBCS = conf_size(BS),
fc(FTO, "Main mbc size of ~p kilobytes.", [MMBCS]),
format(FTO, " +M~cmmbcs ~p~n", [alloc_char(A), MMBCS]);
- false ->
+ _ ->
+ MMBCS = ?B2KB(DefMMBCS),
+ fc(FTO, "Main mbc size of ~p kilobytes.", [MMBCS]),
+ format(FTO, " +M~cmmbcs ~p~n", [alloc_char(A), MMBCS]),
ok
end.
-smbcs_lmbcs_mmmbc(#conf{format_to = FTO},
- #alloc{name = A, instances = Insts, segments = Segments}) ->
- MMMBC = case {A, Insts} of
- {_, 1} -> Segments#segment.number;
- {temp_alloc, _} -> Segments#segment.number;
- _ -> (Segments#segment.number div Insts) + 1
- end,
+smbcs_lmbcs(#conf{format_to = FTO},
+ #alloc{name = A, segments = Segments}) ->
MBCS = Segments#segment.size,
AC = alloc_char(A),
fc(FTO, "Mseg mbc size of ~p kilobytes.", [MBCS]),
format(FTO, " +M~csmbcs ~p +M~clmbcs ~p~n", [AC, MBCS, AC, MBCS]),
- fc(FTO, "Max ~p mseg mbcs.", [MMMBC]),
- format(FTO, " +M~cmmmbc ~p~n", [AC, MMMBC]),
ok.
alloc_char(binary_alloc) -> $B;
@@ -462,6 +502,8 @@ au_conf_alloc(#conf{format_to = FTO} = Conf,
#alloc{name = A,
alloc_util = true,
instances = Insts,
+ acul = Acul,
+ strategy = Strategy,
low_mbc_blocks_size = Low,
high_mbc_blocks_size = High} = Alc) ->
fcp(FTO, "Usage of mbcs: ~p - ~p kilobytes", [?B2KB(Low), ?B2KB(High)]),
@@ -470,31 +512,49 @@ au_conf_alloc(#conf{format_to = FTO} = Conf,
fc(FTO, "One instance used."),
format(FTO, " +M~ct false~n", [alloc_char(A)]);
_ ->
- fc(FTO, "~p instances used.",
+ fc(FTO, "~p + 1 instances used.",
[Insts]),
- format(FTO, " +M~ct true~n", [alloc_char(A)])
- end,
+ format(FTO, " +M~ct true~n", [alloc_char(A)]),
+ case Strategy of
+ undefined ->
+ ok;
+ _ ->
+ fc(FTO, "Allocation strategy: ~s.",
+ [strategy_str(Strategy)]),
+ format(FTO, " +M~cas ~s~n", [alloc_char(A),
+ atom_to_list(Strategy)])
+ end,
+ case carrier_migration_support(Strategy) of
+ false ->
+ ok;
+ true ->
+ fc(FTO, "Abandon carrier utilization limit of ~p%.", [Acul]),
+ format(FTO, " +M~cacul ~p~n", [alloc_char(A), Acul])
+ end
+ end,
mmbcs(Conf, Alc),
- smbcs_lmbcs_mmmbc(Conf, Alc),
+ smbcs_lmbcs(Conf, Alc),
sbct(Conf, Alc).
-large_growth(Low, High) ->
- High - Low >= ?LARGE_GROWTH_ABS_LIMIT.
-
calc_seg_size(Growth, Segs) ->
conf_size(round(Growth*?FRAG_FACT*?GROWTH_SEG_FACT) div Segs).
calc_growth_segments(Conf, AlcList0) ->
- CalcSmall = fun (#alloc{name = ll_alloc} = Alc, Acc) ->
- {Alc#alloc{segments = #segment{size = 0,
+ CalcSmall = fun (#alloc{name = ll_alloc, instances = 1} = Alc, Acc) ->
+ {Alc#alloc{segments = #segment{size = conf_size(0),
number = 0}},
Acc};
(#alloc{alloc_util = true,
- low_mbc_blocks_size = Low,
+ instances = Insts,
+ low_mbc_blocks_size = LowMBC,
high_mbc_blocks_size = High} = Alc,
{SL, AL}) ->
+ Low = case Insts of
+ 1 -> LowMBC;
+ _ -> 0
+ end,
Growth = High - Low,
- case large_growth(Low, High) of
+ case Growth >= ?LARGE_GROWTH_ABS_LIMIT of
true ->
{Alc, {SL, AL+1}};
false ->
@@ -522,8 +582,13 @@ calc_growth_segments(Conf, AlcList0) ->
end,
CalcLarge = fun (#alloc{alloc_util = true,
segments = undefined,
- low_mbc_blocks_size = Low,
+ instances = Insts,
+ low_mbc_blocks_size = LowMBC,
high_mbc_blocks_size = High} = Alc) ->
+ Low = case Insts of
+ 1 -> LowMBC;
+ _ -> 0
+ end,
Growth = High - Low,
SegSize = calc_seg_size(Growth,
SegsPerAlloc),
@@ -560,15 +625,10 @@ format_header(FTO) ->
case erlang:system_info(schedulers) of
1 -> ok;
Schdlrs ->
- MinSchdlrs = case Schdlrs > ?MAX_ALLOCATOR_INSTANCES of
- true -> ?MAX_ALLOCATOR_INSTANCES;
- false -> Schdlrs
- end,
fcp(FTO,
"NOTE: This configuration was made for ~p schedulers. "
- "It is very important that at least ~p schedulers "
- "are used.",
- [Schdlrs, MinSchdlrs])
+ "It is very important that ~p schedulers are used.",
+ [Schdlrs, Schdlrs])
end,
fcp(FTO,
"This configuration is intended as a suggestion and "
diff --git a/lib/runtime_tools/src/msacc.erl b/lib/runtime_tools/src/msacc.erl
new file mode 100644
index 0000000000..4db5dbec91
--- /dev/null
+++ b/lib/runtime_tools/src/msacc.erl
@@ -0,0 +1,355 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%
+%% @doc Microstate accounting utility function
+%%
+%% This module provides a user interface for analysing
+%% erlang:statistics(microstate_accounting) data.
+%%
+
+-module(msacc).
+-export([available/0, start/0, start/1, stop/0, reset/0, to_file/1,
+ from_file/1, stats/0, stats/2, print/0, print/1, print/2,
+ print/3]).
+
+-type msacc_data() :: [msacc_data_thread()].
+
+-type msacc_data_thread() :: #{ '$type' := msacc_data,
+ type := msacc_type(), id := msacc_id(),
+ counters := msacc_data_counters() }.
+-type msacc_data_counters() :: #{ msacc_state() => non_neg_integer()}.
+
+-type msacc_stats() :: [msacc_stats_thread()].
+-type msacc_stats_thread() :: #{ '$type' := msacc_stats,
+ type := msacc_type(), id := msacc_id(),
+ system := float(),
+ counters := msacc_stats_counters()}.
+-type msacc_stats_counters() :: #{ msacc_state() => #{ thread := float(),
+ system := float()}}.
+
+
+-type msacc_type() :: scheduler | aux | async.
+-type msacc_id() :: non_neg_integer().
+-type msacc_state() :: alloc | aux | bif | busy_wait | check_io |
+ emulator | ets | gc | gc_fullsweep | nif |
+ other | port | send | sleep | timers.
+
+-type msacc_print_options() :: #{ system => boolean() }.
+
+-spec available() -> boolean().
+available() ->
+ try
+ [_|_] = erlang:statistics(microstate_accounting),
+ true
+ catch _:_ ->
+ false
+ end.
+
+-spec start() -> boolean().
+start() ->
+ erlang:system_flag(microstate_accounting, true).
+
+-spec stop() -> boolean().
+stop() ->
+ erlang:system_flag(microstate_accounting, false).
+
+-spec reset() -> boolean().
+reset() ->
+ erlang:system_flag(microstate_accounting, reset).
+
+-spec start(Time) -> true when
+ Time :: timeout().
+start(Tmo) ->
+ stop(), reset(), start(),
+ timer:sleep(Tmo),
+ stop().
+
+-spec to_file(Filename) -> ok | {error, file:posix()} when
+ Filename :: file:name_all().
+to_file(Filename) ->
+ file:write_file(Filename, io_lib:format("~p.~n",[stats()])).
+
+-spec from_file(Filename) -> msacc_data() when
+ Filename :: file:name_all().
+from_file(Filename) ->
+ {ok, [Stats]} = file:consult(Filename),
+ Stats.
+
+-spec print() -> ok.
+print() ->
+ print(stats()).
+
+-spec print(DataOrStats) -> ok when
+ DataOrStats :: msacc_data() | msacc_stats().
+print(Stats) ->
+ print(Stats, #{}).
+
+-spec print(DataOrStats, Options) -> ok when
+ DataOrStats :: msacc_data() | msacc_stats(),
+ Options :: msacc_print_options().
+print(Stats, Options) ->
+ print(group_leader(), Stats, Options).
+
+-spec print(FileOrDevice, DataOrStats, Options) -> ok when
+ FileOrDevice :: file:filename() | io:device(),
+ DataOrStats :: msacc_data() | msacc_stats(),
+ Options :: msacc_print_options().
+print(Filename, Stats, Options) when is_list(Filename) ->
+ case file:open(Filename,[write]) of
+ {ok, D} -> print(D, Stats, Options),file:close(D);
+ Error -> Error
+ end;
+print(Device, Stats, Options) ->
+ DefaultOpts = #{ system => false },
+ print_int(Device, Stats, maps:merge(DefaultOpts, Options)).
+print_int(Device, [#{ '$type' := msacc_data, id := _Id }|_] = Stats, Options) ->
+ TypeStats = stats(type, Stats),
+ io:format(Device, "~s", [print_stats_overview(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_threads(
+ stats(realtime, Stats), Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ stats(realtime, TypeStats), Options)]);
+print_int(Device, [#{ '$type' := msacc_data }|_] = Stats, Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ stats(realtime, Stats), Options)]);
+print_int(Device, [#{ '$type' := msacc_stats, id := _Id }|_] = Stats,Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_threads(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(
+ msacc:stats(type, Stats), Options)]);
+print_int(Device, [#{ '$type' := msacc_stats }|_] = Stats, Options) ->
+ io:format(Device, "~s", [print_stats_header(Stats, Options)]),
+ io:format(Device, "~s", [print_stats_type(Stats, Options)]).
+
+
+-spec stats() -> msacc_data().
+stats() ->
+ Fun = fun F(K,{PerfCount,StateCount}) ->
+ %% Need to handle ERTS_MSACC_STATE_COUNTERS
+ {F(K,PerfCount),StateCount};
+ F(_K,PerfCount) ->
+ erlang:convert_time_unit(PerfCount, perf_counter, 1000000)
+ end,
+ UsStats = lists:map(
+ fun(#{ counters := Cnt } = M) ->
+ UsCnt = maps:map(Fun,Cnt),
+ M#{ '$type' => msacc_data, counters := UsCnt }
+ end, erlang:statistics(microstate_accounting)),
+ statssort(UsStats).
+
+-spec stats(Analysis, Stats) -> non_neg_integer() when
+ Analysis :: system_realtime | system_runtime,
+ Stats :: msacc_data();
+ (Analysis, Stats) -> msacc_stats() when
+ Analysis :: realtime | runtime,
+ Stats :: msacc_data();
+ (Analysis, StatsOrData) -> msacc_data() | msacc_stats() when
+ Analysis :: type,
+ StatsOrData :: msacc_data() | msacc_stats().
+stats(system_realtime, Stats) ->
+ lists:foldl(fun(#{ counters := Cnt }, Acc) ->
+ get_total(Cnt, Acc)
+ end, 0, Stats);
+stats(system_runtime, Stats) ->
+ lists:foldl(fun(#{ counters := Cnt }, Acc) ->
+ get_total(maps:remove(sleep, Cnt), Acc)
+ end, 0, Stats);
+stats(realtime, Stats) ->
+ RealTime = stats(system_realtime, Stats),
+ statssort([get_thread_perc(Thread, RealTime) || Thread <- Stats]);
+stats(runtime, Stats) ->
+ RunTime = stats(system_runtime, Stats),
+ statssort([get_thread_perc(T#{ counters := maps:remove(sleep,Cnt)}, RunTime)
+ || T = #{ counters := Cnt } <- Stats]);
+stats(type, Stats) ->
+ statssort(merge_threads(Stats, [])).
+
+print_stats_overview(Stats, _Options) ->
+ RunTime = stats(system_runtime, Stats),
+ RealTime = stats(system_realtime, Stats) div length(Stats),
+ SchedStats = [S || #{ type := scheduler } = S <- Stats],
+ AvgSchedRunTime = stats(system_runtime, SchedStats) div length(SchedStats),
+ NumSize = if
+ RealTime > RunTime -> length(integer_to_list(RealTime));
+ true -> length(integer_to_list(RunTime))
+ end,
+ [io_lib:format("Average thread real-time : ~*B us~n",
+ [NumSize, RealTime]),
+ io_lib:format("Accumulated system run-time : ~*B us~n",
+ [NumSize, RunTime]),
+ io_lib:format("Average scheduler run-time : ~*B us~n",
+ [NumSize, AvgSchedRunTime]),
+ io_lib:format("~n",[])].
+
+print_stats_threads(Stats, Options) ->
+ [io_lib:format("~nStats per thread:~n", []),
+ [print_thread_info(Thread, Options) || Thread <- Stats]].
+
+print_stats_type(Stats, Options) ->
+ [io_lib:format("~nStats per type:~n", []),
+ [print_thread_info(Thread, Options) || Thread <- Stats]].
+
+
+print_stats_header([#{ counters := Cnt }|_], #{ system := PrintSys }) ->
+ [io_lib:format("~14s", ["Thread"]),
+ map(fun(Counter, _) when PrintSys->
+ io_lib:format("~9s ", [atom_to_list(Counter)]);
+ (Counter, _) ->
+ io_lib:format("~9s", [atom_to_list(Counter)])
+ end, Cnt),
+ io_lib:format("~n",[])].
+
+print_thread_info(#{ '$type' := msacc_stats,
+ counters := Cnt } = Thread, #{ system := PrintSys }) ->
+ [case maps:find(id, Thread) of
+ error ->
+ io_lib:format("~14s", [atom_to_list(maps:get(type, Thread))]);
+ {ok, Id} ->
+ io_lib:format("~10s(~2B)", [atom_to_list(maps:get(type,Thread)),Id])
+ end,
+ map(fun(_Key, #{ thread := ThreadPerc, system := SystemPerc }) when PrintSys ->
+ io_lib:format("~6.2f%(~4.1f%)", [ThreadPerc, SystemPerc]);
+ (_Key, #{ thread := ThreadPerc }) ->
+ io_lib:format("~8.2f%", [ThreadPerc])
+ end, Cnt),
+ io_lib:format("~n",[])].
+
+get_total(Cnt, Base) ->
+ maps:fold(fun(_, {Val,_}, Time) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ Time + Val;
+ (_, Val, Time) -> Time + Val
+ end, Base, Cnt).
+
+get_thread_perc(#{ '$type' := msacc_data, counters := Cnt } = Thread,
+ SystemTime) ->
+ ThreadTime = get_total(Cnt, 0),
+ Thread#{ '$type' := msacc_stats,
+ system => percentage(ThreadTime,SystemTime),
+ counters => get_thread_perc(Cnt, ThreadTime, SystemTime)}.
+get_thread_perc(Cnt, ThreadTime, SystemTime) ->
+ maps:map(fun F(Key, {Val, C}) ->
+ M = F(Key, Val),
+ M#{ cnt => C };
+ F(_Key, Val) ->
+ #{ thread => percentage(Val, ThreadTime),
+ system => percentage(Val, SystemTime) }
+ end, Cnt).
+
+%% This code is a little bit messy as it has to be able to deal with
+%% both [msacc_data()] and [msacc_stats()].
+merge_threads([#{ '$type' := msacc_stats,
+ type := Type,
+ counters := Cnt } = M0|R], Acc) ->
+ case keyfind(type, Type, Acc) of
+ false ->
+ merge_threads(R, [maps:remove(id,M0#{ threads => 1 })|Acc]);
+ #{ '$type' := msacc_stats, counters := Cnt0,
+ threads := Threads, system := System } = M ->
+ NewMap = M#{ counters := add_counters(Cnt, Cnt0),
+ system := System + maps:get(system, M0),
+ threads := Threads + 1},
+ NewAcc = keyreplace(type, Type, NewMap, Acc),
+ merge_threads(R, NewAcc)
+ end;
+merge_threads([], [#{ '$type' := msacc_stats,
+ system := System,
+ threads := Threads,
+ counters := Cnt} = M0|R]) ->
+ Counters = maps:map(fun(_,#{ thread := Thr } = Map) ->
+ Map#{ thread := Thr / Threads }
+ end, Cnt),
+ M = maps:remove(threads, M0),
+ [M#{ system := System, counters := Counters} | merge_threads([],R)];
+merge_threads([], []) ->
+ [];
+%% The clauses below deal with msacc_data()
+merge_threads([#{ '$type' := msacc_data,
+ type := Type,
+ counters := Cnt } = M0|R], Acc) ->
+ case keyfind(type, Type, Acc) of
+ false ->
+ merge_threads(R, [maps:remove(id,M0)|Acc]);
+ #{ '$type' := msacc_data, counters := Cnt0 } = M ->
+ NewMap = M#{ counters := add_counters(Cnt, Cnt0) },
+ NewAcc = keyreplace(type, Type, NewMap, Acc),
+ merge_threads(R, NewAcc)
+ end;
+merge_threads([], Acc) ->
+ Acc.
+
+add_counters(M1, M2) ->
+ maps:map(
+ fun(Key, #{ thread := Thr1, system := Sys1, cnt := Cnt1}) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ #{ thread := Thr2, system := Sys2, cnt := Cnt2} = maps:get(Key, M2),
+ #{ thread => Thr1 + Thr2, system => Sys1 + Sys2,
+ cnt => Cnt1 + Cnt2 };
+ (Key, #{ thread := Thr1, system := Sys1}) ->
+ #{ thread := Thr2, system := Sys2} = maps:get(Key, M2),
+ #{ thread => Thr1 + Thr2, system => Sys1 + Sys2};
+ (Key, {V1,C1}) ->
+ %% Have to handle ERTS_MSACC_STATE_COUNTERS
+ {V2,C2} = maps:get(Key, M2),{V1+V2,C1+C2};
+ (Key, V1) -> maps:get(Key, M2) + V1
+ end, M1).
+
+percentage(Divident, Divisor) ->
+ if Divisor == 0 andalso Divident /= 0 ->
+ 100.0;
+ Divisor == 0 ->
+ 0.0;
+ true ->
+ Divident / Divisor * 100
+ end.
+
+keyfind(Key, Value, [H|T]) ->
+ case maps:find(Key, H) of
+ {ok, Value} ->
+ H;
+ _ ->
+ keyfind(Key, Value, T)
+ end;
+keyfind(_, _, []) ->
+ false.
+
+keyreplace(Key, Value, NewMap, [H|T]) ->
+ case maps:find(Key, H) of
+ {ok, Value} ->
+ [NewMap|T];
+ _ ->
+ [H|keyreplace(Key, Value, NewMap, T)]
+ end;
+keyreplace(_, _, _, []) ->
+ [].
+
+statssort(Stats) ->
+ lists:sort(fun(#{ type := Type1, id := Id1},
+ #{ type := Type2, id := Id2}) ->
+ {Type1, Id1} < {Type2, Id2};
+ (#{ type := Type1}, #{ type := Type2}) ->
+ Type1 < Type2
+ end, Stats).
+
+map(Fun,Map) ->
+ [ Fun(K,V) || {K,V} <- maps:to_list(Map) ].
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 670e216d97..cedb677178 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
@@ -22,7 +23,8 @@
-export([vsn/0]).
%% observer stuff
--export([sys_info/0, get_table/3, get_table_list/2, fetch_stats/2]).
+-export([sys_info/0, get_port_list/0,
+ get_table/3, get_table_list/2, fetch_stats/2]).
%% etop stuff
-export([etop_collect/1]).
@@ -53,6 +55,13 @@ sys_info() ->
Mem -> Mem
catch _:_ -> []
end,
+
+ SchedulersOnline = erlang:system_info(schedulers_online),
+ SchedulersAvailable = case erlang:system_info(multi_scheduling) of
+ enabled -> SchedulersOnline;
+ _ -> 1
+ end,
+
{{_,Input},{_,Output}} = erlang:statistics(io),
[{process_count, erlang:system_info(process_count)},
{process_limit, erlang:system_info(process_limit)},
@@ -60,9 +69,13 @@ sys_info() ->
{run_queue, erlang:statistics(run_queue)},
{io_input, Input},
{io_output, Output},
+
{logical_processors, erlang:system_info(logical_processors)},
- {logical_processors_available, erlang:system_info(logical_processors_available)},
{logical_processors_online, erlang:system_info(logical_processors_online)},
+ {logical_processors_available, erlang:system_info(logical_processors_available)},
+ {schedulers, erlang:system_info(schedulers)},
+ {schedulers_online, SchedulersOnline},
+ {schedulers_available, SchedulersAvailable},
{otp_release, erlang:system_info(otp_release)},
{version, erlang:system_info(version)},
@@ -77,8 +90,8 @@ sys_info() ->
| MemInfo].
alloc_info() ->
- {_,_,AllocTypes,_} = erlang:system_info(allocator),
- try erlang:system_info({allocator_sizes,AllocTypes}) of
+ AlcuAllocs = erlang:system_info(alloc_util_allocators),
+ try erlang:system_info({allocator_sizes, AlcuAllocs}) of
Allocators -> Allocators
catch _:_ -> []
end.
@@ -127,6 +140,15 @@ get_mnesia_loop(Parent, {Match, Cont}) ->
Parent ! {self(), Match},
get_mnesia_loop(Parent, mnesia:select(Cont)).
+get_port_list() ->
+ [begin
+ [{port_id,P}|erlang:port_info(P)] ++
+ case erlang:port_info(P,monitors) of
+ undefined -> [];
+ Monitors -> [Monitors]
+ end
+ end || P <- erlang:ports()].
+
get_table_list(ets, Opts) ->
HideUnread = proplists:get_value(unread_hidden, Opts, true),
HideSys = proplists:get_value(sys_hidden, Opts, true),
@@ -216,12 +238,14 @@ fetch_stats(Parent, Time) ->
fetch_stats_loop(Parent, Time) ->
erlang:system_flag(scheduler_wall_time, true),
receive
- _Msg -> erlang:system_flag(scheduler_wall_time, false)
+ _Msg ->
+ %% erlang:system_flag(scheduler_wall_time, false)
+ ok
after Time ->
_M = Parent ! {stats, 1,
erlang:statistics(scheduler_wall_time),
erlang:statistics(io),
- erlang:memory()},
+ try erlang:memory() catch _:_ -> [] end},
fetch_stats_loop(Parent, Time)
end.
%%
@@ -233,33 +257,32 @@ etop_collect(Collector) ->
%% utilization in etop). Next time the flag will be true and then
%% there will be a measurement.
SchedulerWallTime = erlang:statistics(scheduler_wall_time),
-
- %% Turn off the flag while collecting data per process etc.
- case erlang:system_flag(scheduler_wall_time,false) of
- false ->
- %% First time and the flag was false - start a monitoring
- %% process to set the flag back to false when etop is stopped.
- spawn(fun() -> flag_holder_proc(Collector) end);
- _ ->
- ok
- end,
-
ProcInfo = etop_collect(processes(), []),
- Collector ! {self(),#etop_info{now = now(),
+ Collector ! {self(),#etop_info{now = erlang:timestamp(),
n_procs = length(ProcInfo),
run_queue = erlang:statistics(run_queue),
runtime = SchedulerWallTime,
memi = etop_memi(),
procinfo = ProcInfo
}},
+
+ case SchedulerWallTime of
+ undefined ->
+ spawn(fun() -> flag_holder_proc(Collector) end),
+ ok;
+ _ ->
+ ok
+ end,
+
erlang:system_flag(scheduler_wall_time,true).
flag_holder_proc(Collector) ->
Ref = erlang:monitor(process,Collector),
receive
{'DOWN',Ref,_,_,_} ->
- erlang:system_flag(scheduler_wall_time,false)
+ %% erlang:system_flag(scheduler_wall_time,false)
+ ok
end.
etop_memi() ->
@@ -322,8 +345,8 @@ ttb_init_node(MetaFile_0,PI,Traci) ->
MetaPid ! {metadata,Traci},
case PI of
true ->
- Proci = pnames(),
- MetaPid ! {metadata,Proci};
+ MetaPid ! {metadata,pnames()},
+ ok;
false ->
ok
end,
@@ -342,7 +365,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
erlang:trace_pattern({erlang,spawn_link,3},ReturnMS,[meta]),
erlang:trace_pattern({erlang,spawn_opt,1},ReturnMS,[meta]),
erlang:trace_pattern({erlang,register,2},[],[meta]),
- erlang:trace_pattern({global,register_name,2},[],[meta]);
+ erlang:trace_pattern({global,register_name,2},[],[meta]),
+ ok;
false ->
ok
end,
@@ -350,7 +374,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
case proplists:get_value(overload_check, SessionData) of
{Ms, M, F} ->
catch M:F(init),
- erlang:send_after(Ms, self(), overload_check);
+ erlang:send_after(Ms, self(), overload_check),
+ ok;
_ ->
ok
end,
@@ -359,10 +384,10 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
receive
{trace_ts,_,call,{erlang,register,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,Name}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,Name}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,_,call,{global,register_name,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,CallingPid,call,{erlang,spawn_opt,[{M,F,Args,_}]},_} ->
MFA = {M,F,length(Args)},
@@ -378,7 +403,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
@@ -396,22 +421,22 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
ttb_meta_tracer_loop(MetaFile,PI,NewAcc,State);
{metadata,Data} when is_list(Data) ->
- ttb_store_meta(Data,MetaFile),
+ ok = ttb_store_meta(Data,MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,Fun} when is_function(Fun) ->
- ttb_store_meta([{Key,Fun()}],MetaFile),
+ ok = ttb_store_meta([{Key,Fun()}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,What} ->
- ttb_store_meta([{Key,What}],MetaFile),
+ ok = ttb_store_meta([{Key,What}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
overload_check ->
{Ms, M, F} = proplists:get_value(overload_check, State),
@@ -427,7 +452,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc, State)
end;
{'DOWN', _, _, _, _} ->
- stop_seq_trace(),
+ _ = stop_seq_trace(),
self() ! stop,
ttb_meta_tracer_loop(MetaFile,PI,Acc, State);
stop when PI=:=true ->
@@ -516,7 +541,7 @@ ttb_store_meta(Data,MetaFile) ->
ttb_store_meta([Data],MetaFile).
ttb_write_binary(Fd,[H|T]) ->
- file:write(Fd,ttb_make_binary(H)),
+ ok = file:write(Fd,ttb_make_binary(H)),
ttb_write_binary(Fd,T);
ttb_write_binary(_Fd,[]) ->
ok.
@@ -573,9 +598,9 @@ ttb_fetch(MetaFile,{Port,Host}) ->
send_files({Sock,Host},[File|Files]) ->
{ok,Fd} = file:open(File,[raw,read,binary]),
- gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
+ ok = gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
send_chunks(Sock,Fd),
- file:delete(File),
+ ok = file:delete(File),
send_files({Sock,Host},Files);
send_files({_Sock,_Host},[]) ->
done.
diff --git a/lib/runtime_tools/src/percept_profile.erl b/lib/runtime_tools/src/percept_profile.erl
index cdc7a0fca1..1e8e913b80 100644
--- a/lib/runtime_tools/src/percept_profile.erl
+++ b/lib/runtime_tools/src/percept_profile.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
@@ -86,7 +87,7 @@ start(Filename, Options) ->
start(Filename, {Module, Function, Args}, Options) ->
case whereis(percept_port) of
undefined ->
- profile_to_file(Filename, Options),
+ {ok, _} = profile_to_file(Filename, Options),
erlang:apply(Module, Function, Args),
stop();
Port ->
@@ -112,14 +113,14 @@ deliver_all_trace() ->
-spec stop() -> 'ok' | {'error', 'not_started'}.
stop() ->
- erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
+ _ = erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
erlang:trace(all, false, [procs, ports, timestamp]),
deliver_all_trace(),
case whereis(percept_port) of
undefined ->
{error, not_started};
Port ->
- erlang:port_command(Port, erlang:term_to_binary({profile_stop, erlang:now()})),
+ erlang:port_command(Port, erlang:term_to_binary({profile_stop, erlang:timestamp()})),
%% trace delivered?
erlang:port_close(Port),
ok
@@ -139,7 +140,7 @@ profile_to_file(Filename, Opts) ->
erlang:system_flag(multi_scheduling, block),
Port = (dbg:trace_port(file, Filename))(),
% Send start time
- erlang:port_command(Port, erlang:term_to_binary({profile_start, erlang:now()})),
+ erlang:port_command(Port, erlang:term_to_binary({profile_start, erlang:timestamp()})),
erlang:system_flag(multi_scheduling, unblock),
%% Register Port
@@ -157,7 +158,8 @@ set_tracer(Port, Opts) ->
{TOpts, POpts} = parse_profile_options(Opts),
% Setup profiling and tracing
erlang:trace(all, true, [{tracer, Port}, timestamp | TOpts]),
- erlang:system_profile(Port, POpts).
+ _ = erlang:system_profile(Port, POpts),
+ ok.
%% parse_profile_options
diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src
index 602048dc21..690c61a4c3 100644
--- a/lib/runtime_tools/src/runtime_tools.app.src
+++ b/lib/runtime_tools/src/runtime_tools.app.src
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
@@ -21,10 +22,13 @@
{vsn, "%VSN%"},
{modules, [appmon_info, dbg,observer_backend,percept_profile,
runtime_tools,runtime_tools_sup,erts_alloc_config,
- ttb_autostart,dyntrace]},
+ ttb_autostart,dyntrace,system_information,
+ msacc]},
{registered, [runtime_tools_sup]},
{applications, [kernel, stdlib]},
{env, []},
- {mod, {runtime_tools, []}}]}.
+ {mod, {runtime_tools, []}},
+ {runtime_dependencies, ["stdlib-3.0","mnesia-4.12","kernel-5.0",
+ "erts-8.0"]}]}.
diff --git a/lib/runtime_tools/src/runtime_tools.appup.src b/lib/runtime_tools/src/runtime_tools.appup.src
index 7a435e9b22..a42673c87e 100644
--- a/lib/runtime_tools/src/runtime_tools.appup.src
+++ b/lib/runtime_tools/src/runtime_tools.appup.src
@@ -1,19 +1,22 @@
-%%
+%% -*- erlang -*-
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
-%%
-{"%VSN%",[],[]}.
+{"%VSN%",
+ [{<<".*">>,[{restart_application, runtime_tools}]}],
+ [{<<".*">>,[{restart_application, runtime_tools}]}]
+}.
diff --git a/lib/runtime_tools/src/runtime_tools.erl b/lib/runtime_tools/src/runtime_tools.erl
index 2181244610..52ae5cc0eb 100644
--- a/lib/runtime_tools/src/runtime_tools.erl
+++ b/lib/runtime_tools/src/runtime_tools.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
diff --git a/lib/runtime_tools/src/runtime_tools_sup.erl b/lib/runtime_tools/src/runtime_tools_sup.erl
index ab9fa534d5..efa37de42d 100644
--- a/lib/runtime_tools/src/runtime_tools_sup.erl
+++ b/lib/runtime_tools/src/runtime_tools_sup.erl
@@ -1,19 +1,19 @@
-%% -*- coding: utf-8 -*-
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl
new file mode 100644
index 0000000000..df25297eb9
--- /dev/null
+++ b/lib/runtime_tools/src/system_information.erl
@@ -0,0 +1,834 @@
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+%% The main purpose of system_information is to aggregate all information
+%% deemed useful for investigation, i.e. system_information:report/0.
+
+%% The server and all other utilities surrounding this is for inspecting
+%% reported values. Functions will be added to this as time goes by.
+
+-module(system_information).
+-behaviour(gen_server).
+
+%% API
+-export([report/0,
+ from_file/1,
+ to_file/1]).
+
+-export([start/0, stop/0,
+ load_report/0, load_report/2,
+ applications/0, applications/1,
+ application/1, application/2,
+ environment/0, environment/1,
+ module/1, module/2,
+ modules/1,
+ sanity_check/0]).
+
+%% gen_server callbacks
+-export([init/1,
+ handle_call/3,
+ handle_cast/2,
+ handle_info/2,
+ terminate/2,
+ code_change/3]).
+
+-define(SERVER, ?MODULE).
+
+%% change version if parsing of file changes
+-define(REPORT_FILE_VSN, "1.0").
+
+-record(state, {
+ report
+ }).
+
+%%===================================================================
+%% API
+%%===================================================================
+
+start() ->
+ gen_server:start({local, ?SERVER}, ?MODULE, [], []).
+
+
+stop() ->
+ gen_server:call(?SERVER, stop, infinity).
+
+load_report() -> load_report(data, report()).
+
+load_report(file, File) -> load_report(data, from_file(File));
+load_report(data, Report) ->
+ ok = start_internal(), gen_server:call(?SERVER, {load_report, Report}, infinity).
+
+report() -> [
+ {init_arguments, init:get_arguments()},
+ {code_paths, code:get_path()},
+ {code, code()},
+ {system_info, erlang_system_info()},
+ {erts_compile_info, erlang:system_info(compile_info)},
+ {beam_dynamic_libraries, get_dynamic_libraries()},
+ {environment_erts, os_getenv_erts_specific()},
+ {environment, [split_env(Env) || Env <- os:getenv()]},
+ {sanity_check, sanity_check()}
+ ].
+
+-spec to_file(FileName) -> ok | {error, Reason} when
+ FileName :: file:name_all(),
+ Reason :: file:posix() | badarg | terminated | system_limit.
+
+to_file(File) ->
+ file:write_file(File, iolist_to_binary([
+ io_lib:format("{system_information_version, ~p}.~n", [
+ ?REPORT_FILE_VSN
+ ]),
+ io_lib:format("{system_information, ~p}.~n", [
+ report()
+ ])
+ ])).
+
+from_file(File) ->
+ case file:consult(File) of
+ {ok, Data} ->
+ case get_value([system_information_version], Data) of
+ ?REPORT_FILE_VSN ->
+ get_value([system_information], Data);
+ Vsn ->
+ erlang:error({unknown_version, Vsn})
+ end;
+ _ ->
+ erlang:error(bad_report_file)
+ end.
+
+applications() -> applications([]).
+applications(Opts) when is_list(Opts) ->
+ gen_server:call(?SERVER, {applications, Opts}, infinity).
+
+application(App) when is_atom(App) -> application(App, []).
+application(App, Opts) when is_atom(App), is_list(Opts) ->
+ gen_server:call(?SERVER, {application, App, Opts}, infinity).
+
+environment() -> environment([]).
+environment(Opts) when is_list(Opts) ->
+ gen_server:call(?SERVER, {environment, Opts}, infinity).
+
+module(M) when is_atom(M) -> module(M, []).
+module(M, Opts) when is_atom(M), is_list(Opts) ->
+ gen_server:call(?SERVER, {module, M, Opts}, infinity).
+
+modules(Opt) when is_atom(Opt) ->
+ gen_server:call(?SERVER, {modules, Opt}, infinity).
+
+
+-spec sanity_check() -> ok | {failed, Failures} when
+ Application :: atom(),
+ ApplicationVersion :: string(),
+ MissingRuntimeDependencies :: {missing_runtime_dependencies,
+ ApplicationVersion,
+ [ApplicationVersion]},
+ InvalidApplicationVersion :: {invalid_application_version,
+ ApplicationVersion},
+ InvalidAppFile :: {invalid_app_file, Application},
+ Failure :: MissingRuntimeDependencies
+ | InvalidApplicationVersion
+ | InvalidAppFile,
+ Failures :: [Failure].
+
+sanity_check() ->
+ case check_runtime_dependencies() of
+ [] -> ok;
+ Issues -> {failed, Issues}
+ end.
+
+%%===================================================================
+%% gen_server callbacks
+%%===================================================================
+
+init([]) ->
+ {ok, #state{}}.
+
+handle_call(stop, _From, S) ->
+ {stop, normal, ok, S};
+
+handle_call({load_report, Report}, _From, S) ->
+ Version = get_value([system_info, system_version], Report),
+ io:format("Loaded report from system version: ~s~n", [Version]),
+ {reply, ok, S#state{ report = Report }};
+
+handle_call(_Req, _From, #state{ report = undefined } = S) ->
+ {reply, {error, report_not_loaded}, S};
+
+handle_call({applications, Opts}, _From, #state{ report = Report } = S) ->
+ ok = print_applications(get_value([code], Report), Opts),
+ {reply, ok, S};
+
+handle_call({application, App, Opts}, _From, #state{ report = Report } = S) ->
+ Data = get_value([App], [AppInfo||{application, AppInfo}<-get_value([code], Report)]),
+ ok = print_application({App, Data}, Opts),
+ {reply, ok, S};
+
+
+handle_call({environment, Opts}, _From, #state{ report = Report } = S) ->
+ Choices = case proplists:get_bool(full, Opts) of
+ true -> [environment];
+ false -> [environment_erts]
+ end,
+ ok = print_environments(get_value(Choices, Report), Opts),
+ {reply, ok, S};
+
+
+handle_call({module, M, Opts}, _From, #state{ report = Report } = S) ->
+ Mods = find_modules_from_code(M, get_value([code], Report)),
+ print_modules_from_code(M, Mods, Opts),
+ {reply, ok, S};
+
+handle_call({modules, native}, _From, #state{ report = Report } = S) ->
+ Codes = get_native_modules_from_code(get_value([code],Report)),
+ io:format("~p~n", [Codes]),
+ {reply, ok, S};
+
+
+handle_call(_Request, _From, State) ->
+ {reply, ok, State}.
+
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%===================================================================
+%% Internal functions
+%%===================================================================
+
+start_internal() ->
+ case start() of
+ {ok,_} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
+
+%% handle report values
+
+get_value([], Data) -> Data;
+get_value([K|Ks], Data) ->
+ get_value(Ks, proplists:get_value(K, Data, [])).
+
+find_modules_from_code(M, [{code, Info}|Codes]) ->
+ case find_modules(M, get_value([modules], Info)) of
+ [] -> find_modules_from_code(M, Codes);
+ Mods ->
+ Path = get_value([path], Info),
+ [{Path, Mods}|find_modules_from_code(M, Codes)]
+ end;
+find_modules_from_code(M, [{application, {App, Info}}|Codes]) ->
+ case find_modules(M, get_value([modules], Info)) of
+ [] -> find_modules_from_code(M, Codes);
+ Mods ->
+ Path = get_value([path], Info),
+ Vsn = get_value([vsn], Info),
+ [{App, Vsn, Path, Mods}|find_modules_from_code(M, Codes)]
+ end;
+find_modules_from_code(_, []) -> [].
+
+find_modules(M, [{M, _}=Info|Ms]) -> [Info|find_modules(M,Ms)];
+find_modules(M, [_|Ms]) -> find_modules(M, Ms);
+find_modules(_, []) -> [].
+
+get_native_modules_from_code([{application, {App, Info}}|Cs]) ->
+ case get_native_modules(get_value([modules], Info)) of
+ [] -> get_native_modules_from_code(Cs);
+ Mods ->
+ Path = get_value([path], Info),
+ Vsn = get_value([vsn], Info),
+ [{App, Vsn, Path, Mods}|get_native_modules_from_code(Cs)]
+ end;
+get_native_modules_from_code([{code, Info}|Cs]) ->
+ case get_native_modules(get_value([modules], Info)) of
+ [] -> get_native_modules_from_code(Cs);
+ Mods ->
+ Path = get_value([path], Info),
+ [{Path, Mods}|get_native_modules_from_code(Cs)]
+ end;
+get_native_modules_from_code([]) -> [].
+
+get_native_modules([]) -> [];
+get_native_modules([{Mod, Info}|Ms]) ->
+ case proplists:get_value(native, Info) of
+ false -> get_native_modules(Ms);
+ _ -> [Mod|get_native_modules(Ms)]
+ end.
+
+
+%% print information
+
+print_applications([{application, App}|Apps], Opts) ->
+ print_application(App, Opts),
+ print_applications(Apps, Opts);
+print_applications([{code,_}|Apps], Opts) ->
+ print_applications(Apps, Opts);
+print_applications([], _) ->
+ ok.
+
+print_application({App, Info}, Opts) ->
+ Vsn = get_value([vsn], Info),
+ io:format(" * ~w-~s~n", [App, Vsn]),
+ case proplists:get_bool(full, Opts) of
+ true ->
+ _ = [ begin
+ print_module(Minfo)
+ end || Minfo <- get_value([modules], Info) ],
+ ok;
+ false ->
+ ok
+ end.
+
+print_environments([Env|Envs],Opts) ->
+ print_environment(Env,Opts),
+ print_environments(Envs,Opts);
+print_environments([],_) ->
+ ok.
+
+print_environment({_Key, false},_) -> ok;
+print_environment({Key, Value},_) ->
+ io:format(" - ~s = ~ts~n", [Key, Value]).
+
+print_modules_from_code(M, [Info|Ms], Opts) ->
+ print_module_from_code(M, Info),
+ case proplists:get_bool(full, Opts) of
+ true -> print_modules_from_code(M, Ms, Opts);
+ false -> ok
+ end;
+print_modules_from_code(_, [], _) ->
+ ok.
+
+print_module_from_code(M, {Path, [{M,ModInfo}]}) ->
+ io:format(" from path \"~ts\" (no application):~n", [Path]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok;
+print_module_from_code(M, {App,Vsn,Path,[{M,ModInfo}]}) ->
+ io:format(" from path \"~ts\" (~w-~s):~n", [Path,App,Vsn]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok.
+
+print_module({Mod, ModInfo}) ->
+ io:format(" - ~w:~n", [Mod]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok.
+
+
+
+%% get useful information from erlang:system_info/1
+
+erlang_system_info() ->
+ erlang_system_info([
+ allocator,
+ check_io,
+ otp_release,
+ port_limit,
+ process_limit,
+ % procs, % not needed
+ smp_support,
+ system_version,
+ system_architecture,
+ threads,
+ thread_pool_size,
+ {wordsize,internal},
+ {wordsize,external},
+ {cpu_topology, defined},
+ {cpu_topology, detected},
+ scheduler_bind_type,
+ scheduler_bindings,
+ compat_rel,
+ schedulers_state,
+ build_type,
+ logical_processors,
+ logical_processors_online,
+ logical_processors_available,
+ driver_version,
+ nif_version,
+ emu_args,
+ ethread_info,
+ beam_jump_table,
+ taints
+ ]).
+
+erlang_system_info([]) -> [];
+erlang_system_info([Type|Types]) ->
+ [{Type, erlang:system_info(Type)}|erlang_system_info(Types)].
+
+
+%% get known useful erts environment
+
+os_getenv_erts_specific() ->
+ os_getenv_erts_specific([
+ "BINDIR",
+ "DIALYZER_EMULATOR",
+ "CERL_DETACHED_PROG",
+ "EMU",
+ "ERL_CONSOLE_MODE",
+ "ERL_CRASH_DUMP",
+ "ERL_CRASH_DUMP_NICE",
+ "ERL_CRASH_DUMP_SECONDS",
+ "ERL_EPMD_PORT",
+ "ERL_EMULATOR_DLL",
+ "ERL_FULLSWEEP_AFTER",
+ "ERL_LIBS",
+ "ERL_MALLOC_LIB",
+ "ERL_MAX_PORTS",
+ "ERL_MAX_ETS_TABLES",
+ "ERL_NO_VFORK",
+ "ERL_NO_KERNEL_POLL",
+ "ERL_THREAD_POOL_SIZE",
+ "ERLC_EMULATOR",
+ "ESCRIPT_EMULATOR",
+ "HOME",
+ "HOMEDRIVE",
+ "HOMEPATH",
+ "LANG",
+ "LC_ALL",
+ "LC_CTYPE",
+ "PATH",
+ "PROGNAME",
+ "RELDIR",
+ "ROOTDIR",
+ "TERM",
+ %"VALGRIND_LOG_XML",
+
+ %% heart
+ "COMSPEC",
+ "HEART_COMMAND",
+
+ %% run_erl
+ "RUN_ERL_LOG_ALIVE_MINUTES",
+ "RUN_ERL_LOG_ACTIVITY_MINUTES",
+ "RUN_ERL_LOG_ALIVE_FORMAT",
+ "RUN_ERL_LOG_ALIVE_IN_UTC",
+ "RUN_ERL_LOG_GENERATIONS",
+ "RUN_ERL_LOG_MAXSIZE",
+ "RUN_ERL_DISABLE_FLOWCNTRL",
+
+ %% driver getenv
+ "CALLER_DRV_USE_OUTPUTV",
+ "ERL_INET_GETHOST_DEBUG",
+ "ERL_EFILE_THREAD_SHORT_CIRCUIT",
+ "ERL_WINDOW_TITLE",
+ "ERL_ABORT_ON_FAILURE",
+ "TTYSL_DEBUG_LOG"
+ ]).
+
+os_getenv_erts_specific([]) -> [];
+os_getenv_erts_specific([Key|Keys]) ->
+ [{Key, os:getenv(Key)}|os_getenv_erts_specific(Keys)].
+
+split_env(Env) ->
+ split_env(Env, []).
+
+split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs};
+split_env([I|Vs], Key) -> split_env(Vs, [I|Key]);
+split_env([], KV) -> lists:reverse(KV). % should not happen.
+
+%% get applications
+
+code() ->
+ % order is important
+ get_code_from_paths(code:get_path()).
+
+get_code_from_paths([]) -> [];
+get_code_from_paths([Path|Paths]) ->
+ case is_application_path(Path) of
+ true ->
+ [{application, get_application_from_path(Path)}|get_code_from_paths(Paths)];
+ false ->
+ [{code, [
+ {path, Path},
+ {modules, get_modules_from_path(Path)}
+ ]}|get_code_from_paths(Paths)]
+ end.
+
+is_application_path(Path) ->
+ case filelib:wildcard(filename:join(Path, "*.app")) of
+ [] -> false;
+ _ -> true
+ end.
+
+get_application_from_path(Path) ->
+ [Appfile|_] = filelib:wildcard(filename:join(Path, "*.app")),
+ case file:consult(Appfile) of
+ {ok, [{application, App, Info}]} ->
+ {App, [
+ {description, proplists:get_value(description, Info, [])},
+ {vsn, proplists:get_value(vsn, Info, [])},
+ {path, Path},
+ {runtime_dependencies,
+ proplists:get_value(runtime_dependencies, Info, [])},
+ {modules, get_modules_from_path(Path)}
+ ]}
+ end.
+
+get_modules_from_path(Path) ->
+ [
+ begin
+ {ok,{Mod, Md5}} = beam_lib:md5(Beam),
+ Loaded = case code:is_loaded(Mod) of
+ false -> false;
+ _ -> true
+ end,
+ {Mod, [
+ {loaded, Loaded},
+ {native, beam_is_native_compiled(Beam)},
+ {compiler, get_compiler_version(Beam)},
+ {md5, hexstring(Md5)}
+ ]}
+ end || Beam <- filelib:wildcard(filename:join(Path, "*.beam"))
+ ].
+
+hexstring(Bin) when is_binary(Bin) ->
+ lists:flatten([io_lib:format("~2.16.0b", [V]) || <<V>> <= Bin]).
+
+%% inspect beam files for information
+
+get_compiler_version(Beam) ->
+ case beam_lib:chunks(Beam, [compile_info]) of
+ {ok,{_,[{compile_info, Info}]}} ->
+ proplists:get_value(version, Info);
+ _ -> undefined
+ end.
+
+%% we don't know the specific chunk names of native code
+%% we don't want to load the code to check it
+beam_is_native_compiled(Beam) ->
+ Chunks = get_value([chunks], beam_lib:info(Beam)),
+ case check_known_hipe_chunks(Chunks) of
+ [] -> false;
+ [Arch] -> {true, Arch};
+ Archs -> {true, Archs}
+ end.
+
+
+check_known_hipe_chunks([{Tag,_,_}|Cs]) ->
+ case is_chunk_tag_hipe_arch(Tag) of
+ false -> check_known_hipe_chunks(Cs);
+ {true, Arch} -> [Arch|check_known_hipe_chunks(Cs)]
+ end;
+check_known_hipe_chunks([]) -> [].
+
+%% these values are taken from hipe_unified_loader
+%% perhaps these should be exported in that module?
+
+-define(HS8P_TAG,"HS8P").
+-define(HPPC_TAG,"HPPC").
+-define(HP64_TAG,"HP64").
+-define(HARM_TAG,"HARM").
+-define(HX86_TAG,"HX86").
+-define(HA64_TAG,"HA64").
+
+is_chunk_tag_hipe_arch(Tag) ->
+ case Tag of
+ ?HA64_TAG -> {true, amd64}; %% HiPE, x86_64, (implicit: 64-bit, Unix)
+ ?HARM_TAG -> {true, arm}; %% HiPE, arm, v5 (implicit: 32-bit, Linux)
+ ?HPPC_TAG -> {true, powerpc}; %% HiPE, PowerPC (implicit: 32-bit, Linux)
+ ?HP64_TAG -> {true, ppc64}; %% HiPE, ppc64 (implicit: 64-bit, Linux)
+ ?HS8P_TAG -> {true, ultrasparc}; %% HiPE, SPARC, V8+ (implicit: 32-bit)
+ %% Future: HSV9 %% HiPE, SPARC, V9 (implicit: 64-bit)
+ %% HW32 %% HiPE, x86, Win32
+ _ -> false
+ end.
+
+
+get_dynamic_libraries() ->
+ Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]),
+ case os:type() of
+ {unix, darwin} -> os:cmd("otool -L " ++ Beam);
+ _ -> os:cmd("ldd " ++ Beam)
+ end.
+
+get_beam_name() ->
+ Type = case erlang:system_info(build_type) of
+ opt -> "";
+ TypeName -> "." ++ atom_to_list(TypeName)
+ end,
+ Flavor = case erlang:system_info(smp_support) of
+ false -> "";
+ true -> ".smp"
+ end,
+ Beam = os:getenv("EMU", "beam"),
+ Beam ++ Type ++ Flavor.
+
+%% Check runtime dependencies...
+
+vsnstr2vsn(VsnStr) ->
+ list_to_tuple(lists:map(fun (Part) ->
+ list_to_integer(Part)
+ end,
+ string:tokens(VsnStr, "."))).
+
+rtdepstrs2rtdeps([]) ->
+ [];
+rtdepstrs2rtdeps([RTDep | RTDeps]) ->
+ [AppStr, VsnStr] = string:tokens(RTDep, "-"),
+ [{list_to_atom(AppStr), vsnstr2vsn(VsnStr)} | rtdepstrs2rtdeps(RTDeps)].
+
+build_app_table([], AppTab) ->
+ AppTab;
+build_app_table([App | Apps], AppTab0) ->
+ AppTab1 = try
+ %% We may have multiple application versions installed
+ %% of the same application! It is therefore important
+ %% to look up the application version that actually will
+ %% be used via code server.
+ AppFile = code:where_is_file(atom_to_list(App) ++ ".app"),
+ {ok, [{application, App, Info}]} = file:consult(AppFile),
+ VsnStr = proplists:get_value(vsn, Info),
+ Vsn = vsnstr2vsn(VsnStr),
+ RTDepStrs = proplists:get_value(runtime_dependencies,
+ Info, []),
+ RTDeps = rtdepstrs2rtdeps(RTDepStrs),
+ gb_trees:insert(App, {Vsn, RTDeps}, AppTab0)
+ catch
+ _ : _ ->
+ AppTab0
+ end,
+ build_app_table(Apps, AppTab1).
+
+meets_min_req(Vsn, Vsn) ->
+ true;
+meets_min_req({X}, VsnReq) ->
+ meets_min_req({X, 0, 0}, VsnReq);
+meets_min_req({X, Y}, VsnReq) ->
+ meets_min_req({X, Y, 0}, VsnReq);
+meets_min_req(Vsn, {X}) ->
+ meets_min_req(Vsn, {X, 0, 0});
+meets_min_req(Vsn, {X, Y}) ->
+ meets_min_req(Vsn, {X, Y, 0});
+meets_min_req({X, _Y, _Z}, {XReq, _YReq, _ZReq}) when X > XReq ->
+ true;
+meets_min_req({X, Y, _Z}, {X, YReq, _ZReq}) when Y > YReq ->
+ true;
+meets_min_req({X, Y, Z}, {X, Y, ZReq}) when Z > ZReq ->
+ true;
+meets_min_req({_X, _Y, _Z}, {_XReq, _YReq, _ZReq}) ->
+ false;
+meets_min_req(Vsn, VsnReq) ->
+ gp_meets_min_req(mk_gp_vsn_list(Vsn), mk_gp_vsn_list(VsnReq)).
+
+gp_meets_min_req([X, Y, Z | _Vs], [X, Y, Z]) ->
+ true;
+gp_meets_min_req([X, Y, Z | _Vs], [XReq, YReq, ZReq]) ->
+ meets_min_req({X, Y, Z}, {XReq, YReq, ZReq});
+gp_meets_min_req([X, Y, Z | Vs], [X, Y, Z | VReqs]) ->
+ gp_meets_min_req_tail(Vs, VReqs);
+gp_meets_min_req(_Vsn, _VReq) ->
+ %% Versions on different version branches, i.e., the minimum
+ %% required functionality is not included in Vsn.
+ false.
+
+gp_meets_min_req_tail([V | Vs], [V | VReqs]) ->
+ gp_meets_min_req_tail(Vs, VReqs);
+gp_meets_min_req_tail([], []) ->
+ true;
+gp_meets_min_req_tail([_V | _Vs], []) ->
+ true;
+gp_meets_min_req_tail([V | _Vs], [VReq]) when V > VReq ->
+ true;
+gp_meets_min_req_tail(_Vs, _VReqs) ->
+ %% Versions on different version branches, i.e., the minimum
+ %% required functionality is not included in Vsn.
+ false.
+
+mk_gp_vsn_list(Vsn) ->
+ [X, Y, Z | Tail] = tuple_to_list(Vsn),
+ [X, Y, Z | remove_trailing_zeroes(Tail)].
+
+remove_trailing_zeroes([]) ->
+ [];
+remove_trailing_zeroes([0 | Vs]) ->
+ case remove_trailing_zeroes(Vs) of
+ [] -> [];
+ NewVs -> [0 | NewVs]
+ end;
+remove_trailing_zeroes([V | Vs]) ->
+ [V | remove_trailing_zeroes(Vs)].
+
+mk_app_vsn_str({App, Vsn}) ->
+ mk_app_vsn_str(App, Vsn).
+
+mk_app_vsn_str(App, Vsn) ->
+ VsnList = tuple_to_list(Vsn),
+ lists:flatten([atom_to_list(App),
+ $-,
+ integer_to_list(hd(VsnList)),
+ lists:map(fun (Part) ->
+ [$., integer_to_list(Part)]
+ end, tl(VsnList))]).
+
+otp_17_0_vsns_orddict() ->
+ [{asn1,{3,0}},
+ {common_test,{1,8}},
+ {compiler,{5,0}},
+ {cosEvent,{2,1,15}},
+ {cosEventDomain,{1,1,14}},
+ {cosFileTransfer,{1,1,16}},
+ {cosNotification,{1,1,21}},
+ {cosProperty,{1,1,17}},
+ {cosTime,{1,1,14}},
+ {cosTransactions,{1,2,14}},
+ {crypto,{3,3}},
+ {debugger,{4,0}},
+ {dialyzer,{2,7}},
+ {diameter,{1,6}},
+ {edoc,{0,7,13}},
+ {eldap,{1,0,3}},
+ {erl_docgen,{0,3,5}},
+ {erl_interface,{3,7,16}},
+ {erts,{6,0}},
+ {et,{1,5}},
+ {eunit,{2,2,7}},
+ {gs,{1,5,16}},
+ {hipe,{3,10,3}},
+ {ic,{4,3,5}},
+ {inets,{5,10}},
+ {jinterface,{1,5,9}},
+ {kernel,{3,0}},
+ {megaco,{3,17,1}},
+ {mnesia,{4,12}},
+ {observer,{2,0}},
+ {odbc,{2,10,20}},
+ {orber,{3,6,27}},
+ {os_mon,{2,2,15}},
+ {ose,{1,0}},
+ {otp_mibs,{1,0,9}},
+ {parsetools,{2,0,11}},
+ {percept,{0,8,9}},
+ {public_key,{0,22}},
+ {reltool,{0,6,5}},
+ {runtime_tools,{1,8,14}},
+ {sasl,{2,4}},
+ {snmp,{4,25,1}},
+ {ssh,{3,0,1}},
+ {ssl,{5,3,4}},
+ {stdlib,{2,0}},
+ {syntax_tools,{1,6,14}},
+ {test_server,{3,7}},
+ {tools,{2,6,14}},
+ {typer,{0,9,6}},
+ {webtool,{0,8,10}},
+ {wx,{1,2}},
+ {xmerl,{1,3,7}}].
+
+otp_17_0_vsns_tab() ->
+ gb_trees:from_orddict(otp_17_0_vsns_orddict()).
+
+check_runtime_dependency({App, DepVsn}, AppTab) ->
+ case gb_trees:lookup(App, AppTab) of
+ none ->
+ false;
+ {value, {Vsn, _}} ->
+ meets_min_req(Vsn, DepVsn)
+ end.
+
+check_runtime_dependencies(App, AppTab, OtpMinVsnTab) ->
+ case gb_trees:lookup(App, AppTab) of
+ none ->
+ [{invalid_app_file, App}];
+ {value, {Vsn, RTDeps}} ->
+ RTD = case lists:foldl(
+ fun (RTDep, Acc) ->
+ case check_runtime_dependency(RTDep, AppTab) of
+ true ->
+ Acc;
+ false ->
+ [mk_app_vsn_str(RTDep) | Acc]
+ end
+ end,
+ [],
+ RTDeps) of
+ [] ->
+ [];
+ MissingDeps ->
+ [{missing_runtime_dependencies,
+ mk_app_vsn_str(App, Vsn),
+ MissingDeps}]
+ end,
+ case gb_trees:lookup(App, OtpMinVsnTab) of
+ none ->
+ RTD;
+ {value, MinVsn} ->
+ case meets_min_req(Vsn, MinVsn) of
+ true ->
+ RTD;
+ false ->
+ [{invalid_application_version,
+ mk_app_vsn_str(App, Vsn)} | RTD]
+ end
+ end
+ end.
+
+app_file_to_app(AF) ->
+ list_to_atom(filename:basename(AF, ".app")).
+
+get_apps() ->
+ get_apps(code:get_path(), []).
+
+get_apps([], Apps) ->
+ lists:usort(Apps);
+get_apps([Path|Paths], Apps) ->
+ case filelib:wildcard(filename:join(Path, "*.app")) of
+ [] ->
+ %% Not app or invalid app
+ get_apps(Paths, Apps);
+ [AppFile] ->
+ get_apps(Paths, [app_file_to_app(AppFile) | Apps]);
+ [_AppFile| _] = AppFiles ->
+ %% Strange with multple .app files... Lets put them
+ %% all in the list and see what we get...
+ lists:map(fun (AF) ->
+ app_file_to_app(AF)
+ end, AppFiles) ++ Apps
+ end.
+
+check_runtime_dependencies() ->
+ OtpMinVsnTab = otp_17_0_vsns_tab(),
+ Apps = get_apps(),
+ AppTab = build_app_table(Apps, gb_trees:empty()),
+ lists:foldl(fun (App, Acc) ->
+ case check_runtime_dependencies(App,
+ AppTab,
+ OtpMinVsnTab) of
+ [] -> Acc;
+ Issues -> Issues ++ Acc
+ end
+ end,
+ [],
+ Apps).
+
+%% End of runtime dependency checks
diff --git a/lib/runtime_tools/src/ttb_autostart.erl b/lib/runtime_tools/src/ttb_autostart.erl
index 5339507cec..4c6971c119 100644
--- a/lib/runtime_tools/src/ttb_autostart.erl
+++ b/lib/runtime_tools/src/ttb_autostart.erl
@@ -1,4 +1,3 @@
-%%%-*- coding: utf-8 -*-
%%%-------------------------------------------------------------------
%%% File : ttb_autostart.erl
%%% Author : BartÅ‚omiej PuzoÅ„ <[email protected]>
diff --git a/lib/runtime_tools/test/Makefile b/lib/runtime_tools/test/Makefile
index bcabdf13ed..61377ea09e 100644
--- a/lib/runtime_tools/test/Makefile
+++ b/lib/runtime_tools/test/Makefile
@@ -4,9 +4,12 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES = \
dyntrace_SUITE \
+ dyntrace_lttng_SUITE \
runtime_tools_SUITE \
+ system_information_SUITE \
dbg_SUITE \
- erts_alloc_config_SUITE
+ erts_alloc_config_SUITE \
+ msacc_SUITE
ERL_FILES= $(MODULES:%=%.erl)
@@ -25,7 +28,7 @@ RELSYSDIR = $(RELEASE_PATH)/runtime_tools_test
# ----------------------------------------------------
ERL_MAKE_FLAGS +=
-ERL_COMPILE_FLAGS += -I$(ERL_TOP)/lib/test_server/include
+ERL_COMPILE_FLAGS +=
EBIN = .
diff --git a/lib/runtime_tools/test/dbg_SUITE.erl b/lib/runtime_tools/test/dbg_SUITE.erl
index dfae52ed1d..4b0864858c 100644
--- a/lib/runtime_tools/test/dbg_SUITE.erl
+++ b/lib/runtime_tools/test/dbg_SUITE.erl
@@ -1,302 +1,513 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
-module(dbg_SUITE).
%% Test functions
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- big/1, tiny/1, simple/1, message/1, distributed/1,
- ip_port/1, file_port/1, file_port2/1, file_port_schedfix/1,
- ip_port_busy/1, wrap_port/1, wrap_port_time/1,
- with_seq_trace/1, dead_suspend/1, local_trace/1,
- saved_patterns/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,
+ big/1, tiny/1, simple/1, message/1, distributed/1, port/1,
+ send/1, recv/1,
+ ip_port/1, file_port/1, file_port2/1, file_port_schedfix/1,
+ ip_port_busy/1, wrap_port/1, wrap_port_time/1,
+ with_seq_trace/1, dead_suspend/1, local_trace/1,
+ saved_patterns/1, tracer_exit_on_stop/1,
+ erl_tracer/1, distributed_erl_tracer/1]).
-export([tracee1/1, tracee2/1]).
-export([dummy/0, exported/1]).
+-export([enabled/3, trace/5, load_nif/1]).
--include_lib("test_server/include/test_server.hrl").
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
- [big, tiny, simple, message, distributed, ip_port,
+ [big, tiny, simple, message, distributed, port, ip_port,
+ send, recv,
file_port, file_port2, file_port_schedfix, ip_port_busy,
wrap_port, wrap_port_time, with_seq_trace, dead_suspend,
- local_trace, saved_patterns].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
+ local_trace, saved_patterns, tracer_exit_on_stop,
+ erl_tracer, distributed_erl_tracer].
-init_per_group(_GroupName, Config) ->
- Config.
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-big(suite) -> [];
-big(doc) -> ["Rudimentary interface test"];
+%% Rudimentary interface test
big(Config) when is_list(Config) ->
- ?line {ok,OldCurDir} = file:get_cwd(),
- Datadir=?config(data_dir, Config),
- Privdir=?config(priv_dir, Config),
- ?line ok=file:set_cwd(Privdir),
+ {ok,OldCurDir} = file:get_cwd(),
+ Datadir=proplists:get_value(data_dir, Config),
+ Privdir=proplists:get_value(priv_dir, Config),
+ ok=file:set_cwd(Privdir),
try
- %% make sure dbg is stopped (and returns correctly)
- ?line ok = dbg:stop(),
-
- %% compile test module and make sure it is loaded.
- ?line {ok,Mod} = compile:file(Datadir++"/dbg_test",[trace]),
- ?line code:purge(dbg_test),
- ?line {module, Mod}=code:load_file(dbg_test),
-
- %% run/debug a named test function.
- ?line Pid = spawn_link(dbg_test, loop, [Config]),
- ?line true = register(dbg_test_loop, Pid),
- ?line {ok,_} = dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(dbg_test_loop, [m,p,c]),
- ?line ok = dbg:c(dbg_test, test, [Config]),
- ?line ok = dbg:i(),
- ?line dbg_test_loop ! {dbg_test, stop},
- unregister(dbg_test_loop),
- ?line ok = dbg:stop(),
-
- %% run/debug a Pid.
- ?line Pid2=spawn_link(dbg_test,loop,[Config]),
- ?line {ok,_} = dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(Pid2,[s,r,p]),
- ?line ok = dbg:c(dbg_test, test, [Config]),
- ?line ok = dbg:i(),
- ?line Pid2 ! {dbg_test, stop},
-
- ?line ok=file:set_cwd(OldCurDir)
+ %% make sure dbg is stopped (and returns correctly)
+ ok = dbg:stop(),
+
+ %% compile test module and make sure it is loaded.
+ {ok,Mod} = compile:file(Datadir++"/dbg_test",[trace]),
+ code:purge(dbg_test),
+ {module, Mod}=code:load_file(dbg_test),
+
+ %% run/debug a named test function.
+ Pid = spawn_link(dbg_test, loop, [Config]),
+ true = register(dbg_test_loop, Pid),
+ {ok,_} = dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(dbg_test_loop, [m,p,c]),
+ ok = dbg:c(dbg_test, test, [Config]),
+ ok = dbg:i(),
+ dbg_test_loop ! {dbg_test, stop},
+ unregister(dbg_test_loop),
+ ok = dbg:stop(),
+
+ %% run/debug a Pid.
+ Pid2=spawn_link(dbg_test,loop,[Config]),
+ {ok,_} = dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(Pid2,[s,r,p]),
+ ok = dbg:c(dbg_test, test, [Config]),
+ ok = dbg:i(),
+ Pid2 ! {dbg_test, stop},
+
+ ok=file:set_cwd(OldCurDir)
after
- ?line dbg:stop()
+ dbg:stop()
end,
ok.
-tiny(suite) -> [];
-tiny(doc) -> ["Rudimentary interface test"];
+%% Rudimentary interface test
tiny(Config) when is_list(Config) ->
- ?line {ok,OldCurDir} = file:get_cwd(),
- Datadir=?config(data_dir, Config),
- Privdir=?config(priv_dir, Config),
- ?line ok=file:set_cwd(Privdir),
+ {ok,OldCurDir} = file:get_cwd(),
+ Datadir=proplists:get_value(data_dir, Config),
+ Privdir=proplists:get_value(priv_dir, Config),
+ ok=file:set_cwd(Privdir),
try
- %% compile test module and make sure it is loaded.
- ?line {ok, Mod} = compile:file(Datadir++"/dbg_test",[trace]),
- ?line code:purge(dbg_test),
- ?line {module, Mod}=code:load_file(dbg_test),
-
- ?line Pid=spawn_link(dbg_test,loop,[Config]),
- if
- is_pid(Pid) ->
- ?line dbg:tracer(),
- ?line {ok,[{matched, _node, 1}]} = dbg:p(Pid,[s,r,m,p,c]),
- ?line ok = dbg:c(dbg_test,test,[Config]),
- ?line ok = dbg:i(),
- ?line Pid ! {dbg_test, stop};
- true ->
- ?line ok=file:set_cwd(OldCurDir),
- ?t:fail("Could not spawn external test process.~n"),
- failure
- end
+ %% compile test module and make sure it is loaded.
+ {ok, Mod} = compile:file(Datadir++"/dbg_test",[trace]),
+ code:purge(dbg_test),
+ {module, Mod}=code:load_file(dbg_test),
+
+ Pid=spawn_link(dbg_test,loop,[Config]),
+ if
+ is_pid(Pid) ->
+ dbg:tracer(),
+ {ok,[{matched, _node, 1}]} = dbg:p(Pid,[s,r,m,p,c]),
+ ok = dbg:c(dbg_test,test,[Config]),
+ ok = dbg:i(),
+ Pid ! {dbg_test, stop};
+ true ->
+ ok=file:set_cwd(OldCurDir),
+ ct:fail("Could not spawn external test process.~n"),
+ failure
+ end
after
- ?line ok = dbg:stop(),
- ?line ok = file:set_cwd(OldCurDir)
+ ok = dbg:stop(),
+ ok = file:set_cwd(OldCurDir)
end,
ok.
-simple(suite) ->
- [];
-simple(doc) ->
- ["Simple interface test with own handler"];
+%% Simple interface test with own handler
simple(Config) when is_list(Config) ->
try
- ?line start(),
- ?line dbg:p(self(),call),
- ?line dbg:tp(dbg,ltp,[]),
- ?line dbg:ltp(),
- ?line stop(),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]}}] = flush()
+ start(),
+ dbg:p(self(),call),
+ dbg:tp(dbg,ltp,[]),
+ dbg:ltp(),
+ stop(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]}}] = flush()
after
- ?line dbg:stop()
+ dbg:stop()
end,
ok.
-message(suite) ->
- [];
-message(doc) ->
- ["Simple interface test with pam code that appends a message"];
+%% Simple interface test with pam code that appends a message
message(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
+ {ok, _} = start(),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg,ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg,ln,Saved),
- ?line {value, {saved, Saved}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg,ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg,ln,Saved),
+ {value, {saved, Saved}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln()
after
- ?line stop()
+ stop()
end,
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},S}] = flush(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},S}] = flush(),
ok.
-distributed(suite) ->
- [];
-distributed(doc) ->
- ["Simple test of distributed tracing"];
+send(Config) when is_list(Config) ->
+ {ok, _} = start(),
+ Node = start_slave(),
+ rpc:call(Node, code, add_patha,
+ [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ try
+ Echo = fun F() ->
+ receive {From, M} ->
+ From ! M,
+ F()
+ end
+ end,
+ Rcvr = spawn_link(Echo),
+ RemoteRcvr = spawn_link(Node, Echo),
+
+ {ok, [{matched, _, 1}]} = dbg:p(Rcvr, send),
+
+ send_test(Rcvr, make_ref(), true),
+
+ %% Test that the test case process is the receiving process
+ send_test(Rcvr, [{[self(),'_'],[],[]}]),
+
+ %% Test that self() is not the receiving process
+ {ok, [{matched, _node, 1}, {saved, 2}]} =
+ dbg:tpe(send, [{['$1','_'],[{'==','$1',{self}}],[]}]),
+ send_test(Rcvr, make_ref(), false),
+
+ %% Test that self() is the sending process
+ send_test(Rcvr, [{['_','_'],[{'==',Rcvr,{self}}],[]}]),
+
+ %% Test attaching a message
+ send_test(Rcvr, [{['_','_'],[{'==',Rcvr,{self}}],[{message, hello}]}],
+ make_ref(), hello),
+
+ %% Test using a saved trace pattern
+ send_test(Rcvr, 2, make_ref(), false),
+
+ %% Test clearing of trace pattern
+ {ok, [{matched, _node, 1}]} = dbg:ctpe(send),
+ send_test(Rcvr, make_ref(), true),
+
+ %% Test complex message inspection
+ Ref = make_ref(),
+ send_test(Rcvr,
+ [{['_','$2'],[{'==',Ref,{element,1,{element,2,'$2'}}}],[]}],
+ {test, {Ref}, <<0:(8*1024)>>}, true),
+
+ send_test(Rcvr, {test, {make_ref()}, <<0:(8*1024)>>}, false),
+
+ %% Test send to remote process
+ remote_send_test(Rcvr, RemoteRcvr, [], make_ref(), true),
+
+ remote_send_test(Rcvr, RemoteRcvr,
+ [{['$1','_'],[{'==',{node, '$1'},{node}}],[]}],
+ make_ref(), false),
+
+ remote_send_test(Rcvr, RemoteRcvr,
+ [{['$1','_'],[{'==',{node, '$1'},Node}],[]}],
+ make_ref(), true),
+
+ %% Test that distributed dbg works
+ dbg:tracer(Node, process, {fun myhandler/2, self()}),
+ Rcvr2 = spawn_link(Echo),
+ RemoteRcvr2 = spawn_link(Node, Echo),
+ dbg:p(Rcvr2, [send]),
+ dbg:p(RemoteRcvr2, [send]),
+ dbg:tpe(send, [{['_', hej],[],[]}]),
+
+ send_test(Rcvr2, make_ref(), false),
+ send_test(RemoteRcvr2, make_ref(), false),
+ send_test(Rcvr2, hej, true),
+ send_test(RemoteRcvr2, hej, true),
+
+ ok
+
+ after
+ stop()
+ end.
+
+send_test(Pid, Pattern, Msg, TraceEvent) ->
+ {ok, [{matched, _, _}, _]} = dbg:tpe(send, Pattern),
+ send_test(Pid, Msg, TraceEvent).
+send_test(Pid, Pattern) ->
+ send_test(Pid, Pattern, make_ref(), true).
+send_test(Pid, Msg, TraceEvent) ->
+ S = self(),
+ Pid ! {S, Msg},
+ receive Msg -> ok end,
+ send_test_rcv(Pid, Msg, S, TraceEvent).
+
+remote_send_test(Pid, RPid, Pattern, Msg, TraceEvent) ->
+ dbg:tpe(send, Pattern),
+ TMsg = {self(), Msg},
+ Pid ! {RPid, TMsg},
+ receive Msg -> ok end,
+ send_test_rcv(Pid, TMsg, RPid, TraceEvent).
+
+send_test_rcv(Pid, Msg, S, TraceEvent) ->
+ case flush() of
+ [] when not TraceEvent ->
+ ok;
+ [{trace, Pid, send, Msg, S}] when TraceEvent ->
+ ok;
+ [{trace, Pid, send, Msg, S, Message}] when TraceEvent == Message ->
+ ok;
+ Else ->
+ ct:fail({got_unexpected_message, Else})
+ end.
+
+recv(Config) when is_list(Config) ->
+ {ok, _} = start(),
+ Node = start_slave(),
+ rpc:call(Node, code, add_patha,
+ [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ try
+ Echo = fun F() ->
+ receive {From, M} ->
+ From ! M,
+ F()
+ end
+ end,
+ Rcvr = spawn_link(Echo),
+ RemoteRcvr = spawn_link(Node, Echo),
+
+ {ok, [{matched, _, 1}]} = dbg:p(Rcvr, 'receive'),
+
+ recv_test(Rcvr, make_ref(), true),
+
+ %% Test that the test case process is the sending process
+ recv_test(Rcvr, [{[node(), self(), '_'],[],[]}]),
+
+ %% Test that self() is the not sending process
+ {ok, [{matched, _node, 1}, {saved, 2}]} =
+ dbg:tpe('receive', [{[node(), '$1','_'],[{'==','$1',{self}}],[]}]),
+ recv_test(Rcvr, make_ref(), false),
+
+ %% Test that self() is the receiving process
+ recv_test(Rcvr, [{'_',[{'==',Rcvr,{self}}],[]}]),
+
+ %% Test attaching a message
+ recv_test(Rcvr, [{'_',[{'==',Rcvr,{self}}],[{message, hello}]}],
+ make_ref(), hello),
+
+ %% Test using a saved trace pattern
+ recv_test(Rcvr, 2, make_ref(), false),
+
+ %% Test clearing of trace pattern
+ {ok, [{matched, _node, 1}]} = dbg:ctpe('receive'),
+ recv_test(Rcvr, make_ref(), true),
+
+ %% Test complex message inspection
+ Ref = make_ref(),
+ recv_test(Rcvr,
+ [{[node(), '_','$2'],[{'==',Ref,{element,1,
+ {element,2,
+ {element,2,'$2'}}}}],[]}],
+ {test, {Ref}, <<0:(8*1024)>>}, true),
+
+ recv_test(Rcvr, {test, {make_ref()}, <<0:(8*1024)>>}, false),
+
+ %% Test recv to remote process
+ remote_recv_test(RemoteRcvr, Rcvr, [], make_ref(), true),
+
+ remote_recv_test(RemoteRcvr, Rcvr,
+ [{['$1',undefined,'_'],[{'==','$1',{node}}],[]}],
+ make_ref(), false),
+
+ remote_recv_test(RemoteRcvr, Rcvr,
+ [{['$1',undefined,'_'],[{'==','$1',Node}],[]}],
+ make_ref(), true),
+
+ %% Test that distributed dbg works
+ dbg:tracer(Node, process, {fun myhandler/2, self()}),
+ Rcvr2 = spawn_link(Echo),
+ RemoteRcvr2 = spawn_link(Node, Echo),
+ dbg:p(Rcvr2, ['receive']),
+ dbg:p(RemoteRcvr2, ['receive']),
+ dbg:tpe('receive', [{[node(), '_', '$1'],[{'==',{element,2,'$1'}, hej}],[]}]),
+
+ recv_test(Rcvr2, make_ref(), false),
+ recv_test(RemoteRcvr2, make_ref(), false),
+ recv_test(Rcvr2, hej, true),
+ recv_test(RemoteRcvr2, hej, true),
+
+ ok
+
+ after
+ stop()
+ end.
+
+recv_test(Pid, Pattern, Msg, TraceEvent) ->
+ {ok, [{matched, _, _}, _]} = dbg:tpe('receive', Pattern),
+ recv_test(Pid, Msg, TraceEvent).
+recv_test(Pid, Pattern) ->
+ recv_test(Pid, Pattern, make_ref(), true).
+recv_test(Pid, Msg, TraceEvent) ->
+ S = self(),
+ Pid ! {S, Msg},
+ receive Msg -> ok end,
+ recv_test_rcv(Pid, {S, Msg}, TraceEvent).
+
+remote_recv_test(RPid, Pid, Pattern, Msg, TraceEvent) ->
+ dbg:tpe('receive', Pattern),
+ TMsg = {self(), Msg},
+ RPid ! {Pid, TMsg},
+ receive Msg -> ok end,
+ recv_test_rcv(Pid, TMsg, TraceEvent).
+
+recv_test_rcv(Pid, Msg, TraceEvent) ->
+ case flush() of
+ [] when not TraceEvent ->
+ ok;
+ [{trace, Pid, 'receive', Msg}] when TraceEvent ->
+ ok;
+ [{trace, Pid, 'receive', Msg, Message}] when TraceEvent == Message ->
+ ok;
+ Else ->
+ ct:fail({got_unexpected_message, Else})
+ end.
+
+%% Simple test of distributed tracing
distributed(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
- ?line Node = start_slave(),
+ {ok, _} = start(),
+ Node = start_slave(),
try
- ?line RexPid = rpc:call(Node, erlang, whereis, [rex]),
- ?line RexPidList = pid_to_list(RexPid),
- ?line {ok, Node} = dbg:n(Node),
- ?line {ok, X} = dbg:p(all,call),
- ?line {value, {matched, Node, _}} = lists:keysearch(Node, 2, X),
- ?line {ok, Y} = dbg:p(RexPidList, s),
- ?line {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Y),
- ?line {ok, Z} = dbg:tp(dbg,ltp,[]),
- ?line {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Z),
- ?line dbg:cn(Node),
- ?line dbg:tp(dbg,ln,[]),
- ?line ok = rpc:call(Node, dbg, ltp, []),
- ?line ok = rpc:call(Node, dbg, ln, []),
- ?line ok = dbg:ln(),
- ?line S = self(),
- ?line {TraceSend, TraceCall} =
- lists:partition(fun ({trace,RP,send,_,_}) when RP =:= RexPid -> true;
- (_) -> false end,
- flush()),
- ?line [_|_] = TraceSend,
- ?line [{trace,Pid,call,{dbg,ltp,[]}},
- {trace,S,call,{dbg,ln,[]}}] = TraceCall,
- ?line Node = node(Pid),
- %%
- ?line stop()
+ RexPid = rpc:call(Node, erlang, whereis, [rex]),
+ RexPidList = pid_to_list(RexPid),
+ {ok, Node} = dbg:n(Node),
+ {ok, X} = dbg:p(all,call),
+ {value, {matched, Node, _}} = lists:keysearch(Node, 2, X),
+ {ok, Y} = dbg:p(RexPidList, s),
+ {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Y),
+ {ok, Z} = dbg:tp(dbg,ltp,[]),
+ {value, {matched, Node, 1}} = lists:keysearch(Node, 2, Z),
+ dbg:cn(Node),
+ dbg:tp(dbg,ln,[]),
+ ok = rpc:block_call(Node, dbg, ltp, []),
+ ok = rpc:block_call(Node, dbg, ln, []),
+ ok = dbg:ln(),
+ S = self(),
+ {TraceSend, TraceCall} =
+ lists:partition(fun ({trace,RP,send,_,_}) when RP =:= RexPid -> true;
+ (_) -> false end,
+ flush()),
+ [_|_] = TraceSend,
+ [{trace,Pid,call,{dbg,ltp,[]}},
+ {trace,S,call,{dbg,ln,[]}}] = TraceCall,
+ Node = node(Pid),
+ %%
+ stop()
after
- ?line stop_slave(Node),
- ?line stop()
+ stop_slave(Node),
+ stop()
end,
ok.
-local_trace(suite) ->
- [];
-local_trace(doc) ->
- ["Tests tracing of local function calls."];
+%% Tests tracing of local function calls.
local_trace(Config) when is_list(Config) ->
- ?line {ok, _} = start(),
+ {ok, _} = start(),
try
- ?line S = self(),
- ?line %% Split "<X.Y.Z>" into {X, Y, Z}
- ?line "<"++L1 = L = pid_to_list(S),
- ?line NoDot = fun ($.) -> false; (_) -> true end,
- ?line {LX,"."++L2} = lists:splitwith(NoDot, L1),
- ?line {LY,"."++L3} = lists:splitwith(NoDot, L2),
- ?line ">"++L4 = lists:reverse(L3),
- ?line LZ = lists:reverse(L4),
- ?line X = 0 = list_to_integer(LX),
- ?line Y = list_to_integer(LY),
- ?line Z = list_to_integer(LZ),
- ?line XYZ = {X, Y, Z},
- ?line io:format("Self = ~w = ~w~n", [S,XYZ]),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(S,call),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(XYZ,call),
- if Z =:= 0 ->
- ?line {ok, [{matched, _node, 1}]} = dbg:p(Y,call);
- true -> ok
- end,
- ?line {ok, [{matched, _node, 1}]} = dbg:p(L,call),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
- ?line 4 = not_exported(2),
- ?line [{trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:tp(?MODULE,exported,[]),
- ?line 4 = ?MODULE:exported(2),
- ?line [{trace,S,call,{?MODULE,exported,[2]}},
- {trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:ctpl(?MODULE),
- ?line 4 = ?MODULE:exported(2),
- ?line [{trace,S,call,{?MODULE,exported,[2]}}] = flush(),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
- ?line {ok, _} = dbg:ctp(?MODULE),
- ?line 4 = ?MODULE:exported(2),
- ?line [] = flush(),
- ?line {ok, _} = dbg:tpl(?MODULE,not_exported,x),
- ?line catch ?MODULE:exported(x),
- ?line [{trace,S,call,{dbg_SUITE,not_exported,[x]}},
- {trace,S,exception_from,
- {dbg_SUITE,not_exported,1},
- {error,badarith}}] = flush()
+ S = self(),
+ %% Split "<X.Y.Z>" into {X, Y, Z}
+ "<"++L1 = L = pid_to_list(S),
+ NoDot = fun ($.) -> false; (_) -> true end,
+ {LX,"."++L2} = lists:splitwith(NoDot, L1),
+ {LY,"."++L3} = lists:splitwith(NoDot, L2),
+ ">"++L4 = lists:reverse(L3),
+ LZ = lists:reverse(L4),
+ X = 0 = list_to_integer(LX),
+ Y = list_to_integer(LY),
+ Z = list_to_integer(LZ),
+ XYZ = {X, Y, Z},
+ io:format("Self = ~w = ~w~n", [S,XYZ]),
+ {ok, [{matched, _node, 1}]} = dbg:p(S,call),
+ {ok, [{matched, _node, 1}]} = dbg:p(XYZ,call),
+ if Z =:= 0 ->
+ {ok, [{matched, _node, 1}]} = dbg:p(Y,call);
+ true -> ok
+ end,
+ {ok, [{matched, _node, 1}]} = dbg:p(L,call),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
+ 4 = not_exported(2),
+ [{trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
+ {ok, _} = dbg:tp(?MODULE,exported,[]),
+ 4 = ?MODULE:exported(2),
+ [{trace,S,call,{?MODULE,exported,[2]}},
+ {trace,S,call,{?MODULE,not_exported,[2]}}] = flush(),
+ {ok, _} = dbg:ctpl(?MODULE),
+ 4 = ?MODULE:exported(2),
+ [{trace,S,call,{?MODULE,exported,[2]}}] = flush(),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,[]),
+ {ok, _} = dbg:ctp(?MODULE),
+ 4 = ?MODULE:exported(2),
+ [] = flush(),
+ {ok, _} = dbg:tpl(?MODULE,not_exported,x),
+ catch ?MODULE:exported(x),
+ [{trace,S,call,{dbg_SUITE,not_exported,[x]}},
+ {trace,S,exception_from,
+ {dbg_SUITE,not_exported,1},
+ {error,badarith}}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
-saved_patterns(suite) ->
- [];
-saved_patterns(doc) ->
- ["Tests saving of match_spec's."];
+%% Test that tracing on port works
+port(Config) when is_list(Config) ->
+ try
+ S = self(),
+ start(),
+ TestFile = filename:join(proplists:get_value(priv_dir, Config),"port_test"),
+ Fun = dbg:trace_port(file, TestFile),
+
+ %% Do a run to get rid of all extra port operations
+ port_close(Fun()),
+
+ dbg:p(new,ports),
+ Port = Fun(),
+ port_close(Port),
+ stop(),
+
+ TraceFileDrv = list_to_atom(lists:flatten(["trace_file_drv n ",TestFile])),
+ [{trace,Port,open,S,TraceFileDrv},
+ {trace,Port,getting_linked,S},
+ {trace,Port,closed,normal},
+ {trace,Port,unlink,S}] = flush()
+ after
+ dbg:stop()
+ end,
+ ok.
+
+%% Tests saving of match_spec's.
saved_patterns(Config) when is_list(Config) ->
- ?line dbg:stop(),
- ?line {ok,[{saved,1}]} =
- dbg:tp(dbg,ctp,1,[{'_',[],[{message, blahonga}]}]),
- ?line {ok,[{saved,2}]} =
- dbg:tp(dbg,ctp,1,[{['_'],[],[{message, blahonga}]}]),
- ?line Privdir=?config(priv_dir, Config),
- ?line file:make_dir(Privdir),
- ?line File = filename:join([Privdir, "blahonga.ms"]),
- ?line dbg:wtp(File),
- ?line dbg:stop(),
- ?line dbg:ctp('_','_','_'),
- ?line {ok, _} = start(),
+ dbg:stop(),
+ {ok,[{saved,1}]} =
+ dbg:tp(dbg,ctp,1,[{'_',[],[{message, blahonga}]}]),
+ {ok,[{saved,2}]} =
+ dbg:tp(dbg,ctp,1,[{['_'],[],[{message, blahonga}]}]),
+ Privdir=proplists:get_value(priv_dir, Config),
+ file:make_dir(Privdir),
+ File = filename:join([Privdir, "blahonga.ms"]),
+ dbg:wtp(File),
+ dbg:stop(),
+ dbg:ctp('_','_','_'),
+ {ok, _} = start(),
try
- ?line dbg:rtp(File),
- ?line {ok,[{matched,_node,1},{saved,1}]} = dbg:tp(dbg,ltp,0,1),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line dbg:ltp(),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},blahonga}] = flush()
+ dbg:rtp(File),
+ {ok,[{matched,_node,1},{saved,1}]} = dbg:tp(dbg,ltp,0,1),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ dbg:ltp(),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},blahonga}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
@@ -308,148 +519,132 @@ not_exported(N) ->
exported(N) ->
not_exported(N).
-ip_port(suite) ->
- [];
-ip_port(doc) ->
- ["Test tracing to IP port"];
+%% Test tracing to IP port
ip_port(Config) when is_list(Config) ->
- ?line stop(),
- ?line Port = dbg:trace_port(ip, 0),
- ?line {ok, _} = dbg:tracer(port, Port),
+ stop(),
+ Port = dbg:trace_port(ip, 0),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln(),
- ?line {ok, IpPort} = dbg:trace_port_control(get_listen_port),
- ?line io:format("IpPort = ~p~n", [IpPort]),
- ?line dbg:trace_client(ip, IpPort, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},hej}] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln(),
+ {ok, IpPort} = dbg:trace_port_control(get_listen_port),
+ io:format("IpPort = ~p~n", [IpPort]),
+ dbg:trace_client(ip, IpPort, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},hej}] = flush()
after
- ?line stop()
+ stop()
end,
ok.
-ip_port_busy(suite) ->
- [];
-ip_port_busy(doc) ->
- ["Test that the dbg server does not hang if the tracer don't start ",
- "(OTP-3592)"];
+%% Test that the dbg server does not hang if the tracer don't start (OTP-3592)
ip_port_busy(Config) when is_list(Config) ->
- ?line stop(),
- ?line Tracer = dbg:trace_port(ip, 4745),
- ?line Port = Tracer(),
- ?line {error, Reason} = dbg:tracer(port, Tracer),
+ stop(),
+ Tracer = dbg:trace_port(ip, 4745),
+ Port = Tracer(),
+ {error, Reason} = dbg:tracer(port, Tracer),
try
- ?line io:format("Error reason = ~p~n", [Reason]),
- ?line true = port_close(Port)
+ io:format("Error reason = ~p~n", [Reason]),
+ true = port_close(Port)
after
- ?line dbg:stop()
+ dbg:stop()
end,
- ?line ok.
+ ok.
-file_port(suite) ->
- [];
-file_port(doc) ->
- ["Test tracing to file port (simple)"];
+%% Test tracing to file port (simple)
file_port(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C),
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
- ?line Port = dbg:trace_port(file, FName),
- ?line {ok, _} = dbg:tracer(port, Port),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
+ Port = dbg:trace_port(file, FName),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
- ?line ok = dbg:ltp(),
- ?line ok = dbg:ln(),
- ?line stop(),
- ?line dbg:trace_client(file, FName, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace,S,call,{dbg,ltp,[]},S},
- {trace,S,call,{dbg,ln,[]},hej},
- end_of_trace] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ ok = dbg:ltp(),
+ ok = dbg:ln(),
+ stop(),
+ dbg:trace_client(file, FName, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S},
+ {trace,S,call,{dbg,ln,[]},hej},
+ end_of_trace] = flush()
after
- ?line stop(),
- ?line file:delete(FName)
+ stop(),
+ file:delete(FName)
end,
ok.
-file_port2(suite) ->
- [];
-file_port2(doc) ->
- ["Test tracing to file port with 'follow_file'"];
+%% Test tracing to file port with 'follow_file'
file_port2(Config) when is_list(Config) ->
stop(),
{A,B,C} = erlang:now(),
FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
- "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
- FName = filename:join([?config(data_dir, Config), FTMP]),
+ "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%% Ok, lets try with flush and follow_file, not a chance on VxWorks
%% with NFS caching...
Port2 = dbg:trace_port(file, FName),
{ok, _} = dbg:tracer(port, Port2),
try
- {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- {ok, _} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
- {ok, _} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
- ok = dbg:ltp(),
- ok = dbg:flush_trace_port(),
- dbg:trace_client(follow_file, FName,
- {fun myhandler/2, self()}),
- S = self(),
- [{trace,S,call,{dbg,ltp,[]},S}] = flush(),
- ok = dbg:ln(),
- ok = dbg:flush_trace_port(),
- receive after 1000 -> ok end, %% Polls every second...
- [{trace,S,call,{dbg,ln,[]},hej}] = flush(),
- stop(),
- [] = flush()
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, _} = dbg:tp(dbg, ltp,[{'_',[],[{message, {self}}]}]),
+ {ok, _} = dbg:tp(dbg, ln, [{'_',[],[{message, hej}]}]),
+ ok = dbg:ltp(),
+ ok = dbg:flush_trace_port(),
+ dbg:trace_client(follow_file, FName,
+ {fun myhandler/2, self()}),
+ S = self(),
+ [{trace,S,call,{dbg,ltp,[]},S}] = flush(),
+ ok = dbg:ln(),
+ ok = dbg:flush_trace_port(),
+ receive after 1000 -> ok end, %% Polls every second...
+ [{trace,S,call,{dbg,ln,[]},hej}] = flush(),
+ stop(),
+ [] = flush()
after
- stop(),
- file:delete(FName)
+ stop(),
+ file:delete(FName)
end,
ok.
-file_port_schedfix(suite) ->
- [];
-file_port_schedfix(doc) ->
- ["Test that the scheduling timestamp fix for trace flag 'running' works."];
+%% Test that the scheduling timestamp fix for trace flag 'running' works.
file_port_schedfix(Config) when is_list(Config) ->
- ?line case (catch erlang:system_info(smp_support)) of
- true ->
- {skip, "No schedule fix on SMP"};
- _ ->
- try
- file_port_schedfix1(Config)
- after
- dbg:stop()
- end
- end.
+ case (catch erlang:system_info(smp_support)) of
+ true ->
+ {skip, "No schedule fix on SMP"};
+ _ ->
+ try
+ file_port_schedfix1(Config)
+ after
+ dbg:stop()
+ end
+ end.
file_port_schedfix1(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
- "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++
+ "-" ++ integer_to_list(B) ++ "-" ++ integer_to_list(C),
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%%
- ?line Port = dbg:trace_port(file, {FName, wrap, ".wraplog", 8*1024, 4}),
- ?line {ok, _} = dbg:tracer(port, Port),
- ?line {ok,[{matched,_node,0}]} = dbg:p(new,[running,procs,send,timestamp]),
+ Port = dbg:trace_port(file, {FName, wrap, ".wraplog", 8*1024, 4}),
+ {ok, _} = dbg:tracer(port, Port),
+ {ok,[{matched,_node,0}]} = dbg:p(new,[running,procs,send,timestamp]),
%%
%% Generate the trace data
%%
@@ -470,146 +665,135 @@ file_port_schedfix1(Config) when is_list(Config) ->
%% execution time. Wallclock. A normal result is about 10 times more
%% without schedule in - schedule out compensation (OTP-3938).
%%
- ?line ok = token_volleyball(3, 4, 8),
+ ok = token_volleyball(3, 4, 8),
+ %%
+ {ok,[{matched,_,_}]} = dbg:p(all, [clear]),
+ stop(),
%%
- ?line {ok,[{matched,_,_}]} = dbg:p(all, [clear]),
- ?line stop(),
- % Some debug code to run on all platforms, for finding the fault on genny
- % Dont touch please /PaN
- ?line io:format("Trace dump by PaN BEGIN~n"),
- ?line dbg:trace_client(file,{FName, wrap, ".wraplog"},{fun(end_of_trace,Pid)-> Pid ! done; (Mesg,Pid) -> io:format("~w~n",[Mesg]),Pid end,self()}),
- receive done -> ok end,
- ?line io:format("Trace dump by PaN END~n"),
- %%
%% Get the trace result
%%
- ?line Tag = make_ref(),
- ?line dbg:trace_client(file, {FName, wrap, ".wraplog"},
- {fun schedstat_handler/2, {self(), Tag, []}}),
- ?line Result =
- receive
- {Tag, D} ->
- lists:map(
- fun({Pid, {A1, B1, C1}}) ->
- {Pid, C1/1000000 + B1 + A1*1000000}
- end,
- D)
- end,
- ?line ok = io:format("Result=~p", [Result]),
-% erlang:display({?MODULE, ?LINE, Result}),
+ Tag = make_ref(),
+ dbg:trace_client(file, {FName, wrap, ".wraplog"},
+ {fun schedstat_handler/2, {self(), Tag, []}}),
+ Result =
+ receive
+ {Tag, D} ->
+ lists:map(
+ fun({Pid, {A1, B1, C1}}) ->
+ {Pid, C1/1000000 + B1 + A1*1000000}
+ end,
+ D)
+ end,
+ ok = io:format("Result=~p", [Result]),
+ % erlang:display({?MODULE, ?LINE, Result}),
%%
%% Analyze the result
%%
- ?line {Min, Max} =
- lists:foldl(
- fun({_Pid, M}, {Mi, Ma}) ->
- {if M < Mi -> M; true -> Mi end,
- if M > Ma -> M; true -> Ma end}
- end,
- {void, 0},
- Result),
+ {Min, Max} = lists:foldl(fun({_Pid, M}, {Mi, Ma}) ->
+ {if M < Mi -> M; true -> Mi end,
+ if M > Ma -> M; true -> Ma end}
+ end,
+ {void, 0},
+ Result),
% More PaN debug
- ?line io:format("Min = ~f, Max = ~f~n",[Min,Max]),
+ io:format("Min = ~f, Max = ~f~n",[Min,Max]),
%%
%% Cleanup
%%
- ?line ToBeDeleted = filelib:wildcard(FName++"*"++".wraplog"),
- ?line lists:map(fun file:delete/1, ToBeDeleted),
-% io:format("ToBeDeleted=~p", [ToBeDeleted]),
+ ToBeDeleted = filelib:wildcard(FName++"*"++".wraplog"),
+ lists:map(fun file:delete/1, ToBeDeleted),
+ % io:format("ToBeDeleted=~p", [ToBeDeleted]),
%%
%% Present the result
%%
P = (Max / Min - 1) * 100,
BottomLine = lists:flatten(io_lib:format("~.2f %", [P])),
if P > 100 ->
- Reason = {BottomLine, '>', "100%"},
- erlang:display({file_port_schedfix, fail, Reason}),
- test_server:fail(Reason);
+ Reason = {BottomLine, '>', "100%"},
+ erlang:display({file_port_schedfix, fail, Reason}),
+ ct:fail(Reason);
true ->
- {comment, BottomLine}
+ {comment, BottomLine}
end.
-wrap_port(suite) ->
- [];
-wrap_port(doc) ->
- ["Test tracing to wrapping file port"];
+%% Test tracing to wrapping file port
wrap_port(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
- ?line FNameWildcard = FName++"*"++".trace",
+ Self = self(),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
+ FNameWildcard = FName++"*"++".trace",
%% WrapSize=0 and WrapCnt=11 will force the trace to wrap after
%% every trace message, and to contain only the last 10 entries
%% after trace stop since the last file will be empty waiting
%% for its first trace message.
- ?line WrapSize = 0,
- ?line WrapCnt = 11,
- ?line WrapFilesSpec = {FName, wrap, ".trace", WrapSize, WrapCnt},
- ?line wrap_port_init(WrapFilesSpec),
+ WrapSize = 0,
+ WrapCnt = 11,
+ WrapFilesSpec = {FName, wrap, ".trace", WrapSize, WrapCnt},
+ wrap_port_init(WrapFilesSpec),
%% The number of iterations, N, is tested to place wrap the log,
%% giving a gap in the filename sequence at index 3.
%% This should be a difficult case for
%% the trace_client file sorting functionality.
N = 7,
- ?line lists:foreach(
- fun(Cnt) ->
- ?MODULE:tracee1(Cnt),
- ?MODULE:tracee2(Cnt)
- end,
- lists:seq(1, N)),
- ?line stop(),
+ lists:foreach(
+ fun(Cnt) ->
+ ?MODULE:tracee1(Cnt),
+ ?MODULE:tracee2(Cnt)
+ end,
+ lists:seq(1, N)),
+ stop(),
try
- ?line Files1 = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files1]),
- ?line Tc1 = dbg:trace_client(file, WrapFilesSpec,
- {fun myhandler/2, {wait_for_go,Self}}),
- ?line Tref1 = erlang:monitor(process, Tc1),
- Tc1 ! {go,Self},
- ?line [{'DOWN',Tref1,_,_,normal},
- end_of_trace
- |Result] = lists:reverse(flush()),
- ?line M = N - (WrapCnt-1) div 2,
- ?line M = wrap_port_result(Result, Self, N),
- %%
- %% Start a new wrap log with the same name to verify that
- %% all files are cleared at wrap log start. Only produce
- %% two trace messages to also place the gap at index 3,
- %% so the trace log will be misinterpreted.
- %%
- ?line wrap_port_init(WrapFilesSpec),
- ?line Files2 = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files2]),
- ?line -1 = ?MODULE:tracee1(-1),
- ?line -1 = ?MODULE:tracee2(-1),
- ?line stop(),
- ?line Files = filelib:wildcard(FNameWildcard),
- ?line io:format("~p~n", [Files]),
- ?line Tc2 = dbg:trace_client(file, WrapFilesSpec,
- {fun myhandler/2, {wait_for_go,Self}}),
- ?line Tref2 = erlang:monitor(process, Tc2),
- Tc2 ! {go,Self},
- ?line [{trace,Self,call,{?MODULE,tracee1,[-1]},Self},
- {trace,Self,call,{?MODULE,tracee2,[-1]},hej},
- end_of_trace,
- {'DOWN',Tref2,_,_,normal}] = flush(),
- %%
- ?line lists:map(fun(F) -> file:delete(F) end, Files)
+ Files1 = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files1]),
+ Tc1 = dbg:trace_client(file, WrapFilesSpec,
+ {fun myhandler/2, {wait_for_go,Self}}),
+ Tref1 = erlang:monitor(process, Tc1),
+ Tc1 ! {go,Self},
+ [{'DOWN',Tref1,_,_,normal},
+ end_of_trace
+ |Result] = lists:reverse(flush()),
+ M = N - (WrapCnt-1) div 2,
+ M = wrap_port_result(Result, Self, N),
+ %%
+ %% Start a new wrap log with the same name to verify that
+ %% all files are cleared at wrap log start. Only produce
+ %% two trace messages to also place the gap at index 3,
+ %% so the trace log will be misinterpreted.
+ %%
+ wrap_port_init(WrapFilesSpec),
+ Files2 = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files2]),
+ -1 = ?MODULE:tracee1(-1),
+ -1 = ?MODULE:tracee2(-1),
+ stop(),
+ Files = filelib:wildcard(FNameWildcard),
+ io:format("~p~n", [Files]),
+ Tc2 = dbg:trace_client(file, WrapFilesSpec,
+ {fun myhandler/2, {wait_for_go,Self}}),
+ Tref2 = erlang:monitor(process, Tc2),
+ Tc2 ! {go,Self},
+ [{trace,Self,call,{?MODULE,tracee1,[-1]},Self},
+ {trace,Self,call,{?MODULE,tracee2,[-1]},hej},
+ end_of_trace,
+ {'DOWN',Tref2,_,_,normal}] = flush(),
+ %%
+ lists:map(fun(F) -> file:delete(F) end, Files)
after
- ?line stop()
+ stop()
end,
ok.
wrap_port_init(WrapFilesSpec) ->
- ?line Port = dbg:trace_port(file, WrapFilesSpec),
- ?line {ok, _} = dbg:tracer(port, Port),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, Y),
+ Port = dbg:trace_port(file, WrapFilesSpec),
+ {ok, _} = dbg:tracer(port, Port),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, Y),
ok.
tracee1(X) ->
@@ -621,106 +805,96 @@ tracee2(X) ->
wrap_port_result([], _S, M) ->
M;
wrap_port_result([{trace, S, call, {?MODULE, tracee2, [M]}, hej},
- {trace, S, call, {?MODULE, tracee1, [M]}, S} | Tail],
- S,
- M) ->
+ {trace, S, call, {?MODULE, tracee1, [M]}, S} | Tail],
+ S,
+ M) ->
wrap_port_result(Tail, S, M-1).
-wrap_port_time(suite) ->
- [];
-wrap_port_time(doc) ->
- ["Test tracing to time limited wrapping file port"];
+%% Test tracing to time limited wrapping file port
wrap_port_time(Config) when is_list(Config) ->
- ?line stop(),
- ?line {A,B,C} = erlang:now(),
- ?line FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
- integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
- ?line FName = filename:join([?config(data_dir, Config), FTMP]),
+ stop(),
+ {A,B,C} = erlang:now(),
+ FTMP = atom_to_list(?MODULE) ++ integer_to_list(A) ++ "-" ++
+ integer_to_list(B) ++ "-" ++ integer_to_list(C) ++ "-",
+ FName = filename:join([proplists:get_value(data_dir, Config), FTMP]),
%% WrapTime=2 and WrapCnt=4 will force the trace to wrap after
%% every 2 seconds, and to contain between 3*2 and 4*2 seconds
%% of trace entries.
- ?line WrapFilesSpec = {FName, wrap, ".trace", {time, 2000}, 4},
- ?line Port = dbg:trace_port(file, WrapFilesSpec),
- ?line {ok, _} = dbg:tracer(port, Port),
+ WrapFilesSpec = {FName, wrap, ".trace", {time, 2000}, 4},
+ Port = dbg:trace_port(file, WrapFilesSpec),
+ {ok, _} = dbg:tracer(port, Port),
try
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
- ?line {value, {saved, _Saved1}} = lists:keysearch(saved, 1, X),
- ?line {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
- ?line {value, {saved, _Saved2}} = lists:keysearch(saved, 1, Y),
- %% The delays in the iterations places two trace messages in each
- %% trace file, but the last which is empty waiting for its first
- %% trace message. The number of iterations is chosen so that
- %% one trace file has been wasted, and therefore the first pair
- %% of trace messages.
- ?line lists:foreach(
- fun(Cnt) ->
- receive after 1000 -> ok end,
- ?MODULE:tracee1(Cnt),
- ?MODULE:tracee2(Cnt),
- receive after 1100 -> ok end
- end,
- lists:seq(1, 4)),
- ?line stop(),
- ?line Files = filelib:wildcard(FName ++ "*" ++ ".trace"),
- ?line io:format("~p~n", [Files]),
- ?line dbg:trace_client(file, WrapFilesSpec, {fun myhandler/2, self()}),
- ?line S = self(),
- ?line [{trace, S, call, {?MODULE, tracee1, [2]}, S},
- {trace, S, call, {?MODULE, tracee2, [2]}, hej},
- {trace, S, call, {?MODULE, tracee1, [3]}, S},
- {trace, S, call, {?MODULE, tracee2, [3]}, hej},
- {trace, S, call, {?MODULE, tracee1, [4]}, S},
- {trace, S, call, {?MODULE, tracee2, [4]}, hej},
- end_of_trace] = flush(),
- ?line lists:map(fun(F) -> file:delete(F) end, Files)
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ {ok, X} = dbg:tp(?MODULE, tracee1,[{'_',[],[{message, {self}}]}]),
+ {value, {saved, _Saved1}} = lists:keysearch(saved, 1, X),
+ {ok, Y} = dbg:tp(?MODULE, tracee2, [{'_',[],[{message, hej}]}]),
+ {value, {saved, _Saved2}} = lists:keysearch(saved, 1, Y),
+ %% The delays in the iterations places two trace messages in each
+ %% trace file, but the last which is empty waiting for its first
+ %% trace message. The number of iterations is chosen so that
+ %% one trace file has been wasted, and therefore the first pair
+ %% of trace messages.
+ lists:foreach(
+ fun(Cnt) ->
+ receive after 1000 -> ok end,
+ ?MODULE:tracee1(Cnt),
+ ?MODULE:tracee2(Cnt),
+ receive after 1100 -> ok end
+ end,
+ lists:seq(1, 4)),
+ stop(),
+ Files = filelib:wildcard(FName ++ "*" ++ ".trace"),
+ io:format("~p~n", [Files]),
+ dbg:trace_client(file, WrapFilesSpec, {fun myhandler/2, self()}),
+ S = self(),
+ [{trace, S, call, {?MODULE, tracee1, [2]}, S},
+ {trace, S, call, {?MODULE, tracee2, [2]}, hej},
+ {trace, S, call, {?MODULE, tracee1, [3]}, S},
+ {trace, S, call, {?MODULE, tracee2, [3]}, hej},
+ {trace, S, call, {?MODULE, tracee1, [4]}, S},
+ {trace, S, call, {?MODULE, tracee2, [4]}, hej},
+ end_of_trace] = flush(),
+ lists:map(fun(F) -> file:delete(F) end, Files)
after
- ?line stop()
+ stop()
end,
ok.
-with_seq_trace(suite) ->
- [];
-with_seq_trace(doc) ->
- ["Test ordinary tracing combined with seq_trace"];
+%% Test ordinary tracing combined with seq_trace
with_seq_trace(Config) when is_list(Config) ->
try
- ?line {ok, Server} = start(),
- ?line {ok, Tracer} = dbg:get_tracer(),
- ?line {ok, X} = dbg:tp(dbg, get_tracer, [{[],[],
- [{set_seq_token, send, true}]}]),
- ?line {value, {saved, _}} = lists:keysearch(saved, 1, X),
- ?line {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
- ?line seq_trace:set_system_tracer(Tracer),
- ?line dbg:get_tracer(),
- receive
- after 1 ->
- ok
- end,
- ?line S = self(),
- ?line ThisNode = node(),
- ?line [{trace,S,call,{dbg,get_tracer,[]}},
- {seq_trace,0,{send,_,S,Server,{S,{get_tracer,ThisNode}}}},
- {seq_trace,0,{send,_,Server,S,{dbg,{ok,Tracer}}}}] =
- flush()
+ {ok, Server} = start(),
+ {ok, Tracer} = dbg:get_tracer(),
+ {ok, X} = dbg:tp(dbg, get_tracer, [{[],[],
+ [{set_seq_token, send, true}]}]),
+ {value, {saved, _}} = lists:keysearch(saved, 1, X),
+ {ok, [{matched, _node, 1}]} = dbg:p(self(),call),
+ seq_trace:set_system_tracer(Tracer),
+ dbg:get_tracer(),
+ receive
+ after 1 ->
+ ok
+ end,
+ S = self(),
+ ThisNode = node(),
+ [{trace,S,call,{dbg,get_tracer,[]}},
+ {seq_trace,0,{send,_,S,Server,{S,{get_tracer,ThisNode}}}},
+ {seq_trace,0,{send,_,Server,S,{dbg,{ok,Tracer}}}}] =
+ flush()
after
- ?line stop()
+ stop()
end,
ok.
-dead_suspend(suite) ->
- [];
-dead_suspend(doc) ->
- ["Test that trace messages concerning a now dead process does "
- "not crash dbg."];
+%% Test that trace messages concerning a now dead process does not crash dbg.
dead_suspend(Config) when is_list(Config) ->
- ?line start(),
+ start(),
try
- survived = run_dead_suspend()
+ survived = run_dead_suspend()
after
- ?line stop()
+ stop()
end.
run_dead_suspend() ->
@@ -733,15 +907,119 @@ run_dead_suspend() ->
spawn(?MODULE, dummy, []),
receive after 1000 -> ok end,
case whereis(dbg) of
- undefined ->
- died;
- _ ->
- survived
+ undefined ->
+ died;
+ _ ->
+ survived
end.
dummy() ->
ok.
+%% Test that a tracer process does not ignore an exit signal message when it has
+%% received (but not handled) trace messages
+tracer_exit_on_stop(_) ->
+ %% Tracer blocks waiting for fun to complete so that the trace message and
+ %% the exit signal message from the dbg process are in its message queue.
+ Fun = fun() ->
+ ?MODULE:dummy(),
+ Ref = erlang:trace_delivered(self()),
+ receive {trace_delivered, _, Ref} -> stop() end
+ end,
+ {ok, _} = dbg:tracer(process, {fun spawn_once_handler/2, {self(), Fun}}),
+ {ok, Tracer} = dbg:get_tracer(),
+ MRef = monitor(process, Tracer),
+ {ok, _} = dbg:p(self(), [call]),
+ {ok, _} = dbg:p(new, [call]),
+ {ok, _} = dbg:tp(?MODULE, dummy, []),
+ ?MODULE:dummy(),
+ receive {'DOWN', MRef, _, _, normal} -> ok end,
+ [{trace,_,call,{?MODULE, dummy,[]}},
+ {trace,_,call,{?MODULE, dummy,[]}}] = flush(),
+ ok.
+
+spawn_once_handler(Event, {Pid, done} = State) ->
+ Pid ! Event,
+ State;
+spawn_once_handler(Event, {Pid, Fun}) ->
+ {_, Ref} = spawn_monitor(Fun),
+ receive
+ {'DOWN', Ref, _, _, _} ->
+ Pid ! Event,
+ {Pid, done}
+ end.
+
+%% Test that erl_tracer modules work correctly
+erl_tracer(Config) ->
+ stop(),
+
+ ok = load_nif(Config),
+
+ Self = self(),
+ {ok, _} = dbg:tracer(module, {?MODULE, Self}),
+ {ok, {?MODULE, Self}} = dbg:get_tracer(),
+ {ok, _} = dbg:p(self(), [c, timestamp]),
+ {ok, _} = dbg:tp(?MODULE, dummy, []),
+ ok = ?MODULE:dummy(),
+ [{Self, call, Self, Self, {?MODULE, dummy, []}, #{}}] = flush(),
+ ok.
+
+%% Test that distributed erl_tracer modules work
+distributed_erl_tracer(Config) ->
+ stop(),
+
+ S = self(),
+
+ ok = load_nif(Config),
+
+ LNode = node(),
+ RNode = start_slave(),
+ true = rpc:call(RNode, code, add_patha, [filename:join(proplists:get_value(data_dir, Config), "..")]),
+ ok = rpc:call(RNode, ?MODULE, load_nif, [Config]),
+
+ NifProxy = fun() ->
+ register(nif_proxy, self()),
+ receive M -> S ! M end
+ end,
+
+ LNifProxy = spawn_link(LNode, NifProxy),
+ RNifProxy = spawn_link(RNode, NifProxy),
+
+ TracerFun = fun() -> {?MODULE, whereis(nif_proxy)} end,
+
+ {ok, _} = dbg:tracer(LNode, module, TracerFun),
+ {ok, _} = dbg:tracer(RNode, module, TracerFun),
+
+ {ok, [{matched, _, _}, {matched, _, _}]} = dbg:p(all,c),
+ {ok, [_, _]} = dbg:tp(?MODULE, dummy, []),
+
+ {ok, {?MODULE, LNifProxy}} = dbg:get_tracer(LNode),
+ {ok, {?MODULE, RNifProxy}} = dbg:get_tracer(RNode),
+
+ LCall = spawn_link(LNode, fun() -> ?MODULE:dummy() end),
+ [{LCall, call, LNifProxy, LCall, {?MODULE, dummy, []}, #{}}] = flush(),
+
+ RCall = spawn_link(RNode, fun() -> ?MODULE:dummy() end),
+ [{RCall, call, RNifProxy, RCall, {?MODULE, dummy, []}, #{}}] = flush(),
+
+
+ ok.
+
+load_nif(Config) ->
+ SoFile = atom_to_list(?MODULE),
+ DataDir = proplists:get_value(data_dir, Config),
+ case erlang:load_nif(filename:join(DataDir, SoFile) , 0) of
+ {error, {reload, _}} ->
+ ok;
+ ok ->
+ ok
+ end.
+
+enabled(_, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace(_, _, _, _, _) ->
+ erlang:nif_error(nif_not_loaded).
%%
%% Support functions
@@ -761,38 +1039,38 @@ wait_node(_,0) ->
no;
wait_node(Node, N) ->
case net_adm:ping(Node) of
- pong ->
- ok;
- pang ->
- receive
- after 1000 ->
- ok
- end,
- wait_node(Node, N - 1)
+ pong ->
+ ok;
+ pang ->
+ receive
+ after 1000 ->
+ ok
+ end,
+ wait_node(Node, N - 1)
end.
myhandler(Message, {wait_for_go,Pid}) ->
receive
- {go,Pid} ->
- myhandler(Message, Pid)
+ {go,Pid} ->
+ myhandler(Message, Pid)
end;
myhandler(Message, Relay) ->
Relay ! Message,
case Message of
- end_of_trace ->
- ok;
- _ ->
- Relay
+ end_of_trace ->
+ ok;
+ _ ->
+ Relay
end.
flush() ->
flush([]).
flush(Acc) ->
receive
- X ->
- flush(Acc ++ [X])
+ X ->
+ flush(Acc ++ [X])
after 1000 ->
- Acc
+ Acc
end.
start() ->
@@ -806,88 +1084,92 @@ stop() ->
schedstat_handler(TraceMsg, {Parent, Tag, Data} = State) ->
case TraceMsg of
- {trace_ts, Pid, in, _, Ts} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, Acc}} ->
- [{Pid, Acc, Ts} | lists:keydelete(Pid, 1, Data)];
- false ->
- [{Pid, {0, 0, 0}, Ts} | Data];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, Pid, out, _, {A3, B3, C3}} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
- [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
- lists:keydelete(Pid, 1, Data)];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, Pid, exit, normal, {A3, B3, C3}} ->
- NewData =
- case lists:keysearch(Pid, 1, Data) of
- {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
- [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
- lists:keydelete(Pid, 1, Data)];
- {value, {Pid, _Acc}} ->
- Data;
- false ->
- [{Pid, {0, 0, 0}} | Data];
- Other ->
- exit(Parent, {?MODULE, ?LINE, Other}),
- erlang:display({?MODULE, ?LINE, Other}),
- Data
- end,
- {Parent, Tag, NewData};
- {trace_ts, _Pid, send, _Msg, _OtherPid, _Ts} ->
- State;
- end_of_trace ->
- Parent ! {Tag, Data},
- State
+ {trace_ts, Pid, in, _, Ts} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, Acc}} ->
+ [{Pid, Acc, Ts} | lists:keydelete(Pid, 1, Data)];
+ false ->
+ [{Pid, {0, 0, 0}, Ts} | Data];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts, Pid, out, _, {A3, B3, C3}} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
+ [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
+ lists:keydelete(Pid, 1, Data)];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts,_Pid,spawned,_OtherPid,_,_Ts} ->
+ State;
+ {trace_ts,_Pid,getting_linked,_OtherPid,_Ts} ->
+ State;
+ {trace_ts, Pid, exit, normal, {A3, B3, C3}} ->
+ NewData =
+ case lists:keysearch(Pid, 1, Data) of
+ {value, {Pid, {A1, B1, C1}, {A2, B2, C2}}} ->
+ [{Pid, {A3-A2+A1, B3-B2+B1, C3-C2+C1}} |
+ lists:keydelete(Pid, 1, Data)];
+ {value, {Pid, _Acc}} ->
+ Data;
+ false ->
+ [{Pid, {0, 0, 0}} | Data];
+ Other ->
+ exit(Parent, {?MODULE, ?LINE, Other}),
+ erlang:display({?MODULE, ?LINE, Other}),
+ Data
+ end,
+ {Parent, Tag, NewData};
+ {trace_ts, _Pid, send, _Msg, _OtherPid, _Ts} ->
+ State;
+ end_of_trace ->
+ Parent ! {Tag, Data},
+ State
end.
pass_token(Token, Next, Loops) ->
receive
- {Token, 1} = Msg ->
- sendloop(Loops),
- Next ! Msg;
- {Token, _Cnt} = Msg->
- sendloop(Loops),
- Next ! Msg,
- pass_token(Token, Next, Loops)
+ {Token, 1} = Msg ->
+ sendloop(Loops),
+ Next ! Msg;
+ {Token, _Cnt} = Msg->
+ sendloop(Loops),
+ Next ! Msg,
+ pass_token(Token, Next, Loops)
end.
pass_token(Token, Final, Cnt, Loops) ->
receive
- {Token, start, Next} ->
- sendloop(Loops),
- Msg = {Token, Cnt},
- Next ! Msg,
- pass_token(Token, Final, Next, Cnt, Loops)
+ {Token, start, Next} ->
+ sendloop(Loops),
+ Msg = {Token, Cnt},
+ Next ! Msg,
+ pass_token(Token, Final, Next, Cnt, Loops)
end.
pass_token(Token, Final, Next, Cnt, Loops) ->
receive
- {Token, 1} ->
- sendloop(Loops),
- Msg = {Token, done},
- Final ! Msg;
- {Token, Cnt} ->
- sendloop(Loops),
- NextCnt = Cnt-1,
- Msg = {Token, NextCnt},
- Next ! Msg,
- pass_token(Token, Final, Next, NextCnt, Loops)
+ {Token, 1} ->
+ sendloop(Loops),
+ Msg = {Token, done},
+ Final ! Msg;
+ {Token, Cnt} ->
+ sendloop(Loops),
+ NextCnt = Cnt-1,
+ Msg = {Token, NextCnt},
+ Next ! Msg,
+ pass_token(Token, Final, Next, NextCnt, Loops)
end.
sendloop(Loops) ->
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src b/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..f3d63bd4d1
--- /dev/null
+++ b/lib/runtime_tools/test/dbg_SUITE_data/Makefile.src
@@ -0,0 +1,8 @@
+
+NIF_LIBS = dbg_SUITE@dll@
+
+all: $(NIF_LIBS)
+
+@SHLIB_RULES@
+
+$(NIF_LIBS): dbg_SUITE.c
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
new file mode 100644
index 0000000000..ecdee7e3a2
--- /dev/null
+++ b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
@@ -0,0 +1,113 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 2009-2014. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * %CopyrightEnd%
+ */
+
+#include "erl_nif.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <limits.h>
+
+/* NIF interface declarations */
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info);
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info);
+static void unload(ErlNifEnv* env, void* priv_data);
+
+/* The NIFs: */
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+
+static ErlNifFunc nif_funcs[] = {
+ {"enabled", 3, enabled},
+ {"trace", 5, trace}
+};
+
+ERL_NIF_INIT(dbg_SUITE, nif_funcs, load, NULL, upgrade, unload)
+
+static ERL_NIF_TERM atom_trace;
+static ERL_NIF_TERM atom_ok;
+
+#define ASSERT(expr) assert(expr)
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+
+ atom_trace = enif_make_atom(env, "trace");
+ atom_ok = enif_make_atom(env, "ok");
+
+ *priv_data = NULL;
+
+ return 0;
+}
+
+static void unload(ErlNifEnv* env, void* priv_data)
+{
+
+}
+
+static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data,
+ ERL_NIF_TERM load_info)
+{
+ if (*old_priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (*priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (load(env, priv_data, load_info)) {
+ return -1;
+ }
+ return 0;
+}
+
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int state_arity;
+ const ERL_NIF_TERM *state_tuple;
+ ERL_NIF_TERM value;
+ ASSERT(argc == 3);
+
+
+ return atom_trace;
+}
+
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int state_arity;
+ ErlNifPid self, to;
+ ERL_NIF_TERM *tuple, msg;
+ ASSERT(argc == 5);
+
+ tuple = enif_alloc(sizeof(ERL_NIF_TERM)*(argc+1));
+ memcpy(tuple+1,argv,sizeof(ERL_NIF_TERM)*argc);
+
+ if (enif_self(env, &self)) {
+ tuple[0] = enif_make_pid(env, &self);
+ } else {
+ tuple[0] = enif_make_atom(env, "undefined");
+ }
+
+ msg = enif_make_tuple_from_array(env, tuple, argc + 1);
+ enif_get_local_pid(env, argv[1], &to);
+ enif_send(env, &to, NULL, msg);
+ enif_free(tuple);
+
+ return atom_ok;
+}
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl b/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
index 2edbf6f99a..68ece5936e 100644
--- a/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
+++ b/lib/runtime_tools/test/dbg_SUITE_data/dbg_test.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl b/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
index 85faf620aa..d91fb41440 100644
--- a/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
+++ b/lib/runtime_tools/test/dbg_SUITE_data/exref_td.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
diff --git a/lib/runtime_tools/test/dyntrace_SUITE.erl b/lib/runtime_tools/test/dyntrace_SUITE.erl
index 0e4f369ed0..7be2f49a8b 100644
--- a/lib/runtime_tools/test/dyntrace_SUITE.erl
+++ b/lib/runtime_tools/test/dyntrace_SUITE.erl
@@ -1,44 +1,33 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
-module(dyntrace_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1]).
%% Test cases
-export([smoke/1,process/1]).
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
case erlang:system_info(dynamic_trace) of
@@ -47,7 +36,9 @@ all() ->
dtrace ->
[{group,smoke}];
systemtap ->
- {skip,"SystemTap tests currently not supported"}
+ {skip,"SystemTap tests currently not supported"};
+ lttng ->
+ {skip,"LTTng tests currently not supported"}
end.
groups() ->
@@ -70,14 +61,8 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
smoke(Config) ->
- Emu = ?t:lookup_config(emu_name, Config),
+ Emu = test_server:lookup_config(emu_name, Config),
BinEmu = list_to_binary(Emu),
case erlang:system_info(dynamic_trace) of
dtrace ->
@@ -104,8 +89,7 @@ process(_Config) ->
{probe,"process-hibernate"},
{action,[{printf,["hibernate %s %s\n",{arg,0},{arg,1}]}]},
{probe,"process-exit"},
- {action,[{printf,["exit %s %s\n",{arg,0},{arg,1}]}]}
- ],
+ {action,[{printf,["exit %s %s\n",{arg,0},{arg,1}]}]}],
F = fun() ->
{Pid,Ref} = spawn_monitor(fun my_process/0),
Pid ! hibernate,
diff --git a/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
new file mode 100644
index 0000000000..a98ac6e99c
--- /dev/null
+++ b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
@@ -0,0 +1,383 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2012-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(dyntrace_lttng_SUITE).
+-include_lib("common_test/include/ct.hrl").
+
+-export([all/0, suite/0]).
+-export([init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
+
+%% Test cases
+-export([t_lttng_list/1,
+ t_procs/1,
+ t_ports/1,
+ t_running_process/1,
+ t_running_port/1,
+ t_call/1,
+ t_call_return_to/1,
+ t_call_silent/1,
+ t_send/1,
+ t_receive/1,
+ t_garbage_collection/1,
+ t_all/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
+
+all() ->
+ [t_lttng_list,
+ t_procs,
+ t_ports,
+ t_running_process,
+ t_running_port,
+ t_call,
+ t_call_return_to,
+ t_call_silent,
+ t_send,
+ t_receive,
+ t_garbage_collection,
+ t_all].
+
+
+init_per_suite(Config) ->
+ case erlang:system_info(dynamic_trace) of
+ lttng ->
+ ensure_lttng_stopped("--all"),
+ Config;
+ _ ->
+ {skip, "No LTTng configured on system."}
+ end.
+
+end_per_suite(_Config) ->
+ ensure_lttng_stopped("--all"),
+ ok.
+
+init_per_testcase(Case, Config) ->
+ %% ensure loaded
+ _ = dyntrace:module_info(),
+ Name = atom_to_list(Case),
+ ok = ensure_lttng_started(Name, Config),
+ [{session, Name}|Config].
+
+end_per_testcase(Case, _Config) ->
+ Name = atom_to_list(Case),
+ ok = ensure_lttng_stopped(Name),
+ ok.
+
+%% tracepoints
+%%
+%% org_erlang_dyntrace:gc_major_end
+%% org_erlang_dyntrace:gc_major_start
+%% org_erlang_dyntrace:gc_minor_end
+%% org_erlang_dyntrace:gc_minor_start
+%% org_erlang_dyntrace:message_receive
+%% org_erlang_dyntrace:message_send
+%% -org_erlang_dyntrace:message_queued
+%% org_erlang_dyntrace:function_exception
+%% org_erlang_dyntrace:function_return
+%% org_erlang_dyntrace:function_call
+%% org_erlang_dyntrace:port_link
+%% org_erlang_dyntrace:port_exit
+%% org_erlang_dyntrace:port_open
+%% org_erlang_dyntrace:port_scheduled
+%% org_erlang_dyntrace:process_scheduled
+%% org_erlang_dyntrace:process_register
+%% org_erlang_dyntrace:process_exit
+%% org_erlang_dyntrace:process_link
+%% org_erlang_dyntrace:process_spawn
+%%
+%% Testcases
+%%
+
+t_lttng_list(_Config) ->
+ {ok, _} = cmd("lttng list -u"),
+ ok.
+
+t_procs(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:process_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},procs]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(1000),
+
+ _ = erlang:trace(all, false, [procs]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
+ ok.
+
+t_ports(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:port_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},ports]),
+
+ _ = os:cmd("ls"),
+
+ _ = erlang:trace(all, false, [{tracer, dyntrace, []},ports]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
+ ok.
+
+t_running_process(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:process_scheduled", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},running]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(1000),
+
+ _ = erlang:trace(all, false, [running]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
+ ok.
+
+t_running_port(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:port_scheduled", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},running_ports]),
+
+ _ = os:cmd("ls"),
+ _ = os:cmd("ls"),
+
+ _ = erlang:trace(all, false, [running_ports]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
+ ok.
+
+
+t_call(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
+
+ DontLink = spawn(fun() -> foo_clause_exception(nope) end),
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+
+ timer:sleep(10),
+ undefined = erlang:process_info(DontLink),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
+ ok.
+
+t_send(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:message_send", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},send]),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ _ = os:cmd("ls"),
+ timer:sleep(10),
+
+ _ = erlang:trace(all, false, [send]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
+ ok.
+
+t_call_return_to(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, return_to]),
+ _ = erlang:trace_pattern({lists, '_', '_'}, true, [local]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, true, [local]),
+
+ Pid = spawn_link(fun() -> gcfier(10) end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(10),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace_pattern({lists, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call,return_to]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ ok.
+
+t_call_silent(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, silent]),
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
+
+ DontLink = spawn(fun() -> foo_clause_exception(nope) end),
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+
+ timer:sleep(10),
+ undefined = erlang:process_info(DontLink),
+
+ _ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
+ _ = erlang:trace(all, false, [call]),
+ Res = lttng_stop_and_view(Config),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
+ ok.
+
+
+t_receive(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:message_receive", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},'receive']),
+ timer:sleep(20),
+
+ Pid1 = spawn_link(fun() -> waiter() end),
+ Pid1 ! {self(), ok},
+ ok = receive {Pid1,ok} -> ok end,
+
+ Pid2 = spawn_link(fun() -> waiter() end),
+ Pid2 ! {self(), ok},
+ ok = receive {Pid2,ok} -> ok end,
+
+ timer:sleep(10),
+ _ = erlang:trace(all, false, ['receive']),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
+ ok.
+
+t_garbage_collection(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:gc_*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},garbage_collection]),
+
+ Pid = spawn_link(fun() -> gcfier() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(10),
+ _ = erlang:trace(all, false, [garbage_collection]),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
+ ok.
+
+t_all(Config) when is_list(Config) ->
+ ok = lttng_start_event("org_erlang_dyntrace:*", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},all]),
+
+ Pid1 = spawn_link(fun() -> waiter() end),
+ Pid1 ! {self(), ok},
+ ok = receive {Pid1,ok} -> ok end,
+
+ Pid2 = spawn_link(fun() -> gcfier() end),
+ Pid2 ! {self(), ok},
+ ok = receive {Pid2,ok} -> ok end,
+ _ = os:cmd("ls"),
+ _ = os:cmd("ls"),
+ timer:sleep(10),
+
+ _ = erlang:trace(all, false, [all]),
+ Res = lttng_stop_and_view(Config),
+
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
+ ok.
+
+
+%% aux
+
+gcfier() ->
+ gcfier(10000).
+gcfier(N) ->
+ receive
+ {Pid, ok} ->
+ _ = lists:reverse(lists:seq(1,N)),
+ true = erlang:garbage_collect(),
+ Pid ! {self(), ok}
+ end.
+
+
+waiter() ->
+ true = register(?MODULE, self()),
+ receive
+ {Pid, ok} ->
+ Child = spawn(fun() -> receive ok -> ok end end),
+ link(Child),
+ unlink(Child),
+ _ = lists:seq(1,1000),
+ Child ! ok,
+ true = unregister(?MODULE),
+ Pid ! {self(),ok}
+ end.
+
+foo_clause_exception({1,2}) -> badness.
+
+%% lttng
+lttng_stop_and_view(Config) ->
+ Path = proplists:get_value(priv_dir, Config),
+ Name = proplists:get_value(session, Config),
+ {ok,_} = cmd("lttng stop " ++ Name),
+ {ok,Res} = cmd("lttng view " ++ Name ++ " --trace-path=" ++ Path),
+ Res.
+
+check_tracepoint(TP, Data) ->
+ case re:run(Data, TP, [global]) of
+ {match, _} -> ok;
+ _ -> notfound
+ end.
+
+lttng_start_event(Event, Config) ->
+ Name = proplists:get_value(session, Config),
+ {ok, _} = cmd("lttng enable-event -u " ++ Event ++ " --session=" ++ Name),
+ {ok, _} = cmd("lttng start " ++ Name),
+ ok.
+
+ensure_lttng_started(Name, Config) ->
+ Out = case proplists:get_value(priv_dir, Config) of
+ undefined -> [];
+ Path -> "--output="++Path++" "
+ end,
+ {ok,_} = cmd("lttng create " ++ Out ++ Name),
+ ok.
+
+ensure_lttng_stopped(Name) ->
+ {ok,_} = cmd("lttng stop"),
+ {ok,_} = cmd("lttng destroy " ++ Name),
+ ok.
+
+cmd(Cmd) ->
+ io:format("<< ~ts~n", [Cmd]),
+ Res = os:cmd(Cmd),
+ io:format(">> ~ts~n", [Res]),
+ {ok,Res}.
diff --git a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
index 8ea04e1767..6ae51d9a26 100644
--- a/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
+++ b/lib/runtime_tools/test/erts_alloc_config_SUITE.erl
@@ -1,18 +1,19 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
@@ -21,12 +22,10 @@
%-define(line_trace, 1).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%-compile(export_all).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]).
%% Testcases
-export([basic/1]).
@@ -34,88 +33,63 @@
%% internal export
-export([make_basic_config/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(2)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[basic].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
init_per_testcase(Case, Config) when is_list(Config) ->
[{testcase, Case},
- {watchdog, ?t:timetrap(?DEFAULT_TIMEOUT)},
{erl_flags_env, save_env()} | Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- ?t:timetrap_cancel(?config(watchdog, Config)),
- restore_env(?config(erl_flags_env, Config)),
+ restore_env(proplists:get_value(erl_flags_env, Config)),
ok.
%%%
%%% The test cases ------------------------------------------------------------
%%%
-basic(doc) -> [];
-basic(suite) -> [];
basic(Config) when is_list(Config) ->
- ?line ErtsAllocConfig = privfile("generated", Config),
+ ErtsAllocConfig = privfile("generated", Config),
SbctMod = " +MBsbct 1024 +MHsbct 4096",
%% Make sure we have enabled allocators
- ZFlgs = case os:getenv("ERL_ZFLAGS") of
- FlgString when is_list(FlgString) ->
- FlgString;
- _ ->
- ""
- end ++ " +Mea max +Mea config",
+ ZFlgs = os:getenv("ERL_ZFLAGS", "") ++ " +Mea max +Mea config",
- ?line os:putenv("ERL_ZFLAGS", ZFlgs ++ SbctMod),
+ os:putenv("ERL_ZFLAGS", ZFlgs ++ SbctMod),
- ?line {ok, Node1} = start_node(Config),
- ?line ok = rpc:call(Node1, ?MODULE, make_basic_config, [ErtsAllocConfig]),
- ?line stop_node(Node1),
+ {ok, Node1} = start_node(Config),
+ ok = rpc:call(Node1, ?MODULE, make_basic_config, [ErtsAllocConfig]),
+ stop_node(Node1),
- ?line display_file(ErtsAllocConfig),
+ display_file(ErtsAllocConfig),
- ?line ManualConfig = privfile("manual", Config),
- ?line {ok, IOD} = file:open(ManualConfig, [write]),
- ?line io:format(IOD, "~s", ["+MBsbct 2048"]),
- ?line file:close(IOD),
- ?line display_file(ManualConfig),
+ ManualConfig = privfile("manual", Config),
+ {ok, IOD} = file:open(ManualConfig, [write]),
+ io:format(IOD, "~s", ["+MBsbct 2048"]),
+ file:close(IOD),
+ display_file(ManualConfig),
- ?line os:putenv("ERL_ZFLAGS", ZFlgs),
+ os:putenv("ERL_ZFLAGS", ZFlgs),
- ?line {ok, Node2} = start_node(Config,
- "-args_file " ++ ErtsAllocConfig
- ++ " -args_file " ++ ManualConfig),
+ {ok, Node2} = start_node(Config,
+ "-args_file " ++ ErtsAllocConfig
+ ++ " -args_file " ++ ManualConfig),
- ?line {_, _, _, Cfg} = rpc:call(Node2, erlang, system_info, [allocator]),
+ {_, _, _, Cfg} = rpc:call(Node2, erlang, system_info, [allocator]),
- ?line stop_node(Node2),
+ stop_node(Node2),
- ?line {value,{binary_alloc, BCfg}} = lists:keysearch(binary_alloc, 1, Cfg),
- ?line {value,{sbct, 2097152}} = lists:keysearch(sbct, 1, BCfg),
- ?line {value,{eheap_alloc, HCfg}} = lists:keysearch(eheap_alloc, 1, Cfg),
- ?line {value,{sbct, 4194304}} = lists:keysearch(sbct, 1, HCfg),
+ {value,{binary_alloc, BCfg}} = lists:keysearch(binary_alloc, 1, Cfg),
+ {value,{sbct, 2097152}} = lists:keysearch(sbct, 1, BCfg),
+ {value,{eheap_alloc, HCfg}} = lists:keysearch(eheap_alloc, 1, Cfg),
+ {value,{sbct, 4194304}} = lists:keysearch(sbct, 1, HCfg),
- ?line ok.
+ ok.
make_basic_config(ErtsAllocConfig) ->
%% Save some different scenarios
@@ -123,35 +97,35 @@ make_basic_config(ErtsAllocConfig) ->
SSBegun = make_ref(),
SSDone = make_ref(),
SSFun = fun (F) ->
- receive
- SSDone ->
- ok = erts_alloc_config:save_scenario(),
- Tester ! SSDone
- after 500 ->
- ok = erts_alloc_config:save_scenario(),
- F(F)
- end
- end,
+ receive
+ SSDone ->
+ ok = erts_alloc_config:save_scenario(),
+ Tester ! SSDone
+ after 500 ->
+ ok = erts_alloc_config:save_scenario(),
+ F(F)
+ end
+ end,
SS = spawn_link(fun () ->
- ok = erts_alloc_config:save_scenario(),
- Tester ! SSBegun,
- SSFun(SSFun)
- end),
+ ok = erts_alloc_config:save_scenario(),
+ Tester ! SSBegun,
+ SSFun(SSFun)
+ end),
receive SSBegun -> ok end,
Ref = make_ref(),
Tab = ets:new(?MODULE, [bag, public]),
Ps = lists:map(
- fun (_) ->
- spawn_link(
- fun () ->
- ets:insert(Tab,
- {self(),
- lists:seq(1, 1000)}),
- receive after 1000 -> ok end,
- Tester ! {Ref, self()}
- end)
- end,
- lists:seq(1, 10000)),
+ fun (_) ->
+ spawn_link(
+ fun () ->
+ ets:insert(Tab,
+ {self(),
+ lists:seq(1, 1000)}),
+ receive after 1000 -> ok end,
+ Tester ! {Ref, self()}
+ end)
+ end,
+ lists:seq(1, 10000)),
lists:foreach(fun (P) -> receive {Ref, P} -> ok end end, Ps),
ets:delete(Tab),
SS ! SSDone,
@@ -166,35 +140,35 @@ make_basic_config(ErtsAllocConfig) ->
%%
display_file(FileName) ->
- ?t:format("filename: ~s~n", [FileName]),
+ io:format("filename: ~s~n", [FileName]),
{ok, Bin} = file:read_file(FileName),
io:format("~s", [binary_to_list(Bin)]),
- ?t:format("eof: ~s~n", [FileName]),
+ io:format("eof: ~s~n", [FileName]),
ok.
mk_name(Config) when is_list(Config) ->
{A, B, C} = now(),
list_to_atom(atom_to_list(?MODULE)
- ++ "-" ++ atom_to_list(?config(testcase, Config))
- ++ "-" ++ integer_to_list(A)
- ++ "-" ++ integer_to_list(B)
- ++ "-" ++ integer_to_list(C)).
+ ++ "-" ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-" ++ integer_to_list(A)
+ ++ "-" ++ integer_to_list(B)
+ ++ "-" ++ integer_to_list(C)).
start_node(Config) ->
start_node(Config, "").
start_node(Config, Args) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line ?t:start_node(mk_name(Config),
- slave,
- [{args, "-pa " ++ Pa ++ " " ++ Args}]).
+ Pa = filename:dirname(code:which(?MODULE)),
+ test_server:start_node(mk_name(Config),
+ slave,
+ [{args, "-pa " ++ Pa ++ " " ++ Args}]).
stop_node(Node) ->
- ?line true = ?t:stop_node(Node).
+ true = test_server:stop_node(Node).
privfile(Name, Config) ->
- filename:join([?config(priv_dir, Config),
- atom_to_list(?config(testcase, Config)) ++ "." ++ Name]).
+ filename:join([proplists:get_value(priv_dir, Config),
+ atom_to_list(proplists:get_value(testcase, Config)) ++ "." ++ Name]).
save_env() ->
{erl_flags,
@@ -207,15 +181,15 @@ restore_env(EVar, false) when is_list(EVar) ->
restore_env(EVar, "");
restore_env(EVar, "") when is_list(EVar) ->
case os:getenv(EVar) of
- false -> ok;
- "" -> ok;
- " " -> ok;
- _ -> os:putenv(EVar, " ")
+ false -> ok;
+ "" -> ok;
+ " " -> ok;
+ _ -> os:putenv(EVar, " ")
end;
restore_env(EVar, Value) when is_list(EVar), is_list(Value) ->
case os:getenv(EVar) of
- Value -> ok;
- _ -> os:putenv(EVar, Value)
+ Value -> ok;
+ _ -> os:putenv(EVar, Value)
end.
restore_env({erl_flags, AFlgs, Flgs, RFlgs, ZFlgs}) ->
diff --git a/lib/runtime_tools/test/msacc_SUITE.erl b/lib/runtime_tools/test/msacc_SUITE.erl
new file mode 100644
index 0000000000..145a6d07fb
--- /dev/null
+++ b/lib/runtime_tools/test/msacc_SUITE.erl
@@ -0,0 +1,132 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2014-2015. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(msacc_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+%% Test server callbacks
+-export([suite/0, all/0]).
+
+%% Test cases
+-export([
+ %% API-test
+ api_file/1,
+ api_start_stop/1,
+ api_timer/1,
+ api_print/1
+ ]).
+
+%%--------------------------------------------------------------------
+%% COMMON TEST CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+all() ->
+ [
+ api_start_stop,
+ api_file,
+ api_timer,
+ api_print
+ ].
+
+suite() -> [
+ {timetrap,{minutes,1}},
+ {ct_hooks,[ts_install_cth]}
+ ].
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+api_timer(_Config) ->
+
+ %% Run msacc for about 100ms
+ msacc:start(100),
+
+ %% Verify that scheduler 1 executed+slept for about 100ms
+ [Sched1] = [S || S = #{ type := scheduler, id := 1 } <- msacc:stats()],
+
+ #{ counters := Cnt } = Sched1,
+
+ %% Time should be in us
+ Time = maps:fold(fun(_,V,Acc) -> V + Acc end, 0, Cnt),
+
+ if Time < 120000 andalso Time > 80000 -> ok;
+ true -> ct:fail({inaccurate_time, Time, msacc:stats()})
+ end.
+
+%% We just do a basic check that none of the apis crash
+api_start_stop(_Config) ->
+ msacc:start(),
+ timer:sleep(100),
+ msacc:stop(),
+ Runtime = msacc:stats(system_runtime, msacc:stats()),
+ Realtime = msacc:stats(system_realtime, msacc:stats()),
+ true = Runtime < Realtime,
+
+ RuntimeCnt = msacc:stats(runtime, msacc:stats()),
+ RealtimeCnt = msacc:stats(realtime, msacc:stats()),
+ TypeCnt = msacc:stats(type, msacc:stats()),
+
+ %% These should be very similar
+ RuntimeTypeCnt = msacc:stats(type, RuntimeCnt),
+ TypeRuntimeCnt = msacc:stats(runtime, TypeCnt),
+ lists:map(fun({#{ system := T1 },#{ system := T2}}) ->
+ if T1-0.5 < T2 orelse T1+0.5 > T2 -> ok;
+ true -> ct:fail({inaccurate_stats, RuntimeTypeCnt,
+ TypeRuntimeCnt})
+ end
+ end, lists:zip(RuntimeTypeCnt, TypeRuntimeCnt)),
+
+ %% These should be very similar
+ RealtimeTypeCnt = msacc:stats(type, RealtimeCnt),
+ TypeRealtimeCnt = msacc:stats(realtime, TypeCnt),
+ lists:map(fun({#{ system := T1 },#{ system := T2}}) ->
+ if T1-0.5 < T2 orelse T1+0.5 > T2 -> ok;
+ true -> ct:fail({inaccurate_stats, RealtimeTypeCnt,
+ TypeRealtimeCnt})
+ end
+ end,lists:zip(RealtimeTypeCnt, TypeRealtimeCnt)),
+
+ msacc:reset().
+
+api_file(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ File = filename:join(PrivDir, "msacc.stats"),
+ Stats = msacc:stats(),
+ ok = msacc:to_file(File),
+ Stats = msacc:from_file(File),
+
+ PrintFile = filename:join(PrivDir, "msacc.txt"),
+ msacc:print(PrintFile, Stats, #{}).
+
+%% We just check that it is possible to print in a couple of different ways
+api_print(_Config) ->
+ msacc:start(100),
+ io:format("msacc:print(msacc:stats()).~n"),
+ msacc:print(msacc:stats()),
+ io:format("msacc:print(msacc:stats(),#{ system => true }).~n"),
+ msacc:print(msacc:stats(), #{ system => true }),
+ io:format("msacc:print(msacc:stats(runtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(runtime, msacc:stats())),
+ io:format("msacc:print(msacc:stats(type,msacc:stats())).~n"),
+ msacc:print(msacc:stats(type, msacc:stats())),
+ io:format("msacc:print(msacc:stats(realtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(realtime, msacc:stats())),
+ io:format("msacc:stats(type,msacc:stats(runtime,msacc:stats())).~n"),
+ msacc:print(msacc:stats(type, msacc:stats(runtime, msacc:stats()))).
diff --git a/lib/runtime_tools/test/runtime_tools_SUITE.erl b/lib/runtime_tools/test/runtime_tools_SUITE.erl
index 62497ab527..6877e1a379 100644
--- a/lib/runtime_tools/test/runtime_tools_SUITE.erl
+++ b/lib/runtime_tools/test/runtime_tools_SUITE.erl
@@ -1,70 +1,48 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
%%
%% %CopyrightEnd%
%%
-module(runtime_tools_SUITE).
--include_lib("test_server/include/test_server.hrl").
+-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
%% Test cases
--export([app_file/1, start_stop_app/1]).
-
-%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
-
-init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?default_timeout),
- [{watchdog, Dog} | Config].
+-export([app_file/1, appup_file/1, start_stop_app/1]).
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[app_file,
+ appup_file,
start_stop_app].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
app_file(_Config) ->
- ?line ok = ?t:app_test(runtime_tools),
+ ok = test_server:app_test(runtime_tools),
ok.
+appup_file(_Config) ->
+ ok = test_server:appup_test(runtime_tools).
+
start_stop_app(_Config) ->
ok = application:start(runtime_tools),
Sup = whereis(runtime_tools_sup),
diff --git a/lib/runtime_tools/test/system_information_SUITE.erl b/lib/runtime_tools/test/system_information_SUITE.erl
new file mode 100644
index 0000000000..a5a025a1cf
--- /dev/null
+++ b/lib/runtime_tools/test/system_information_SUITE.erl
@@ -0,0 +1,307 @@
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+
+-module(system_information_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+%% Test server callbacks
+-export([suite/0, all/0, groups/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2,
+ init_per_testcase/2, end_per_testcase/2]).
+
+%% Test cases
+-export([
+ %% API-test
+ api_report/1,
+ api_to_file/1,
+ api_from_file/1,
+ sanity_check/1,
+ %% server
+ api_start_stop/1,
+ validate_server_interface/1
+ ]).
+
+%%--------------------------------------------------------------------
+%% COMMON TEST CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
+%% Function: groups() -> [Group]
+%%
+%% Group = {GroupName,Properties,GroupsAndTestCases}
+%% GroupName = atom()
+%% The name of the group.
+%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+%% Group properties that may be combined.
+%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+%% TestCase = atom()
+%% The name of a test case.
+%% Shuffle = shuffle | {shuffle,Seed}
+%% To get cases executed in random order.
+%% Seed = {integer(),integer(),integer()}
+%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+%% repeat_until_any_ok | repeat_until_any_fail
+%% To get execution of cases repeated.
+%% N = integer() | forever
+%%
+%% Description: Returns a list of test case group definitions.
+%%--------------------------------------------------------------------
+groups() ->
+ [].
+
+%%--------------------------------------------------------------------
+%% Function: all() -> GroupsAndTestCases | {skip,Reason}
+%%
+%% GroupsAndTestCases = [{group,GroupName} | TestCase]
+%% GroupName = atom()
+%% Name of a test case group.
+%% TestCase = atom()
+%% Name of a test case.
+%% Reason = term()
+%% The reason for skipping all groups and test cases.
+%%
+%% Description: Returns the list of groups and test cases that
+%% are to be executed.
+%%--------------------------------------------------------------------
+all() -> [
+ api_report,
+ api_to_file,
+ api_from_file,
+ api_start_stop,
+ validate_server_interface,
+ sanity_check
+ ].
+
+
+%%--------------------------------------------------------------------
+%% Function: suite() -> Info
+%%
+%% Info = [tuple()]
+%% List of key/value pairs.
+%%
+%% Description: Returns list of tuples to set default properties
+%% for the suite.
+%%
+%% Note: The suite/0 function is only meant to be used to return
+%% default data values, not perform any other operations.
+%%--------------------------------------------------------------------
+suite() -> [
+ {timetrap,{minutes,1}},
+ {ct_hooks,[ts_install_cth]}
+ ].
+
+%%--------------------------------------------------------------------
+%% Function: init_per_suite(Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the suite.
+%%
+%% Description: Initialization before the suite.
+%%
+%% Note: This function is free to add any key/value pairs to the Config
+%% variable, but should NOT alter/remove any existing entries.
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_suite(Config0) -> void() | {save_config,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%%
+%% Description: Cleanup after the suite.
+%%--------------------------------------------------------------------
+end_per_suite(_Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% Function: init_per_group(GroupName, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% GroupName = atom()
+%% Name of the test case group that is about to run.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding configuration data for the group.
+%% Reason = term()
+%% The reason for skipping all test cases and subgroups in the group.
+%%
+%% Description: Initialization before each test case group.
+%%--------------------------------------------------------------------
+init_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_group(GroupName, Config0) ->
+%% void() | {save_config,Config1}
+%%
+%% GroupName = atom()
+%% Name of the test case group that is finished.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding configuration data for the group.
+%%
+%% Description: Cleanup after each test case group.
+%%--------------------------------------------------------------------
+end_per_group(_GroupName, _Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% Function: init_per_testcase(TestCase, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% TestCase = atom()
+%% Name of the test case that is about to run.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the test case.
+%%
+%% Description: Initialization before each test case.
+%%
+%% Note: This function is free to add any key/value pairs to the Config
+%% variable, but should NOT alter/remove any existing entries.
+%%--------------------------------------------------------------------
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_testcase(TestCase, Config0) ->
+%% void() | {save_config,Config1} | {fail,Reason}
+%%
+%% TestCase = atom()
+%% Name of the test case that is finished.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for failing the test case.
+%%
+%% Description: Cleanup after each test case.
+%%--------------------------------------------------------------------
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Function: TestCase(Config0) ->
+%% ok | exit() | {skip,Reason} | {comment,Comment} |
+%% {save_config,Config1} | {skip_and_save,Reason,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the test case.
+%% Comment = term()
+%% A comment about the test case that will be printed in the html log.
+%%
+%% Description: Test case function. (The name of it must be specified in
+%% the all/0 list or in a test case group for the test case
+%% to be executed).
+%%--------------------------------------------------------------------
+
+
+api_report(_Config) ->
+ Report = system_information:report(),
+ ok = validate_report(Report),
+ ok.
+
+api_to_file(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ Filename = filename:join([DataDir, "system_information_report_1.dat"]),
+ ok = system_information:to_file(Filename),
+ {ok, _} = file:consult(Filename),
+ {save_config, [{report_name, Filename}]}.
+
+api_from_file(Config) ->
+ {api_to_file, Saved} = proplists:get_value(saved_config, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ Fname1 = filename:join([DataDir, "information_test_report.dat"]),
+ Report1 = system_information:from_file(Fname1),
+ ok = validate_report(Report1),
+ Fname2 = proplists:get_value(report_name, Saved),
+ Report2 = system_information:from_file(Fname2),
+ ok = validate_report(Report2),
+ ok.
+
+api_start_stop(_Config) ->
+ {ok, _} = system_information:start(),
+ ok = system_information:stop(),
+ ok.
+
+validate_server_interface(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ Fname1 = filename:join([DataDir, "information_test_report.dat"]),
+ %% load old report
+ ok = system_information:load_report(file, Fname1),
+ ok = validate_loaded_report(),
+ ok = system_information:stop(),
+ %% load local
+ ok = system_information:load_report(),
+ ok = validate_loaded_report(),
+ ok = system_information:stop(),
+ ok.
+
+sanity_check(Config) when is_list(Config) ->
+ ok = system_information:sanity_check().
+
+
+%% aux
+
+validate_loaded_report() ->
+ ok = system_information:applications(),
+ ok = system_information:applications([full]),
+ ok = system_information:environment(),
+ ok = system_information:environment([full]),
+ ok = system_information:application(kernel),
+ ok = system_information:application(kernel,[full]),
+ ok = system_information:module(gen_server),
+ ok = system_information:module(gen_server,[full]),
+ ok = system_information:modules(native),
+ ok.
+
+
+validate_report([]) -> {error, no_entries};
+validate_report(Report) ->
+ ensure_report_keys([
+ init_arguments,
+ code_paths,
+ code,
+ system_info,
+ erts_compile_info,
+ beam_dynamic_libraries,
+ environment_erts,
+ environment,
+ sanity_check
+ ], Report).
+
+ensure_report_keys([], _) -> ok;
+ensure_report_keys([K|Ks], Report) ->
+ case lists:keysearch(K, 1, Report) of
+ false -> {error, key_not_found, K};
+ _ -> ensure_report_keys(Ks, Report)
+ end.
+
diff --git a/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat
new file mode 100644
index 0000000000..bdc510e838
--- /dev/null
+++ b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat
@@ -0,0 +1,9875 @@
+{system_information_version, "1.0"}.
+{system_information, [{init_arguments,
+ [{root,
+ ["/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"]},
+ {progname,["erl"]},
+ {home,["/home/otptest"]}]},
+ {code_paths,
+ [".",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"]},
+ {code,
+ [{code,[{path,"."},{modules,[]}]},
+ {application,
+ {kernel,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"2.16.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin"},
+ {modules,
+ [{application,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"69c3102d717e7258701a536ddae1eb89"}]},
+ {application_controller,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bbfd81a8486ac040562ce0fd40c32aa"}]},
+ {application_master,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8eee82bfd661e8f0d862f3aad5b85ca"}]},
+ {application_starter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d505f3189443053e586fdf270446ce2f"}]},
+ {auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"800c93bf9ba03b6e4951de0d5db28328"}]},
+ {code,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84f37378526c5e82c5d0d967c1ca8f82"}]},
+ {code_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09ce0ef7103f3151553c6badc7e96fc1"}]},
+ {disk_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5ab0573095f258c87f6166af8f8425c"}]},
+ {disk_log_1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"287f2521436a30a0567d54e2596c1034"}]},
+ {disk_log_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c7972e5f3dedce5c87cf8ef88c59bb2"}]},
+ {disk_log_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6012237e70b570585bfb58f60537d9c"}]},
+ {dist_ac,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4dfa17c94d63da8f6b9edb1532a3e537"}]},
+ {dist_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8fa19e7b4bca4b5aac847d138c85c553"}]},
+ {erl_boot_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86ecca01e41b2321c01b7181cb826766"}]},
+ {erl_ddll,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90f1c7a6fd3cf6595d95b9f57abd87ce"}]},
+ {erl_distribution,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16a49a506b48567bd32b2021dac425ff"}]},
+ {erl_epmd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eee4870e061790054c43ff70bbccbe25"}]},
+ {erl_reply,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e0a4f09b0877938b4d79b41122dad38"}]},
+ {error_handler,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1af2b51d167b017b3e1fae0beb408181"}]},
+ {error_logger,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"941136b080021af90dc32f23774b0def"}]},
+ {erts_debug,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a7b675323db5946605344ffccca170"}]},
+ {file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5eccb55276e7162ab5bec77b46562332"}]},
+ {file_io_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"032292fd7d9e2bf08ff23de192710f97"}]},
+ {file_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58bd1e532dee0fccff9e1fba1e429a5e"}]},
+ {gen_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e5e5a8c7708c9a81f26d2a89e3987c"}]},
+ {gen_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4cf58918602a7242ca4060bc1d6b5652"}]},
+ {gen_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"361b9b25604b9053a8a4c98b8df47408"}]},
+ {global,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e553137965978f64ffb9ef274c79e9c2"}]},
+ {global_group,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ce6b230fef9340aeb41205a6ef4b4f3"}]},
+ {global_search,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a82f2701d71d2a1576074dd69414e1b"}]},
+ {group,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6b3164d5d61625f0651c13107459627c"}]},
+ {heart,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b808d9003cf50d73ebf888da50d73e12"}]},
+ {hipe_unified_loader,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"879423975936fcf88729034f7d4a93b6"}]},
+ {inet,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd325ceedcab3ca885eeaf4c982561e0"}]},
+ {inet6_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8b6d95ec571f5e669047b5f40455d21"}]},
+ {inet6_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93a9204ef927b17957c61a18f3ba47e2"}]},
+ {inet6_tcp_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a94acd2c5dc0e625d2c2b4292e9a27a"}]},
+ {inet6_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17a90b344977dd2c657309507c99b516"}]},
+ {inet_config,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"741587fa47d6b66b96ef125b3d5ba61a"}]},
+ {inet_db,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f65160805d30ff194618a5ae4038ae9f"}]},
+ {inet_dns,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f0c31b6cecf31d641bf46840f85ebee"}]},
+ {inet_gethost_native,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09867d1d19f3c30b73fb47a48d0d843a"}]},
+ {inet_hosts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0f48322bd3a1bd0e75f248e39b41f69"}]},
+ {inet_parse,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29aee7378a4d1f814e1fd311d0eaab3a"}]},
+ {inet_res,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1018a662254323cfa45309afb3b3397"}]},
+ {inet_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cbce09a1ffa13cb124d87eaecd25dfbf"}]},
+ {inet_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0da6499cb44db53be6145a5dc3449d93"}]},
+ {inet_tcp_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"797e28cd89efe3a1a9d83244afd0b880"}]},
+ {inet_udp,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70908d7165a2b298a85d9a4c1f8f9fa2"}]},
+ {kernel,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf5c248b778654e664e6d2368ec285df"}]},
+ {kernel_config,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39fbe27956eeb0cca9d7871f7de40a2e"}]},
+ {net,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb8595f084959a2b5e329ab32047dbc4"}]},
+ {net_adm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"628c961d8dbbab4c5b2b180e527530be"}]},
+ {net_kernel,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"049f43826000bfefbbc2376bd21c9919"}]},
+ {os,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"464c6c09afb87824ecf12bfa6065b3dc"}]},
+ {pg2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34858fa3619c1dc17d01536593359ed2"}]},
+ {ram_file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28bf8253c5f8357ab68b4d505e170856"}]},
+ {rpc,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"895e080302ac8a39197dfac0cc53adc6"}]},
+ {seq_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"845af954b395a80e5cf3d0c2ea0a3b99"}]},
+ {standard_error,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0ac4192fd9f73885581481638c1648a"}]},
+ {user,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93ad1841fa2dee776bff76f8989f5021"}]},
+ {user_drv,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"161f1a45735f77129c80bacd778e5632"}]},
+ {user_sup,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"baab537a62725bcbe4510c9f0b2d99eb"}]},
+ {wrap_log_reader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5dceb6e671d0c51d181f51ec4e031798"}]}]}]}},
+ {application,
+ {stdlib,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"1.19.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin"},
+ {modules,
+ [{array,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7c98b180715bd79794eef21a2930fff"}]},
+ {base64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e45b571f2414c6131fbf62b1da3560e5"}]},
+ {beam_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e13b050aff529ecac6569f7101237ba"}]},
+ {binary,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e77ffd0688b3f1ace1ac70936969da3"}]},
+ {c,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"402465a98ccec8e9314139daacf6203e"}]},
+ {calendar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c09413575ac7f80ea3d9217b1f7e1bc"}]},
+ {dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5154c82c2ffefa19096cf87ffb394a6c"}]},
+ {dets_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c810e731ba4101aba5f6b6c08481ea85"}]},
+ {dets_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9b4a9ef0f616b7c5464cf6813384e220"}]},
+ {dets_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a64e0220f855e6e97d53a9bc4f0a111b"}]},
+ {dets_v8,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ebf2c94f62d180c3159b663ba2094189"}]},
+ {dets_v9,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9098391234b6304ff3d106dc56d467b6"}]},
+ {dict,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0bc1d74a65bd392960cd7e1b230f07bf"}]},
+ {digraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac9049d6d7454a87c40c2f03f4223849"}]},
+ {digraph_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17bbe67d3314e9024825512c1ccc7be8"}]},
+ {edlin,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"518247b4963c998e742c0794091c9864"}]},
+ {edlin_expand,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06c4ff7cf326df872bec9feed7f5984d"}]},
+ {epp,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"493760bc942ddd16df2a8e55f8b59774"}]},
+ {erl_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bba2a00b28557c9678356247c36b0474"}]},
+ {erl_compile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"291c9ddceeb66c7a7c36ab3505799513"}]},
+ {erl_eval,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9982f2bca01a352a45932a6db95a1336"}]},
+ {erl_expand_records,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"047c93973c9fbf83724cdf688e258cff"}]},
+ {erl_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3225aadc9ec4f84cc9451f30833cdefb"}]},
+ {erl_lint,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98ffb79824edc0f2a8ad49ff447e121c"}]},
+ {erl_parse,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9a3d97b028bafa2bba7037bc1987d87"}]},
+ {erl_posix_msg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ecb0903ecde21b7cc58277424d8bac3d"}]},
+ {erl_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b7945b193daf989e3f62c4a452f773e"}]},
+ {erl_scan,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dd9fb779b35d1925a0ad68c092af1f0"}]},
+ {erl_tar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6161b31a69bd3566a910d369baae00"}]},
+ {error_logger_file_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"218156df9bdedd04e37eecc76863940c"}]},
+ {error_logger_tty_h,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a2cac9386113d6879a4111be3e2d191b"}]},
+ {escript,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b77d5172cf00acd06fd6e42f03dc9b06"}]},
+ {ets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"13c77916ba3c85e6e076aa0664f5674f"}]},
+ {eval_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7bf8829d056519787fd0f7900bd04b73"}]},
+ {file_sorter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e31c9ca53e59010980dfc4e46e8aaf1"}]},
+ {filelib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"641651ced98857991b064b22c85cf90f"}]},
+ {filename,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a007021a1e9de6af67e99cc48be13c5"}]},
+ {gb_sets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4891f6d98f4bb81bc64415434d08ff9d"}]},
+ {gb_trees,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9a8ae86761c41dc0e9d32f57df63c3"}]},
+ {gen,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5beaa9b295439aa39187eeef56b8527b"}]},
+ {gen_event,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79bc1c9f72e633331d4518d982221af0"}]},
+ {gen_fsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb95e4cf29f5cf640e486c789fe9f1f7"}]},
+ {gen_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14f189569fb6420c633a5dab81f7b897"}]},
+ {io,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75fd9a0dc5823e95b4543a09be83c6ce"}]},
+ {io_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34c18dd02ec6458cae20ddc323542eed"}]},
+ {io_lib_format,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1f8f2a4d12d79d82420335d0e84107a"}]},
+ {io_lib_fread,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"27699e322a2de2004b057465f549fa3f"}]},
+ {io_lib_pretty,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32d7bae40549bdd60298c0d17efe057b"}]},
+ {lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"394b1b967c909d1830939846963ac4f0"}]},
+ {lists,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f840b76db5f9e5d37dcc9dc39a436b90"}]},
+ {log_mf_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f972dea76e360d99074b659327db69f"}]},
+ {math,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe02e030a198ec343f3c4a62f60ebf8a"}]},
+ {ms_transform,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dba72a603f0a9382274671842d6aaf55"}]},
+ {orddict,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bedb6cdaf10530b2486b46f79853fbea"}]},
+ {ordsets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5dfe0e73da077c2f86dbbe846e0dab7"}]},
+ {otp_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff3edabfa0633b9553b6fed1e47e41fc"}]},
+ {pg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3975b993694a2a465d331278b503f81"}]},
+ {pool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d0398428064137474f5acbb4122a70d"}]},
+ {proc_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5542f4add07ef7bb54a76b0cdfa542ba"}]},
+ {proplists,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5723876c3ed585a5a4b10dc3aefaf170"}]},
+ {qlc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75df6efc99d9a75bb4c989985125d3da"}]},
+ {qlc_pt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e84b6da8fb84f811f2c58365e59dd47f"}]},
+ {queue,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"221ed57d299c2281992706fd6e2c6584"}]},
+ {random,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e703cb7ee27e2e23baf924c2f6b29f50"}]},
+ {re,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6eef786ed4f4dfec57a568e488e3596d"}]},
+ {sets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4fbf3b29bf971465a8dc4077fc3e7c8"}]},
+ {shell,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4fdd7e1d18047b5f086b6fe8730c896"}]},
+ {shell_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a94fd884c9594ff9056228503cd2731"}]},
+ {slave,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5536e71d137302d699982fc65b9d025"}]},
+ {sofs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"10f13cd4626d429897246538c02c2cb4"}]},
+ {string,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7440fe2e1838223f877286bf7d8f2a4"}]},
+ {supervisor,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29c98bf9e58cc955d4c29d881d98e84f"}]},
+ {supervisor_bridge,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f58b58a1fefecc46a476490ef5231d7e"}]},
+ {sys,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7afd9c746450e5189048ff3635b37926"}]},
+ {timer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa3e2b017848accc808f92910abf87b8"}]},
+ {unicode,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be45160097c37c9144169f4ba54e0128"}]},
+ {win32reg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f59ec1a4af1e6381d8770fc2c5915e4"}]},
+ {zip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc9aab95b5fc9ee7e534e890d8e5516c"}]}]}]}},
+ {application,
+ {xmerl,
+ [{description,"XML parser"},
+ {vsn,"1.3.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin"},
+ {modules,
+ [{xmerl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1eabeb9846b832059537e2bdf6fed2d2"}]},
+ {xmerl_b64Bin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62075ae2d95f3188143a41f582542bf9"}]},
+ {xmerl_b64Bin_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd99982371c4db3baf4883c96e146c96"}]},
+ {xmerl_eventp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"99aad15d2ad4be80d580fe7e3ba4178f"}]},
+ {xmerl_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f79915eaadae7d92946f1182110e6f81"}]},
+ {xmerl_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91fe55408e50bf92a9f8ef8b402a3e51"}]},
+ {xmerl_otpsgml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2e027e7204405c168eaa598a6a4d476"}]},
+ {xmerl_regexp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"408f3ffbd843e09ed0326f5e6a72356e"}]},
+ {xmerl_sax_old_dom,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66b229f3eec3dce1f8754de256ba8d1d"}]},
+ {xmerl_sax_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66e80c0d03a583d22abc40a54096777c"}]},
+ {xmerl_sax_parser_latin1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a462359d6765811f41b1ac1260c81a"}]},
+ {xmerl_sax_parser_list,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db56224dbccdf302e42479027c3f961b"}]},
+ {xmerl_sax_parser_utf16be,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aaa379b8f1008944bd486f29a85ab1c2"}]},
+ {xmerl_sax_parser_utf16le,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"027d5c2218de2a7dd6f5db3b1c433a74"}]},
+ {xmerl_sax_parser_utf8,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40f970e9b4eb4122589c0afec6b8907d"}]},
+ {xmerl_sax_simple_dom,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2c08dc40f819e4972a58a2fb2fcf6239"}]},
+ {xmerl_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0afb5a6c37db1b5dd100297a149d9f8a"}]},
+ {xmerl_sgml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22933821d58054ab2941678ce2f8a298"}]},
+ {xmerl_simple,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c83463864e0c2117c7659aae4e6ae50"}]},
+ {xmerl_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"661d77ea6d07fe6281f04e8e553528d4"}]},
+ {xmerl_ucs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ace187d193a5314fbe329eba939dcf0"}]},
+ {xmerl_uri,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1121ced96856184d51daecddbb4b562f"}]},
+ {xmerl_validate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe1eb20e24d92db08eb03a7a3fbbd73a"}]},
+ {xmerl_xlate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2515e06ee34909465fb4520f199f5a46"}]},
+ {xmerl_xml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e04d0e513bb48336b9e69de89208e97c"}]},
+ {xmerl_xpath,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02a4e2d946ffe93e960c66ce0d391628"}]},
+ {xmerl_xpath_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6531ac82f1524946a0a31f40a90546d"}]},
+ {xmerl_xpath_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b3bd078c12f46cf5154d05c49880058"}]},
+ {xmerl_xpath_pred,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a7d97114507d23ad8cfdf967fd656f"}]},
+ {xmerl_xpath_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d43883f65aa0006900fc053453d1bd2"}]},
+ {xmerl_xs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6963383b4148fd4a7d51bf8e54b79640"}]},
+ {xmerl_xsd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4660a75a540225ba8a88c00914923507"}]},
+ {xmerl_xsd_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be422d840d07c53b8ba210889dd5d308"}]}]}]}},
+ {application,
+ {wx,
+ [{description,"Yet another graphics system"},
+ {vsn,"1.0"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin"},
+ {modules,
+ [{gl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b2c807a7fbd4012871027dd4292448b"}]},
+ {glu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28a23cf86e317c54ebd1b609b38f2fe3"}]},
+ {wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"854481fd306d90c1fe6ad683045a1d98"}]},
+ {wxAcceleratorEntry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d7572b3e8662e26666964cc64ff7b90"}]},
+ {wxAcceleratorTable,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a261f6c3e0d571493a46fcd40b0361f7"}]},
+ {wxArtProvider,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22bc145a24e52e15d6e0f66e3f057df7"}]},
+ {wxAuiDockArt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22fca5ae251c6592dda5b08c0688138a"}]},
+ {wxAuiManager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f87b4fc280d820edca4655bfc0388bd"}]},
+ {wxAuiManagerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d08f2847271aae031ed49a0cab96e8f1"}]},
+ {wxAuiNotebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b055991aa4efef19c59653db60d611e"}]},
+ {wxAuiNotebookEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9fc2a85bda82dc6406833d3746a1313"}]},
+ {wxAuiPaneInfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"96dc39e65e2d04e597a76663651cbe45"}]},
+ {wxAuiTabArt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0641080a257e4c0ce7030d7a404ea965"}]},
+ {wxBitmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62ddedace917fe7d65ebfdd968e2b442"}]},
+ {wxBitmapButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"676cbd0f421681f3cdb110b08b89cdf4"}]},
+ {wxBitmapDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ab868e8a18350bb427d08abd31d805c"}]},
+ {wxBoxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f30f0ad197cd2fe6bb6956ecf55009e"}]},
+ {wxBrush,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f41534b5b14c0528729f3faba6d97e1d"}]},
+ {wxBufferedDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14bd8d1184f57ca3b71ae50c396b8fb6"}]},
+ {wxBufferedPaintDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b617bb74c090fd1bedd78a44e87620df"}]},
+ {wxButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cee0c2cf94d454426067a18f222b5175"}]},
+ {wxCalendarCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684d559165e957aac543b2f75db8821a"}]},
+ {wxCalendarDateAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3406fdefafb1e56b3b4b0c049e8f306"}]},
+ {wxCalendarEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"deb02e8741160ee9f1a44853db16a6d3"}]},
+ {wxCaret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"543d4a99c593ac822143cc4c680fbe10"}]},
+ {wxCheckBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae5b445190e6d0811bc3bf41c269ad7a"}]},
+ {wxCheckListBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"094de5ba936cca4c26ffc0b765d371be"}]},
+ {wxChildFocusEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4d29ee311555ab76419724546859432"}]},
+ {wxChoice,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7e31246a035375896498e17c366beaa"}]},
+ {wxChoicebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32665c0637a00816a2fff4d4f5f418c1"}]},
+ {wxClientDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"400fdcc0f51e0e5043be4ca4da99a8a7"}]},
+ {wxClipboard,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ddbb8e1f11321204d48d247e9f7548b"}]},
+ {wxCloseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"815ac954da8b6cb7b694ca4cb28ccd50"}]},
+ {wxColourData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84cf04d6327af73aabd2f775d16bac5d"}]},
+ {wxColourDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8e90d5109efec91ee6417d01b929951"}]},
+ {wxColourPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7fb673975f4cfa9946c34e30109d036"}]},
+ {wxColourPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2cfa29b0fce7f98058c3d5ad016c1f2f"}]},
+ {wxComboBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2aa520b9051f42a5e0f1ce1c6408101"}]},
+ {wxCommandEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5fed22a39c6c80dcc029ebe5444b0c0"}]},
+ {wxContextMenuEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a1739b84b365833c87232bfb298f681"}]},
+ {wxControl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aed7a496290caa0b53740c681de998ec"}]},
+ {wxControlWithItems,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a14351fadd0f776a4deeaf5ec518a689"}]},
+ {wxCursor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79eadaef3d9df7bae0a2146634d43e72"}]},
+ {wxDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f88cfd62f368172c3ed90684df53ba3"}]},
+ {wxDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"065ea6f1e76ca8b6558ca3dd7ff42077"}]},
+ {wxDateEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56c06074946764fbc74b7070f5759e19"}]},
+ {wxDatePickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c716525fffbc864c85159fb43b2a8d64"}]},
+ {wxDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a480a0c1690092014cf8198ba52d2a3"}]},
+ {wxDirDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43565cc473a21632555cb3151138b7c0"}]},
+ {wxDirPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6463e54c6564a1f7f5d6bec082f9ea63"}]},
+ {wxDisplayChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dbd9061f370f3db0343c4f88f57cfa3"}]},
+ {wxEraseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff780a85a34cb23667b7e4072db17a2b"}]},
+ {wxEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8644675e2fd7bbc6965d4babd0d14d7a"}]},
+ {wxEvtHandler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0991f5d86247ce757145c326adea516"}]},
+ {wxFileDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd9b5735e3994492c32ca099a70093d0"}]},
+ {wxFileDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9cb446535683e7a9258953f53cd77de"}]},
+ {wxFileDirPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6153d339ac822da8c4a9d766d0af22f9"}]},
+ {wxFilePickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c9ff43ff739e3ee37aae637a494d7d3"}]},
+ {wxFindReplaceData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bccc5beebb4aa0bfd424d26f472745a6"}]},
+ {wxFindReplaceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c40b557d35e4bc527a715996daad0e0c"}]},
+ {wxFlexGridSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed3da3c3822f59a6b2737f273397367d"}]},
+ {wxFocusEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c04cb018d6c94d24a44ae365dae46c1"}]},
+ {wxFont,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64303b1a35432898649e40e9c3f5bdd2"}]},
+ {wxFontData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0135398ad369de2fd9beda1553f7d309"}]},
+ {wxFontDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a872a3b88df4faa051e4b1f8cb0397a0"}]},
+ {wxFontPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e5b363ea487a4284714346d43d6c418"}]},
+ {wxFontPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a22e0effda4c521ce1b35bd5b2259758"}]},
+ {wxFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"168aac11a6c3835b122ee653ce2e50a0"}]},
+ {wxGBSizerItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"857c0be340c9c324d39cd525749a7cf7"}]},
+ {wxGLCanvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88461209c2234e4e166923d760a42164"}]},
+ {wxGauge,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d998a1ffcf56ccf2ea3a12eabe375d9"}]},
+ {wxGenericDirCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5f8f19f7fdf9545c1a08318a12782b8"}]},
+ {wxGraphicsBrush,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9eeb08fd93c17259400e13b1586ef6ee"}]},
+ {wxGraphicsContext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bee681fb85f534a63c2747e704d9001d"}]},
+ {wxGraphicsFont,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be1d636aa381e330db93a1deb9ff4b13"}]},
+ {wxGraphicsMatrix,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b452f9e3d87800b00e063b39d71583aa"}]},
+ {wxGraphicsObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64dba881c5b70355d45323363715ba69"}]},
+ {wxGraphicsPath,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e93e67098fd350e7eb20ccc5f7287b30"}]},
+ {wxGraphicsPen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c8c8c3cf5277cdc526dca9e591a10b0"}]},
+ {wxGraphicsRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4aeb3961b9b1a22263c8abf2473cc53f"}]},
+ {wxGrid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1195ea11e71c0534fffa76535efefbf"}]},
+ {wxGridBagSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"60ee2c7022f1feef9c169a191945d637"}]},
+ {wxGridCellAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02222543db113d41d409cd4080764d49"}]},
+ {wxGridCellBoolEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"297c5d3648d99bef9bc294d52d28b619"}]},
+ {wxGridCellBoolRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5cf8954049f0443ea2f9003deae7960d"}]},
+ {wxGridCellChoiceEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b77d6b8cb344c4512cef8adaf23ef93b"}]},
+ {wxGridCellEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5cf6065e8754f96612cff48a1fdcd20"}]},
+ {wxGridCellFloatEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"723baea27c999730afcacb3280f611c4"}]},
+ {wxGridCellFloatRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab56332ebccd1245fff7cb86abfd670b"}]},
+ {wxGridCellNumberEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0d86be445b03945610d9154c8905258"}]},
+ {wxGridCellNumberRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28ae774386962927dd552da4e9a28ca1"}]},
+ {wxGridCellRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6da61c7ff2464f3b007626b1f813dcb"}]},
+ {wxGridCellStringRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aefd3b8019cc4321037c8bd8e4faeba2"}]},
+ {wxGridCellTextEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbce8b54a66e9a9869d84655ef26d908"}]},
+ {wxGridEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b41f04ffe42c4602fe2911b5ca44dbe"}]},
+ {wxGridSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37bfde707aa6f2a1f68f8377dcbd7580"}]},
+ {wxHelpEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"714f8b000f3d09fe7eae13b1a5daa0c7"}]},
+ {wxHtmlEasyPrinting,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eaa59118b8408b91d16df3b600494e5e"}]},
+ {wxHtmlLinkEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f527856d02011b9f480494b2f3118f0"}]},
+ {wxHtmlWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61e947b44d4ae81b9bb0faf9a443cbd3"}]},
+ {wxIcon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b4d9209343a029641204f334bd07dc5"}]},
+ {wxIconBundle,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3281d9d364552b38009405e79467d5c5"}]},
+ {wxIconizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d66e4289534961f6868d91e1d1399b53"}]},
+ {wxIdleEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc82957c3a0181ef84ca78ace7a9271e"}]},
+ {wxImage,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"25de92b502b3a920e1247d2d1433aa32"}]},
+ {wxImageList,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3445492f371fe7d2a6f7534d61ad66a9"}]},
+ {wxJoystickEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15c7352ac168dc5adc0de4a872b9740c"}]},
+ {wxKeyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2e23f50406c65d5f2269910467a9721"}]},
+ {wxLayoutAlgorithm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f93e6eac8570144faabaea83388129a"}]},
+ {wxListBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"87aade14ade89a7021b6908143d339f1"}]},
+ {wxListCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e35643c3218ee7db6bf18dbd72bc470"}]},
+ {wxListEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90354ad1e09b594dd321bca68d8d3f02"}]},
+ {wxListItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be95e4c22e265fbcfb14ab7c9c798684"}]},
+ {wxListItemAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0137573b7a2b2569b481548c26bb91a9"}]},
+ {wxListView,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0022979dbcc2ac873adb72ea26c16aa"}]},
+ {wxListbook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e4b01ad81bf68f1784ba30772502e0b"}]},
+ {wxLogNull,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17f8273288c6e880ec0c7a21842b022f"}]},
+ {wxMDIChildFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5894b4a01bb643f208995257a0f9a00f"}]},
+ {wxMDIClientWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa7017cfb2e70f0492550a2ecd01d1c7"}]},
+ {wxMDIParentFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"251cf2044002bbb5afc2acddf442f14a"}]},
+ {wxMask,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b4ce241e6edd84d32df4b40a2f17a15"}]},
+ {wxMaximizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8a766afd7de5050ced825a275c6cdba"}]},
+ {wxMemoryDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4c1bb9fed0edf70b44f24ea3fb54f39"}]},
+ {wxMenu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2e48cd879d0ece5ee24260bc70e2f9b"}]},
+ {wxMenuBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"562e9979f8ce58c85032ae3e02307d7b"}]},
+ {wxMenuEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0571277ab11e756d18d34c6cb4f8f1c0"}]},
+ {wxMenuItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"900c9de70ac02a326bce22eec1c64d48"}]},
+ {wxMessageDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a15267b44d3cbeae16c294c4c0b96324"}]},
+ {wxMiniFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ca0204b8a167fd472a555695e58927b"}]},
+ {wxMirrorDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d521a1f1e4d37132a7a0de0eccc332f0"}]},
+ {wxMouseCaptureChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f85672fbf15ee0b8306de4aaf4eb4719"}]},
+ {wxMouseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"802c21f46105f957d8cd8c84ff36d986"}]},
+ {wxMoveEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4231fd181e0b305a82c595f66eb99b96"}]},
+ {wxMultiChoiceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4eb40bfa965a25034ebe4b8fca335863"}]},
+ {wxNavigationKeyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b113c9dcf181af633d0eae1f18c36f"}]},
+ {wxNotebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fef44c082d799a4d86e0cd8db58609df"}]},
+ {wxNotebookEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ccae052bfd1cf87236add4c0b26143d"}]},
+ {wxNotifyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3d22b2b86ce1a94c57ccd9842211f05"}]},
+ {wxPageSetupDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"755792c8d70118493f5147ef26f40d00"}]},
+ {wxPageSetupDialogData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"942f2c8bd296e971ea1d0f74ec700be5"}]},
+ {wxPaintDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c23afeac816efecc5417b0687437d8cf"}]},
+ {wxPaintEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a18ce83af679d334ce979df65607226c"}]},
+ {wxPalette,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5b3e165b8ac3e3cb2d5ba6e149bb0ca"}]},
+ {wxPaletteChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"785c765df0a50eac4b2c5c054453c0d9"}]},
+ {wxPanel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08c772b8c30e7441366bcfcd5005f21d"}]},
+ {wxPasswordEntryDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62b860fd64e74f7d67c51a5d8a0fb157"}]},
+ {wxPen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51b981a9e2313e58123888c6b67192ed"}]},
+ {wxPickerBase,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab9e2f2d6c3b5f8184d5b1d806b0dce"}]},
+ {wxPostScriptDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a820bdc1354c448a8b442016951a6b2"}]},
+ {wxPreviewCanvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7b48321129f0e14c2006272c8926544"}]},
+ {wxPreviewControlBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62393081a6ffcb6bf092b47703e31b4d"}]},
+ {wxPreviewFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78f39bbfead1330839955a50281a2329"}]},
+ {wxPrintData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"928a6a97c5c4b664687015c40d660cdf"}]},
+ {wxPrintDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"acc4c816bf0a64c8ce31af3c001f1688"}]},
+ {wxPrintDialogData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc97f97b620110928f4093806b1b8ce4"}]},
+ {wxPrintPreview,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92f04b064e7b041ee27bb202e5a60b80"}]},
+ {wxPrinter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"05626841c780ceaf3c5af0212f53fbaf"}]},
+ {wxPrintout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"feea26109fa63e4d98c2924189762a43"}]},
+ {wxProgressDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb45280951aef0038b8130c91a333833"}]},
+ {wxQueryNewPaletteEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be6c85603e81f7c90d4a949d42c0b32d"}]},
+ {wxRadioBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33684d6ce3f3c5388e6faf4f06d90463"}]},
+ {wxRadioButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92bebfd9b33658dcff2e592b5fcaeb7a"}]},
+ {wxRegion,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18cb5a2a1dcb63a646135f2a6cb1b21c"}]},
+ {wxSashEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4c51c14137513da9841890751deafd2"}]},
+ {wxSashLayoutWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6f5167ff888b73c603b2f641e96a49f"}]},
+ {wxSashWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91c5be41fbe95f5ad4504fae2f56f91f"}]},
+ {wxScreenDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc9411f49fe7324bcbace2c05d31d39a"}]},
+ {wxScrollBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e60ffb44799a3684f74d783addbf42c9"}]},
+ {wxScrollEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4fbd1eb49f69e56894aa4a7fb26e1b4b"}]},
+ {wxScrollWinEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be44e413061c515cb83a103a46572065"}]},
+ {wxScrolledWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ccef65f1430df907d9bd34c27408f9cb"}]},
+ {wxSetCursorEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1aad98a9e1d08f792da0d73f23ceb7e5"}]},
+ {wxShowEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89a775b3e6579b8e55e35bc6a46649ef"}]},
+ {wxSingleChoiceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0df9c7367cbb88a21c8dbfcff668fed"}]},
+ {wxSizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78d4dff8fa58b02bd49c31b6de28b935"}]},
+ {wxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"581f4ba6c9b3befca1efbcd221455b49"}]},
+ {wxSizerFlags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"54ae0bf1305ef85943158c8f4bc58669"}]},
+ {wxSizerItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff2680fb6f057abf757516aa98e26281"}]},
+ {wxSlider,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e0578ebbde06a5308c00e98e0fbb6b"}]},
+ {wxSpinButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d27cc12c048bf0b160f53ca416add6ab"}]},
+ {wxSpinCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6ce2382ed84ceb1585afea719fcddf73"}]},
+ {wxSpinEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"158d1777d9e8d840b6d8fa93982b876a"}]},
+ {wxSplashScreen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2719e687a6f08135c305b0b0692b8f40"}]},
+ {wxSplitterEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a71231c8d2c06f12ee862be00ac91fb3"}]},
+ {wxSplitterWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7cf57a832b89c0e8574b09e632c7f1d"}]},
+ {wxStaticBitmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"709ad1816bd35aa84a5b1eca1a6571f2"}]},
+ {wxStaticBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84480d00723cfae07f5c67ad463bec22"}]},
+ {wxStaticBoxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b32933189486b806c14a04452a3a5887"}]},
+ {wxStaticLine,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"569ff89c23e697fc73de1f13d51b17d3"}]},
+ {wxStaticText,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6baa91538f6f4d374f0c8c4a2cb5f25c"}]},
+ {wxStatusBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1cbef8443710f5270baade15b9312c4e"}]},
+ {wxStdDialogButtonSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2325bcbc06870de4093489cae45bc2ee"}]},
+ {wxStyledTextCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94cc5d191271e6c87926850e0ea8615d"}]},
+ {wxStyledTextEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"451ad9ce6872ea2035c3828713fe09c1"}]},
+ {wxSysColourChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6f80dd65e0c9731e4a6dfcb10c71059"}]},
+ {wxSystemOptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f3db4310f5e978392d4c6ec83347dae"}]},
+ {wxSystemSettings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3bb2753eb2dde96fd7f4aac7f944f69e"}]},
+ {wxTaskBarIcon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d221781abd0a15270e591e77e279a840"}]},
+ {wxTaskBarIconEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d865d9706104b122cab70b07fcc3a1"}]},
+ {wxTextAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a6de5eb0c71625ca14606d4e3919e53"}]},
+ {wxTextCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"924adbbbade1b95c226a18484c6bba33"}]},
+ {wxTextDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4a3694d548ae60c8261f55b671ac834a"}]},
+ {wxTextEntryDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c3038c65992b9a6eef33dd1aff7ce1d"}]},
+ {wxToggleButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4471e21c4fb39eece7418adbcd0f0fd1"}]},
+ {wxToolBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"163743b59b5ec0b6af08d7a66f1f36a0"}]},
+ {wxToolTip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71dde961902117baba2d2b70f18ebad5"}]},
+ {wxToolbook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"053b84811ff7ef240d44fa454f966e71"}]},
+ {wxTopLevelWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7dc3f9260823e5ebb2f99855f8d498f"}]},
+ {wxTreeCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72e339bd396c87edd28d5a7cc6954e6d"}]},
+ {wxTreeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17bf2e16e1f41f451fde53d1b72f8b01"}]},
+ {wxTreebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4889ab8905fd0fd8df5d06c900edf44"}]},
+ {wxUpdateUIEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7e61e2de35af5257f49919be1304381"}]},
+ {wxWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5337193a39eb848cbcd1afc79f19c8f"}]},
+ {wxWindowCreateEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c898ff077b90017671180089c5b37048"}]},
+ {wxWindowDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dcdf0f184f2b85f0915bb8d89ae8be27"}]},
+ {wxWindowDestroyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c443d15978d3a61549f9817ff75fb48"}]},
+ {wxXmlResource,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7240754b5985cf7af7c3ff2a3aba3548"}]},
+ {wx_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c24e9903d1b499f26e385d7aae15108"}]},
+ {wx_object,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b17d673c7c4f59b27e9625b62077ef41"}]},
+ {wxe_master,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cbafeb9aba24bb5e831dede889b317c1"}]},
+ {wxe_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6fabc67e68c6a41d8fa0ae642f6b272"}]},
+ {wxe_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d6e77598d0db8185bb1cb3bad9c5d14"}]}]}]}},
+ {application,
+ {webtool,
+ [{description,"Toolbar lookalike for the web"},
+ {vsn,"0.8.9.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin"},
+ {modules,
+ [{webtool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29344486df5f854ae8fd3bd674c80e99"}]},
+ {webtool_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0130c653986734ecbcc9eb173c28c60a"}]}]}]}},
+ {application,
+ {typer,
+ [{description,
+ "TYPe annotator for ERlang programs, version 0.9.5"},
+ {vsn,"0.9.5"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin"},
+ {modules,
+ [{typer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfd9dd08af18a1e70eacb4048fb641d9"}]}]}]}},
+ {application,
+ {tv,
+ [{description,"tv Table Visualizer"},
+ {vsn,"2.1.4.10"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin"},
+ {modules,
+ [{tv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be7275d94eee00787500a1a2116f2f42"}]},
+ {tv_comm_func,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac45aad5047bb8c9fd5567c83f513db4"}]},
+ {tv_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97de27d10499042aaf10e26289e1e92b"}]},
+ {tv_db_search,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41a489c86d92bc1de3d2b1eba6884c6f"}]},
+ {tv_db_sort,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8f3679aece6310ac4b2d574bb4e7180"}]},
+ {tv_ets_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71f7fcd2da96e0166340d5fecd7b3878"}]},
+ {tv_etsread,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"45a731d225555df8f910b7960330f095"}]},
+ {tv_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c776d3c4a16bc432fed801d2e3c8d70"}]},
+ {tv_io_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c34cbecb007f6b330646a192aac6163"}]},
+ {tv_io_lib_format,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"843ef9fc1762e75675f7a27b7ba99eb4"}]},
+ {tv_io_lib_pretty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e749f6a7879008513c7194c145e0faf2"}]},
+ {tv_ip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d54724ccb30cfd4eaca323d38ef7861"}]},
+ {tv_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de096a5d9d31dd3443e6bbbd4207ecd8"}]},
+ {tv_mnesia_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"947c40384ab9d95074ee626b399d893d"}]},
+ {tv_new_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3105970c5d4e109104492bf286bfb4b"}]},
+ {tv_nodewin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfd57496a2e56d57558891338db3e79e"}]},
+ {tv_pb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fecb58bfc084d7d6dd979f14ea8c2796"}]},
+ {tv_pb_funcs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcfb711f62ae07c91da02c5b145f3099"}]},
+ {tv_pc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61f6f61fcc34826ca8bc3b450e94f92f"}]},
+ {tv_pc_graph_ctrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8c763ad45fac44f4356a4739baa30b0"}]},
+ {tv_pc_menu_handling,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc155c0472d92d089e6d74a1987d2223"}]},
+ {tv_pd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"20b8ec33209b59d6775702be748d2da1"}]},
+ {tv_pd_display,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73d810061bb4e923468e82e414f6c962"}]},
+ {tv_pd_frames,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8fd381887281403263da14b070a35ca1"}]},
+ {tv_pd_scale,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"daff409824df94f43198e08c00c8aadc"}]},
+ {tv_pg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de42de073fbf5bd3ae58bef45ee05858"}]},
+ {tv_pg_gridfcns,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"663f41dd11d7fbca1f8eb58529e63e53"}]},
+ {tv_poll_dialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef887432416a9931b8051963d9a97fdc"}]},
+ {tv_pw,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4443616d58cadb7e473ff9ad95c473c"}]},
+ {tv_pw_window,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef96313278caafa5e4cb0c1f5da9d165"}]},
+ {tv_rec_edit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6cbd579d5ccd73e575e67d00fe9983d2"}]},
+ {tv_table_owner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af79fe7c2092cd90cd1cd360def69fec"}]},
+ {tv_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6967a2d5f7e03b34c4e26f47355ba43"}]}]}]}},
+ {application,
+ {tools,
+ [{description,"DEVTOOLS CXC 138 16"},
+ {vsn,"2.6.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin"},
+ {modules,
+ [{cover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7856ff33e1e956b68c9f6527b5700b5"}]},
+ {cover_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ead2c2bfdef49be858d1caee2d8878a0"}]},
+ {cprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0d6cd8fb042b31641c7869b4e148e7c5"}]},
+ {eprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8fd5ee11ba9f1cdae8af5c8f1b367a1"}]},
+ {fprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c549341f79f954416e826f591645f676"}]},
+ {instrument,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf9b95c95942f0ca0ca65db707873a74"}]},
+ {lcnt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b27f3e814feb4f8d4f95705115ce98"}]},
+ {make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a69d24258713596763ad87c247cef15"}]},
+ {tags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"450d10b82d488d74ab49eeef1d7277b7"}]},
+ {xref,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f07cbb4541ab47dd30a29a9ad6df8c2"}]},
+ {xref_base,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cdb2414576f192e4f5df0f8b0d565598"}]},
+ {xref_compiler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1bba5a52fff82650e201bd08241277e"}]},
+ {xref_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ee075a14d4a9caf00fd422a5b8a4941"}]},
+ {xref_reader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d257c5126f9d0cc4e9050fbbae796366"}]},
+ {xref_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7e53f28338fe627ac6fd0821ae6c551"}]},
+ {xref_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66929f66fc0606d320c6e5d216cb3b29"}]}]}]}},
+ {application,
+ {toolbar,
+ [{description,"Toolbar"},
+ {vsn,"1.4.2.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin"},
+ {modules,
+ [{canvasbutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2432b0ceaf3b3cd6ab059067bb1b904c"}]},
+ {toolbar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0264f53a2881d926b34401d0583b07fe"}]},
+ {toolbar_graphics,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"327c7483e8b5cd55e8478a2cea9f0c1f"}]},
+ {toolbar_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64977a22d445c231a98bc12926186e0d"}]},
+ {toolbar_toolconfig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"037bc3e6d48012cb0c18796d7870c33a"}]}]}]}},
+ {application,
+ {test_server,
+ [{description,"The OTP Test Server application"},
+ {vsn,"3.6.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin"},
+ {modules,
+ [{erl2html2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28fc702edc8365854f9f66fc2fe01793"}]},
+ {test_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09cd3b380d55881b18f4020709ad1ef4"}]},
+ {test_server_ctrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14f716cc55a7cb00e3db6f747c72bfa7"}]},
+ {test_server_gl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91fa2c7419209a51361800e1a28f3891"}]},
+ {test_server_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90c3fbf1bdd3260d8be29c0ab04279bf"}]},
+ {test_server_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"accd333c058e9b4da064190ef7cf48cc"}]},
+ {test_server_node,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"091d5d7aadb062a6e3812afbb130402a"}]},
+ {test_server_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9aad63f121b569e197e38735d5f3bf2a"}]}]}]}},
+ {application,
+ {syntax_tools,
+ [{description,"Syntax tools"},
+ {vsn,"1.6.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin"},
+ {modules,
+ [{epp_dodger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec04cd4dd5985f232fc3116ba222bfd6"}]},
+ {erl_comment_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b8dce1126af7468c5b30f73044c44db"}]},
+ {erl_prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"020fefd3937417a2029a5278dfe6a6c3"}]},
+ {erl_recomment,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9ef1a5c9ce3c6ce6b88966b1c766452"}]},
+ {erl_syntax,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ee5f2f422313742a2d321fcd901909b"}]},
+ {erl_syntax_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f27de1f2cf65260fe863025c358c9c86"}]},
+ {erl_tidy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f92471b03263f0cd77f35fd59686258a"}]},
+ {igor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eabc7b07e7b92b8d34fa8eb20a507cff"}]},
+ {prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1e07ce1f5edda823216364302796ac1"}]}]}]}},
+ {application,
+ {ssl,
+ [{description,"Erlang/OTP SSL application"},
+ {vsn,"5.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin"},
+ {modules,
+ [{dtls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3942c7ba7ffaf15f739485a0294f256"}]},
+ {dtls_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0d3d571363ba45d10d8d772f107cd24f"}]},
+ {dtls_handshake,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92217b2b0b6d3b16913521e333533ca6"}]},
+ {dtls_record,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4aa88c3ec82a97c9aef5efb0773c153c"}]},
+ {inet_tls_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c9e1c10262b46fce60dcd0127455cb0"}]},
+ {ssl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c0cf688a767412c4de5ab3be9cb2e55"}]},
+ {ssl_alert,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff069c184808a482f096e6cf5aeda43b"}]},
+ {ssl_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08781acbe7e677b43923f943d54e17f5"}]},
+ {ssl_certificate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"292c330ca048353298a264de596e2ee2"}]},
+ {ssl_cipher,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7da7124e32552cf9438259bf544389c"}]},
+ {ssl_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b46886f7e29fdc628a965ee9e2314e1f"}]},
+ {ssl_dist_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1db0e97b9d77cbb26348e98cf386210b"}]},
+ {ssl_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e170a0ac2f663c4396f5a3b00e36239"}]},
+ {ssl_pkix_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c1b5a81345dcd39060c2fb177b29898"}]},
+ {ssl_session,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9103614974d7d39d0f1ccb0a9e5b6f8"}]},
+ {ssl_session_cache,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09b0d541e61e1ed9dbcb169b1d5b945a"}]},
+ {ssl_session_cache_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffafcdc2ff0342c4c698df0dec3cdc96"}]},
+ {ssl_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9d62b4943dddf16fbe39f781699260"}]},
+ {ssl_srp_primes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c2df3c9a38a3ceb9cb273a030bd423a"}]},
+ {ssl_ssl2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6822bde894695368a294a0e890183b67"}]},
+ {ssl_ssl3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5cd3fbdb5a3f1fdb4c78a2acf9735fa"}]},
+ {ssl_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a69f0e3bb4639f90a310b2b938cb9235"}]},
+ {ssl_tls1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14b5f8a146f51df359e9c1265e949564"}]},
+ {ssl_tls_dist_proxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bbb1df174c32c1f424cfa64547d075f"}]},
+ {tls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ff734327614ac4d6e4d9acf49998c2d"}]},
+ {tls_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ad4d62a6b8101cc5b928498752714ed7"}]},
+ {tls_handshake,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2c5513a959ecbe56166df52dff06e6e"}]},
+ {tls_record,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94501e4bda011f01fba860eebdff5a44"}]}]}]}},
+ {application,
+ {ssh,
+ [{description,"SSH-2 for Erlang/OTP"},
+ {vsn,"2.1.7"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin"},
+ {modules,
+ [{ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b91a0a4f8271ff77d0efceb75ba5e8f"}]},
+ {ssh_acceptor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c39ef119dbfcec7618d1cf223d445d6"}]},
+ {ssh_acceptor_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d79d965ce6a8121cfbcc1a57029fa06c"}]},
+ {ssh_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"11089687f3d5ff2e2ff4527efdb86920"}]},
+ {ssh_auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ff2e66febd08d64ffbebed7e7880ca3"}]},
+ {ssh_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ab1a9f964ccce1e001d7484b37c561c"}]},
+ {ssh_channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4259284ff9d7671940cfde40b8615fe"}]},
+ {ssh_channel_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2594f48f478040f5e861f92c63f78eb3"}]},
+ {ssh_cli,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6eb0733483419dc0a920452bb42b7344"}]},
+ {ssh_client_key_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1a1ce3edce20525a435533b3f37fcfc"}]},
+ {ssh_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b551f86d866df22232a147fca4ac7c04"}]},
+ {ssh_connection_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bec5a32b6f6199b3f52e1fbfbbceba3"}]},
+ {ssh_connection_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"399ad1481f99b9d43c874c162742c91c"}]},
+ {ssh_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd1150bc1fe3673d2446811f54dc23de"}]},
+ {ssh_daemon_channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17ceee1d84a542cf54dd487808e00a1e"}]},
+ {ssh_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d014774c5b5dbd368fad2bc809515e48"}]},
+ {ssh_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1045e82cd74643c823a1bda96d24b47"}]},
+ {ssh_math,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a4b44ed70c1938a7277f37d56f9de8f"}]},
+ {ssh_no_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9bf450746c1bcc1fd90c463299fdaf5"}]},
+ {ssh_server_key_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"debb7d5dcdf2eb88d30ed95a56652366"}]},
+ {ssh_sftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74ed0ad4eaf38e4233ea40f4b4769b7d"}]},
+ {ssh_sftpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"472a422310ca8f6f289334ef64550afd"}]},
+ {ssh_sftpd_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5269b3e25dd16faeb466f76ba993ba50"}]},
+ {ssh_sftpd_file_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"627f97d4fb4abd5bee4b509d9225edaa"}]},
+ {ssh_shell,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c7831c144031be28ec9dc12b4da3b94"}]},
+ {ssh_subsystem_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"755716a08c990d1f606e90420006a77e"}]},
+ {ssh_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"408837d884dc9e1f0a969ef64558d733"}]},
+ {ssh_system_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f384bcadd7cdca24ec6e40cbe04d71a0"}]},
+ {ssh_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1c9ed65701948f63ddb181cfaf2744"}]},
+ {ssh_userreg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4f27505cb543991360e10ddb88870cc"}]},
+ {ssh_xfer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0220668d75e0c89e7823990a0c968eaf"}]},
+ {sshc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"483104e1f9410dfc4e1e29c61d8827ee"}]},
+ {sshd_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aba8a2861b6f773e9016ff2859e8de24"}]}]}]}},
+ {application,
+ {snmp,
+ [{description,"SNMP CXC 138 13"},
+ {vsn,"4.24"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin"},
+ {modules,
+ [{snmp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ab098c46c4c009b5ab8a4a37673cf82"}]},
+ {snmp_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2ab3974db30a5b20ba308e1ef0c1d3"}]},
+ {snmp_app_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b81a8361da32fd1da51e85f36b678347"}]},
+ {snmp_community_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14e553d78094cb09e2e2a1a3476fa9de"}]},
+ {snmp_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e5c6bc754f1fdf1dfaf7f9815163cc5"}]},
+ {snmp_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9ec2fef69fed3fddbb122a5fd31853b"}]},
+ {snmp_framework_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0886188c6a8c18a6ff8a3b08172a0773"}]},
+ {snmp_generic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b23bcb8a031ccd450999f71b41f1f0dc"}]},
+ {snmp_generic_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74806ef6c5e3a1af2cb14a4121f4442a"}]},
+ {snmp_index,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a0358730d6b279e4056b9e78fdabbe2"}]},
+ {snmp_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f93d36dbfdfef30de3f4807efcec170e"}]},
+ {snmp_mini_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bb79af4e373cdc2ec4e6f5fe71d0e01"}]},
+ {snmp_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ccd6ba3cc7e504e0c163f8c0f7ff575"}]},
+ {snmp_note_store,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3b5f37d8fc6663a63d177cb72a1c498"}]},
+ {snmp_notification_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c283ef6cba1ffb08a38c4228f119c1f2"}]},
+ {snmp_pdus,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48138570bb1ff76dabe8f1fa5a6e662c"}]},
+ {snmp_shadow_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba004cbc14fe13ad6b29515d6b3b84af"}]},
+ {snmp_standard_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75c1099b71f4cde7703c1b651168196a"}]},
+ {snmp_target_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52cfb682cf25e4c6ad7c6a31ea71bc41"}]},
+ {snmp_user_based_sm_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b3b454fe409f6cd24463bfca9369adf5"}]},
+ {snmp_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"667650cc1c2f535f771132907bf12342"}]},
+ {snmp_verbosity,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8e3d33775ee83cca4d47f64df1dd5ca"}]},
+ {snmp_view_based_acm_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dcc969b6786ab84f450e9f0875eab3e"}]},
+ {snmpa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2057219be785ea520f5a3f1886d51360"}]},
+ {snmpa_acm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f21fee89e88dccc36afbae59e8ccd85f"}]},
+ {snmpa_agent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1fcbbb2b5328095d05622eb5da5b1fa"}]},
+ {snmpa_agent_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"668a5398f181b8abce6b0c68716e175e"}]},
+ {snmpa_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16cc3053b5568e50b5fa384baca6a40f"}]},
+ {snmpa_authentication_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc05c3f08dbdec4878aae7816eb5033e"}]},
+ {snmpa_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"826ab227f8829b50aabc3072cf2a8537"}]},
+ {snmpa_discovery_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50040fb1565d5888507dcffe6109cc16"}]},
+ {snmpa_discovery_handler_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62413e2497c617d1dabf1ab269610eb3"}]},
+ {snmpa_error,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb436bf4d7bf0615c02c649c0e04541e"}]},
+ {snmpa_error_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98147b5cfad093916c0756b37f763e86"}]},
+ {snmpa_error_logger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b0431d9de22543e6608515bc4afc07c2"}]},
+ {snmpa_error_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"214d6585224898ce39f6eef6554593c4"}]},
+ {snmpa_local_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb82eaa9a8486d087a27e834b58a2f6c"}]},
+ {snmpa_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e68b813ac1df34912af16ef01738f185"}]},
+ {snmpa_mib_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed334445e6e025059b2c9b618109cb9c"}]},
+ {snmpa_mib_data_tttn,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f39357a667d3cb530b431fed0dfa674"}]},
+ {snmpa_mib_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79d8aff9ea8d71bce6eac0a6f01f53b8"}]},
+ {snmpa_mib_storage,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22e11676e0303ea2f292534da8ae66f5"}]},
+ {snmpa_mib_storage_dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8c4649828d764370112243ccdbd2da3"}]},
+ {snmpa_mib_storage_ets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4410e4e89e46b6e2b818d3b002a98579"}]},
+ {snmpa_mib_storage_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e3d387a72c28b5bf76d7a55ac39071a"}]},
+ {snmpa_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c4244cad7870e2ec012bdd05281b182"}]},
+ {snmpa_mpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8475e9d61092213166efe3667bcf0c06"}]},
+ {snmpa_net_if,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"258227a8467ed99df2f9e55cc7b5e9ad"}]},
+ {snmpa_net_if_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f57faf094fd82ceadc8527983194b2cd"}]},
+ {snmpa_network_interface,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"247221ee7ec97ee189ef5a8b5eb2d18a"}]},
+ {snmpa_network_interface_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec6d7d452145362e9dcc0a8be42b3280"}]},
+ {snmpa_notification_delivery_info_receiver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de84fce31ef758fbb04722b66e1b22d3"}]},
+ {snmpa_notification_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e0b2e493bbbe13f1f17f3fd0be7ce1f7"}]},
+ {snmpa_set,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7152d8c4f238062a801fb9b46115b1ee"}]},
+ {snmpa_set_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1739e0cf36ad6a9249a8a200409813b"}]},
+ {snmpa_set_mechanism,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3bef6423ec85b3b9a144f17c3e3f6c2"}]},
+ {snmpa_supervisor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19aa2eef0602df46711bdc98c67d105c"}]},
+ {snmpa_svbl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4079d7e9812ac1c42274316b0f883c0"}]},
+ {snmpa_symbolic_store,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e0fe1dda713ed3048f51155e47932e06"}]},
+ {snmpa_target_cache,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02394ee2b706d7c26f027c960c659f39"}]},
+ {snmpa_trap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6ffd78574b7c33a0a96bee64d310531e"}]},
+ {snmpa_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b121f7bf87a2d44a14aa42988c2072f3"}]},
+ {snmpa_vacm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7c7855fb65468a2355c889aa26badb6"}]},
+ {snmpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a474261cc18e1f80f0f742774e3b1417"}]},
+ {snmpc_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce88a5b16fdc8fa367c8559a81eabcb8"}]},
+ {snmpc_mib_gram,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8b4a0280a0bd9b0e89fd47361381583"}]},
+ {snmpc_mib_to_hrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88a2a7964f0b3501263eaf513a72e876"}]},
+ {snmpc_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"feadc3549879e928bcc4941ff25c1756"}]},
+ {snmpc_tok,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37784c9fb162c53b0fae3cd77566bdb2"}]},
+ {snmpm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfcde2ccea1b2dbfe7d6f3bead4df7d4"}]},
+ {snmpm_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d6eef427d28f7a96b5be06a0509ed8d"}]},
+ {snmpm_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a026c01e17b82bd2fdcb31fb69ae51a"}]},
+ {snmpm_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02dd27ee95e3bbe3aab099b11120b826"}]},
+ {snmpm_mpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b593b66256ce780231c57b31298fd29"}]},
+ {snmpm_net_if,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"68d325a69b69e7de7106965a049522d2"}]},
+ {snmpm_net_if_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a83bf186eec6c82fd6c9b164fc337edb"}]},
+ {snmpm_net_if_mt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e44169e0549ab840243a2e4e0fa3d5fa"}]},
+ {snmpm_network_interface,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47b0e15cd1537e1a3a1b41b8be44998e"}]},
+ {snmpm_network_interface_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93b503aeb95e30d2fcf28c2b7d2e017e"}]},
+ {snmpm_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdf5855cd385c8d4589d43f2aaddee8c"}]},
+ {snmpm_server_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fc16c37e8db23a8b3e40d3696488a0d"}]},
+ {snmpm_supervisor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"289642b05307317c1684b5ba76cb81c5"}]},
+ {snmpm_user,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c6e66b34460082bbcb99ccaf1cedbf3"}]},
+ {snmpm_user_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8c7e1b66076bcbde4678471ee9066f0"}]},
+ {snmpm_user_old,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae32fe52a746f3be59c94bac2b679fcb"}]},
+ {snmpm_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"59bb20fedd0aca2f57ce3b5dad4e50aa"}]}]}]}},
+ {application,
+ {sasl,
+ [{description,"SASL CXC 138 11"},
+ {vsn,"2.3.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin"},
+ {modules,
+ [{alarm_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"250185bf9caa8aafeefc21d2dc85671d"}]},
+ {erlsrv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"656c183c67d6d7556d846752ac2e0168"}]},
+ {format_lib_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be7d1b5e03f626bc3a081680842f3c69"}]},
+ {misc_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"57e2232dbb711535686b684350c6412a"}]},
+ {overload,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce834faf427a10bffb528420385e75fc"}]},
+ {rb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c791582aa44b9701a38bea7b12a737c9"}]},
+ {rb_format_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6df90c6b446bfd31471022bae098995"}]},
+ {release_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc289c9b3ed6443f9e88a7a40b1bbd78"}]},
+ {release_handler_1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b7cbb150cbc1ad629936632bcf8700a"}]},
+ {sasl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a39ff904fad2fb7b62b8745b34e29b9"}]},
+ {sasl_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"651a20fbd6df5b1c785152aecf691f13"}]},
+ {sasl_report_file_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d21420c495fb60e6be13677a923ff7b"}]},
+ {sasl_report_tty_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165b304307e62adee19805a95d9b6ccb"}]},
+ {si,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ecfe8c3c35aba098dd3530398086bcc1"}]},
+ {si_sasl_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77c86cc1c9667be73a48dbcb3c480d36"}]},
+ {systools,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5514e0264308050ac1cc5cecaf74c950"}]},
+ {systools_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1aa9e6a22dccb94499d5609ce1cf66b"}]},
+ {systools_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2c4d3e4b7b322b6629575a64e553f90"}]},
+ {systools_rc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4337b68dc98fbbed9e93f2bde9ef4d0d"}]},
+ {systools_relup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd4bb2c6c8422b979b5a75e6f545baab"}]}]}]}},
+ {application,
+ {runtime_tools,
+ [{description,"RUNTIME_TOOLS"},
+ {vsn,"1.8.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin"},
+ {modules,
+ [{appmon_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62c6dd94499d20f1776df7cd3267c100"}]},
+ {dbg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a7b449f37506a70985c5b3f69ec579c"}]},
+ {dyntrace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"746609b1554ac41985637b5bba780905"}]},
+ {erts_alloc_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a489439d8dded5734eab5eb575ce454"}]},
+ {observer_backend,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9af82e565eecf62c161023fce415c58"}]},
+ {percept_profile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32909b64d30ade082680e9491a3ddbc8"}]},
+ {runtime_tools,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c569a23a42bf744f56abbf4215ca2a9d"}]},
+ {runtime_tools_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f52650d88ee6f6754ed9d109accb7eac"}]},
+ {system_information,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ed879d33f6159b48fb25bc472369285"}]},
+ {ttb_autostart,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6838c97b9564b06d26e5f599adcee4a6"}]}]}]}},
+ {application,
+ {reltool,
+ [{description,"Reltool the release management tool"},
+ {vsn,"0.6.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin"},
+ {modules,
+ [{reltool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b15d15af1453d274df701f6c4b39da09"}]},
+ {reltool_app_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e15041fae657a7abcce63e7e775af842"}]},
+ {reltool_fgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c07b7a13c2ae36b59f5d1f0daf8a567"}]},
+ {reltool_fgraph_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"230041769919290efa2a3419cf70c8cb"}]},
+ {reltool_mod_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"752d8f1d674a79955de7afd3ba6b561b"}]},
+ {reltool_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"135d9bb6ea57344472c185d61c97573c"}]},
+ {reltool_sys_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f02ff065d17fa8203d711b9cc698ebf4"}]},
+ {reltool_target,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"036440a327b1c9cbe5e404ffaf02b9a4"}]},
+ {reltool_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c623f90e0c5da5db65d4ca56d9088d7a"}]}]}]}},
+ {application,
+ {public_key,
+ [{description,"Public key infrastructure"},
+ {vsn,"0.19"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin"},
+ {modules,
+ [{'OTP-PUB-KEY',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6f796b3667abf21828ee3daf8df487c"}]},
+ {'PKCS-FRAME',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4419b1988012d2d620ac3cc7dec13d65"}]},
+ {pubkey_cert,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7a4ac659e84ddfb1dc14f0608460fbfb"}]},
+ {pubkey_cert_records,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d5b1f48543bb6b0e62b343c2b965615f"}]},
+ {pubkey_crl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"680633b53ae9815138f804c999e78bbd"}]},
+ {pubkey_pbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"517156230695474828dc4d30af59f656"}]},
+ {pubkey_pem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eef5632fcf01194dd6c98f116de8f923"}]},
+ {pubkey_ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5acc6568d3caea9be2d2b93904f6bda9"}]},
+ {public_key,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b054e72c6e34943c0143ac34edcc37e"}]}]}]}},
+ {application,
+ {pman,
+ [{description,"pman The Process Manager"},
+ {vsn,"2.7.1.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin"},
+ {modules,
+ [{pman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d0ea0aa857d089d112f46bed16fb83c"}]},
+ {pman_buf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efdccd7cb884a2a9c50cc70719d53575"}]},
+ {pman_buf_buffer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfdd78d8905bd1bb7e07ee22414a0eae"}]},
+ {pman_buf_converter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"afd7e3173377b46ec7374c0e1118a158"}]},
+ {pman_buf_printer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c592081860a9b92b08b557c46b11307"}]},
+ {pman_buf_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77e551e0bc43c59bf5a76f0e32daf822"}]},
+ {pman_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4371d24cd7312794afb137de259b8e0"}]},
+ {pman_module_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0336677781cb813897e9306415f85b38"}]},
+ {pman_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"016b8cac7c507593a118b25ab3d642d2"}]},
+ {pman_process,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"faab007fad0f14fc692df152d60a8abd"}]},
+ {pman_relay,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b12bbe3e253211fac5006414f6f6162b"}]},
+ {pman_relay_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3b7eb65c7c1507892ed8f01a1b5e027d"}]},
+ {pman_shell,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3b9e7634fb49f1e84a57ed8cee5e3909"}]},
+ {pman_tool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58ab631eed4b29ddebd390b4cd30c82f"}]},
+ {pman_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"697f4a56a374bcacf06e8329356f7b9d"}]}]}]}},
+ {application,
+ {percept,
+ [{description,"PERCEPT Erlang Concurrency Profiling Tool"},
+ {vsn,"0.8.8.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin"},
+ {modules,
+ [{egd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"810926c65926827a80dc5de6e9cace80"}]},
+ {egd_font,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f41911d6aa5ada509332aca159c905e"}]},
+ {egd_png,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"201db7435f6981d1d5b738c5431d4a39"}]},
+ {egd_primitives,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cba1711d459930f92725953bca582106"}]},
+ {egd_render,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b86b9269dfad8feb8753abfa8e9be68e"}]},
+ {percept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af81f6c6164ac09eafdfbe02a985976b"}]},
+ {percept_analyzer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efe67a4369a96144def43df906f2ac94"}]},
+ {percept_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bff80fb7515c9c23977cceb2fba5e0f"}]},
+ {percept_graph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1444b51fa93b12bb98f6bf5246e079f9"}]},
+ {percept_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b84fd915479ddaa158366217f7fb2ff7"}]},
+ {percept_image,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec8d1dae1d54b90ccd7cce76d83573b6"}]}]}]}},
+ {application,
+ {parsetools,
+ [{description,"XLATETOOLS CXC 138 xx"},
+ {vsn,"2.0.9"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin"},
+ {modules,
+ [{leex,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c82fd5f503469e40008fb18b393b5421"}]},
+ {yecc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e644a07828dcb46e440058ec4e3ea83b"}]},
+ {yeccparser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43c2c84fbd4caf3c3eacfe0e25874f3a"}]},
+ {yeccscan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc55537c97f45738825ae56628fd4c71"}]}]}]}},
+ {application,
+ {otp_mibs,
+ [{description,
+ "SNMP managment information base for Erlang/OTP nodes."},
+ {vsn,"1.0.8"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin"},
+ {modules,
+ [{otp_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b92358a169666b58abe47dc98b1ea1f8"}]}]}]}},
+ {application,
+ {os_mon,
+ [{description,"CPO CXC 138 46"},
+ {vsn,"2.2.12"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin"},
+ {modules,
+ [{cpu_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"071d377ab6c706f3c4404dfddf95316c"}]},
+ {disksup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53255f9176fdf57c6d2c62a1e3ca8ce2"}]},
+ {memsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d5aa81b4c0017f97827b13d588e907cc"}]},
+ {nteventlog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d593ff9832f59a682cb9a7217eb1dc55"}]},
+ {os_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8fcf26c77f01a1542d007513e49c214"}]},
+ {os_mon_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15ff2fbfd1c88ff31ff9c8e85bf10cb9"}]},
+ {os_mon_sysinfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bed5dda663ec63a320198f44c90f388"}]},
+ {os_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52837f657faabaab44288ba2d29ba473"}]}]}]}},
+ {application,
+ {orber,
+ [{description,"The Erlang ORB application"},
+ {vsn,"3.6.26.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin"},
+ {modules,
+ [{'CosNaming_Binding',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f894f1ca2a53e8c68579c9e786884b64"}]},
+ {'CosNaming_BindingIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"938a503dbdbe3f091ce900dbe1efeeaa"}]},
+ {'CosNaming_BindingIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"07513574b340d64ec6d50ebf98a772c7"}]},
+ {'CosNaming_BindingList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37aaba8fc8623355426055d3b9c2e2b8"}]},
+ {'CosNaming_Name',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7053bbff4a4dd27357c7ae2b7a1bd158"}]},
+ {'CosNaming_NameComponent',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ef942efe3f30c93b89cbb79f0b0e372"}]},
+ {'CosNaming_NamingContext',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e73232824e400a4b6f9a295922420a5"}]},
+ {'CosNaming_NamingContextExt',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb072ace0d3d1445fa884fbb59d19ff6"}]},
+ {'CosNaming_NamingContextExt_InvalidAddress',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba29a989c4d5c961c62bec9162bedd71"}]},
+ {'CosNaming_NamingContextExt_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ece2da1a74559421fd8c5a0fcce5a984"}]},
+ {'CosNaming_NamingContext_AlreadyBound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba2061d5ba1cd24262351fa0b92b8850"}]},
+ {'CosNaming_NamingContext_CannotProceed',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"175c9f998a255ce625568ff7d7258988"}]},
+ {'CosNaming_NamingContext_InvalidName',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b5bb3702b8105f78101d3deeb4c3717"}]},
+ {'CosNaming_NamingContext_NotEmpty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0dbdfc178f40394391977946fdbf331d"}]},
+ {'CosNaming_NamingContext_NotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2f4d6cf9150fcc92bd9568ff89d2774"}]},
+ {'OrberApp_IFR',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67d245498b4abcae1f6acd51c4edc47e"}]},
+ {'OrberApp_IFR_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab7e63e7a7e47bac6d2cc7e703f2915"}]},
+ {any,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1339baf3e573eee6bb558d0097bce4c2"}]},
+ {cdr_decode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dda23b10f13bec369113cf3ae72b9448"}]},
+ {cdr_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d36c6b8ee3a9fddfdc76246030287ba"}]},
+ {cdrlib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d97ec0db3640dda02a25e6ecc9d5fa5e"}]},
+ {corba,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3794dffcd3c921332af2b343bb9e8e40"}]},
+ {corba_boa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dfd1417d677ca18f73c4efe65b37bad"}]},
+ {corba_object,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"569d7993c599bd7c2f68bf7a2d11fdbd"}]},
+ {erlang_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ec91157e3e220cc5163b552f3a4050d"}]},
+ {erlang_pid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"49b95cc1773eeed11661fc4cb36b7921"}]},
+ {erlang_port,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b0dd3969488714fc2e2dce30b297b14"}]},
+ {erlang_ref,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98b38f4a590a67a1fa34b2c6d60e8992"}]},
+ {fixed,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"469aed745e70550ecb4ee6b382a0c919"}]},
+ {iop_ior,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d3eeb1d5401ad27f97b75926cbf8387"}]},
+ {lname,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"945467530d2858f1dfb87b970a3862bc"}]},
+ {lname_component,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2cb0fe6e60c6d07d711cd8c3b28c8f7"}]},
+ {oe_CORBA,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02e20118e9fd5c3f5d2f398851cbdcf1"}]},
+ {oe_OrberIFR,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ebc39f59cbd7848e61193c82ab0ee2b9"}]},
+ {oe_cos_naming,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18745eadd8db295fc1e8e656a5c8d4d6"}]},
+ {oe_cos_naming_ext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56520dda2639eaadae720ac4974080d5"}]},
+ {oe_erlang,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"963486a48402a80366275f8dace2a80f"}]},
+ {orber,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b4c2a1e44684d8f314230f21def86f2"}]},
+ {orber_acl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76577170937f03fa23e69e4df6cfc424"}]},
+ {orber_cosnaming_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f856cbb99314e9eb7d0d7bfcdb30994e"}]},
+ {orber_diagnostics,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"656103538d0ee20b1433c6b2909b26c0"}]},
+ {orber_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75b0fa232da40432e3009ead263f3749"}]},
+ {orber_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ef09c1b3026ef3aaae5e9c6a5dd2918"}]},
+ {orber_ifr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0fed5973a29d60ab161580bf07f3b185"}]},
+ {orber_ifr_aliasdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"941404668a378948bbef59da18973eea"}]},
+ {orber_ifr_arraydef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4a1ebba0a7f7a26d5205972ac2bc6fc6"}]},
+ {orber_ifr_attributedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"141fa0d0127d292e0bfc3f0e654059df"}]},
+ {orber_ifr_constantdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"337388d13414ab58cdafcbd70a150741"}]},
+ {orber_ifr_contained,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a825abb903208287bc2dfb7323342fe6"}]},
+ {orber_ifr_container,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3027632d783e5db3440bead382fbc787"}]},
+ {orber_ifr_enumdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f031b9d117143554a1db00a0f7f9d4af"}]},
+ {orber_ifr_exceptiondef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e152b750cbb286b90ec49855c9f8115"}]},
+ {orber_ifr_fixeddef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0f66c8a6999241daec6815a1eaf7112"}]},
+ {orber_ifr_idltype,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f5b0c9c79289e56f5cfe24c5de10c26"}]},
+ {orber_ifr_interfacedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"985cc443e424939f7f067e9d577c0044"}]},
+ {orber_ifr_irobject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"441a6a89092f9059eddaafb3a19fddac"}]},
+ {orber_ifr_moduledef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"571791fe8c191478f9d99008066db451"}]},
+ {orber_ifr_operationdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"26ff4727920661a5777fdfeb9542447d"}]},
+ {orber_ifr_orb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f82245f4568a7ad57b93005504b22f3"}]},
+ {orber_ifr_primitivedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cad06f8ddc116042d7dd2f54f189dc9e"}]},
+ {orber_ifr_repository,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88fc8f59fe5a883e6a5cc76c9db0a8f0"}]},
+ {orber_ifr_sequencedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55db89bec3e336bf1a1087b8b24ec0c9"}]},
+ {orber_ifr_stringdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7119d2c1827fbfe04397a23e0c9b7bea"}]},
+ {orber_ifr_structdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e0643a9e51eb2fe1bb3268623005b9c"}]},
+ {orber_ifr_typecode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52a2bebb663486dfde545175b24f1db9"}]},
+ {orber_ifr_typedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1440f73d398af50ec1f1854b68a7ba14"}]},
+ {orber_ifr_uniondef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a767805d679f87ec96f566ea535b0ae"}]},
+ {orber_ifr_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a7a7127b079023e8507c1963bb70c6a8"}]},
+ {orber_ifr_wstringdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d9705c3d0a8e75958cfc92c0e065688"}]},
+ {orber_iiop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08e63cf45c6b87ef390f1ba44908df62"}]},
+ {orber_iiop_inproxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7d958ccebf1795810daf42c284df0b0e"}]},
+ {orber_iiop_inrequest,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"01cf6a0b86d8575aad71a64d1ead078f"}]},
+ {orber_iiop_insup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f3e97ae477f58ab983bbf78c5691a6b"}]},
+ {orber_iiop_net,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf48384275f94de84a88f985e69db8c5"}]},
+ {orber_iiop_net_accept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"311c1717af0f83c768a7904bd4f35d87"}]},
+ {orber_iiop_outproxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aadcfde8449aad07dda946c4fe8ae73f"}]},
+ {orber_iiop_outsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bb6aa4ab42569ea07e6410eec054d96"}]},
+ {orber_iiop_pm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c23eac6eed61ab8f4b0376bada6a96c"}]},
+ {orber_iiop_socketsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41cb70052711397c5ff4346c78bad0bc"}]},
+ {orber_iiop_tracer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3db9add6a744c5d57f2f88593010189c"}]},
+ {orber_iiop_tracer_silent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddc6f4254d9d55920c182bfc82174cd5"}]},
+ {orber_iiop_tracer_stealth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b5c2faed84597fcc65a1f79f126d38ed"}]},
+ {orber_initial_references,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52d7435fcf9d9b18c41cd15112211641"}]},
+ {orber_objectkeys,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77601464765a034f2157e184b66b27bf"}]},
+ {orber_pi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7772668cb95512b5068384cffb15f5ec"}]},
+ {orber_request_number,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce4912e1c1726a3edd4d2709171895ad"}]},
+ {orber_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea78f1c75c253c070f2b3423b896667a"}]},
+ {orber_tb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d9b508906d187e6448fd06b88923aea"}]},
+ {orber_tc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f43cb767b9c01d13d190a56574aa504c"}]},
+ {orber_typedefs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82369e4a3e862ef248d19c460b2df8ea"}]},
+ {orber_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23cc5e9ac5ffe3b7ac2315ae0759243c"}]},
+ {orber_web_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c95b45e743c0a1f7a2e88e350075f78c"}]}]}]}},
+ {application,
+ {odbc,
+ [{description,"Erlang ODBC application"},
+ {vsn,"2.10.16"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin"},
+ {modules,
+ [{odbc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2763e2d38d62e1fbe7c8ed231cce1905"}]},
+ {odbc_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"83f4d02ba9fd29ff84576abe0fde901e"}]},
+ {odbc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c39c9a6e602d66a2d12b662bf0a9b20"}]}]}]}},
+ {application,
+ {observer,
+ [{description,"OBSERVER version 1"},
+ {vsn,"1.3.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin"},
+ {modules,
+ [{crashdump_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77bff2805dfd88de4320b9f8c1469fe3"}]},
+ {crashdump_viewer_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d22f72c96ed77a6e4cabe125db6c8419"}]},
+ {etop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"377b59a76eeb5edb5b8531b5f0267399"}]},
+ {etop_gui,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0421b554807cd47031f0873f649d5e1"}]},
+ {etop_tr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d152946c82611d5f39b1ed3c720cb570"}]},
+ {etop_txt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02a670a9ee8ea7c3cea6de5bdcfa356"}]},
+ {observer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e7d30dfe8122c8736eeac0582abb076"}]},
+ {observer_app_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6130cbc700be448c7f64c7f8bcefcc6"}]},
+ {observer_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0973e064b3b2ff3b79f2f1eed47a8539"}]},
+ {observer_perf_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b5753467f635c1a98ad5e3f2e50f75f4"}]},
+ {observer_pro_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e68919849e91012fd156d3ac6228af"}]},
+ {observer_procinfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"175c07cc3510655fbdfe95a35012a84a"}]},
+ {observer_sys_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7637a94c99800b8b1c47467f7411fce6"}]},
+ {observer_trace_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a836a58f29e21107efbf7fa3276c0ff6"}]},
+ {observer_traceoptions_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e070e083bc809e6bd67284d46876292e"}]},
+ {observer_tv_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dfa1b811025f5313ba91c620bdafa62"}]},
+ {observer_tv_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c8661053d6b3b563582c335e6e18bc2"}]},
+ {observer_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72d4b855d618e72367b3b26a9c9fe22e"}]},
+ {ttb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08eec178cb05729190be64adbfc06fd4"}]},
+ {ttb_et,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18006f41b1483c5378d0d803bb73428f"}]}]}]}},
+ {application,
+ {mnesia,
+ [{description,"MNESIA CXC 138 12"},
+ {vsn,"4.9"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin"},
+ {modules,
+ [{mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ef269bdcc2f2ebecc93eed4a7d97e43"}]},
+ {mnesia_backup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50581e2e99465b9ab9adb11193ccbcb8"}]},
+ {mnesia_bup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63c4dc59c47dedf48fb8a67b3aee3a5a"}]},
+ {mnesia_checkpoint,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"57fca37f2b0e856bb728f0660f6ad017"}]},
+ {mnesia_checkpoint_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"211e3b158a5869145c472cc12080a148"}]},
+ {mnesia_controller,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4d98077e647433bbd4dfe9215bf45c0"}]},
+ {mnesia_dumper,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32b0759359dcf8f05af72e914720ceaf"}]},
+ {mnesia_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb423661483d17e8aaa683a22600aee7"}]},
+ {mnesia_frag,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"279eb6b4f1f713c9960f1697856030e7"}]},
+ {mnesia_frag_hash,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ca1e314bdfa381005e047965e7fe435"}]},
+ {mnesia_frag_old_hash,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70dd3592f65741eefd724448e56427a3"}]},
+ {mnesia_index,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79261cc27d922d6eeecac20a90920cd0"}]},
+ {mnesia_kernel_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f6da4fd3cf0ce074bf7b04e44e86470"}]},
+ {mnesia_late_loader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02a44f59cd50a3b6fcb78198781e8e7b"}]},
+ {mnesia_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08abcd0826ef6dce6929ca1741c156d7"}]},
+ {mnesia_loader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b316a61b4f5ce23b5c7e4bcfdaf6367f"}]},
+ {mnesia_locker,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"847d79bf891a9bcffda9e12458490e7e"}]},
+ {mnesia_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ae50e4995027fe6229091521e842b1e"}]},
+ {mnesia_monitor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"105c199cb846668f52e583faee684690"}]},
+ {mnesia_recover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91044c669bf165c1d9bb72d76da7135c"}]},
+ {mnesia_registry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa46aa5634381be997d54dbbf8da99d1"}]},
+ {mnesia_schema,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19676af000bf38b666e545b3c6f22937"}]},
+ {mnesia_snmp_hook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f994954a18270025bf505af1a1dd1244"}]},
+ {mnesia_snmp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb3f27cfb0a3fa51e062ca6e86973a3f"}]},
+ {mnesia_sp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86565dac38aae327be11f08e8d2e05e8"}]},
+ {mnesia_subscr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02b0b2458f5900927d72010d097ea94"}]},
+ {mnesia_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"309a5b00197c57437131eec4ce49c560"}]},
+ {mnesia_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3008beca178112720e4dc18ec6325583"}]},
+ {mnesia_tm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7be29c00407f6162375a0d855b36c68d"}]}]}]}},
+ {application,
+ {megaco,
+ [{description,"Megaco/H.248 protocol"},
+ {vsn,"3.17.0.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin"},
+ {modules,
+ [{megaco,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1621bcd17d72f8165b568b33e80badff"}]},
+ {megaco_ber_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12ccb5c139d29b2066d3317a2f6c166f"}]},
+ {megaco_ber_media_gateway_control_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c13becbea3de6bd37af08cd022c5b5a1"}]},
+ {megaco_ber_media_gateway_control_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"721176c1221d7ea112757ebe621508fb"}]},
+ {megaco_ber_media_gateway_control_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4546f9416ae2b969c41f114c777b994"}]},
+ {megaco_ber_media_gateway_control_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f352af0a5bfe76b5ca6a6393ef0782a"}]},
+ {megaco_ber_media_gateway_control_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2321767a4aeeadca11a92a77da4bb488"}]},
+ {megaco_ber_media_gateway_control_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"851782cffe570769b46773bc55073bc5"}]},
+ {megaco_binary_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e378f272d26a606b7d8b99accc472ff"}]},
+ {megaco_binary_encoder_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1eaa0f4ac077056d2753b4945acac2af"}]},
+ {megaco_binary_name_resolver_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"afc05954d77f1580e3e3119b28b2ee18"}]},
+ {megaco_binary_name_resolver_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64eca1a5ca4891ec6cb56e5b3b747cb1"}]},
+ {megaco_binary_name_resolver_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ab8daa26dfc1ecd8593ea03f037e0b1"}]},
+ {megaco_binary_name_resolver_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a28e0729df9ed41a27d38e76d2b1efc"}]},
+ {megaco_binary_name_resolver_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e831098553576721cfa3187f3246577"}]},
+ {megaco_binary_name_resolver_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"adc24901b71b89a59191caa575777136"}]},
+ {megaco_binary_term_id,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82f36dc610c932eb0e6ca2e9002d6c5b"}]},
+ {megaco_binary_term_id_gen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1f0904c943c78f55b67da76203955d"}]},
+ {megaco_binary_transformer_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fff3d874f36cfbc32dbbbc5078dcd380"}]},
+ {megaco_binary_transformer_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33cc44d1bf46cd3bfb5aea29887bcd57"}]},
+ {megaco_binary_transformer_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef3fe41f1f88c54aa4fb1caac2724337"}]},
+ {megaco_binary_transformer_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f916e19a7725a6887c4f88395c9af607"}]},
+ {megaco_binary_transformer_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4c8f6b31357bc55c13c7b7881a9a775"}]},
+ {megaco_binary_transformer_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab88024bec5e1fd3c03923d1d0e5119a"}]},
+ {megaco_compact_text_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf7e1fe374598225fd46f38b81e07d9f"}]},
+ {megaco_compact_text_encoder_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23e6620407ec5197028fa798bf01e51a"}]},
+ {megaco_compact_text_encoder_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a475f5b036fb0aa3dd35f86ff1d3c3fd"}]},
+ {megaco_compact_text_encoder_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2cbd43381f15e24a25a85797028851d5"}]},
+ {megaco_compact_text_encoder_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b193fe2860d7e926e73b71c501412b07"}]},
+ {megaco_compact_text_encoder_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"777b3a6ecc8b41b8bbab1ad70c7bf6ae"}]},
+ {megaco_compact_text_encoder_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e481d7fc5b319d95e6b6d7301837211c"}]},
+ {megaco_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"895d349eeee863ee722653edb146eec3"}]},
+ {megaco_config_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"275e3e57bae4ae030b1e8f2be4a4ece2"}]},
+ {megaco_digit_map,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e82b7b9950adc2a9b92418b741056198"}]},
+ {megaco_edist_compress,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de4bb8d979b71e2a77bc6480c755f0e0"}]},
+ {megaco_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"323b5d062600331842c9a23dd847ce29"}]},
+ {megaco_erl_dist_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6523fa00adc2e065d8418983cb9caa83"}]},
+ {megaco_erl_dist_encoder_mc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41066ab829e0f8ebc457c8e087e029db"}]},
+ {megaco_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"778b451ec26564a06b01bb6449e62004"}]},
+ {megaco_flex_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"76674c634aab23d50f8746016a4a0be5"}]},
+ {megaco_flex_scanner_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"eeafd9d64269893a5e719f9791e846ec"}]},
+ {megaco_messenger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7fc902eabe8adb5b0fe33e79b000ddbd"}]},
+ {megaco_messenger_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3bee9043dce0a684cdd1cd8134a370a4"}]},
+ {megaco_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"441b7ad486bf4eef899e02f97ba14768"}]},
+ {megaco_monitor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6da74b6f55cbbbacdea077af0a845ef1"}]},
+ {megaco_per_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58c49d0f60e2132cef575414c82a917b"}]},
+ {megaco_per_media_gateway_control_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b84247f3fbcda78fd09755f5368ade94"}]},
+ {megaco_per_media_gateway_control_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a981605bd179636baebaef5ff6ebc806"}]},
+ {megaco_per_media_gateway_control_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f30445cfec10f8cbd55fe17c6724b53c"}]},
+ {megaco_per_media_gateway_control_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0fe217237913122558c928dd10ef79f5"}]},
+ {megaco_per_media_gateway_control_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d1a9dfc04639677dfb27b24b2829f7ad"}]},
+ {megaco_per_media_gateway_control_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e967677da6dc54388db01f5c1545c77e"}]},
+ {megaco_pretty_text_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9dce15ad90abfcf6a7cc93391dbdc64"}]},
+ {megaco_pretty_text_encoder_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b00d8cfa3efaae8d225da7007dada64"}]},
+ {megaco_pretty_text_encoder_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa844b22554dca495b913fc57cfa3013"}]},
+ {megaco_pretty_text_encoder_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91b54a6e884a8afa32ffaa8352893baa"}]},
+ {megaco_pretty_text_encoder_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6db8e013212168a6df39fca101e3aa"}]},
+ {megaco_pretty_text_encoder_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"079587bd6b00f80224aaeec199380224"}]},
+ {megaco_pretty_text_encoder_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3a6f2cc1885299f91fb769fd4a1cb01"}]},
+ {megaco_sdp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e2d41d949f9ab2404116f809237301a"}]},
+ {megaco_stats,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03152bbddea7c1e557224711c4b97892"}]},
+ {megaco_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb7802016626e692d5a8519f536cf3d2"}]},
+ {megaco_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15cec9b1865d957412d0945e11bd5630"}]},
+ {megaco_tcp_accept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4999b86506c5da0b256de8fdf1423c20"}]},
+ {megaco_tcp_accept_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91e916f8b5d3aec78b129abb2064f229"}]},
+ {megaco_tcp_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53c5b634698b54c66de0676289c52222"}]},
+ {megaco_tcp_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48ff5ffa59eb95858702320eed91bf59"}]},
+ {megaco_tcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"597fe1780a9081757e42b57e5ebef1b2"}]},
+ {megaco_text_mini_decoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4675bc758b6dfade5a21f345c13fd523"}]},
+ {megaco_text_mini_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbc886fe01447c012941de8bbcb8b1e7"}]},
+ {megaco_text_parser_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc946659afb87b8bcd032cd513206016"}]},
+ {megaco_text_parser_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d0158fa2aa0880bfcfcea1249e90a259"}]},
+ {megaco_text_parser_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9acb9c582674145c94ada5f3bc58567f"}]},
+ {megaco_text_parser_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfc2972ed82568f1212b10aa5f54a5bf"}]},
+ {megaco_text_parser_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38f90460cdfcaf135be0f96917b2f7fa"}]},
+ {megaco_text_parser_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9afc2c639e48188d332c8bccf39588"}]},
+ {megaco_text_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d050061e3c87e8f1964b063624202b3"}]},
+ {megaco_timer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1252b5457aeb62266567e5905d4fa76f"}]},
+ {megaco_trans_sender,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3be0e627b81fb19dc7a3e27885f0958d"}]},
+ {megaco_trans_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c89becbc7e0e3b62c0ee8fac09f5adef"}]},
+ {megaco_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ad32251f0bd50e9289ae09286daf84e"}]},
+ {megaco_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4274133166af4f35b78505125ca3280a"}]},
+ {megaco_udp_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84b71d1f62b9e3958dc6bc55ea87dd5d"}]},
+ {megaco_udp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e05c1a2e530417dee164ad41e4fa8888"}]},
+ {megaco_user_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"604d252f88e8e7de2e8b2941d6f2fc2f"}]}]}]}},
+ {code,
+ [{path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8"},
+ {modules,[]}]},
+ {application,
+ {inets,
+ [{description,"INETS CXC 138 49"},
+ {vsn,"5.9.5"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin"},
+ {modules,
+ [{ftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f75e6a1763c0f8ad63c48fee7762bd08"}]},
+ {ftp_progress,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a9f1247decddc2091349cc0c561740ba"}]},
+ {ftp_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8184ca2df27024d938c1745b9b46b21b"}]},
+ {ftp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23491501dc6175d1a49c2bbb888642a9"}]},
+ {http_chunk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d127d36200e815d589b358178ae3d98"}]},
+ {http_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9d27256b8abc0a4752a98c5fab193d9"}]},
+ {http_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a327d5e08590cae728288f395b5880ea"}]},
+ {http_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fefac9e86284528e5883735ff02f9635"}]},
+ {http_uri,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d8dafbcdb6a18c64161cda56b762aea"}]},
+ {http_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"948c60f737d5c6d13e9e19b518eb5dcc"}]},
+ {httpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12f827ea3b4a60e6abe352016df83794"}]},
+ {httpc_cookie,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55dbb04357dcd95196eb831ae6c88924"}]},
+ {httpc_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"13538972414b85062867ba8f72b63a6a"}]},
+ {httpc_handler_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d291f5169c3ee61ab92b272e5612628"}]},
+ {httpc_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbc2349ce89229b7aab1397e920c4a23"}]},
+ {httpc_profile_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71f19372131a26ce3fec7fe59cae62a6"}]},
+ {httpc_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f9b151b009d24a06987f46db7a7ab32"}]},
+ {httpc_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df4086639fe81d9d6b0b0f1c27d783c8"}]},
+ {httpc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cac51bc379bec99f8e2fe737e6701177"}]},
+ {httpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"965f24797bd0ecb2662f8cccbf5a114f"}]},
+ {httpd_acceptor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"60c4ec255f9d3e71ca247d690fc050e3"}]},
+ {httpd_acceptor_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"146196f8aa54e2872ea09789bf43167e"}]},
+ {httpd_cgi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"493bef6896bc09b2a84424756e6aa2d6"}]},
+ {httpd_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"122f251eb11290e92a55da1a97647ff7"}]},
+ {httpd_esi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0a20e7f4efd148111074d6c027a749d"}]},
+ {httpd_example,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e8699c78100cc50e49ac578b154e491"}]},
+ {httpd_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"30702eec4e62275db10ea6e81cd67866"}]},
+ {httpd_instance_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d7ab2c856e6d5438dd3144b284ee396"}]},
+ {httpd_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12fc1dfa3734ae50f2b5912d1245d63d"}]},
+ {httpd_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae9176839ab029c3685eaa1e9b2b90d9"}]},
+ {httpd_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c61eb0828079a16033e6b33e8095104"}]},
+ {httpd_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a91f7e3de28a17002b2923df84f4b01e"}]},
+ {httpd_request_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b44228586d6ef9df1fb9bbcdf8e395a"}]},
+ {httpd_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73a06662a9f1ea7bb68ea6e0487ff3c0"}]},
+ {httpd_script_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"348c3920cf5e3c2137127c4a1e1345b4"}]},
+ {httpd_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f021c0b5923e108fd344cee27e360a2"}]},
+ {httpd_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7814cf6981a80379606be6a64d684e24"}]},
+ {httpd_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b6d1e4e24096bf68e395c2105f9ddce"}]},
+ {inets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5dea85fffabe81e273c12c78d57d3ea7"}]},
+ {inets_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0cc5b16bf76fdd61cc3fcc189509b4cb"}]},
+ {inets_regexp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d90aa0458fda8b4878dc77b59f3a996"}]},
+ {inets_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fda2c34b97323c1cc7756e681f50073f"}]},
+ {inets_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c8287946a050dad1ffd422678150174"}]},
+ {inets_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38930cb6dedec461e1cb409ee6902dc4"}]},
+ {mod_actions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd04b142450e4b2a6681a67ff53fe983"}]},
+ {mod_alias,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"488cd71dcfc552f96603b8ae70cffbc8"}]},
+ {mod_auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4c582f449cb199ea9cc8d5a7004a9da"}]},
+ {mod_auth_dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43a467ba929f04d907a1a6ba11bb1893"}]},
+ {mod_auth_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d3fe40e66d1a310a5814ead817db4f"}]},
+ {mod_auth_plain,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1692c15dbed5d5a680dbac4354569ec8"}]},
+ {mod_auth_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ee144579a7fd9a4a761307385f6ef449"}]},
+ {mod_browser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4187d14f39e293330958d7ed7f61ce5"}]},
+ {mod_cgi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e72a465306011f4ac2a88f03cd6c9dc"}]},
+ {mod_dir,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec5cbec9126f452057ed437dba2051b2"}]},
+ {mod_disk_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"702d6f87d24465d11d91f561fd11f7b6"}]},
+ {mod_esi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e83eabd7527ed663b93fd5a58a587be4"}]},
+ {mod_get,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8dd5d81c6a7cc426524180332edb7a14"}]},
+ {mod_head,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a62a5beb75a1b60206669499f77130e"}]},
+ {mod_htaccess,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bf3f03a28de0bf786813fc181fdb85f"}]},
+ {mod_include,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"145c3dccff68b053b1db14d5f92488a2"}]},
+ {mod_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5417983275ff4ded18c546c70b8cc7e5"}]},
+ {mod_range,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03a0b6a05ae0fd306c5b3f20bb6e05b8"}]},
+ {mod_responsecontrol,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ebe00aaf53af7508dabc9d09b949a0b"}]},
+ {mod_security,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"423eb8f57b9a8bde28e3da13db3de59d"}]},
+ {mod_security_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cca3960b3899a1a7a4581afc69d7a5cc"}]},
+ {mod_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62fba170a84e8fdb39c8744f64b37a64"}]},
+ {tftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ade4b7390488800507debf97307bd963"}]},
+ {tftp_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67a1747702ba0bff57a6f8aaa883b9d2"}]},
+ {tftp_engine,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb9e0ee93bfa57bd7ef5a038c23edecd"}]},
+ {tftp_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48fd419a1467c45c1e7057cdbb59a0a7"}]},
+ {tftp_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f666dd774c5c60c7ff175b19ade12b2d"}]},
+ {tftp_logger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"151ed197576a35d060b7bbf3c74bdf7f"}]},
+ {tftp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7fc8de866dbc9c30b3d91a8adf8ebf0c"}]}]}]}},
+ {application,
+ {ic,
+ [{description,"The IDL Compiler"},
+ {vsn,"4.3.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin"},
+ {modules,
+ [{ic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe764abce09fdd454d880128d9ddda2c"}]},
+ {ic_array_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"227ce84fee6671f9cdf93fb8048f596c"}]},
+ {ic_attribute_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"975e0b45c8a9ce1cb4551fdfb76cbd11"}]},
+ {ic_cbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43ac10b9d3c5142c747d99c3b9dad4d7"}]},
+ {ic_cclient,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73ec31c28859c6c5d6e5dc91b6ce5411"}]},
+ {ic_code,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02d51ffcaef78b26a0bc8c680938fb53"}]},
+ {ic_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41159947a7c4259a58fec12f96d02d69"}]},
+ {ic_constant_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ca029a6c4023f792cdd8fb9052241416"}]},
+ {ic_cserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf63d17869ccb762e0edab496be39e09"}]},
+ {ic_enum_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab555fa7842eec8c99e22d11060e6430"}]},
+ {ic_erl_template,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04c3d10872a5ab6edd781ae24512b6aa"}]},
+ {ic_erlbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"add3f7151efb782e2437bb626a7d51fd"}]},
+ {ic_error,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6379a791ac55b3542b5db5a1e329439d"}]},
+ {ic_fetch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bdc5454c6fe20b3a28d3a10ea4a7b3ed"}]},
+ {ic_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6597963c839cab5b5591eb1dcaa6a9a1"}]},
+ {ic_forms,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bcfeec18c0f2bc54dd64694b0f6d82e"}]},
+ {ic_genobj,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97c379af6629a74a7b70c60e6338a245"}]},
+ {ic_java_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40d0d5d7707b0d63119fdc658f7f3084"}]},
+ {ic_jbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e2429e630ce4f7dad22af0d4ab242b7"}]},
+ {ic_noc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8e61ad2dbb06818f812f1a3dcf0f16c"}]},
+ {ic_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9f64ecd00b68edfcf38b61e79bd0b80"}]},
+ {ic_plainbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"44ee00595baf6554efbdb45d3ee28937"}]},
+ {ic_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"857d2fb9fea30b14657b1c4a86d08386"}]},
+ {ic_pragma,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f69abbe96dd3cbebbff573664fe0997"}]},
+ {ic_sequence_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdf12c1c5c020249ba9966ed529e5062"}]},
+ {ic_struct_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4120b045ef93f4db9bea6c9f14180ca6"}]},
+ {ic_symtab,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c8ba1bfdd061a5e6864f86c957d6408"}]},
+ {ic_union_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9b140a193c08210aa09a4484d9a54f3"}]},
+ {ic_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6ce2a93793c15e09c8e18ccca534772"}]},
+ {icenum,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a53766074b7015a3bae4631d87f017e7"}]},
+ {iceval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d60924eb402c253265ef229824856baa"}]},
+ {icparse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2a14e584b40aa5b9e79c5f3101dfb3e"}]},
+ {icpreproc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14b63dc40d8160ee25e0f829a0d088c6"}]},
+ {icscan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c8e2841047e577935f05c0b5cb10b02"}]},
+ {icstruct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3fc6b7d763b490773a0c893a541b3d3a"}]},
+ {ictk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00ad73c637ec333d51a0905c46381eb0"}]},
+ {ictype,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8cfb0ed8d61bdff82302c4b52716ebf0"}]},
+ {icunion,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db222ee3335d7b431061d104f6ecf9b2"}]}]}]}},
+ {application,
+ {hipe,
+ [{description,"HiPE Native Code Compiler, version 3.10.2"},
+ {vsn,"3.10.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin"},
+ {modules,
+ [{cerl_cconv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3f8e5afb7f644e20ecc93eff288091d3"}]},
+ {cerl_closurean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"598014277bdc97eb3e42db827964786c"}]},
+ {cerl_hipeify,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c67cb3c827232c389de98edcb669a6f2"}]},
+ {cerl_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81c8c4cc2fddba367e557bb8fa3e46b1"}]},
+ {cerl_messagean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d45d1cf2112a30de90c6e02674b471f5"}]},
+ {cerl_pmatch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"592ae9106c429413eef5bca3404a312a"}]},
+ {cerl_prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c10b7a51c482eaae5d5bb5156072faed"}]},
+ {cerl_to_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"975ca9009d46f139766227e24f00167b"}]},
+ {cerl_typean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2407a7ab5367d3d2112283c1ddfc53a2"}]},
+ {erl_bif_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0a6c9083ace0be207cc54681c6cbf565"}]},
+ {erl_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"42d756bf4eaf470785a1b81838979af7"}]},
+ {hipe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"32e6ef5c8585a438373c41e5a5d75d91"}]},
+ {hipe_adj_list,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e5bc155da44d7631411dfc1a02fec2ef"}]},
+ {hipe_amd64_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1647b309190377cb226db1314fcac5cd"}]},
+ {hipe_amd64_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d3829c95a7eed25abc393e29da9bbf19"}]},
+ {hipe_amd64_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"49079178cae281b4645ae6f25ce18838"}]},
+ {hipe_amd64_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4476b9c0703b2a8473aa502dc6bdada8"}]},
+ {hipe_amd64_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"9fab826ab4bd5d716173c1f3b3b4d347"}]},
+ {hipe_amd64_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"52b41c777e65aeea7e35a9321585d34a"}]},
+ {hipe_amd64_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4eb339172dae5c27d67b4410de84f51f"}]},
+ {hipe_amd64_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"73bf464fdfd7cf668efdffc3fc78c352"}]},
+ {hipe_amd64_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7bc4f317d89794f58a1a0bda3b599879"}]},
+ {hipe_amd64_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5c0509cfd228b140247a46214243a415"}]},
+ {hipe_amd64_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6a50f0f7d1c454c50975d6d0b3eb3c4e"}]},
+ {hipe_amd64_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1ed593df4c9da2fe96da00274117f1b4"}]},
+ {hipe_amd64_ra_sse2_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"277417561a1fed88867bfdafe9e1c580"}]},
+ {hipe_amd64_ra_x87_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8684b37d2d952516b2f8e77426decaf2"}]},
+ {hipe_amd64_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"02db134b8e57405134b8e68a9f0588d3"}]},
+ {hipe_amd64_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c66c33708abe9f32d36337c358a73530"}]},
+ {hipe_amd64_specific_sse2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f0e4d5df03612b82d8cffecd5f9d4a84"}]},
+ {hipe_amd64_specific_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3a28b90d577a9db6ef4b70d9defbd863"}]},
+ {hipe_amd64_spill_restore,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81a80af9658effa33fdfe85f6161a35a"}]},
+ {hipe_amd64_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b55ded15ce4283908342b2824226406b"}]},
+ {hipe_arm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"160cf412bbc01adfb4229f8b73a45ba5"}]},
+ {hipe_arm_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"62390a02348b3abffcb4502ff1b2b9f3"}]},
+ {hipe_arm_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"30d169daa65fe2104260b4621d500e17"}]},
+ {hipe_arm_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c464aa34b089a594edfc1cdb7012f39c"}]},
+ {hipe_arm_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ee3833e47107f465b35e3d9a255d0447"}]},
+ {hipe_arm_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"74ce09dca62bfdfdbe0f667075f78c35"}]},
+ {hipe_arm_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e46614b822aafd6233af080377bc8729"}]},
+ {hipe_arm_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"19888211ce56a0eb039578ea485a7776"}]},
+ {hipe_arm_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b745515f7f9a5b4dc2e3f03f8dba82c3"}]},
+ {hipe_arm_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3b5de0ec46bf573c64151697e03dcbeb"}]},
+ {hipe_arm_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d129dfc23327601b4615e91f849c214f"}]},
+ {hipe_arm_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cdeccd5062db370b87cb350b317c041a"}]},
+ {hipe_arm_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fd59b7eba19bd0985bfc527377e815ea"}]},
+ {hipe_arm_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cbbdef9b7829ce07fc482451a8f7c7a8"}]},
+ {hipe_arm_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2a3a8e58a6ba75ca3902348a5b43ec79"}]},
+ {hipe_arm_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7bd890ef97657715f12f031658d4c9c4"}]},
+ {hipe_arm_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"611f5b731b1c7fa6f589010db3443a81"}]},
+ {hipe_bb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"66afe906c353f43505649b33dfed45a9"}]},
+ {hipe_beam_to_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"826bf8aa6513c06c61e08faa9383b4fc"}]},
+ {hipe_coalescing_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cf5f22f7e27c8ba6a1e73e29900fb096"}]},
+ {hipe_consttab,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4a430042156f62e55b404d38b82ef6c1"}]},
+ {hipe_data_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7843ffb243b1c8d66351c1452fec1cf5"}]},
+ {hipe_digraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3caa6181724dc59e70a3c5ee5b886233"}]},
+ {hipe_dominators,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4f7038336d002e637edb3b57cc6b7293"}]},
+ {hipe_dot,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0218e226a92b4a444c90b4c18be48c76"}]},
+ {hipe_gen_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"75a06ae623c2dd5a78903d11ba61cfd6"}]},
+ {hipe_gensym,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1b5a357fb4e6833e55b574343d116217"}]},
+ {hipe_graph_coloring_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e25c88384aaa7b7a16c5849b31db4fcf"}]},
+ {hipe_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"899c47579553070995c5701f16f2c1ca"}]},
+ {hipe_icode2rtl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cba4203ea542c9abfac6eaa92cb269e9"}]},
+ {hipe_icode_bincomp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4e211977eb23242d6a2bf0b099eff090"}]},
+ {hipe_icode_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f79f8f10f1aaaf4280abf06cfa40d56d"}]},
+ {hipe_icode_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ca9529e58b378b731ac6aac84218e2da"}]},
+ {hipe_icode_coordinator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3a1caa6d31d48a3fb311a2ea97f0c30c"}]},
+ {hipe_icode_ebb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b6b088a13c02a03e5a28247be6d45b94"}]},
+ {hipe_icode_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"40dfad7ac3602fece6bb4b5a8c9ab98b"}]},
+ {hipe_icode_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f3fcc6b3d555dfa882e7483eb64a6571"}]},
+ {hipe_icode_heap_test,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fed11d612f8f3da9ea1e4cc67389eff5"}]},
+ {hipe_icode_inline_bifs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3027c916d2ecc9762123585e1d91f467"}]},
+ {hipe_icode_instruction_counter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cf488cc5eb29636045d2880b33254711"}]},
+ {hipe_icode_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bb99ee17bd466d1b802a42b0583e26d7"}]},
+ {hipe_icode_mulret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"323e6103d2511e5bd4a87ad2b4dcf3c3"}]},
+ {hipe_icode_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"56edb2552a5c36757005cebd6196f7ce"}]},
+ {hipe_icode_primops,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3f14ad0079bdc8cf1feb08c6c2da287a"}]},
+ {hipe_icode_range,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0040719dd6effa173e861e4eb0e3cff6"}]},
+ {hipe_icode_split_arith,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5575b7299b149e93d358fdeccc999652"}]},
+ {hipe_icode_ssa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"090ca01ba76f97f346c6fb260751cad3"}]},
+ {hipe_icode_ssa_const_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5944b123b3fcd4b0839b316ee68ee36d"}]},
+ {hipe_icode_ssa_copy_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"997be266f8aa90058e1cc47807628ab4"}]},
+ {hipe_icode_ssa_struct_reuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8fbe27064d4bb5a27507564d4ace240b"}]},
+ {hipe_icode_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cd5755e095fcdc667aa925440a072104"}]},
+ {hipe_ig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"023433ebf566fdd844f091a0d35af764"}]},
+ {hipe_ig_moves,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b1d86094e8232686f4e234cca76178c6"}]},
+ {hipe_jit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d52c6fa1354f23d6c3234f2ba0adb467"}]},
+ {hipe_ls_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"af8f6022eafbf853ada08fe69e9509ca"}]},
+ {hipe_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c5c32cf830833284942651c29d48e796"}]},
+ {hipe_moves,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4b6be3fb7b1fd8acaa60cf09a34ab92"}]},
+ {hipe_node_sets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8f506e9e71db4336c1ec699b1335dc17"}]},
+ {hipe_optimistic_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"43cd34d83f3c513ee455a446628c39eb"}]},
+ {hipe_pack_constants,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"09e240bfc2522acbaa543f356a28f9af"}]},
+ {hipe_ppc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b4a1ef1f5d56e249be91954a55b35b5c"}]},
+ {hipe_ppc_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"be62cec21a026c5385d2482369ac59a0"}]},
+ {hipe_ppc_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7d0362cb062e78fb25852d9fcf943371"}]},
+ {hipe_ppc_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"45a4ac6be649d5ebd584abd44704addc"}]},
+ {hipe_ppc_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fb5b41996c46e440e0292565c786d9a2"}]},
+ {hipe_ppc_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1475ac44aff754105fdd4e85687346ab"}]},
+ {hipe_ppc_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1fd18b642e945b3f6b384549c810f5c6"}]},
+ {hipe_ppc_liveness_all,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5194b99327e725de7a0c94abb4d35974"}]},
+ {hipe_ppc_liveness_fpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b3958a1138f1f112f5ff4b357520fa4d"}]},
+ {hipe_ppc_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fc4585d446b47d4151671b7bc83f86eb"}]},
+ {hipe_ppc_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ec4dd9d536fb6aa5cdb418dded96184b"}]},
+ {hipe_ppc_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c37b9de73810ceeaca37bc0520a76884"}]},
+ {hipe_ppc_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"db4deb5ea2a237ff1e0984f7979e5d3f"}]},
+ {hipe_ppc_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4376f33857d9cb0cea29ff783ea82cf"}]},
+ {hipe_ppc_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6ba2df5f54c48dc90c42547e8bd2ca48"}]},
+ {hipe_ppc_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ba3d03b4267f315b10ed939a37d4597c"}]},
+ {hipe_ppc_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a9d4ca393bff97c1931d0eb18d38a811"}]},
+ {hipe_ppc_ra_postconditions_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"742e3f111a16eb5ca003f1a97804e5a9"}]},
+ {hipe_ppc_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"40dd287c6853767e7083a8c5549681ce"}]},
+ {hipe_ppc_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d5e2330aa55edd677ecf3e77bf659781"}]},
+ {hipe_ppc_specific_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"34a6f358c60c47ebec7956b66205062f"}]},
+ {hipe_profile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"210939fd9ea20991d7fae07b12348d35"}]},
+ {hipe_reg_worklists,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ee79fa6eb3bca9a4f0025d9e4ce02a72"}]},
+ {hipe_regalloc_loop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"19fc9f539fd5abb2ecc5aeaf6c2526db"}]},
+ {hipe_rtl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2ab93246a0c75f83327de3e0234dbe08"}]},
+ {hipe_rtl_arch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3481cc7240b928da18df9e61214ceb25"}]},
+ {hipe_rtl_arith_32,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"328deb7987296b869279c7c0d588f337"}]},
+ {hipe_rtl_arith_64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"64cc932e691e7743d06642103170de55"}]},
+ {hipe_rtl_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"198df75c4eefcd2b7a7f769922d4ce60"}]},
+ {hipe_rtl_binary_construct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7a1b57215669ed36c40b335e6826be2c"}]},
+ {hipe_rtl_binary_match,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1c22996f5b79a3818503a19059bdaf8e"}]},
+ {hipe_rtl_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"60570bb8a1cbde7c72ad1c37e2b8e17d"}]},
+ {hipe_rtl_cleanup_const,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a555a1c325dd9b3ae1775881af8abfad"}]},
+ {hipe_rtl_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6c7f64efbed1c8e51f2323fa693d3b89"}]},
+ {hipe_rtl_lcm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bd3735cbd4bc9eb9254b0c2ee67cd1ad"}]},
+ {hipe_rtl_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0dcceb8fd82c12480e42399dd2869c41"}]},
+ {hipe_rtl_mk_switch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8890cf7e39302f57f3adf8987755b34c"}]},
+ {hipe_rtl_primops,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c734e269cbc4be78cb3fe47fa55053a5"}]},
+ {hipe_rtl_ssa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4d9ce36d8dc1168eecf173bde8a0871a"}]},
+ {hipe_rtl_ssa_avail_expr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ef5653db422ed4115c734d9676f3b030"}]},
+ {hipe_rtl_ssa_const_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"598dee97d9fd44735a534b250bf60e2a"}]},
+ {hipe_rtl_ssapre,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"93b3ea7957d2008d763bd4416ef98277"}]},
+ {hipe_rtl_symbolic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4e6b19de45d978326014a378368a6f8e"}]},
+ {hipe_rtl_to_amd64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6afb4d232649b0a0ee54e5a4859e85ce"}]},
+ {hipe_rtl_to_arm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a12eb244baec0e0bcd2d39353ac69b90"}]},
+ {hipe_rtl_to_ppc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"521f595296e6c1bf0b7d1caf59bbfb77"}]},
+ {hipe_rtl_to_sparc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"66783d3f670bd939159b0abf3548dddc"}]},
+ {hipe_rtl_to_x86,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2b4ebecd4e2fa29e952c650809ec89b6"}]},
+ {hipe_rtl_varmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2b1e6ba5714a0764c0897a780fb38c8e"}]},
+ {hipe_sdi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c305600fbb8905b9b0cf792f2f85ed72"}]},
+ {hipe_sparc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6a5cf680abe539d1dfa669cb52ce1f80"}]},
+ {hipe_sparc_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"330f4c7130dc215c911ecfd48d9dedde"}]},
+ {hipe_sparc_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d8278464e9d1d65437625517255ae2ab"}]},
+ {hipe_sparc_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a7f131d52962288326e844f28d13d4cc"}]},
+ {hipe_sparc_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c1b5971e5e6f3304bcc00f1abeb268f7"}]},
+ {hipe_sparc_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"22d88316138d80c3ecf41ced21ec25cf"}]},
+ {hipe_sparc_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"623fdaf78bfaff2b07733eb4a211f79b"}]},
+ {hipe_sparc_liveness_all,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2bd5c26371c946fdbf9c1530c1478ca1"}]},
+ {hipe_sparc_liveness_fpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7dc401039841503524934a1b97990c2a"}]},
+ {hipe_sparc_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4c5e32e6adbbc37b4f793e8bde52ab2f"}]},
+ {hipe_sparc_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3c063c4c5b1bd8ec02c6ffe60c561056"}]},
+ {hipe_sparc_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f89846e24afb3795d259291e4613c155"}]},
+ {hipe_sparc_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6925c18182b17ee978041e26fbf490b3"}]},
+ {hipe_sparc_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"45cef8c32ae3b2f6f01911592016924b"}]},
+ {hipe_sparc_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2eedc8b13aac2efcd2e3649afd845d02"}]},
+ {hipe_sparc_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81f0a231c4bde04b132bdb6748774c10"}]},
+ {hipe_sparc_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"549d7dfb54dce00bb7f5317306694308"}]},
+ {hipe_sparc_ra_postconditions_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"9de491abdbbc1c156a20a692d463965b"}]},
+ {hipe_sparc_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1a4dd5b6dc938d539fead6b1ad9e2ba0"}]},
+ {hipe_sparc_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"809b836428fcb194565eeee86ecf138b"}]},
+ {hipe_sparc_specific_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4bf2be9b351b82024e81eabfd68806f9"}]},
+ {hipe_spillcost,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b9ef65406aa671e28d1bd8428f102fe9"}]},
+ {hipe_spillmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bde0ad7813cb8f86fc4ff110090af2da"}]},
+ {hipe_spillmin_color,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e277f11303f44d6ea07be695c1057d7f"}]},
+ {hipe_spillmin_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b007825bb206e086b9ffc943213aa625"}]},
+ {hipe_tagscheme,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"568fc377e498aec5a73e1b2c9cd29432"}]},
+ {hipe_temp_map,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"56dff1fb8175d1d7c32f7e8d95e10488"}]},
+ {hipe_timing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c3238c3b4adc08c290c37ba1ea7d3a31"}]},
+ {hipe_tool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f93194221b0e3756c9f0f70127b205bd"}]},
+ {hipe_vectors,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4e6ef55b233f27c27bd2f781baf9c94"}]},
+ {hipe_x86,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"051e4ee3dd5298e2cee05b1fca82e64d"}]},
+ {hipe_x86_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d1829f13a89049280e7cb22cd394af0d"}]},
+ {hipe_x86_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b9d6a090c32c03e6e91deac9bbb167ae"}]},
+ {hipe_x86_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c81bb7a0dd72b256c57fb37042de68ff"}]},
+ {hipe_x86_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"386d1abc98765c09c6bc6fe44cf2748d"}]},
+ {hipe_x86_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"db2a440f5975688c7bf9a88c47aaf627"}]},
+ {hipe_x86_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8783c19717dda46b566c465ba85b2588"}]},
+ {hipe_x86_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"236cd462abe386223cefe606b4f48928"}]},
+ {hipe_x86_postpass,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"57e5cb6ad12dceef612122c8f759ac15"}]},
+ {hipe_x86_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6efd3b5cd8c70edbd326ffe9457a3192"}]},
+ {hipe_x86_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1e8b7f27a05e1e7fac9ea95cdd394909"}]},
+ {hipe_x86_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4a3c30788866a5e997e0a1687279732e"}]},
+ {hipe_x86_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bb13a4d08391fe3f212fa4eba816029b"}]},
+ {hipe_x86_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e26c0711db5e891c86b64da12fe064ff"}]},
+ {hipe_x86_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e3d6ad622a3017744106b653324c0edb"}]},
+ {hipe_x86_ra_x87_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a6092f1853a7a04f8d16228f6183dcc0"}]},
+ {hipe_x86_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ce77b4ffff06c9532943ad5f6907b18e"}]},
+ {hipe_x86_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ad074b1e645c06c2137a46cd19f88b72"}]},
+ {hipe_x86_specific_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a20c2c2b1742aa084dbb7395a92b650d"}]},
+ {hipe_x86_spill_restore,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"88e191ef5057ea6a50c75af85c814013"}]},
+ {hipe_x86_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6edcc888c87ffc96414a8dce57d691da"}]}]}]}},
+ {application,
+ {gs,
+ [{description,"GS The Graphics System"},
+ {vsn,"1.5.15.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin"},
+ {modules,
+ [{gs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9d416ae60d6cda2ea55a05dbde8a53f7"}]},
+ {gs_frontend,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb02484f42ac799bdd086f6832b72330"}]},
+ {gs_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea7a1edc4bd5b9867ce924130851f295"}]},
+ {gs_packer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c5d911152526836f3487cd3de6b0bf9"}]},
+ {gs_widgets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2efa721783d863bca4ff2e116c9593fd"}]},
+ {gse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9355057cfe2b70da376f208739bd7c06"}]},
+ {gstk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684b9d8f370368e25ea2ca2ac708c1ee"}]},
+ {gstk_arc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1cd1114560c3839fb84380975d61d68b"}]},
+ {gstk_button,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29ce4f10fe8dc2bb85649018aa64d71a"}]},
+ {gstk_canvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a637d6932415873666ed040817ed2a72"}]},
+ {gstk_checkbutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3cad265e62fb4cbeda02c089b5b309bb"}]},
+ {gstk_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd236aeb7ff4658fd1a9d1302602a7af"}]},
+ {gstk_editor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17dd7595545d33bb3143ac3995711b39"}]},
+ {gstk_entry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2740de840e6b8871909dfedd96d4b5b4"}]},
+ {gstk_font,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc2fef06167d48c71cc434fa7411ca95"}]},
+ {gstk_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5113cb91ebb88a4cb1a0b4cb7665607d"}]},
+ {gstk_generic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d392d9f2e6c6220245cff065e99a3f5"}]},
+ {gstk_grid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61def27e9610041778245948e5f82be1"}]},
+ {gstk_gridline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40c7173521b57e4c9243ec5258f65d6d"}]},
+ {gstk_gs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c9ab7ac782c3e36e201d4760f37e478"}]},
+ {gstk_image,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50a6a6b41de78e4f06b0c98cba97992a"}]},
+ {gstk_label,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00b5826ce30fc11e417a7a43f0c7e563"}]},
+ {gstk_line,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7785bc56e2f32b575a4240a60994d62"}]},
+ {gstk_listbox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"053218bec49478a8334df6b0818e981f"}]},
+ {gstk_menu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ccf11b45fdd908fafb781c897d379370"}]},
+ {gstk_menubar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e801f2c6eccc8258d719028b706ec624"}]},
+ {gstk_menubutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fc2d88da997bdc39a24f3f0db9963b3"}]},
+ {gstk_menuitem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a4442a7307d34c544783c9d22433135"}]},
+ {gstk_oval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f4775c1b7522750f395f28a94eefe453"}]},
+ {gstk_polygon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdc96f316574995486c842b612722e25"}]},
+ {gstk_port_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"95ec5d20c905e8cc7fef2df5f99ceb88"}]},
+ {gstk_radiobutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b67bb9cafd3bf67b210d7b0e0b1bd992"}]},
+ {gstk_rectangle,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6bf1f8e7953532468393090fe8d56ba2"}]},
+ {gstk_scale,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"848c7ee845d1a59a0a7c4775f64f220e"}]},
+ {gstk_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"719252f8d069544886ec473e16688530"}]},
+ {gstk_widgets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29b540f4612eb1f1e65123f08809bee4"}]},
+ {gstk_window,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"746a06674df1cd96678689e6ab92a95a"}]},
+ {tcl2erl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f67bcc59683d0c578cba1c0062ff6b3e"}]},
+ {tool_file_dialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3763cc96ed8e2a6136a4c15e54a9adee"}]},
+ {tool_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"96edfeab61de9b40618e7808d62225b2"}]}]}]}},
+ {application,
+ {eunit,
+ [{description,"EUnit"},
+ {vsn,"2.2.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin"},
+ {modules,
+ [{eunit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"800601aeceaf1de519df273ca25741b5"}]},
+ {eunit_autoexport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48f889ffaa560238fa2269614f93bbce"}]},
+ {eunit_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed89782dac4c2b21da64d92bf74f1e22"}]},
+ {eunit_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"949ed8c5f494a8678c6f29775a7b5154"}]},
+ {eunit_listener,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f107b19b4ecf45031a93afa5ace611f"}]},
+ {eunit_proc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfc2da427b2bf7ba843f6b8d8121e2c9"}]},
+ {eunit_serial,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f07a040ebbba4af90fa9668c410befba"}]},
+ {eunit_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0842dedb36c3b1cd91229a7e4abfe328"}]},
+ {eunit_striptests,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"473b48509d28519ba18cfa83a8dea8b4"}]},
+ {eunit_surefire,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e6a5cebf210cdd8a558cd32b96ac13"}]},
+ {eunit_test,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc3897e05a5146b24c109fbc5da83e86"}]},
+ {eunit_tests,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d2b6b165201e0aad13a8d8f4d542f59"}]},
+ {eunit_tty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4faaab287e1fa52837cdfd1b58c7faf"}]}]}]}},
+ {application,
+ {et,
+ [{description,"Event Tracer"},
+ {vsn,"1.4.4.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin"},
+ {modules,
+ [{et,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82db3e8683420a2adb933306c8c822e8"}]},
+ {et_collector,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd43f7a22b3c3e6a1799a88163c3d441"}]},
+ {et_gs_contents_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"44e7ea855be084e48cd364735d79f5f7"}]},
+ {et_gs_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4ef2a5673c20444b198bdc185cc637a"}]},
+ {et_selector,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"267f60d2ecdad671eae269cdd2ff30f6"}]},
+ {et_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ae9af3449c17f045d25ca424e9873ae"}]},
+ {et_wx_contents_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d14826378988286a32fc85ca4246325"}]},
+ {et_wx_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"87f45e31d50a82d9db2443ddff14ad22"}]}]}]}},
+ {application,
+ {erts,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"5.10.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin"},
+ {modules,
+ [{erl_prim_loader,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"719e5362c7c1f0d1fd96601b7f814981"}]},
+ {erlang,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b2444affe04bb9287d86e0e0c80578"}]},
+ {erts_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a95c0409fe7b4ccf6e2fe509bfd23da8"}]},
+ {init,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55bb9fddcdf820938be2efee15eccd82"}]},
+ {otp_ring0,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47fe4e7e2d2a5f20cd3a9393e0743e57"}]},
+ {prim_eval,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16d4fc3a8e5e2ef7200bd866fe8b1abb"}]},
+ {prim_file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da0745178ab8aa8fb8d3a373970ebfdd"}]},
+ {prim_inet,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4993598825a1083526cbc23cf027f494"}]},
+ {prim_zip,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9280fc2398f9eb3bd09f74cfa1d6d267"}]},
+ {zlib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"811834d04ac37676048717e1c51f63ac"}]}]}]}},
+ {code,
+ [{path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13"},
+ {modules,[]}]},
+ {application,
+ {erl_docgen,
+ [{description,"Misc tools for building documentation"},
+ {vsn,"0.3.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin"},
+ {modules,
+ [{docgen_edoc_xml_cb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29c8b94e559528ca0aeacee089f52bcf"}]},
+ {docgen_otp_specs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6d53404b1059d2da87ce44bee49d2dd"}]},
+ {docgen_xmerl_xml_cb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"274ef03ec5cb146346fea794e77febcf"}]}]}]}},
+ {application,
+ {eldap,
+ [{description,"Ldap api"},
+ {vsn,"1.0.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin"},
+ {modules,
+ [{'ELDAPv3',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"655b60d1b5b0629024e2a78708c64518"}]},
+ {eldap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df60096d034768188e0fd6eaa0fd571c"}]}]}]}},
+ {application,
+ {edoc,
+ [{description,"EDoc"},
+ {vsn,"0.7.12"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin"},
+ {modules,
+ [{edoc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2749685cb80a536ad42426933220065"}]},
+ {edoc_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a444b7ae3acc249aac7fe40b38355af"}]},
+ {edoc_doclet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77b3ccaf177983dab1991425fd3d714b"}]},
+ {edoc_extract,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9effef62cfe9939a4c80b43b86041c6c"}]},
+ {edoc_layout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2b79a133f490b4de09b13f7519d37dd"}]},
+ {edoc_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f421fb61a9b2c711d5fc28387b0ffd0"}]},
+ {edoc_macros,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddb1e78cf2ddd20aadc87329067286f3"}]},
+ {edoc_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02fe39575dfda2cffd6031f6c8f470eb"}]},
+ {edoc_refs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a3ba4e7f5211445d74a4d19bc4c5963"}]},
+ {edoc_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfef03c1f2c7de294972d0ad185a3a11"}]},
+ {edoc_run,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0db629008caa57ebafde1dda9672306c"}]},
+ {edoc_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165a8e826f458ac6de7c50c395d012df"}]},
+ {edoc_specs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21a5746822e2ae01421fb064d9c8ccfd"}]},
+ {edoc_tags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9ad335a1ce6b99189cfbfaef2ca2038"}]},
+ {edoc_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84530d798ce334278df4dea8a69098f4"}]},
+ {edoc_wiki,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eabda8c28daf0cdc040eef58f31cc6a8"}]},
+ {otpsgml_layout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a511240c5864dd31d4df687465e355f6"}]}]}]}},
+ {application,
+ {diameter,
+ [{description,"Diameter protocol"},
+ {vsn,"1.4.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin"},
+ {modules,
+ [{diameter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2fdb2feddc71bda9175711150823325"}]},
+ {diameter_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6dcc769947f323a9ff306c9bcab4dd2c"}]},
+ {diameter_callback,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8c76e1ccf47e3c781cbdf3c8d3e293f"}]},
+ {diameter_capx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"65e483a5f121d99db830329f3dc050cb"}]},
+ {diameter_codec,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bd2e1ef215e88519ca3865601e479dc"}]},
+ {diameter_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33696e30585762fe29ca103d67ffbb04"}]},
+ {diameter_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76e885acd24a697d19b07ce5446f5c2b"}]},
+ {diameter_dbg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0954c1f71a204a0f2c8b3682d520c704"}]},
+ {diameter_dict,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ed21a8d2eea031aa736e95870a7a165"}]},
+ {diameter_dict_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c90e506d7eba4f18547238b8f025ce5e"}]},
+ {diameter_dict_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b3fc9ee26b660a97ad67b4c8728a0b75"}]},
+ {diameter_dict_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70475203e0968747889eecc533af3f0f"}]},
+ {diameter_etcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dde08c8d8311e2700c59b741274923fb"}]},
+ {diameter_etcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"85fc8320ca9eb8daceb03727bdadb6f8"}]},
+ {diameter_exprecs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"728aa8871c778eacc02313d922dde7ae"}]},
+ {diameter_gen_acct_rfc6733,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53fb49bb8c354f36d6e1ad6366fe02a2"}]},
+ {diameter_gen_base_accounting,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"845f38b99248c11778453b628ddb4fed"}]},
+ {diameter_gen_base_rfc3588,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6cd02c8318f4ccc198bd08d1ac789fb"}]},
+ {diameter_gen_base_rfc6733,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"49edd3b9955c82c872169f769c833482"}]},
+ {diameter_gen_relay,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c970d47476d2832f510b6b03699c95c6"}]},
+ {diameter_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"472b763fc9554c0c92992a3b36177667"}]},
+ {diameter_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8d49799607d7c7792a79dbc434b4d53e"}]},
+ {diameter_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"249d7f673e7f192ddff7c66b578e886e"}]},
+ {diameter_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3996fa63b0e083301d35fc6d88b75ce4"}]},
+ {diameter_peer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89f28d8d35bdeb8b05995daffb8d868c"}]},
+ {diameter_peer_fsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df03404577882e8cfba57087c91fe3ef"}]},
+ {diameter_peer_fsm_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b25500795639e63d9a591e33df6e4af7"}]},
+ {diameter_reg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e7d427dafe432249d3535bc9e6ec538"}]},
+ {diameter_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb7487b2c41e3520b1a46738699a88c8"}]},
+ {diameter_sctp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02584b6b31789dd38493fd1a8d7d3e3"}]},
+ {diameter_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e990f54abf1c8706cd7717cba717594c"}]},
+ {diameter_service_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a66f4714fa96fd7d289260002851cbf9"}]},
+ {diameter_session,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d348e0ca8d3c827d647c3bea8f9c7691"}]},
+ {diameter_stats,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f12a18f52de33ca77dacd1bba99680c8"}]},
+ {diameter_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c910b68b3d0760f595a81ca58b1337f8"}]},
+ {diameter_sync,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff62cfc82b044d2300345ac7912fe320"}]},
+ {diameter_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4dae7482d9a79d4ead66ef14d1c3a48"}]},
+ {diameter_tcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1b03a96691e03eb93144bc50022a007"}]},
+ {diameter_traffic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d351fdbef0536bba235fe102fe8e697"}]},
+ {diameter_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"386e129e240e91794ff79e1da6c6966a"}]},
+ {diameter_transport_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9f8da23c3c870b8a6ed8648d7aac2d5"}]},
+ {diameter_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2ecf24e368d30dbef34527e2971caf8"}]},
+ {diameter_watchdog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0ab7bd910bc959c0d1b64f0a2ae4bda"}]},
+ {diameter_watchdog_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4b16aeb2713fd42bf5e9da7cbe43bcf"}]}]}]}},
+ {application,
+ {dialyzer,
+ [{description,
+ "DIscrepancy AnaLYZer of ERlang programs, version 2.6.1"},
+ {vsn,"2.6.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin"},
+ {modules,
+ [{dialyzer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"929cdc37a18725b9710b9c4345c3aca0"}]},
+ {dialyzer_analysis_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b679e22bb1edb9f0225b79d995342dc5"}]},
+ {dialyzer_behaviours,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5fb71e7e5129b4c2f74cb529d8a745c4"}]},
+ {dialyzer_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5b03b559fdab4c77a8c955cdfe7a2036"}]},
+ {dialyzer_cl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79a2208b0cc03af530473d2d2f49587f"}]},
+ {dialyzer_cl_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4fcced00882cfef0262398a14319c2a"}]},
+ {dialyzer_codeserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5c8a1600210988f627559bc16a49a65"}]},
+ {dialyzer_contracts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c002e8bcddf711ae9feef14b88f28873"}]},
+ {dialyzer_coordinator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51efdc15e07eaa495060e420585bb74f"}]},
+ {dialyzer_dataflow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddb43241a51460b67c67780ca6174bef"}]},
+ {dialyzer_dep,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffffdcfd7edb9901be2e92b6d3a5f082"}]},
+ {dialyzer_explanation,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79c9bc71edcc115a03c1bb00a4133627"}]},
+ {dialyzer_gui,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec41553832cb5f49cce3b123ec763448"}]},
+ {dialyzer_gui_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00f5ef9bd8202d5bc303fca27c740b00"}]},
+ {dialyzer_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"713bf0249b3bb22c7461498b908db812"}]},
+ {dialyzer_plt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5b1ecae532cb2887c942c6bda2c7dc7"}]},
+ {dialyzer_races,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec1b2f026e1dfd438fbb48dcf16a19de"}]},
+ {dialyzer_succ_typings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12a59523b727169f2f415b6e57768910"}]},
+ {dialyzer_timing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b170424f433845fb9aab3e554ea61044"}]},
+ {dialyzer_typesig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b6670ae353fa06c5c8a5f301a7079ca6"}]},
+ {dialyzer_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cac59b9f59802633948d271fcf8ff92d"}]},
+ {dialyzer_worker,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e9ff1cc342b308c73bab8c607a8437e"}]}]}]}},
+ {application,
+ {debugger,
+ [{description,"Debugger"},
+ {vsn,"3.2.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin"},
+ {modules,
+ [{dbg_debugged,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78bf1d9b43c718da5e198af36cabb1ce"}]},
+ {dbg_icmd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"615470a6677e03a603c24cf821ba3471"}]},
+ {dbg_idb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e78e73c63bfe9149a11122857355f29"}]},
+ {dbg_ieval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e49ed51a1a1e7581334308cd3c9195e"}]},
+ {dbg_iload,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f249c44fee09e35262d2cafbfa22ce49"}]},
+ {dbg_iserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2911ffbd531888ac6e1b96a5475436"}]},
+ {dbg_istk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae44e86b7893633859292861275bdb7f"}]},
+ {dbg_ui_break,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5397708044bd37bac2a6f4e24edbd30"}]},
+ {dbg_ui_break_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c974a8a9b180cfd4ccbcfd31a7bb88e5"}]},
+ {dbg_ui_edit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7faadd987bb74826e5f5865d725ca177"}]},
+ {dbg_ui_edit_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e912e444704ad322b3e25fc6393c068"}]},
+ {dbg_ui_filedialog_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06a6b13cd9bcfe7d7d203a981352cfaa"}]},
+ {dbg_ui_interpret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dcf7a340530f4807d774d4c719a1dbbf"}]},
+ {dbg_ui_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c79f2debfab06b86990ef7e390a61b7"}]},
+ {dbg_ui_mon_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c43cdde20d4e66b6f51ef903af75250"}]},
+ {dbg_ui_settings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8deedced7307e14f36cca3d9fe7e367f"}]},
+ {dbg_ui_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c817c2cc2f62354d4f59be8b6e6fac96"}]},
+ {dbg_ui_trace_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db1abdd3b7a7b45d3c74dbd9c48f07e8"}]},
+ {dbg_ui_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b10a46e072053a225a894ed76dceebca"}]},
+ {dbg_ui_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e51ec8a33c335245583f7a9ba8728f66"}]},
+ {dbg_ui_winman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2056472842990c08dfdb81e56df2caa8"}]},
+ {dbg_wx_break,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55c7dc041c4cd1b1da98d49def9c2b15"}]},
+ {dbg_wx_break_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ad9cde7d28f7de18dda8da80d97a8f00"}]},
+ {dbg_wx_code,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"27abac65970e6f7c6bbaca07e9ead6a4"}]},
+ {dbg_wx_filedialog_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da924842b25d80b7b258100a4e597810"}]},
+ {dbg_wx_interpret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8549ef4a5bad09472dccd1cb3ab2c764"}]},
+ {dbg_wx_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09140d34a402d7183cf9dfecb0b2b6e8"}]},
+ {dbg_wx_mon_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fefe3be53da62cf504daf354579d910"}]},
+ {dbg_wx_settings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"350aed0cb189f0b91979fc38752fd4c4"}]},
+ {dbg_wx_src_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"644bfb2c2d8fc6e9296722fef5f05b57"}]},
+ {dbg_wx_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"024358a893f9b37296fc0c416074a4b1"}]},
+ {dbg_wx_trace_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2348218e83d1704bcf894e71c2f3e82"}]},
+ {dbg_wx_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d37489d27927cff9f19f76bc0c816c9"}]},
+ {dbg_wx_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d94add4e9adade091198438a278501a8"}]},
+ {dbg_wx_winman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"caa1febd36494a9088fddbd5557c503f"}]},
+ {debugger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e242b76bc941785f65d1cf819fd98a5"}]},
+ {i,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bebfb4e91c343a1ad89f1124b06e190"}]},
+ {int,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1d4c0b2e30129359db05d3bc4df646c"}]}]}]}},
+ {application,
+ {crypto,
+ [{description,"CRYPTO version 2"},
+ {vsn,"3.0"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin"},
+ {modules,
+ [{crypto,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"858d0e1779f13a6bfde511898916ae94"}]},
+ {crypto_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d2de1cd4927d57e8eaa4467404c8c02"}]},
+ {crypto_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17e05e4b0d772036706b76ba8f68de2e"}]},
+ {crypto_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1342a18fe8d994974e41aa3e351d8500"}]}]}]}},
+ {application,
+ {cosTransactions,
+ [{description,"The Erlang CosTransactions application"},
+ {vsn,"1.2.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin"},
+ {modules,
+ [{'CosTransactions_Control',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ee94b22194357e2374fe2c026d2a9fb"}]},
+ {'CosTransactions_Coordinator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bca2be777e58bf130a3bf48252c0c0cb"}]},
+ {'CosTransactions_HeuristicCommit',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d12c1a0988d03c64a606ba471794e3cc"}]},
+ {'CosTransactions_HeuristicHazard',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79d0dc47e6759987e5b45281bc4c39f2"}]},
+ {'CosTransactions_HeuristicMixed',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a77cb11ccf269fa85f2194ab16ec5ebb"}]},
+ {'CosTransactions_HeuristicRollback',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67a56bf7b8084c29dd10db9daa8e08f7"}]},
+ {'CosTransactions_Inactive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f94debdaa1912d18bbea77492e6fc88"}]},
+ {'CosTransactions_InvalidControl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b14b9b82b831e56235c1bca1f6e02e16"}]},
+ {'CosTransactions_NoTransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"24252bfbc89f79dac5c90b35e35a66ad"}]},
+ {'CosTransactions_NotPrepared',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddbcd30a479a50fa2fed4b0cb019c0bd"}]},
+ {'CosTransactions_NotSubtransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3904cf57a879720704d8b725802cc530"}]},
+ {'CosTransactions_PropagationContext',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d0dd57873deb42ef62f2e9e8620e111"}]},
+ {'CosTransactions_RecoveryCoordinator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2a670d242e21803d3a559b812b3f3bfd"}]},
+ {'CosTransactions_Resource',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78bdc7f9989a5277bde7e066804fa1c0"}]},
+ {'CosTransactions_SubtransactionAwareResource',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1194d19b4db72b1c571aec1847fa65f"}]},
+ {'CosTransactions_SubtransactionsUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6ffc90a293248735f58984f7a9f4fa9"}]},
+ {'CosTransactions_SynchronizationUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9858316a8256791e5fe66729fcd364ef"}]},
+ {'CosTransactions_Terminator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbbba1c622d817538fba982cbefd4a15"}]},
+ {'CosTransactions_Terminator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2db2696226a90215edb559cdae7ad928"}]},
+ {'CosTransactions_TransIdentity',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d38592cd26cbbbe3a963ca77b5264ea8"}]},
+ {'CosTransactions_TransactionFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04db55c2ba8df7975e98e1c7b7582bb6"}]},
+ {'CosTransactions_TransactionFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d8ff8a2434c10c4716b1b59aebbcb9e"}]},
+ {'CosTransactions_Unavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a77c05d98c0c72e2f1d52a1f781a1b98"}]},
+ {'CosTransactions_WrongTransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c836d95954f2374d89bfc9ff2bd86793"}]},
+ {'CosTransactions_otid_t',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e903c81e783cb34153bbca99e047870"}]},
+ {'ETraP_Common',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea5d3e59af9cadcb5587cc42fc750470"}]},
+ {'ETraP_Server',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8592fd689bdae07056a29bd258293371"}]},
+ {'ETraP_Server_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f192b40f501fd2f5fb3f92b21c5e9d3"}]},
+ {cosTransactions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d83a1fd7da7dc0b87658efe3039f484"}]},
+ {etrap_logmgr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91577f644192b682cb8739b9ce7ac7ad"}]},
+ {oe_CosTransactions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f6c79ffe50eac0c3ced0fba1a8c08a0"}]}]}]}},
+ {application,
+ {cosTime,
+ [{description,"The Erlang CosTime application"},
+ {vsn,"1.1.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin"},
+ {modules,
+ [{'CosTime_TIO',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77717ab85418c3c1599b3238c879b770"}]},
+ {'CosTime_TIO_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ce85958b051f2f97925e980f56115e2"}]},
+ {'CosTime_TimeService',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a92a3fc07bfeeae58a57075ecddb5ac6"}]},
+ {'CosTime_TimeService_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0885fbeef5bd4f72920ae716f0c73d54"}]},
+ {'CosTime_TimeUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ee0570f9b91eece7560cc1b6146f784"}]},
+ {'CosTime_UTO',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"799ddc99175222b61965c6c8e66e5cb3"}]},
+ {'CosTime_UTO_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"552c29f5ece131368c121b5a14c3ae06"}]},
+ {'CosTimerEvent_TimerEventHandler',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76961fc9eaae9e46950b5eb52fe62ae3"}]},
+ {'CosTimerEvent_TimerEventHandler_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a69e243a494b80eb34b37456f2b1f855"}]},
+ {'CosTimerEvent_TimerEventService',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62c54aabe64cb28b1245eb80f6b9190d"}]},
+ {'CosTimerEvent_TimerEventService_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6926dd7faed0366772908c8593691e"}]},
+ {'CosTimerEvent_TimerEventT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74b7db88a5dd4f17c263683a80bcfe3b"}]},
+ {'TimeBase_IntervalT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c8f966d02c9520f2d3a4f024892ded3"}]},
+ {'TimeBase_UtcT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15f72a9538e725e68e375f3d638c1b6d"}]},
+ {cosTime,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c96cfbcafba8c9df1a9b57b7e09c4d8"}]},
+ {oe_CosTime,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e607ddba4a35690c39bfcbb1fa3e044e"}]},
+ {oe_CosTimerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39f960f5b9c079eaecb87e75d9f90f2b"}]},
+ {oe_TimeBase,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"764d088e21dd985285d4ccfd723959fe"}]}]}]}},
+ {application,
+ {cosProperty,
+ [{description,"The Erlang CosProperty application"},
+ {vsn,"1.1.16"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin"},
+ {modules,
+ [{'CosPropertyService_ConflictingProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67353514e217df9f5a5c5e0d3e97d9bd"}]},
+ {'CosPropertyService_ConstraintNotSupported',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce577ca5520194130903c063d8f2211a"}]},
+ {'CosPropertyService_FixedProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ef0b79fd5dbcb18f7b9c94f941678e2"}]},
+ {'CosPropertyService_InvalidPropertyName',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd173257499295fbdc728d60fd14af92"}]},
+ {'CosPropertyService_MultipleExceptions',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3004385ac63dc6aa52bcb2aa46818f0"}]},
+ {'CosPropertyService_Properties',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"172b757c8a881b79146f50d9f3da1ea9"}]},
+ {'CosPropertyService_PropertiesIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37fa8c7f1e5ab4798845a1b101835900"}]},
+ {'CosPropertyService_PropertiesIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"728fabf6239161186aa9f574ad27fbd6"}]},
+ {'CosPropertyService_Property',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a912eb5a31517a6f94ee3f8e3b898ece"}]},
+ {'CosPropertyService_PropertyDef',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8ea474f53418bda870c1f98c522d15b"}]},
+ {'CosPropertyService_PropertyDefs',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c997a6a4db17765d72f52953679fc7d"}]},
+ {'CosPropertyService_PropertyException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3600a7d77fe924d3883a003b68ab8902"}]},
+ {'CosPropertyService_PropertyExceptions',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a516b05a720966d4a3568f7f087f22cf"}]},
+ {'CosPropertyService_PropertyMode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b1e1e285b3a2b01a12e328ed94a65225"}]},
+ {'CosPropertyService_PropertyModes',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed697876aa56c111eee5733379303ef3"}]},
+ {'CosPropertyService_PropertyNames',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39684cd186c7d8da459f9d17637606a2"}]},
+ {'CosPropertyService_PropertyNamesIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97b170d84779dcb7b98460588de428e3"}]},
+ {'CosPropertyService_PropertyNamesIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e06e012106df3651db1e9d52472bebd3"}]},
+ {'CosPropertyService_PropertyNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86c83ceacb0b80d4ffa6042cfaec025f"}]},
+ {'CosPropertyService_PropertySet',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffbb0b6b88d4a35cd836322dcc2b4603"}]},
+ {'CosPropertyService_PropertySetDef',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"429c3ed48018cc6eef3d28c2407fa42e"}]},
+ {'CosPropertyService_PropertySetDefFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86da518b687db630cd85921ebe96d07a"}]},
+ {'CosPropertyService_PropertySetDefFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f52585d44dd9d6863bd2b0e0359a24e"}]},
+ {'CosPropertyService_PropertySetDef_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02a747cf3856996416253a5cbccfbd7"}]},
+ {'CosPropertyService_PropertySetFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"faef66b15f43dc81cbf7dd9bde81c8a2"}]},
+ {'CosPropertyService_PropertySetFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b538bc6740ae2b6934e08d831d5b0960"}]},
+ {'CosPropertyService_PropertyTypes',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec088d6b4028f6a9dc2917e6722f1c32"}]},
+ {'CosPropertyService_ReadOnlyProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f4d338a44a7ab32daf202f4d2aa7cbb"}]},
+ {'CosPropertyService_UnsupportedMode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"203ca7e42a209758ceea013cbff109bd"}]},
+ {'CosPropertyService_UnsupportedProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28e9e73be7eb82646e3713135d695a6d"}]},
+ {'CosPropertyService_UnsupportedTypeCode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da862aea1e36f6fb797bee192a2f3e08"}]},
+ {cosProperty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5c17adcc4dc9f93a8cf92c91a12c81e"}]},
+ {oe_CosProperty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c9d35f1b883b805a44e9864136958b1"}]}]}]}},
+ {application,
+ {cosNotification,
+ [{description,"The Erlang CosNotification application"},
+ {vsn,"1.1.20"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin"},
+ {modules,
+ [{'CosNotification',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a52684ebceaceebe3d7c971fd5e45e6"}]},
+ {'CosNotification_AdminPropertiesAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa2af8e932319a2ab715d799c31678b0"}]},
+ {'CosNotification_Common',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e908fdcf47fa3d9d234d4061db9760ab"}]},
+ {'CosNotification_EventBatch',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c79e194e19df338bec34cee83d5c999"}]},
+ {'CosNotification_EventHeader',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e08e276e855cfa3dd60bdc9b563b8e9"}]},
+ {'CosNotification_EventType',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be0b154ef34f6279604f04d0be386d64"}]},
+ {'CosNotification_EventTypeSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3719ad475d47fd73c1a70891586f0b17"}]},
+ {'CosNotification_FixedEventHeader',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e512d2bce68fcb3de1336060be225cad"}]},
+ {'CosNotification_NamedPropertyRange',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e42690af83d192433daaadb6cbfc7e02"}]},
+ {'CosNotification_NamedPropertyRangeSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5eac2fb6027077046d918d30b36fb45a"}]},
+ {'CosNotification_Property',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d89e479fd34c1e6c46447dcb4aaa44e0"}]},
+ {'CosNotification_PropertyError',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2b5a17b0ff2dd997013daf5a4d73a83"}]},
+ {'CosNotification_PropertyErrorSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2437aa1bdbeeb5f45213bc7e7922351a"}]},
+ {'CosNotification_PropertyRange',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2392c8040a976dc8db3ba147f7911f2"}]},
+ {'CosNotification_PropertySeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6950965079eb678d5b2e010c8266cf13"}]},
+ {'CosNotification_QoSAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fafc8842d8f8e11febab4d341a2ce879"}]},
+ {'CosNotification_StructuredEvent',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22a1eae09f5d8cf0d223d06cebf9d85b"}]},
+ {'CosNotification_UnsupportedAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1d7ff2796dd090e244cecdbfa4d2ce"}]},
+ {'CosNotification_UnsupportedQoS',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d0968f6f188653b1e292c34f3b18c51a"}]},
+ {'CosNotifyChannelAdmin_AdminIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"42791a7a0d5ca5fef186c441a81cf50b"}]},
+ {'CosNotifyChannelAdmin_AdminLimit',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5355d6a703102439e59b070eb6e61b45"}]},
+ {'CosNotifyChannelAdmin_AdminLimitExceeded',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18b11c68d839f9aa90bfe6da07b15cd8"}]},
+ {'CosNotifyChannelAdmin_AdminNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c853cd178ef80d6a46a334d3cb5371d4"}]},
+ {'CosNotifyChannelAdmin_ChannelIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"992ab8f1ac2f4cc15edd6068c8dc1948"}]},
+ {'CosNotifyChannelAdmin_ChannelNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"475e742fdf1dd2ec932704ccb941f3c1"}]},
+ {'CosNotifyChannelAdmin_ConnectionAlreadyActive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8b95c202b2ebc28a7208928563b5382"}]},
+ {'CosNotifyChannelAdmin_ConnectionAlreadyInactive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b106140de30c6cd638b328efe453cb3"}]},
+ {'CosNotifyChannelAdmin_ConsumerAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c8c31c812099afa148ed0662dc67ea0"}]},
+ {'CosNotifyChannelAdmin_ConsumerAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"172767d1c29ca64e810d8853c61a01e9"}]},
+ {'CosNotifyChannelAdmin_EventChannel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e362f0dc4dc40c98e66b91632554ddb7"}]},
+ {'CosNotifyChannelAdmin_EventChannelFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4798a326d18d53e9a7870454fb33ef4c"}]},
+ {'CosNotifyChannelAdmin_EventChannelFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bc146f5b9cc168505d2249e7f04a618"}]},
+ {'CosNotifyChannelAdmin_EventChannel_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db6e5631fc1e5ff158dfc77123c7e752"}]},
+ {'CosNotifyChannelAdmin_NotConnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7f5e3229c7849f94b0744a78e38012c"}]},
+ {'CosNotifyChannelAdmin_ProxyConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b1aa19779800f6e97852f5a2e8042641"}]},
+ {'CosNotifyChannelAdmin_ProxyIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf0a62dd47773a5a4df90f70644c4e24"}]},
+ {'CosNotifyChannelAdmin_ProxyNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"735c610478319545c1a68c1c8b75609d"}]},
+ {'CosNotifyChannelAdmin_ProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6cc803a524bd58d1c33bee3fb8f92ac7"}]},
+ {'CosNotifyChannelAdmin_ProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1683d6e08309fb3fc51d127c407348a"}]},
+ {'CosNotifyChannelAdmin_ProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94416e046b1c566bfa8df9bc1884bea5"}]},
+ {'CosNotifyChannelAdmin_ProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61c57643509be14cbb5e82090fb5bf6d"}]},
+ {'CosNotifyChannelAdmin_ProxySupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c1c83635cd4d1e4a50577e68f084a39"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af562a179799a5ae781278e980912710"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da43e615a23f2485758bec039617792c"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a876b3b2c655fa98e23510ca72be236"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55954cf819fb29c74e8c7fa7dcb17eb8"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aeb95ea3a9deb7c129dccfd77df7976c"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e72e1de7fb0ea440aae9ca791fbdd403"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d277b85ea15126c7645eccc585325ee2"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7339f8c2876066369e6afa27267bfd81"}]},
+ {'CosNotifyChannelAdmin_SupplierAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"043d43346f3ff5c2775bf7030a13e1d9"}]},
+ {'CosNotifyChannelAdmin_SupplierAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efe73dc58fd1b27c2adc184018e4091a"}]},
+ {'CosNotifyComm_InvalidEventType',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"516a9a10d779d7b47a5752d0b4278017"}]},
+ {'CosNotifyComm_NotifyPublish',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c50da2c5c4d79c4cd3974c37b6165fbd"}]},
+ {'CosNotifyComm_NotifySubscribe',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"180ce40d1660bec349bb7ddf1275c985"}]},
+ {'CosNotifyComm_PullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd7be30cd0685dbb3e0f22b4de8ffb91"}]},
+ {'CosNotifyComm_PullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e76b3f6be347a5d08350ae25cddc77c1"}]},
+ {'CosNotifyComm_PushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2c972f2affe7f936ec38997084045b1"}]},
+ {'CosNotifyComm_PushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"416e6887077de70bf3aa7cf6c6b35a9c"}]},
+ {'CosNotifyComm_SequencePullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1322fb2dadb5669a36391f12455c6969"}]},
+ {'CosNotifyComm_SequencePullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"281779a70fdae7a1de3e569ae707d21a"}]},
+ {'CosNotifyComm_SequencePushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"701eb7ecaef2fb7f13b5adf2ff8a97aa"}]},
+ {'CosNotifyComm_SequencePushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ceb164baf53b3df5f90fdbef4c800d8d"}]},
+ {'CosNotifyComm_StructuredPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70d2e255c8613a9d58a4f1f69b1adf51"}]},
+ {'CosNotifyComm_StructuredPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa8164033103e1c40f7721471fa6b8fd"}]},
+ {'CosNotifyComm_StructuredPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684f225a8d760e970a4380c303f82662"}]},
+ {'CosNotifyComm_StructuredPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de1b05e00095ac428839c165db9f92fc"}]},
+ {'CosNotifyFilter_CallbackIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab4cfad0073e21b629ebd16f8973912"}]},
+ {'CosNotifyFilter_CallbackNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ae7cd265c665a4cd4a969c75388b1fc"}]},
+ {'CosNotifyFilter_ConstraintExp',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"421355667259ba4906ed0b0ba89ae1ba"}]},
+ {'CosNotifyFilter_ConstraintExpSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ef901d08223839966e5d67b55731e63"}]},
+ {'CosNotifyFilter_ConstraintIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50d0d1e84309217b5a2864eb2df3653b"}]},
+ {'CosNotifyFilter_ConstraintInfo',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e988281d1a6d6d2ba412a86cb1b89e0b"}]},
+ {'CosNotifyFilter_ConstraintInfoSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff21820130cfa051a6781e79f53171af"}]},
+ {'CosNotifyFilter_ConstraintNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1611f041bd2826435c850dc36b2a6953"}]},
+ {'CosNotifyFilter_DuplicateConstraintID',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40c6d62f59e44a14649e3de2e78deafd"}]},
+ {'CosNotifyFilter_Filter',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"864d9d277d782fca9a15809c5c195c1c"}]},
+ {'CosNotifyFilter_FilterAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ee1e90ea0fbde4a0c53036e0efa4b89a"}]},
+ {'CosNotifyFilter_FilterFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b59a3c5c5e24a9a389792ea9ff254312"}]},
+ {'CosNotifyFilter_FilterFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40bc158ddcbb31abff87fe4da270b55a"}]},
+ {'CosNotifyFilter_FilterIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dd80855340f372c0682a53a6d3bc216"}]},
+ {'CosNotifyFilter_FilterNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbdd34c6e28fb4c907410c2f7bc82f92"}]},
+ {'CosNotifyFilter_Filter_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6911bf97e4ebe2333e7e19914d821ea"}]},
+ {'CosNotifyFilter_InvalidConstraint',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"beaedbe7bcec40b0d90a0404dde063a9"}]},
+ {'CosNotifyFilter_InvalidGrammar',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0055f6477430cf9c38cce84d93393a12"}]},
+ {'CosNotifyFilter_InvalidValue',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"041b66a4b7933005a983848254dec48c"}]},
+ {'CosNotifyFilter_MappingConstraintInfo',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab3093c4688953509866f4128d0747d2"}]},
+ {'CosNotifyFilter_MappingConstraintInfoSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f81b4c571998ef9f1cefa77c45be6e5"}]},
+ {'CosNotifyFilter_MappingConstraintPair',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"305991c110aca04df1398bd3b640e284"}]},
+ {'CosNotifyFilter_MappingConstraintPairSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7bd7692f2d9ad411d3d4323ff4ef9a2d"}]},
+ {'CosNotifyFilter_MappingFilter',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbd3cd1cce0f195048025a19666e4bb8"}]},
+ {'CosNotifyFilter_MappingFilter_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c337925555dac8714bcde4ff0ac3682"}]},
+ {'CosNotifyFilter_UnsupportedFilterableData',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64044f951a82b03309ab90082ed6d354"}]},
+ {'PullerConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a96588beb8db62195c499ba6a61cc53f"}]},
+ {'PullerSupplier_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90058bd6464dc08f79814185696ce1fb"}]},
+ {'PusherConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72a8f62fb563174cf54b97aa1206b293"}]},
+ {'PusherSupplier_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d03a842669765bf9907b644957fa7cb"}]},
+ {cosNotificationApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a6dabb21a8926c7f733904336b3375b"}]},
+ {cosNotification_Filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63cb134b80f03d8399abe10908055e40"}]},
+ {cosNotification_Grammar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5636b97c6e449aeafada1b5df5b6e91"}]},
+ {cosNotification_Scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c6334416492eb7be457c13d39b92222"}]},
+ {cosNotification_eventDB,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d52b15cf6eaba713bb979684b54fb8df"}]},
+ {oe_CosNotification,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"961cde96216694db976f1f714b0f4d6c"}]},
+ {oe_CosNotificationComm_Event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"affa53e3f3dfcb411ff317d98a5ce64a"}]},
+ {oe_CosNotifyChannelAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ed58499950adf48241f1701c2116857"}]},
+ {oe_CosNotifyComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a944c5aa4379e8f3b07acc9c5fd56f9a"}]},
+ {oe_CosNotifyFilter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c51f3aaa451621c060bdb0d707324fbd"}]},
+ {oe_cosNotificationAppComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed879b4fb4e5e3438e523069a29ce1aa"}]}]}]}},
+ {application,
+ {cosFileTransfer,
+ [{description,"The Erlang CosFileTransfer application"},
+ {vsn,"1.1.15"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin"},
+ {modules,
+ [{'CosFileTransfer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"537730bb6ac118a9f672ea5c5616502c"}]},
+ {'CosFileTransfer_AccessLevel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"538517d444956f350c54176200fa9c2d"}]},
+ {'CosFileTransfer_CommandNotImplementedException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06bb7e58f28ad101e4cb2cd2336d3698"}]},
+ {'CosFileTransfer_Directory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3504d2207476a6439367e5e20b442bc"}]},
+ {'CosFileTransfer_Directory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ca00e96f4f13619cbcaf663edf819405"}]},
+ {'CosFileTransfer_File',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"082fb7de49fb7a94ad34873e876fbdd8"}]},
+ {'CosFileTransfer_FileIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7fce306a50dbb7edaea5f9eeec1d5ce"}]},
+ {'CosFileTransfer_FileIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb5946f486a03df082e02ec55308e270"}]},
+ {'CosFileTransfer_FileList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f508ab863f8cf90e46fda1e2bc6a01b"}]},
+ {'CosFileTransfer_FileNameList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2044a2695019499e1294315eea9f3092"}]},
+ {'CosFileTransfer_FileNotFoundException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b00961e88651b5ab62c9d20b2d60c6e0"}]},
+ {'CosFileTransfer_FileTransferSession',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"102d05bd8c1fda9dfa1ba3769ef283fd"}]},
+ {'CosFileTransfer_FileTransferSession_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6774a931a16efaa7bcbf342ef660b49"}]},
+ {'CosFileTransfer_FileWrapper',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d19e7d1eeb8b381847003f8837be28d"}]},
+ {'CosFileTransfer_File_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64eda7b0b054da3e646bba7fbe6be70d"}]},
+ {'CosFileTransfer_IllegalOperationException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"25a05f47c3c2fc5d14d135acb6d72a5f"}]},
+ {'CosFileTransfer_ProtocolAddressList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4587002261d4308181fc93122a15cea9"}]},
+ {'CosFileTransfer_ProtocolSupport',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7937786969ccbba0967581d3c25ad54"}]},
+ {'CosFileTransfer_RequestFailureException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"384095c7be94a7544378f029e966cf2e"}]},
+ {'CosFileTransfer_SessionException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ef101cef5808b9d7c08037e15ee66fa"}]},
+ {'CosFileTransfer_SupportedProtocolAddresses',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d145c64e85be77403b797ad505564018"}]},
+ {'CosFileTransfer_TransferException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4b8f0ca1710b11ed6d723ee1692c46c"}]},
+ {'CosFileTransfer_VirtualFileSystem',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37e0d0057b23e3e1563b19539bc0a76d"}]},
+ {'CosFileTransfer_VirtualFileSystem_ContentList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165e5f4d21952fc5eb1f0a289c571fbc"}]},
+ {'CosFileTransfer_VirtualFileSystem_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"81b6bf0f44b0eab55cebc3d408671e0a"}]},
+ {cosFileTransferApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed8d595027fd9c5f7dd1e9398a4351bf"}]},
+ {cosFileTransferNATIVE_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91cd6a5ac4ba42b3d2ef0c0cf4c48270"}]},
+ {oe_CosFileTransfer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"683aa469ec95c19f32d0f62f5f7ef6e7"}]}]}]}},
+ {application,
+ {cosEventDomain,
+ [{description,"The Erlang CosEventDomain application"},
+ {vsn,"1.1.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin"},
+ {modules,
+ [{'CosEventDomainAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e2d9e538ddd0f2a2fa74f499e042db1"}]},
+ {'CosEventDomainAdmin_AlreadyExists',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1ce2f0d94e633823bedf296aa1527e5"}]},
+ {'CosEventDomainAdmin_Connection',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d8e1bead63a2d7644f36edd4a66772"}]},
+ {'CosEventDomainAdmin_ConnectionIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56929f00f5dcec6d75408d85921c693f"}]},
+ {'CosEventDomainAdmin_ConnectionNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4de106e024e8f9f45783dd7b45af2cc1"}]},
+ {'CosEventDomainAdmin_CycleCreationForbidden',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a28090bafe2078be88ee5cb996f9d23"}]},
+ {'CosEventDomainAdmin_CycleSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3232a8bb21e31c81f7791fdf0359d945"}]},
+ {'CosEventDomainAdmin_DiamondCreationForbidden',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b9e307237ee3408e348d4593c0de997"}]},
+ {'CosEventDomainAdmin_DiamondSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"65478f4d3f155d7547b52ea7d04f6628"}]},
+ {'CosEventDomainAdmin_DomainIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f44a097ccf00511ed397775b33991a8"}]},
+ {'CosEventDomainAdmin_DomainNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e17639bb3b5f18e80cd8f505191dbc7c"}]},
+ {'CosEventDomainAdmin_EventDomain',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b21b34fcceae9698702dadc469ef2cd1"}]},
+ {'CosEventDomainAdmin_EventDomainFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcf4395bcda2d977235b24ec4416ddec"}]},
+ {'CosEventDomainAdmin_EventDomainFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a7d21747fe63505e98037202798cca90"}]},
+ {'CosEventDomainAdmin_EventDomain_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2801240b7c96984648d565b9b210b8fb"}]},
+ {'CosEventDomainAdmin_MemberIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"889c0e92b864877d5c2bbbd2ed185575"}]},
+ {'CosEventDomainAdmin_RouteSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f77038e040e610031d35f876dfa2925e"}]},
+ {cosEventDomainApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea692728e2b3d71f1f486a7aece4df48"}]},
+ {oe_CosEventDomainAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"939160a9e6adced7edf36e0a18927785"}]}]}]}},
+ {application,
+ {cosEvent,
+ [{description,"The Erlang CosEvent application"},
+ {vsn,"2.1.14"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin"},
+ {modules,
+ [{'CosEventChannelAdmin_AlreadyConnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64cb912070ade0d3254585904ba4c509"}]},
+ {'CosEventChannelAdmin_ConsumerAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e027fd366965c17a0b51c3cfd80dcd4f"}]},
+ {'CosEventChannelAdmin_EventChannel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8d2e64b53114282c8c353dd5110ea9e"}]},
+ {'CosEventChannelAdmin_ProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9aef474c8cb0c5e9e2cb5d4cc43fe52d"}]},
+ {'CosEventChannelAdmin_ProxyPullConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9057fc161db130ea1ee3bd656b083ad0"}]},
+ {'CosEventChannelAdmin_ProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"11cc90a016f1b493838f6f79caa959fa"}]},
+ {'CosEventChannelAdmin_ProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21b14ec7e74c8632349f31cb70324ca6"}]},
+ {'CosEventChannelAdmin_ProxyPushConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dabc851d850f372affa761150136640d"}]},
+ {'CosEventChannelAdmin_ProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d32c6d87385b474519aa936d9bd79256"}]},
+ {'CosEventChannelAdmin_SupplierAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b26b61665649ea2af6fc2b7174d7c4f7"}]},
+ {'CosEventChannelAdmin_SupplierAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8606a32b7269881c1f455edce89344db"}]},
+ {'CosEventChannelAdmin_TypeError',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"20bb7e990eb8d6b0e854919c0dff94cc"}]},
+ {'CosEventComm_Disconnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2ec0e6b1fa849a2ab22fdd1ce14ecb7"}]},
+ {'CosEventComm_PullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43972738bc29806b38419aaf76d8c393"}]},
+ {'CosEventComm_PullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5206247fdf5b00621d3732805fe1854a"}]},
+ {'CosEventComm_PushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72937626c2c3f3689fb6dafed66bad17"}]},
+ {'CosEventComm_PushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"54875107d8748bac2b96a3037669a477"}]},
+ {cosEventApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dab9a7b6c3106899fe7d2c9e74fcb021"}]},
+ {oe_CosEventChannelAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b192666923744044b3a0e652ec9e9948"}]},
+ {oe_CosEventComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"884bef0af9742bfe5f3f7e345d24cd18"}]},
+ {oe_CosEventComm_CAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f344012f72ef7bfbdef3d29d525e2896"}]},
+ {oe_CosEventComm_CAdmin_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"935565447529d9e97da7b98c3631cc92"}]},
+ {oe_CosEventComm_Channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe816f373688feb5c63c10543eedd3c2"}]},
+ {oe_CosEventComm_Channel_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c3c48bf48ac0b63f62d82064f9ce32f"}]},
+ {oe_CosEventComm_Event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f5146f9630ff6e60665cf32fc7e6641"}]},
+ {oe_CosEventComm_PullerS,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbd58f368f06b16fa0a7628594f84c44"}]},
+ {oe_CosEventComm_PullerS_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bd0c1df9074f1a792985b4ff1b0ec98"}]},
+ {oe_CosEventComm_PusherS,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"36dc7eaaa1b298b7875dd41b3e6b5b85"}]},
+ {oe_CosEventComm_PusherS_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63c64664227a2772b5ad3d0c6519f8c4"}]},
+ {oe_cosEventApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc2ca7e6febb762f39f337c5303390e6"}]}]}]}},
+ {application,
+ {compiler,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"4.9.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin"},
+ {modules,
+ [{beam_a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a338f3a7878d0c9a407950fcb5a2e7ed"}]},
+ {beam_asm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cef85f8577595b73910fa77803c58cdb"}]},
+ {beam_block,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e7610e6f816e2c8d869e7ce1c44cba8"}]},
+ {beam_bool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3fcb1cec9f4370800203e1189c01a10c"}]},
+ {beam_bsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"973abf79efd649a3f0eb1b3351b4fe92"}]},
+ {beam_clean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0c6b67b764da86372deb11b4c5154f4"}]},
+ {beam_dead,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff4f53d218b932103fcf093dbd366584"}]},
+ {beam_dict,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e8c36a21a5287a84844e7ffa0a9bbb"}]},
+ {beam_disasm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63dd1f997343124a900e2fe982fe4cad"}]},
+ {beam_except,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89dd12d9c4781f83554a9d2101d623d8"}]},
+ {beam_flatten,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1e49fa674cc580042459878a27403e9"}]},
+ {beam_jump,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a9f1ce9787205a57d137424b5ab022b"}]},
+ {beam_listing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e9a84340142cd7c90e95851ab1260a0f"}]},
+ {beam_opcodes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d5d21bc2584bf078639eba76a18d221"}]},
+ {beam_peep,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d81c38cab19af16ff472ce5838c63b1"}]},
+ {beam_receive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7d22ec74972c53f3f93bd01dbe369370"}]},
+ {beam_split,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03b0416d0fee9081f68cf6468d036170"}]},
+ {beam_trim,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a6a01870ff8f8bda3ea36184da7348a"}]},
+ {beam_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc4a9521730959ffc10d3ccebd20861d"}]},
+ {beam_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7d2b1d7cc0722d47c7fd72fa6487d27"}]},
+ {beam_validator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed5a82e40ba511c22291f87c1e2b705b"}]},
+ {beam_z,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ffafc7070cf14ec69d569b0f8106f9a"}]},
+ {cerl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38c2ac91b52a3141d74df2f219b45eb5"}]},
+ {cerl_clauses,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75da88dc5ced060fe52f177dae449ac0"}]},
+ {cerl_inline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"976487fce255a37192ac2a9258cdacf9"}]},
+ {cerl_trees,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a240a6560f194a05956f572e436a6861"}]},
+ {compile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98a40d5fc6bcd14ac5e516a506b6161f"}]},
+ {core_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bdda978e16a885a17587e575cb2b369"}]},
+ {core_lint,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"633c18d069ada94f1f1dfec526de2a2a"}]},
+ {core_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21b745083d46bbe9725eb423f0c73c7a"}]},
+ {core_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9940bb6f480fe3438bf97863ad0a5755"}]},
+ {core_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1f3ff89deb03f34714390b93e678989c"}]},
+ {erl_bifs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74c0a1563ea88b196dc2a18b1a34ffed"}]},
+ {rec_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a6fdcf8ffe126bb2838f86949ced210"}]},
+ {sys_core_dsetel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2c45d53e09f1b3f4e92b8f2ff8adf258"}]},
+ {sys_core_fold,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac092bdc7362a76cda76e27ad5610ec7"}]},
+ {sys_core_inline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f439077cdab9795b782412d556828fa"}]},
+ {sys_pre_attributes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc95feafdeca105f38589c4ca7b43532"}]},
+ {sys_pre_expand,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b1c1e3bf39af00ca2988295aa2fbdbb"}]},
+ {v3_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"590be66e39ccc3e6260a412ccbc8becd"}]},
+ {v3_core,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5997d0774f74e0bad9b8887d24a8bfa3"}]},
+ {v3_kernel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21a4b3edd53de6b910df1b99219824fc"}]},
+ {v3_kernel_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ec5b0e503bcf660d6da8aca9cba9682"}]},
+ {v3_life,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb4ae7606e9409846d17c5c60751b08f"}]}]}]}},
+ {application,
+ {common_test,
+ [{description,"The OTP Common Test application"},
+ {vsn,"1.7.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin"},
+ {modules,
+ [{ct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1f3d139ac677184b601722b92977b971"}]},
+ {ct_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0257a2b9a5ed7e176df35b2c39a03a5a"}]},
+ {ct_config_plain,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8330eca3a0e4401b3a8f9508343df5cc"}]},
+ {ct_config_xml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3502006ebdcc975febe9d750b28fd2b0"}]},
+ {ct_conn_log_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f2e020e7c92f8a7c2c148faf855c9b0"}]},
+ {ct_cover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76b9cecb99d35c0bf38daa0a7107ddeb"}]},
+ {ct_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2dfbb0a114e64e69b012a83a29312fe8"}]},
+ {ct_framework,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d65dc75bd25fe8c45b3e574d18b0be87"}]},
+ {ct_ftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f60d1979bd240e45fb63deb00c6dae6e"}]},
+ {ct_gen_conn,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"abb8aa2681d03230890eb5f3fcaffc6b"}]},
+ {ct_groups,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f3c50d44938374c7e364cef4c905079"}]},
+ {ct_hooks,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5fbdbe96e81a1abe94ff6ce0c20c9574"}]},
+ {ct_hooks_lock,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e94b9611b2abb9a665606264fb96c2c"}]},
+ {ct_logs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec22f1709750c55acff646a44502c2db"}]},
+ {ct_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a2f7f755c88a136bbe56c5415901e217"}]},
+ {ct_master,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d8a8fd7184fd07d8caec68f3653b7f8"}]},
+ {ct_master_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c497dbbef03d74f085ee633998aecba"}]},
+ {ct_master_logs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2180f96ad17256256d5ef731ac4d04"}]},
+ {ct_master_status,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d63adbf76f9afa47c576284d77d75a9"}]},
+ {ct_netconfc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bff4907efdc764c267f373d12956eca"}]},
+ {ct_repeat,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b18f0f016143922207ef2dd5577d60dc"}]},
+ {ct_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51957dfa13552f236dad5ad5ab1f83a0"}]},
+ {ct_run,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcaaaf893ba391b4ce961c33d48b3b5f"}]},
+ {ct_slave,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6b03499c65f734a1ad97e2fce458be92"}]},
+ {ct_snmp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a6826b2fdf26d9e775f8352ab15b454"}]},
+ {ct_ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"657b8f076669c2db4245acd4bc8254d7"}]},
+ {ct_telnet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47a92efe0ab4b30fe83d83d8d429a8fe"}]},
+ {ct_telnet_client,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53f220488e09886c1933a060c000dddf"}]},
+ {ct_testspec,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb607ba1ef1abdab4ba76e654cbd1ce1"}]},
+ {ct_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6178d700637198b47134c927348b72b"}]},
+ {cth_conn_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"113d8b745a6d162d678b03dba49ea048"}]},
+ {cth_log_redirect,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7da913515a3b5841c7da153ce0883cb"}]},
+ {cth_surefire,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c7c9d2147289740b913895898126f1a"}]},
+ {unix_telnet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d38cf476a56523e6222de857b16e89d0"}]},
+ {vts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a31c45897c8d9fe60fbc9115599edcf7"}]}]}]}},
+ {application,
+ {asn1,
+ [{description,"The Erlang ASN1 compiler version 2.0.2"},
+ {vsn,"2.0.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin"},
+ {modules,
+ [{asn1_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9af64def8344330927cefe9a2bf9a8a"}]},
+ {asn1ct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"352b6c8edb6cf7dfc39b3b6b6b0a7b35"}]},
+ {asn1ct_check,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ef3333d2a492df6b90deff919f28b58"}]},
+ {asn1ct_constructed_ber_bin_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41e917757a2c1195b8f86749a5905d64"}]},
+ {asn1ct_constructed_per,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63d5e7bf85a641a2529c81c7888bfb52"}]},
+ {asn1ct_eval_ext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f5e38c39875f699ad76e07de7b073b7"}]},
+ {asn1ct_func,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea7118ee0d45ac6641313e378a1733db"}]},
+ {asn1ct_gen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5b2688ada58f6ed45c2e7e841088e3e"}]},
+ {asn1ct_gen_ber_bin_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"26db838a5c213d6ec1fe2fdf997a06d1"}]},
+ {asn1ct_gen_per,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a67d91fec991b9f08680c35e95f907f0"}]},
+ {asn1ct_imm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9288c73c656cf6d60fd74bd7946581b2"}]},
+ {asn1ct_name,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ea14b79e5eb0ae2c3f08f92241f9c4f"}]},
+ {asn1ct_parser2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a7951b400104d9f72bcfbb7405e4404"}]},
+ {asn1ct_pretty_format,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dc1240d0e121f12732f8469cbd23051a"}]},
+ {asn1ct_rtt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f24866e9e2295b4f6c5553ae44d53270"}]},
+ {asn1ct_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d4ec9835f20bc046769547da299363c"}]},
+ {asn1ct_tok,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19908cc77297850954d101491e5eb97d"}]},
+ {asn1ct_value,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"388ba3507e46869822607142eef38d70"}]},
+ {asn1rt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0160799421ccb619fc6b08099bfaf37b"}]},
+ {asn1rt_nif,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c579098c3d97270d004e54a94e42daa"}]}]}]}},
+ {application,
+ {appmon,
+ [{description,"DEVTOOLS CXC 138 16"},
+ {vsn,"2.1.14.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"},
+ {modules,
+ [{appmon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97b8d88aecbd66963563a5aa5df0d0bc"}]},
+ {appmon_a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"adb9049e71eb9e2131b6952974302b4c"}]},
+ {appmon_dg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"438c40af3e96404e73904864597dcca0"}]},
+ {appmon_lb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d851ee67b54dbf0da46cb21a8c1f7bd9"}]},
+ {appmon_place,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"192140bb8bc7e74fd7121d8da2019c56"}]},
+ {appmon_txt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34c7f9da76880b4f7fcfeb0856fcc097"}]},
+ {appmon_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"449317a9770ff1aa4cf001604bd2261c"}]},
+ {process_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6d86fad6d0d208318c48af00853ec5b"}]}]}]}}]},
+ {system_info,
+ [{allocator,
+ {glibc,
+ [2,4],
+ [sys_alloc,temp_alloc,sl_alloc,std_alloc,ll_alloc,
+ eheap_alloc,ets_alloc,fix_alloc,binary_alloc,driver_alloc,
+ mseg_alloc],
+ [{sys_alloc,[{e,true},{m,libc},{tt,131072},{tp,0}]},
+ {temp_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,90},
+ {rsbcmt,80},
+ {rmbcmt,100},
+ {mmbcs,131072},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,10485760},
+ {smbcs,1048576},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {sl_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,80},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {std_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {ll_alloc,
+ [{e,true},
+ {t,false},
+ {ramv,false},
+ {sbct,18446744073709551615},
+ {asbcst,0},
+ {rsbcst,0},
+ {rsbcmt,0},
+ {rmbcmt,0},
+ {mmbcs,2097112},
+ {mmmbc,18446744073709551615},
+ {mmsbc,0},
+ {lmbcs,10485760},
+ {smbcs,1048576},
+ {mbcgs,10},
+ {acul,0},
+ {as,aobf}]},
+ {eheap_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,50},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,131072},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {ets_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {fix_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,aobf}]},
+ {binary_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {driver_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {mseg_alloc,[{amcbf,4194304},{rmcbf,20},{mcs,10}]},
+ {alloc_util,[{mmc,1024},{ycs,1048576}]},
+ {instr,[{m,false},{s,false},{t,false}]}]}},
+ {check_io,
+ [{name,erts_poll},
+ {primary,poll},
+ {fallback,false},
+ {kernel_poll,false},
+ {memory_size,49808},
+ {total_poll_set_size,2},
+ {lazy_updates,true},
+ {pending_updates,0},
+ {batch_updates,false},
+ {concurrent_updates,false},
+ {max_fds,1024}]},
+ {otp_release,"R16B02"},
+ {port_limit,65536},
+ {process_limit,262144},
+ {smp_support,true},
+ {system_version,
+ "Erlang R16B02 (erts-5.10.3) [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]\n"},
+ {system_architecture,"x86_64-unknown-linux-gnu"},
+ {threads,true},
+ {thread_pool_size,10},
+ {{wordsize,internal},8},
+ {{wordsize,external},8},
+ {{cpu_topology,defined},undefined},
+ {{cpu_topology,detected},
+ [{node,
+ [{processor,[{core,{logical,0}},{core,{logical,1}}]}]},
+ {node,
+ [{processor,[{core,{logical,2}},{core,{logical,3}}]}]}]},
+ {scheduler_bind_type,unbound},
+ {scheduler_bindings,{unbound,unbound,unbound,unbound}},
+ {compat_rel,16},
+ {schedulers_state,{4,4,4}},
+ {build_type,opt},
+ {logical_processors,4},
+ {logical_processors_online,4},
+ {logical_processors_available,4},
+ {driver_version,"2.1"},
+ {nif_version,"1.1"},
+ {taints,[]}]},
+ {erts_compile_info,
+ [{ldflags,[]},
+ {cflags,
+ "-g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -DERTS_SMP -DHAVE_CONFIG_H -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS "},
+ {config_h,
+ "/* x86_64-unknown-linux-gnu/config.h. Generated by configure. */\n/* config.h.in. Generated from configure.in by autoheader. */\n\n\n#define GHBN_R_SOLARIS 2\n#define GHBN_R_AIX 3\n#define GHBN_R_GLIBC 4\n\n\n/* Define the brk() argument type. */\n#define BRK_ARG_TYPE void *\n\n/* Define the brk() return type. */\n#define BRK_RET_TYPE int\n\n/* Define if you do not have a high-res. timer & want to use times() instead\n */\n/* #undef CORRECT_USING_TIMES */\n\n/* Modern style mcontext_t in MacOSX */\n/* #undef DARWIN_MODERN_MCONTEXT */\n\n/* Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H */\n\n/* Define if you need to include winsock2.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_WINSOCK2_H */\n\n/* Define if you want to disable child waiter thread */\n/* #undef DISABLE_CHILD_WAITER_THREAD */\n\n/* Define if you want to disable vfork. */\n/* #undef DISABLE_VFORK */\n\n/* Define to 1 if your processor stores the words in a double in middle-endian\n format (like some ARMs). */\n/* #undef DOUBLE_MIDDLE_ENDIAN */\n\n/* Define if you want to enable child waiter thread */\n/* #undef ENABLE_CHILD_WAITER_THREAD */\n\n/* Define if sbrk()/brk() wrappers can track malloc()s core memory use */\n/* #undef ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC */\n\n/* The only reason ERTS_EMU_CMDLINE_FLAGS exists is to force modification of\n config.h when the emulator command line flags are modified by configure */\n#define ERTS_EMU_CMDLINE_FLAGS \" -g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -g -D_GNU_SOURCE -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement\"\n\n/* Define if you have kernel poll and want to use it */\n#define ERTS_ENABLE_KERNEL_POLL 1\n\n/* Define if the smp emulator is built */\n#define ERTS_HAVE_SMP_EMU 1\n\n/* Define if dlopen() needs to be called before first call to dlerror() */\n/* #undef ERTS_NEED_DLOPEN_BEFORE_DLERROR */\n\n/* Define if poll() should be used instead of select() */\n#define ERTS_USE_POLL 1\n\n/* Define if __after_morecore_hook can track malloc()s core memory use. */\n#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1\n\n/* Define if bigendian */\n/* #undef ETHR_BIGENDIAN */\n\n/* Define if you get a register shortage with cmpxchg8b and position\n independent code */\n/* #undef ETHR_CMPXCHG8B_REGISTER_SHORTAGE */\n\n/* Define if you want to disable native ethread implementations */\n/* #undef ETHR_DISABLE_NATIVE_IMPLS */\n\n/* Define if you want to force usage of pthread rwlocks */\n/* #undef ETHR_FORCE_PTHREAD_RWLOCK */\n\n/* Define if you use a gcc that supports the double word cmpxchg instruction\n */\n#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1\n\n/* Define if you use a gcc that supports -msse2 and understand sse2 specific\n asm statements */\n/* #undef ETHR_GCC_HAVE_SSE2_ASM_SUPPORT */\n\n/* Define if you have all ethread defines */\n#define ETHR_HAVE_ETHREAD_DEFINES 1\n\n/* Define if you have libatomic_ops atomic operations */\n/* #undef ETHR_HAVE_LIBATOMIC_OPS */\n\n/* Define if you have a linux futex implementation. */\n#define ETHR_HAVE_LINUX_FUTEX 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef ETHR_HAVE_MIT_PTHREAD_H */\n\n/* Define if you have the pthread_attr_setguardsize function. */\n#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1\n\n/* Define if you have the <pthread.h> header file. */\n#define ETHR_HAVE_PTHREAD_H 1\n\n/* Define if you have the pthread_rwlockattr_setkind_np() function. */\n#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1\n\n/* Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock\n attribute. */\n#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1\n\n/* Define if you have the pthread_spin_lock function. */\n#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1\n\n/* Define if you have the pthread_yield() function. */\n#define ETHR_HAVE_PTHREAD_YIELD 1\n\n/* Define if you have the <sched.h> header file. */\n#define ETHR_HAVE_SCHED_H 1\n\n/* Define if you have the sched_yield() function. */\n#define ETHR_HAVE_SCHED_YIELD 1\n\n/* Define if you have the <sys/time.h> header file. */\n#define ETHR_HAVE_SYS_TIME_H 1\n\n/* Define if you have _InterlockedAnd() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND */\n\n/* Define if you have _InterlockedAnd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND64 */\n\n/* Define if you have _InterlockedCompareExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE */\n\n/* Define if you have _InterlockedCompareExchange128() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 */\n\n/* Define if you have _InterlockedCompareExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 */\n\n/* Define if you have _InterlockedCompareExchange64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ */\n\n/* Define if you have _InterlockedCompareExchange64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL */\n\n/* Define if you have _InterlockedCompareExchange_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ */\n\n/* Define if you have _InterlockedCompareExchange_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL */\n\n/* Define if you have _InterlockedDecrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT */\n\n/* Define if you have _InterlockedDecrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64 */\n\n/* Define if you have _InterlockedDecrement64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL */\n\n/* Define if you have _InterlockedDecrement_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT_REL */\n\n/* Define if you have _InterlockedExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE */\n\n/* Define if you have _InterlockedExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE64 */\n\n/* Define if you have _InterlockedExchangeAdd() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD */\n\n/* Define if you have _InterlockedExchangeAdd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 */\n\n/* Define if you have _InterlockedExchangeAdd64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ */\n\n/* Define if you have _InterlockedExchangeAdd_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ */\n\n/* Define if you have _InterlockedIncrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT */\n\n/* Define if you have _InterlockedIncrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64 */\n\n/* Define if you have _InterlockedIncrement64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ */\n\n/* Define if you have _InterlockedIncrement_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ */\n\n/* Define if you have _InterlockedOr() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR */\n\n/* Define if you have _InterlockedOr64() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR64 */\n\n/* Define if you have __sync_add_and_fetch() for 32-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH32 1\n\n/* Define if you have __sync_add_and_fetch() for 64-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH64 1\n\n/* Define if you have __sync_fetch_and_and() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND32 1\n\n/* Define if you have __sync_fetch_and_and() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND64 1\n\n/* Define if you have __sync_fetch_and_or() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR32 1\n\n/* Define if you have __sync_fetch_and_or() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR64 1\n\n/* Define if you have __sync_val_compare_and_swap() for 128-bit integers */\n/* #undef ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128 */\n\n/* Define if you have __sync_val_compare_and_swap() for 32-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32 1\n\n/* Define if you have __sync_val_compare_and_swap() for 64-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64 1\n\n/* Define if you want to modify the default stack size */\n/* #undef ETHR_MODIFIED_DEFAULT_STACK_SIZE */\n\n/* Define if you need the <nptl/pthread.h> header file. */\n/* #undef ETHR_NEED_NPTL_PTHREAD_H */\n\n/* Define if you prefer gcc native ethread implementations */\n/* #undef ETHR_PREFER_GCC_NATIVE_IMPLS */\n\n/* Define if you prefer libatomic_ops native ethread implementations */\n/* #undef ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS */\n\n/* Define if you have pthreads */\n#define ETHR_PTHREADS 1\n\n/* Define if pthread_yield() returns an int. */\n#define ETHR_PTHREAD_YIELD_RET_INT 1\n\n/* Define if sched_yield() returns an int. */\n#define ETHR_SCHED_YIELD_RET_INT 1\n\n/* Define to the size of AO_t if libatomic_ops is used */\n/* #undef ETHR_SIZEOF_AO_T */\n\n/* Define to the size of int */\n#define ETHR_SIZEOF_INT 4\n\n/* Define to the size of long */\n#define ETHR_SIZEOF_LONG 8\n\n/* Define to the size of long long */\n#define ETHR_SIZEOF_LONG_LONG 8\n\n/* Define to the size of pointers */\n#define ETHR_SIZEOF_PTR 8\n\n/* Define to the size of __int128_t */\n#define ETHR_SIZEOF___INT128_T 16\n\n/* Define to the size of __int64 */\n#define ETHR_SIZEOF___INT64 0\n\n/* Define if only run in Sparc PSO, or TSO mode */\n/* #undef ETHR_SPARC_PSO */\n\n/* Define if run in Sparc RMO, PSO, or TSO mode */\n/* #undef ETHR_SPARC_RMO */\n\n/* Define if only run in Sparc TSO mode */\n/* #undef ETHR_SPARC_TSO */\n\n/* Define if you can safely include both <sys/time.h> and <time.h>. */\n#define ETHR_TIME_WITH_SYS_TIME 1\n\n/* Define if you have win32 threads */\n/* #undef ETHR_WIN32_THREADS */\n\n/* Define if x86/x86_64 out of order instructions should be synchronized */\n/* #undef ETHR_X86_OUT_OF_ORDER */\n\n/* Define if you want to use clock_gettime to simulate gethrtime */\n#define GETHRTIME_WITH_CLOCK_GETTIME 1\n\n/* Define if building a halfword-heap 64bit emulator */\n/* #undef HALFWORD_HEAP_EMULATOR */\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `brk' function. */\n#define HAVE_BRK 1\n\n/* define if clock_gettime() works for getting process time */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define if you have a decl of fread that conflicts with int fread */\n#define HAVE_CONFLICTING_FREAD_DECLARATION 1\n\n/* Define if you have a putenv() that stores a copy of the key-value pair */\n/* #undef HAVE_COPYING_PUTENV */\n\n/* Define if you have cpuset_getaffinity/cpuset_setaffinity */\n/* #undef HAVE_CPUSET_xETAFFINITY */\n\n/* Define to 1 if you have the declaration of `getrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_GETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_ANY_INIT', and to 0 if\n you don't. */\n#define HAVE_DECL_IN6ADDR_ANY_INIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_LOOPBACK_INIT', and to\n 0 if you don't. */\n#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT 1\n\n/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you\n don't. */\n#define HAVE_DECL_IPV6_V6ONLY 1\n\n/* Define to 1 if you have the declaration of `posix2time', and to 0 if you\n don't. */\n#define HAVE_DECL_POSIX2TIME 0\n\n/* Define to 1 if you have the declaration of `RLIMIT_STACK', and to 0 if you\n don't. */\n#define HAVE_DECL_RLIMIT_STACK 1\n\n/* Define to 1 if you have the declaration of `SCTPS_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_ECHOED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_WAIT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_ESTABLISHED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_IDLE', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_IDLE 0\n\n/* Define to 1 if you have the declaration of `SCTPS_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_ACK_SENT', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_RECEIVED', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTP_ABORT', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_ABORT 1\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_CONFIRMED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_ADDR_CONFIRMED 0\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_OVER', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ADDR_OVER 1\n\n/* Define to 1 if you have the declaration of `SCTP_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTP_CLOSED', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_CLOSED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_COOKIE_ECHOED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_COOKIE_WAIT 1\n\n/* Define to 1 if you have the declaration of `SCTP_DELAYED_ACK_TIME', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_DELAYED_ACK_TIME 1\n\n/* Define to 1 if you have the declaration of `SCTP_EMPTY', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EMPTY 1\n\n/* Define to 1 if you have the declaration of `SCTP_EOF', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EOF 1\n\n/* Define to 1 if you have the declaration of `SCTP_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ESTABLISHED 1\n\n/* Define to 1 if you have the declaration of `SCTP_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTP_SENDALL', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_SENDALL 0\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_ACK_SENT', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_PENDING 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_RECEIVED', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_UNORDERED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_UNORDERED 1\n\n/* Define to 1 if you have the declaration of `setrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_SETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `time2posix', and to 0 if you\n don't. */\n#define HAVE_DECL_TIME2POSIX 0\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n/* #undef HAVE_DOPRNT */\n\n/* Define if you have the 'end' symbol */\n#define HAVE_END_SYMBOL 1\n\n/* Define if you have a working fallocate() */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `fdatasync' function. */\n#define HAVE_FDATASYNC 1\n\n/* Define to 1 if you have the `finite' function. */\n#define HAVE_FINITE 1\n\n/* Define to 1 if you have the `flockfile' function. */\n#define HAVE_FLOCKFILE 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpsetmask' function. */\n/* #undef HAVE_FPSETMASK */\n\n/* Define to 1 if you have the `fstat' function. */\n#define HAVE_FSTAT 1\n\n/* Define if you have fwrite_unlocked */\n#define HAVE_FWRITE_UNLOCKED 1\n\n/* Define to 1 if you have a good `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `gethostbyname2' function. */\n#define HAVE_GETHOSTBYNAME2 1\n\n/* Define to flavour of gethostbyname_r */\n#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC\n\n/* Define to 1 if you have the `gethrtime' function. */\n/* #undef HAVE_GETHRTIME */\n\n/* define if gethrvtime() works and uses ioctl() to /proc/self */\n/* #undef HAVE_GETHRVTIME_PROCFS_IOCTL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n#define HAVE_GETIFADDRS 1\n\n/* Define to 1 if you have the `getipnodebyaddr' function. */\n/* #undef HAVE_GETIPNODEBYADDR */\n\n/* Define to 1 if you have the `getipnodebyname' function. */\n/* #undef HAVE_GETIPNODEBYNAME */\n\n/* Define to 1 if you have a good `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `gmtime_r' function. */\n#define HAVE_GMTIME_R 1\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n/* #undef HAVE_IEEEFP_H */\n\n/* Define to 1 if you have the `ieee_handler' function. */\n/* #undef HAVE_IEEE_HANDLER */\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define if ipv6 is present */\n#define HAVE_IN6 1\n\n/* Define to 1 if you have the variable in6addr_any declared. */\n#define HAVE_IN6ADDR_ANY 1\n\n/* Define to 1 if you have the variable in6addr_loopback declared. */\n#define HAVE_IN6ADDR_LOOPBACK 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Early linux used in_addr6 instead of in6_addr, define if you have this */\n/* #undef HAVE_IN_ADDR6_STRUCT */\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define if you have kstat */\n/* #undef HAVE_KSTAT */\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#define HAVE_LANGINFO_H 1\n\n/* Define to 1 if you have the `dl' library (-ldl). */\n#define HAVE_LIBDL 1\n\n/* Define to 1 if you have the `dlpi' library (-ldlpi). */\n/* #undef HAVE_LIBDLPI */\n\n/* Define to 1 if you have the <libdlpi.h> header file. */\n/* #undef HAVE_LIBDLPI_H */\n\n/* Define to 1 if you have the `inet' library (-linet). */\n/* #undef HAVE_LIBINET */\n\n/* Define to 1 if you have the `m' library (-lm). */\n#define HAVE_LIBM 1\n\n/* Define to 1 if you have the `util' library (-lutil). */\n#define HAVE_LIBUTIL 1\n\n/* Define to 1 if you have the `z' library (-lz). */\n/* #undef HAVE_LIBZ */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <linux/falloc.h> header file. */\n/* #undef HAVE_LINUX_FALLOC_H */\n\n/* Define to 1 if you have the `localtime_r' function. */\n#define HAVE_LOCALTIME_R 1\n\n/* Define to 1 if you have the <malloc.h> header file. */\n#define HAVE_MALLOC_H 1\n\n/* Define to 1 if you have the `mallopt' function. */\n#define HAVE_MALLOPT 1\n\n/* Define to 1 if you have the `memcpy' function. */\n#define HAVE_MEMCPY 1\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef HAVE_MIT_PTHREAD_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the `mremap' function. */\n#define HAVE_MREMAP 1\n\n/* Define if setsockopt() accepts multicast options */\n#define HAVE_MULTICAST_SUPPORT 1\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <netpacket/packet.h> header file. */\n#define HAVE_NETPACKET_PACKET_H 1\n\n/* Define to 1 if you have the <net/errno.h> header file. */\n/* #undef HAVE_NET_ERRNO_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the `nl_langinfo' function. */\n#define HAVE_NL_LANGINFO 1\n\n/* Define if you don't have a definition of INADDR_LOOPBACK */\n/* #undef HAVE_NO_INADDR_LOOPBACK */\n\n/* Define to 1 if you have the `openpty' function. */\n#define HAVE_OPENPTY 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `posix2time' function. */\n/* #undef HAVE_POSIX2TIME */\n\n/* Define to 1 if you have the `posix_fadvise' function. */\n#define HAVE_POSIX_FADVISE 1\n\n/* Define if you have a working posix_fallocate() */\n/* #undef HAVE_POSIX_FALLOCATE */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define if you have processor_bind functionality */\n/* #undef HAVE_PROCESSOR_BIND */\n\n/* Define if you have pset functionality */\n/* #undef HAVE_PSET */\n\n/* Define if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pty.h> header file. */\n#define HAVE_PTY_H 1\n\n/* Define if you have putc_unlocked */\n#define HAVE_PUTC_UNLOCKED 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the `res_gethostbyname' function. */\n/* #undef HAVE_RES_GETHOSTBYNAME */\n\n/* Define to 1 if you have the `sbrk' function. */\n#define HAVE_SBRK 1\n\n/* Define if you have sched_getaffinity/sched_setaffinity */\n#define HAVE_SCHED_xETAFFINITY 1\n\n/* Define to 1 if you have the `sctp_bindx' function. */\n/* #undef HAVE_SCTP_BINDX */\n\n/* Define to 1 if you have the <netinet/sctp.h> header file */\n#define HAVE_SCTP_H 1\n\n/* Define to 1 if you have the `sctp_peeloff' function. */\n/* #undef HAVE_SCTP_PEELOFF */\n\n/* Define to 1 if you have the <sdkddkver.h> header file. */\n/* #undef HAVE_SDKDDKVER_H */\n\n/* Define to 1 if you have the `sendfile' function. */\n#define HAVE_SENDFILE 1\n\n/* Define to 1 if you have the `sendfilev' function. */\n/* #undef HAVE_SENDFILEV */\n\n/* Define to 1 if you have the `setlocale' function. */\n#define HAVE_SETLOCALE 1\n\n/* Define to 1 if you have the `setsid' function. */\n#define HAVE_SETSID 1\n\n/* Define if we have socklen_t */\n#define HAVE_SOCKLEN_T 1\n\n/* define if you have the Solaris/ultrasparc /dev/perfmon interface */\n/* #undef HAVE_SOLARIS_SPARC_PERFMON */\n\n/* Define if you have SO_BSDCOMPAT flag on sockets */\n/* #undef HAVE_SO_BSDCOMPAT */\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the `strerror_r' function. */\n#define HAVE_STRERROR_R 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strlcat' function. */\n/* #undef HAVE_STRLCAT */\n\n/* Define to 1 if you have the `strlcpy' function. */\n/* #undef HAVE_STRLCPY */\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if `ifr_enaddr' is member of `struct ifreq'. */\n/* #undef HAVE_STRUCT_IFREQ_IFR_ENADDR */\n\n/* Define to 1 if `ifr_hwaddr' is member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `spp_flags' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1\n\n/* Define to 1 if `spp_pathmtu' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1\n\n/* Define to 1 if `spp_sackdelay' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1\n\n/* Define to 1 if `sre_data' is member of `struct sctp_remote_error'. */\n#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1\n\n/* Define to 1 if `ssf_data' is member of `struct sctp_send_failed'. */\n#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#define HAVE_SYSLOG_H 1\n\n/* Define if you have <sys/devpoll.h> header file. */\n/* #undef HAVE_SYS_DEVPOLL_H */\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define if you have <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define to 1 if you have the <sys/resource.h> header file */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/sdt.h> header file. */\n/* #undef HAVE_SYS_SDT_H */\n\n/* Define to 1 if you have the <sys/socketio.h> header file. */\n/* #undef HAVE_SYS_SOCKETIO_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/stropts.h> header file. */\n#define HAVE_SYS_STROPTS_H 1\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n#define HAVE_SYS_SYSCTL_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define if termcap functions exists */\n#define HAVE_TERMCAP 1\n\n/* Define to 1 if you have the `time2posix' function. */\n/* #undef HAVE_TIME2POSIX */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the <util.h> header file. */\n/* #undef HAVE_UTIL_H */\n\n/* Define to 1 if you have the <utmp.h> header file. */\n#define HAVE_UTMP_H 1\n\n/* Define to 1 if you have the `vfork' function. */\n#define HAVE_VFORK 1\n\n/* Define to 1 if you have the <vfork.h> header file. */\n/* #undef HAVE_VFORK_H */\n\n/* Define to 1 if you have the `vprintf' function. */\n#define HAVE_VPRINTF 1\n\n/* Define to 1 if you have a `wcwidth' function. */\n#define HAVE_WCWIDTH 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n/* #undef HAVE_WINSOCK2_H */\n\n/* Define to 1 if `fork' works. */\n#define HAVE_WORKING_FORK 1\n\n/* Define if you have a working posix_openpt implementation */\n#define HAVE_WORKING_POSIX_OPENPT 1\n\n/* Define to 1 if `vfork' works. */\n#define HAVE_WORKING_VFORK 1\n\n/* Define to 1 if you have the `writev' function. */\n#define HAVE_WRITEV 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n/* #undef HAVE_WS2TCPIP_H */\n\n/* Define to 1 if you have the `_brk' function. */\n/* #undef HAVE__BRK */\n\n/* Define if you have the '_end' symbol */\n#define HAVE__END_SYMBOL 1\n\n/* Define to 1 if you have the `_sbrk' function. */\n/* #undef HAVE__SBRK */\n\n/* Define to 1 if you have the `__brk' function. */\n/* #undef HAVE___BRK */\n\n/* Define to 1 if you have the `__sbrk' function. */\n#define HAVE___SBRK 1\n\n/* Define to enable HiPE */\n#define HIPE 1\n\n/* define if h_errno is declared (in some way) in a system header file */\n#define H_ERRNO_DECLARED 1\n\n/* Define if netdb.h needs struct sockaddr_in ans in.h CAN be included before\n */\n#define NETDB_H_NEEDS_IN_H 1\n\n/* Define if floating points exceptions are non-existing/not reliable */\n#define NO_FPE_SIGNALS \n\n/* Defined if no found C compiler can handle jump tables */\n/* #undef NO_JUMP_TABLE */\n\n/* Define if you dont have salen */\n#define NO_SA_LEN 1\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"\"\n\n/* Define if you wish to redefine FD_SETSIZE to be able to select on more fd\n */\n/* #undef REDEFINE_FD_SETSIZE */\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define the sbrk() argument type. */\n#define SBRK_ARG_TYPE intptr_t\n\n/* Define the sbrk() return type. */\n#define SBRK_RET_TYPE void *\n\n/* The size of a `AO_t', as computed by sizeof. */\n/* #undef SIZEOF_AO_T */\n\n/* The size of a `char', as computed by sizeof. */\n#define SIZEOF_CHAR 1\n\n/* The size of a `int', as computed by sizeof. */\n#define SIZEOF_INT 4\n\n/* The size of a `long', as computed by sizeof. */\n#define SIZEOF_LONG 8\n\n/* The size of a `long long', as computed by sizeof. */\n#define SIZEOF_LONG_LONG 8\n\n/* The size of a `off_t', as computed by sizeof. */\n#define SIZEOF_OFF_T 8\n\n/* The size of a `short', as computed by sizeof. */\n#define SIZEOF_SHORT 2\n\n/* The size of a `size_t', as computed by sizeof. */\n#define SIZEOF_SIZE_T 8\n\n/* The size of a `time_t', as computed by sizeof. */\n#define SIZEOF_TIME_T 8\n\n/* The size of a `void *', as computed by sizeof. */\n#define SIZEOF_VOID_P 8\n\n/* The size of a `__int128_t', as computed by sizeof. */\n#define SIZEOF___INT128_T 16\n\n/* The size of a `__int64', as computed by sizeof. */\n#define SIZEOF___INT64 0\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* define if the variable sys_errlist is declared in a system header file */\n#define SYS_ERRLIST_DECLARED \n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n#define TIME_WITH_SYS_TIME 1\n\n/* Define to 1 if your <sys/time.h> declares `struct tm'. */\n/* #undef TM_IN_SYS_TIME */\n\n/* Define if you want to use dtrace for dynamic tracing */\n/* #undef USE_DTRACE */\n\n/* Define if you want to use dynamic tracing */\n/* #undef USE_DYNAMIC_TRACE */\n\n/* Define if you have matherr() function and struct exception type */\n#define USE_MATHERR 1\n\n/* Define to enable hrvtime() on Linux systems with perfctr extension */\n/* #undef USE_PERFCTR */\n\n/* Define if select() should be used instead of poll() */\n/* #undef USE_SELECT */\n\n/* Define if you want to use systemtap for dynamic tracing */\n/* #undef USE_SYSTEMTAP */\n\n/* Define to enable VM dynamic trace probes */\n/* #undef USE_VM_PROBES */\n\n/* Define if windows.h includes winsock2.h */\n/* #undef WINDOWS_H_INCLUDES_WINSOCK2_H */\n\n/* Define to 1 if your processor stores words with the most significant byte\n first (like Motorola and SPARC, unlike Intel and VAX). */\n/* #undef WORDS_BIGENDIAN */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `long' if <sys/types.h> does not define. */\n/* #undef off_t */\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef pid_t */\n\n/* Define to `unsigned' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define as `fork' if `vfork' does not work. */\n/* #undef vfork */\n\n\n/* Redefine in6_addr. XXX this should be moved to the files where it's used? */\n#ifdef HAVE_IN_ADDR6_STRUCT\n#define in6_addr in_addr6\n#endif\n\n/* Define a reasonable default for INADDR_LOOPBACK */\n/* XXX this should be moved to the files where it's used? */\n#ifdef HAVE_NO_INADDR_LOOPBACK\n#define INADDR_LOOPBACK (u_long)0x7F000001\n#endif\n\n#ifdef REDEFINE_FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n\n#ifdef HAVE_GETHRVTIME_PROCFS_IOCTL\n#define HAVE_GETHRVTIME\n#endif\n\n#ifndef HAVE_FINITE\n# if defined(HAVE_ISINF) && defined(HAVE_ISNAN)\n# define USE_ISINF_ISNAN\n# endif\n#endif\n\n#if defined(DEBUG) && defined(USE_THREADS) && !defined(ERTS_ENABLE_LOCK_CHECK)\n#define ERTS_ENABLE_LOCK_CHECK 1\n#endif\n\n"}]},
+ {beam_dynamic_libraries,
+ "\tlibutil.so.1 => /lib64/libutil.so.1 (0x00002b3e06a05000)\n\tlibdl.so.2 => /lib64/libdl.so.2 (0x00002b3e06b08000)\n\tlibm.so.6 => /lib64/libm.so.6 (0x00002b3e06c0c000)\n\tlibncurses.so.5 => /lib64/libncurses.so.5 (0x00002b3e06d62000)\n\tlibpthread.so.0 => /lib64/libpthread.so.0 (0x00002b3e06ec5000)\n\tlibrt.so.1 => /lib64/librt.so.1 (0x00002b3e06fdc000)\n\tlibc.so.6 => /lib64/libc.so.6 (0x00002b3e070e6000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00002b3e068e9000)\n"},
+ {environment_erts,
+ [{"BINDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"},
+ {"DIALYZER_EMULATOR",false},
+ {"CERL_DETACHED_PROG",false},
+ {"EMU","beam"},
+ {"ERL_CONSOLE_MODE",false},
+ {"ERL_CRASH_DUMP",false},
+ {"ERL_CRASH_DUMP_NICE",false},
+ {"ERL_CRASH_DUMP_SECONDS",false},
+ {"ERL_EPMD_PORT",false},
+ {"ERL_EMULATOR_DLL",false},
+ {"ERL_FULLSWEEP_AFTER",false},
+ {"ERL_LIBS",false},
+ {"ERL_MALLOC_LIB",false},
+ {"ERL_MAX_PORTS",false},
+ {"ERL_MAX_ETS_TABLES",false},
+ {"ERL_NO_VFORK",false},
+ {"ERL_NO_KERNEL_POLL",false},
+ {"ERL_THREAD_POOL_SIZE",false},
+ {"ERLC_EMULATOR",false},
+ {"ESCRIPT_EMULATOR",false},
+ {"HOME","/home/otptest"},
+ {"HOMEDRIVE",false},
+ {"HOMEPATH",false},
+ {"LANG","sv_SE.UTF-8"},
+ {"LC_ALL",false},
+ {"LC_CTYPE",false},
+ {"PATH",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"},
+ {"PROGNAME","erl"},
+ {"RELDIR",false},
+ {"ROOTDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"},
+ {"TERM","xterm-256color"},
+ {"COMSPEC",false},
+ {"HEART_COMMAND",false},
+ {"RUN_ERL_LOG_ALIVE_MINUTES",false},
+ {"RUN_ERL_LOG_ACTIVITY_MINUTES",false},
+ {"RUN_ERL_LOG_ALIVE_FORMAT",false},
+ {"RUN_ERL_LOG_ALIVE_IN_UTC",false},
+ {"RUN_ERL_LOG_GENERATIONS",false},
+ {"RUN_ERL_LOG_MAXSIZE",false},
+ {"RUN_ERL_DISABLE_FLOWCNTRL",false},
+ {"CALLER_DRV_USE_OUTPUTV",false},
+ {"ERL_INET_GETHOST_DEBUG",false},
+ {"ERL_EFILE_THREAD_SHORT_CIRCUIT",false},
+ {"ERL_WINDOW_TITLE",false},
+ {"ERL_ABORT_ON_FAILURE",false},
+ {"TTYSL_DEBUG_LOG",false}]},
+ {environment,
+ [{"JAVA_ROOT","/usr/lib64/jvm/java"},
+ {"COLORTERM","1"},
+ {"LC_NAME","sv_SE.UTF-8"},
+ {"G_BROKEN_FILENAMES","1"},
+ {"LESSCLOSE","lessclose.sh %s %s"},
+ {"LC_TIME","sv_SE.UTF-8"},
+ {"DISPLAY","localhost:11.0"},
+ {"INFOPATH",
+ "/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info"},
+ {"LPDEST","lw5"},
+ {"PKG_CONFIG_PATH",
+ "/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig"},
+ {"LESSOPEN","lessopen.sh %s"},
+ {"XDG_DATA_DIRS",
+ "/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/"},
+ {"ACLOCAL_FLAGS","-I /opt/gnome/share/aclocal"},
+ {"PRINTER","lw5"},
+ {"VISUAL","vim"},
+ {"GTK_PATH64",
+ "/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0"},
+ {"CVS_RSH","ssh"},
+ {"LOGIN_PROFILE_RUN","true"},
+ {"G_FILENAME_ENCODING","@locale,UTF-8,ISO-8859-15,CP1252"},
+ {"LESS","-M -I"},
+ {"MACHTYPE","x86_64-suse-linux"},
+ {"LOGNAME","otptest"},
+ {"GTK_PATH",
+ "/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0"},
+ {"WINDOWMANAGER","/usr/X11R6/bin/gnome"},
+ {"LS_OPTIONS","-N --color=none -T 0"},
+ {"LESS_ADVANCED_PREPROCESSOR","no"},
+ {"OSTYPE","linux"},
+ {"QT_SYSTEM_DIR","/usr/share/desktop-data"},
+ {"JDK_HOME","/usr/lib64/jvm/java"},
+ {"SHLVL","1"},
+ {"HOME","/home/otptest"},
+ {"https_proxy","http://www-proxy.ericsson.se:8080"},
+ {"SDK_HOME","/usr/lib64/jvm/java"},
+ {"LC_MEASUREMENT","sv_SE.UTF-8"},
+ {"PYTHONSTARTUP","/etc/pythonstart"},
+ {"PROGNAME","erl"},
+ {"LANG","sv_SE.UTF-8"},
+ {"EDITOR","vim"},
+ {"JAVA_HOME","/usr/lib64/jvm/java"},
+ {"INPUTRC","/etc/inputrc"},
+ {"PWD", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20"},
+ {"LC_IDENTIFICATION","sv_SE.UTF-8"},
+ {"JAVA_BINDIR","/usr/lib64/jvm/java/bin"},
+ {"SSH_SENDS_LOCALE","yes"},
+ {"CPU","x86_64"},
+ {"LC_MESSAGES","POSIX"},
+ {"MAIL","/var/mail/otptest"},
+ {"PATH",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"},
+ {"MINICOM","-c on"},
+ {"XDG_CONFIG_DIRS",
+ "/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/"},
+ {"CSHEDIT","emacs"},
+ {"PAGER","less"},
+ {"HOSTTYPE","x86_64"},
+ {"ENV","/home/otptest/.bashrc"},
+ {"ROOTDIR", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"},
+ {"XNLSPATH","/usr/X11R6/lib/X11/nls"},
+ {"LS_COLORS",[]},
+ {"LC_TELEPHONE","sv_SE.UTF-8"},
+ {"GROFF_NO_SGR","yes"},
+ {"JRE_HOME","/usr/lib64/jvm/java/jre"},
+ {"USER","otptest"},
+ {"SSH_TTY","/dev/pts/3"},
+ {"MORE","-sl"},
+ {"LC_NUMERIC","sv_SE.UTF-8"},
+ {"BINDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"},
+ {"PROFILEREAD","true"},
+ {"HISTSIZE","1000"},
+ {"HOST","duilin"},
+ {"TERM","xterm-256color"},
+ {"SHELL","/bin/sh"},
+ {"GNOME2_PATH","/usr/local:/opt/gnome:/usr"},
+ {"XKEYSYMDB","/usr/X11R6/lib/X11/XKeysymDB"},
+ {"HOSTNAME","duilin"},
+ {"LC_MONETARY","sv_SE.UTF-8"},
+ {"EMU","beam"},
+ {"LC_ADDRESS","sv_SE.UTF-8"},
+ {"LASER","lw5"},
+ {"NNTPSERVER","news"},
+ {"INFODIR","/usr/local/info:/usr/share/info:/usr/info"},
+ {"MANPATH",
+ "/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man"},
+ {"LESSKEY","/etc/lesskey.bin"},
+ {"LC_PAPER","sv_SE.UTF-8"}]},
+ {sanity_check,ok}]}.
diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk
index 5faae06b53..b33f6f4721 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.8.11
+RUNTIME_TOOLS_VSN = 1.10