Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Relocate bodies of DTrace probes to the statically-linked VM.

Due to various operating systems (in both the DTrace and SystemTap
worlds) not fully supporting DTrace probes (or SystemTap-compatibility
mode probes) in shared libraries, we relocate those probes to the
statically-linked virtual machine.  This could be seen as pollution
of the pristine VM by a (yet) experimental feature.  However:

1. This code can be eliminated completely by the C preprocessor.
2. Leaving the probes in the dyntrace NIF shared library simply
   does not work correctly on too many platforms.

*Many* thanks to Macneil Shonle at Basho for assisting when my
RSI-injured fingers gave out.

Tested on:

* CentOS 5, SystemTap 1.3
* Solaris 10 (note)
* Solaris 11
* OpenIndiana 151
* SmartOS 20120809T221258Z
* FreeBSD 9.0-RELEASE (note)

I had hoped to be able to test CentOS 6 + SystemTap 1.7, but the
details of dealing with all dependencies for a 2.6.32-279.5.1.el6.x86_64
kernel are too time consuming right now.

(note: Solaris 10 and FreeBSD 9.0-RELEASE can take a long time to compile)
  • Loading branch information...
commit 75552bd3bb4e7f3cf4dab81a5c81cf73b1d3fb99 1 parent f3c830e
@slfritchie slfritchie authored
View
1,080 erts/emulator/beam/erl_nif.c
@@ -33,6 +33,10 @@
#include "big.h"
#include "beam_bp.h"
#include "erl_thr_progress.h"
+#include "dtrace-wrapper.h"
+#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
+#define HAVE_USE_DTRACE 1
+#endif
#include <limits.h>
#include <stddef.h> /* offsetof */
@@ -1841,3 +1845,1079 @@ static unsigned calc_checksum(unsigned char* ptr, unsigned size)
#endif /* READONLY_CHECK */
+#ifdef HAVE_USE_DTRACE
+
+#define MESSAGE_BUFSIZ 1024
+
+static void get_string_maybe(ErlNifEnv *env, const ERL_NIF_TERM term,
+ char **ptr, char *buf, int bufsiz)
+{
+ ErlNifBinary str_bin;
+
+ if (!enif_inspect_iolist_as_binary(env, term, &str_bin) ||
+ str_bin.size > bufsiz) {
+ *ptr = NULL;
+ } else {
+ memcpy(buf, (char *) str_bin.data, str_bin.size);
+ buf[str_bin.size] = '\0';
+ *ptr = buf;
+ }
+}
+
+ERL_NIF_TERM erl_nif_user_trace_s1(ErlNifEnv* env, int argc,
+ const ERL_NIF_TERM argv[])
+{
+ ErlNifBinary message_bin;
+ DTRACE_CHARBUF(messagebuf, MESSAGE_BUFSIZ + 1);
+
+ if (DTRACE_ENABLED(user_trace_s1)) {
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &message_bin) ||
+ message_bin.size > MESSAGE_BUFSIZ) {
+ return am_badarg;
+ }
+ memcpy(messagebuf, (char *) message_bin.data, message_bin.size);
+ messagebuf[message_bin.size] = '\0';
+ DTRACE1(user_trace_s1, messagebuf);
+ return am_true;
+ } else {
+ return am_false;
+ }
+}
+
+ERL_NIF_TERM erl_nif_user_trace_i4s4(ErlNifEnv* env, int argc,
+ const ERL_NIF_TERM argv[])
+{
+ DTRACE_CHARBUF(procbuf, 32 + 1);
+ DTRACE_CHARBUF(user_tagbuf, MESSAGE_BUFSIZ + 1);
+ char *utbuf = NULL;
+ ErlNifSInt64 i1, i2, i3, i4;
+ DTRACE_CHARBUF(messagebuf1, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf2, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf3, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf4, MESSAGE_BUFSIZ + 1);
+ char *mbuf1 = NULL, *mbuf2 = NULL, *mbuf3 = NULL, *mbuf4 = NULL;
+
+ if (DTRACE_ENABLED(user_trace_i4s4)) {
+ dtrace_nifenv_str(env, procbuf);
+ get_string_maybe(env, argv[0], &utbuf, user_tagbuf, MESSAGE_BUFSIZ);
+ if (! enif_get_int64(env, argv[1], &i1))
+ i1 = 0;
+ if (! enif_get_int64(env, argv[2], &i2))
+ i2 = 0;
+ if (! enif_get_int64(env, argv[3], &i3))
+ i3 = 0;
+ if (! enif_get_int64(env, argv[4], &i4))
+ i4 = 0;
+ get_string_maybe(env, argv[5], &mbuf1, messagebuf1, MESSAGE_BUFSIZ);
+ get_string_maybe(env, argv[6], &mbuf2, messagebuf2, MESSAGE_BUFSIZ);
+ get_string_maybe(env, argv[7], &mbuf3, messagebuf3, MESSAGE_BUFSIZ);
+ get_string_maybe(env, argv[8], &mbuf4, messagebuf4, MESSAGE_BUFSIZ);
+ DTRACE10(user_trace_i4s4, procbuf, utbuf,
+ i1, i2, i3, i4, mbuf1, mbuf2, mbuf3, mbuf4);
+ return am_true;
+ } else {
+ return am_false;
+ }
+}
+
+#define DTRACE10_LABEL(name, label, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \
+ erlang_##name##label((a0), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9))
+#define N_STATEMENT(the_label) \
+ case the_label: \
+ if (DTRACE_ENABLED(user_trace_n##the_label)) { \
+ dtrace_nifenv_str(env, procbuf); \
+ get_string_maybe(env, argv[1], &utbuf, user_tagbuf, MESSAGE_BUFSIZ); \
+ if (! enif_get_int64(env, argv[2], &i1)) \
+ i1 = 0; \
+ if (! enif_get_int64(env, argv[3], &i2)) \
+ i2 = 0; \
+ if (! enif_get_int64(env, argv[4], &i3)) \
+ i3 = 0; \
+ if (! enif_get_int64(env, argv[5], &i4)) \
+ i4 = 0; \
+ get_string_maybe(env, argv[6], &mbuf1, messagebuf1, MESSAGE_BUFSIZ); \
+ get_string_maybe(env, argv[7], &mbuf2, messagebuf2, MESSAGE_BUFSIZ); \
+ get_string_maybe(env, argv[8], &mbuf3, messagebuf3, MESSAGE_BUFSIZ); \
+ get_string_maybe(env, argv[9], &mbuf4, messagebuf4, MESSAGE_BUFSIZ); \
+ DTRACE10_LABEL(user_trace_n, the_label, procbuf, utbuf, \
+ i1, i2, i3, i4, mbuf1, mbuf2, mbuf3, mbuf4); \
+ return am_true; \
+ } else { \
+ return am_false; \
+ } \
+ break
+
+ERL_NIF_TERM erl_nif_user_trace_n(ErlNifEnv* env, int argc,
+ const ERL_NIF_TERM argv[])
+{
+ DTRACE_CHARBUF(procbuf, 32 + 1);
+ DTRACE_CHARBUF(user_tagbuf, MESSAGE_BUFSIZ + 1);
+ char *utbuf = NULL;
+ ErlNifSInt64 i1, i2, i3, i4;
+ DTRACE_CHARBUF(messagebuf1, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf2, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf3, MESSAGE_BUFSIZ + 1);
+ DTRACE_CHARBUF(messagebuf4, MESSAGE_BUFSIZ + 1);
+ char *mbuf1 = NULL, *mbuf2 = NULL, *mbuf3 = NULL, *mbuf4 = NULL;
+ ErlNifSInt64 label = 0;
+
+ if (! enif_get_int64(env, argv[0], &label) || label < 0 || label > 1023) {
+ return am_badarg;
+ }
+ switch (label) {
+ N_STATEMENT(0);
+ N_STATEMENT(1);
+ N_STATEMENT(2);
+ N_STATEMENT(3);
+ N_STATEMENT(4);
+ N_STATEMENT(5);
+ N_STATEMENT(6);
+ N_STATEMENT(7);
+ N_STATEMENT(8);
+ N_STATEMENT(9);
+ N_STATEMENT(10);
+ N_STATEMENT(11);
+ N_STATEMENT(12);
+ N_STATEMENT(13);
+ N_STATEMENT(14);
+ N_STATEMENT(15);
+ N_STATEMENT(16);
+ N_STATEMENT(17);
+ N_STATEMENT(18);
+ N_STATEMENT(19);
+ N_STATEMENT(20);
+ N_STATEMENT(21);
+ N_STATEMENT(22);
+ N_STATEMENT(23);
+ N_STATEMENT(24);
+ N_STATEMENT(25);
+ N_STATEMENT(26);
+ N_STATEMENT(27);
+ N_STATEMENT(28);
+ N_STATEMENT(29);
+ N_STATEMENT(30);
+ N_STATEMENT(31);
+ N_STATEMENT(32);
+ N_STATEMENT(33);
+ N_STATEMENT(34);
+ N_STATEMENT(35);
+ N_STATEMENT(36);
+ N_STATEMENT(37);
+ N_STATEMENT(38);
+ N_STATEMENT(39);
+ N_STATEMENT(40);
+ N_STATEMENT(41);
+ N_STATEMENT(42);
+ N_STATEMENT(43);
+ N_STATEMENT(44);
+ N_STATEMENT(45);
+ N_STATEMENT(46);
+ N_STATEMENT(47);
+ N_STATEMENT(48);
+ N_STATEMENT(49);
+ N_STATEMENT(50);
+ N_STATEMENT(51);
+ N_STATEMENT(52);
+ N_STATEMENT(53);
+ N_STATEMENT(54);
+ N_STATEMENT(55);
+ N_STATEMENT(56);
+ N_STATEMENT(57);
+ N_STATEMENT(58);
+ N_STATEMENT(59);
+ N_STATEMENT(60);
+ N_STATEMENT(61);
+ N_STATEMENT(62);
+ N_STATEMENT(63);
+ N_STATEMENT(64);
+ N_STATEMENT(65);
+ N_STATEMENT(66);
+ N_STATEMENT(67);
+ N_STATEMENT(68);
+ N_STATEMENT(69);
+ N_STATEMENT(70);
+ N_STATEMENT(71);
+ N_STATEMENT(72);
+ N_STATEMENT(73);
+ N_STATEMENT(74);
+ N_STATEMENT(75);
+ N_STATEMENT(76);
+ N_STATEMENT(77);
+ N_STATEMENT(78);
+ N_STATEMENT(79);
+ N_STATEMENT(80);
+ N_STATEMENT(81);
+ N_STATEMENT(82);
+ N_STATEMENT(83);
+ N_STATEMENT(84);
+ N_STATEMENT(85);
+ N_STATEMENT(86);
+ N_STATEMENT(87);
+ N_STATEMENT(88);
+ N_STATEMENT(89);
+ N_STATEMENT(90);
+ N_STATEMENT(91);
+ N_STATEMENT(92);
+ N_STATEMENT(93);
+ N_STATEMENT(94);
+ N_STATEMENT(95);
+ N_STATEMENT(96);
+ N_STATEMENT(97);
+ N_STATEMENT(98);
+ N_STATEMENT(99);
+ N_STATEMENT(100);
+ N_STATEMENT(101);
+ N_STATEMENT(102);
+ N_STATEMENT(103);
+ N_STATEMENT(104);
+ N_STATEMENT(105);
+ N_STATEMENT(106);
+ N_STATEMENT(107);
+ N_STATEMENT(108);
+ N_STATEMENT(109);
+ N_STATEMENT(110);
+ N_STATEMENT(111);
+ N_STATEMENT(112);
+ N_STATEMENT(113);
+ N_STATEMENT(114);
+ N_STATEMENT(115);
+ N_STATEMENT(116);
+ N_STATEMENT(117);
+ N_STATEMENT(118);
+ N_STATEMENT(119);
+ N_STATEMENT(120);
+ N_STATEMENT(121);
+ N_STATEMENT(122);
+ N_STATEMENT(123);
+ N_STATEMENT(124);
+ N_STATEMENT(125);
+ N_STATEMENT(126);
+ N_STATEMENT(127);
+ N_STATEMENT(128);
+ N_STATEMENT(129);
+ N_STATEMENT(130);
+ N_STATEMENT(131);
+ N_STATEMENT(132);
+ N_STATEMENT(133);
+ N_STATEMENT(134);
+ N_STATEMENT(135);
+ N_STATEMENT(136);
+ N_STATEMENT(137);
+ N_STATEMENT(138);
+ N_STATEMENT(139);
+ N_STATEMENT(140);
+ N_STATEMENT(141);
+ N_STATEMENT(142);
+ N_STATEMENT(143);
+ N_STATEMENT(144);
+ N_STATEMENT(145);
+ N_STATEMENT(146);
+ N_STATEMENT(147);
+ N_STATEMENT(148);
+ N_STATEMENT(149);
+ N_STATEMENT(150);
+ N_STATEMENT(151);
+ N_STATEMENT(152);
+ N_STATEMENT(153);
+ N_STATEMENT(154);
+ N_STATEMENT(155);
+ N_STATEMENT(156);
+ N_STATEMENT(157);
+ N_STATEMENT(158);
+ N_STATEMENT(159);
+ N_STATEMENT(160);
+ N_STATEMENT(161);
+ N_STATEMENT(162);
+ N_STATEMENT(163);
+ N_STATEMENT(164);
+ N_STATEMENT(165);
+ N_STATEMENT(166);
+ N_STATEMENT(167);
+ N_STATEMENT(168);
+ N_STATEMENT(169);
+ N_STATEMENT(170);
+ N_STATEMENT(171);
+ N_STATEMENT(172);
+ N_STATEMENT(173);
+ N_STATEMENT(174);
+ N_STATEMENT(175);
+ N_STATEMENT(176);
+ N_STATEMENT(177);
+ N_STATEMENT(178);
+ N_STATEMENT(179);
+ N_STATEMENT(180);
+ N_STATEMENT(181);
+ N_STATEMENT(182);
+ N_STATEMENT(183);
+ N_STATEMENT(184);
+ N_STATEMENT(185);
+ N_STATEMENT(186);
+ N_STATEMENT(187);
+ N_STATEMENT(188);
+ N_STATEMENT(189);
+ N_STATEMENT(190);
+ N_STATEMENT(191);
+ N_STATEMENT(192);
+ N_STATEMENT(193);
+ N_STATEMENT(194);
+ N_STATEMENT(195);
+ N_STATEMENT(196);
+ N_STATEMENT(197);
+ N_STATEMENT(198);
+ N_STATEMENT(199);
+ N_STATEMENT(200);
+ N_STATEMENT(201);
+ N_STATEMENT(202);
+ N_STATEMENT(203);
+ N_STATEMENT(204);
+ N_STATEMENT(205);
+ N_STATEMENT(206);
+ N_STATEMENT(207);
+ N_STATEMENT(208);
+ N_STATEMENT(209);
+ N_STATEMENT(210);
+ N_STATEMENT(211);
+ N_STATEMENT(212);
+ N_STATEMENT(213);
+ N_STATEMENT(214);
+ N_STATEMENT(215);
+ N_STATEMENT(216);
+ N_STATEMENT(217);
+ N_STATEMENT(218);
+ N_STATEMENT(219);
+ N_STATEMENT(220);
+ N_STATEMENT(221);
+ N_STATEMENT(222);
+ N_STATEMENT(223);
+ N_STATEMENT(224);
+ N_STATEMENT(225);
+ N_STATEMENT(226);
+ N_STATEMENT(227);
+ N_STATEMENT(228);
+ N_STATEMENT(229);
+ N_STATEMENT(230);
+ N_STATEMENT(231);
+ N_STATEMENT(232);
+ N_STATEMENT(233);
+ N_STATEMENT(234);
+ N_STATEMENT(235);
+ N_STATEMENT(236);
+ N_STATEMENT(237);
+ N_STATEMENT(238);
+ N_STATEMENT(239);
+ N_STATEMENT(240);
+ N_STATEMENT(241);
+ N_STATEMENT(242);
+ N_STATEMENT(243);
+ N_STATEMENT(244);
+ N_STATEMENT(245);
+ N_STATEMENT(246);
+ N_STATEMENT(247);
+ N_STATEMENT(248);
+ N_STATEMENT(249);
+ N_STATEMENT(250);
+ N_STATEMENT(251);
+ N_STATEMENT(252);
+ N_STATEMENT(253);
+ N_STATEMENT(254);
+ N_STATEMENT(255);
+ N_STATEMENT(256);
+ N_STATEMENT(257);
+ N_STATEMENT(258);
+ N_STATEMENT(259);
+ N_STATEMENT(260);
+ N_STATEMENT(261);
+ N_STATEMENT(262);
+ N_STATEMENT(263);
+ N_STATEMENT(264);
+ N_STATEMENT(265);
+ N_STATEMENT(266);
+ N_STATEMENT(267);
+ N_STATEMENT(268);
+ N_STATEMENT(269);
+ N_STATEMENT(270);
+ N_STATEMENT(271);
+ N_STATEMENT(272);
+ N_STATEMENT(273);
+ N_STATEMENT(274);
+ N_STATEMENT(275);
+ N_STATEMENT(276);
+ N_STATEMENT(277);
+ N_STATEMENT(278);
+ N_STATEMENT(279);
+ N_STATEMENT(280);
+ N_STATEMENT(281);
+ N_STATEMENT(282);
+ N_STATEMENT(283);
+ N_STATEMENT(284);
+ N_STATEMENT(285);
+ N_STATEMENT(286);
+ N_STATEMENT(287);
+ N_STATEMENT(288);
+ N_STATEMENT(289);
+ N_STATEMENT(290);
+ N_STATEMENT(291);
+ N_STATEMENT(292);
+ N_STATEMENT(293);
+ N_STATEMENT(294);
+ N_STATEMENT(295);
+ N_STATEMENT(296);
+ N_STATEMENT(297);
+ N_STATEMENT(298);
+ N_STATEMENT(299);
+ N_STATEMENT(300);
+ N_STATEMENT(301);
+ N_STATEMENT(302);
+ N_STATEMENT(303);
+ N_STATEMENT(304);
+ N_STATEMENT(305);
+ N_STATEMENT(306);
+ N_STATEMENT(307);
+ N_STATEMENT(308);
+ N_STATEMENT(309);
+ N_STATEMENT(310);
+ N_STATEMENT(311);
+ N_STATEMENT(312);
+ N_STATEMENT(313);
+ N_STATEMENT(314);
+ N_STATEMENT(315);
+ N_STATEMENT(316);
+ N_STATEMENT(317);
+ N_STATEMENT(318);
+ N_STATEMENT(319);
+ N_STATEMENT(320);
+ N_STATEMENT(321);
+ N_STATEMENT(322);
+ N_STATEMENT(323);
+ N_STATEMENT(324);
+ N_STATEMENT(325);
+ N_STATEMENT(326);
+ N_STATEMENT(327);
+ N_STATEMENT(328);
+ N_STATEMENT(329);
+ N_STATEMENT(330);
+ N_STATEMENT(331);
+ N_STATEMENT(332);
+ N_STATEMENT(333);
+ N_STATEMENT(334);
+ N_STATEMENT(335);
+ N_STATEMENT(336);
+ N_STATEMENT(337);
+ N_STATEMENT(338);
+ N_STATEMENT(339);
+ N_STATEMENT(340);
+ N_STATEMENT(341);
+ N_STATEMENT(342);
+ N_STATEMENT(343);
+ N_STATEMENT(344);
+ N_STATEMENT(345);
+ N_STATEMENT(346);
+ N_STATEMENT(347);
+ N_STATEMENT(348);
+ N_STATEMENT(349);
+ N_STATEMENT(350);
+ N_STATEMENT(351);
+ N_STATEMENT(352);
+ N_STATEMENT(353);
+ N_STATEMENT(354);
+ N_STATEMENT(355);
+ N_STATEMENT(356);
+ N_STATEMENT(357);
+ N_STATEMENT(358);
+ N_STATEMENT(359);
+ N_STATEMENT(360);
+ N_STATEMENT(361);
+ N_STATEMENT(362);
+ N_STATEMENT(363);
+ N_STATEMENT(364);
+ N_STATEMENT(365);
+ N_STATEMENT(366);
+ N_STATEMENT(367);
+ N_STATEMENT(368);
+ N_STATEMENT(369);
+ N_STATEMENT(370);
+ N_STATEMENT(371);
+ N_STATEMENT(372);
+ N_STATEMENT(373);
+ N_STATEMENT(374);
+ N_STATEMENT(375);
+ N_STATEMENT(376);
+ N_STATEMENT(377);
+ N_STATEMENT(378);
+ N_STATEMENT(379);
+ N_STATEMENT(380);
+ N_STATEMENT(381);
+ N_STATEMENT(382);
+ N_STATEMENT(383);
+ N_STATEMENT(384);
+ N_STATEMENT(385);
+ N_STATEMENT(386);
+ N_STATEMENT(387);
+ N_STATEMENT(388);
+ N_STATEMENT(389);
+ N_STATEMENT(390);
+ N_STATEMENT(391);
+ N_STATEMENT(392);
+ N_STATEMENT(393);
+ N_STATEMENT(394);
+ N_STATEMENT(395);
+ N_STATEMENT(396);
+ N_STATEMENT(397);
+ N_STATEMENT(398);
+ N_STATEMENT(399);
+ N_STATEMENT(400);
+ N_STATEMENT(401);
+ N_STATEMENT(402);
+ N_STATEMENT(403);
+ N_STATEMENT(404);
+ N_STATEMENT(405);
+ N_STATEMENT(406);
+ N_STATEMENT(407);
+ N_STATEMENT(408);
+ N_STATEMENT(409);
+ N_STATEMENT(410);
+ N_STATEMENT(411);
+ N_STATEMENT(412);
+ N_STATEMENT(413);
+ N_STATEMENT(414);
+ N_STATEMENT(415);
+ N_STATEMENT(416);
+ N_STATEMENT(417);
+ N_STATEMENT(418);
+ N_STATEMENT(419);
+ N_STATEMENT(420);
+ N_STATEMENT(421);
+ N_STATEMENT(422);
+ N_STATEMENT(423);
+ N_STATEMENT(424);
+ N_STATEMENT(425);
+ N_STATEMENT(426);
+ N_STATEMENT(427);
+ N_STATEMENT(428);
+ N_STATEMENT(429);
+ N_STATEMENT(430);
+ N_STATEMENT(431);
+ N_STATEMENT(432);
+ N_STATEMENT(433);
+ N_STATEMENT(434);
+ N_STATEMENT(435);
+ N_STATEMENT(436);
+ N_STATEMENT(437);
+ N_STATEMENT(438);
+ N_STATEMENT(439);
+ N_STATEMENT(440);
+ N_STATEMENT(441);
+ N_STATEMENT(442);
+ N_STATEMENT(443);
+ N_STATEMENT(444);
+ N_STATEMENT(445);
+ N_STATEMENT(446);
+ N_STATEMENT(447);
+ N_STATEMENT(448);
+ N_STATEMENT(449);
+ N_STATEMENT(450);
+ N_STATEMENT(451);
+ N_STATEMENT(452);
+ N_STATEMENT(453);
+ N_STATEMENT(454);
+ N_STATEMENT(455);
+ N_STATEMENT(456);
+ N_STATEMENT(457);
+ N_STATEMENT(458);
+ N_STATEMENT(459);
+ N_STATEMENT(460);
+ N_STATEMENT(461);
+ N_STATEMENT(462);
+ N_STATEMENT(463);
+ N_STATEMENT(464);
+ N_STATEMENT(465);
+ N_STATEMENT(466);
+ N_STATEMENT(467);
+ N_STATEMENT(468);
+ N_STATEMENT(469);
+ N_STATEMENT(470);
+ N_STATEMENT(471);
+ N_STATEMENT(472);
+ N_STATEMENT(473);
+ N_STATEMENT(474);
+ N_STATEMENT(475);
+ N_STATEMENT(476);
+ N_STATEMENT(477);
+ N_STATEMENT(478);
+ N_STATEMENT(479);
+ N_STATEMENT(480);
+ N_STATEMENT(481);
+ N_STATEMENT(482);
+ N_STATEMENT(483);
+ N_STATEMENT(484);
+ N_STATEMENT(485);
+ N_STATEMENT(486);
+ N_STATEMENT(487);
+ N_STATEMENT(488);
+ N_STATEMENT(489);
+ N_STATEMENT(490);
+ N_STATEMENT(491);
+ N_STATEMENT(492);
+ N_STATEMENT(493);
+ N_STATEMENT(494);
+ N_STATEMENT(495);
+ N_STATEMENT(496);
+ N_STATEMENT(497);
+ N_STATEMENT(498);
+ N_STATEMENT(499);
+ N_STATEMENT(500);
+ N_STATEMENT(501);
+ N_STATEMENT(502);
+ N_STATEMENT(503);
+ N_STATEMENT(504);
+ N_STATEMENT(505);
+ N_STATEMENT(506);
+ N_STATEMENT(507);
+ N_STATEMENT(508);
+ N_STATEMENT(509);
+ N_STATEMENT(510);
+ N_STATEMENT(511);
+ N_STATEMENT(512);
+ N_STATEMENT(513);
+ N_STATEMENT(514);
+ N_STATEMENT(515);
+ N_STATEMENT(516);
+ N_STATEMENT(517);
+ N_STATEMENT(518);
+ N_STATEMENT(519);
+ N_STATEMENT(520);
+ N_STATEMENT(521);
+ N_STATEMENT(522);
+ N_STATEMENT(523);
+ N_STATEMENT(524);
+ N_STATEMENT(525);
+ N_STATEMENT(526);
+ N_STATEMENT(527);
+ N_STATEMENT(528);
+ N_STATEMENT(529);
+ N_STATEMENT(530);
+ N_STATEMENT(531);
+ N_STATEMENT(532);
+ N_STATEMENT(533);
+ N_STATEMENT(534);
+ N_STATEMENT(535);
+ N_STATEMENT(536);
+ N_STATEMENT(537);
+ N_STATEMENT(538);
+ N_STATEMENT(539);
+ N_STATEMENT(540);
+ N_STATEMENT(541);
+ N_STATEMENT(542);
+ N_STATEMENT(543);
+ N_STATEMENT(544);
+ N_STATEMENT(545);
+ N_STATEMENT(546);
+ N_STATEMENT(547);
+ N_STATEMENT(548);
+ N_STATEMENT(549);
+ N_STATEMENT(550);
+ N_STATEMENT(551);
+ N_STATEMENT(552);
+ N_STATEMENT(553);
+ N_STATEMENT(554);
+ N_STATEMENT(555);
+ N_STATEMENT(556);
+ N_STATEMENT(557);
+ N_STATEMENT(558);
+ N_STATEMENT(559);
+ N_STATEMENT(560);
+ N_STATEMENT(561);
+ N_STATEMENT(562);
+ N_STATEMENT(563);
+ N_STATEMENT(564);
+ N_STATEMENT(565);
+ N_STATEMENT(566);
+ N_STATEMENT(567);
+ N_STATEMENT(568);
+ N_STATEMENT(569);
+ N_STATEMENT(570);
+ N_STATEMENT(571);
+ N_STATEMENT(572);
+ N_STATEMENT(573);
+ N_STATEMENT(574);
+ N_STATEMENT(575);
+ N_STATEMENT(576);
+ N_STATEMENT(577);
+ N_STATEMENT(578);
+ N_STATEMENT(579);
+ N_STATEMENT(580);
+ N_STATEMENT(581);
+ N_STATEMENT(582);
+ N_STATEMENT(583);
+ N_STATEMENT(584);
+ N_STATEMENT(585);
+ N_STATEMENT(586);
+ N_STATEMENT(587);
+ N_STATEMENT(588);
+ N_STATEMENT(589);
+ N_STATEMENT(590);
+ N_STATEMENT(591);
+ N_STATEMENT(592);
+ N_STATEMENT(593);
+ N_STATEMENT(594);
+ N_STATEMENT(595);
+ N_STATEMENT(596);
+ N_STATEMENT(597);
+ N_STATEMENT(598);
+ N_STATEMENT(599);
+ N_STATEMENT(600);
+ N_STATEMENT(601);
+ N_STATEMENT(602);
+ N_STATEMENT(603);
+ N_STATEMENT(604);
+ N_STATEMENT(605);
+ N_STATEMENT(606);
+ N_STATEMENT(607);
+ N_STATEMENT(608);
+ N_STATEMENT(609);
+ N_STATEMENT(610);
+ N_STATEMENT(611);
+ N_STATEMENT(612);
+ N_STATEMENT(613);
+ N_STATEMENT(614);
+ N_STATEMENT(615);
+ N_STATEMENT(616);
+ N_STATEMENT(617);
+ N_STATEMENT(618);
+ N_STATEMENT(619);
+ N_STATEMENT(620);
+ N_STATEMENT(621);
+ N_STATEMENT(622);
+ N_STATEMENT(623);
+ N_STATEMENT(624);
+ N_STATEMENT(625);
+ N_STATEMENT(626);
+ N_STATEMENT(627);
+ N_STATEMENT(628);
+ N_STATEMENT(629);
+ N_STATEMENT(630);
+ N_STATEMENT(631);
+ N_STATEMENT(632);
+ N_STATEMENT(633);
+ N_STATEMENT(634);
+ N_STATEMENT(635);
+ N_STATEMENT(636);
+ N_STATEMENT(637);
+ N_STATEMENT(638);
+ N_STATEMENT(639);
+ N_STATEMENT(640);
+ N_STATEMENT(641);
+ N_STATEMENT(642);
+ N_STATEMENT(643);
+ N_STATEMENT(644);
+ N_STATEMENT(645);
+ N_STATEMENT(646);
+ N_STATEMENT(647);
+ N_STATEMENT(648);
+ N_STATEMENT(649);
+ N_STATEMENT(650);
+ N_STATEMENT(651);
+ N_STATEMENT(652);
+ N_STATEMENT(653);
+ N_STATEMENT(654);
+ N_STATEMENT(655);
+ N_STATEMENT(656);
+ N_STATEMENT(657);
+ N_STATEMENT(658);
+ N_STATEMENT(659);
+ N_STATEMENT(660);
+ N_STATEMENT(661);
+ N_STATEMENT(662);
+ N_STATEMENT(663);
+ N_STATEMENT(664);
+ N_STATEMENT(665);
+ N_STATEMENT(666);
+ N_STATEMENT(667);
+ N_STATEMENT(668);
+ N_STATEMENT(669);
+ N_STATEMENT(670);
+ N_STATEMENT(671);
+ N_STATEMENT(672);
+ N_STATEMENT(673);
+ N_STATEMENT(674);
+ N_STATEMENT(675);
+ N_STATEMENT(676);
+ N_STATEMENT(677);
+ N_STATEMENT(678);
+ N_STATEMENT(679);
+ N_STATEMENT(680);
+ N_STATEMENT(681);
+ N_STATEMENT(682);
+ N_STATEMENT(683);
+ N_STATEMENT(684);
+ N_STATEMENT(685);
+ N_STATEMENT(686);
+ N_STATEMENT(687);
+ N_STATEMENT(688);
+ N_STATEMENT(689);
+ N_STATEMENT(690);
+ N_STATEMENT(691);
+ N_STATEMENT(692);
+ N_STATEMENT(693);
+ N_STATEMENT(694);
+ N_STATEMENT(695);
+ N_STATEMENT(696);
+ N_STATEMENT(697);
+ N_STATEMENT(698);
+ N_STATEMENT(699);
+ N_STATEMENT(700);
+ N_STATEMENT(701);
+ N_STATEMENT(702);
+ N_STATEMENT(703);
+ N_STATEMENT(704);
+ N_STATEMENT(705);
+ N_STATEMENT(706);
+ N_STATEMENT(707);
+ N_STATEMENT(708);
+ N_STATEMENT(709);
+ N_STATEMENT(710);
+ N_STATEMENT(711);
+ N_STATEMENT(712);
+ N_STATEMENT(713);
+ N_STATEMENT(714);
+ N_STATEMENT(715);
+ N_STATEMENT(716);
+ N_STATEMENT(717);
+ N_STATEMENT(718);
+ N_STATEMENT(719);
+ N_STATEMENT(720);
+ N_STATEMENT(721);
+ N_STATEMENT(722);
+ N_STATEMENT(723);
+ N_STATEMENT(724);
+ N_STATEMENT(725);
+ N_STATEMENT(726);
+ N_STATEMENT(727);
+ N_STATEMENT(728);
+ N_STATEMENT(729);
+ N_STATEMENT(730);
+ N_STATEMENT(731);
+ N_STATEMENT(732);
+ N_STATEMENT(733);
+ N_STATEMENT(734);
+ N_STATEMENT(735);
+ N_STATEMENT(736);
+ N_STATEMENT(737);
+ N_STATEMENT(738);
+ N_STATEMENT(739);
+ N_STATEMENT(740);
+ N_STATEMENT(741);
+ N_STATEMENT(742);
+ N_STATEMENT(743);
+ N_STATEMENT(744);
+ N_STATEMENT(745);
+ N_STATEMENT(746);
+ N_STATEMENT(747);
+ N_STATEMENT(748);
+ N_STATEMENT(749);
+ N_STATEMENT(750);
+ N_STATEMENT(751);
+ N_STATEMENT(752);
+ N_STATEMENT(753);
+ N_STATEMENT(754);
+ N_STATEMENT(755);
+ N_STATEMENT(756);
+ N_STATEMENT(757);
+ N_STATEMENT(758);
+ N_STATEMENT(759);
+ N_STATEMENT(760);
+ N_STATEMENT(761);
+ N_STATEMENT(762);
+ N_STATEMENT(763);
+ N_STATEMENT(764);
+ N_STATEMENT(765);
+ N_STATEMENT(766);
+ N_STATEMENT(767);
+ N_STATEMENT(768);
+ N_STATEMENT(769);
+ N_STATEMENT(770);
+ N_STATEMENT(771);
+ N_STATEMENT(772);
+ N_STATEMENT(773);
+ N_STATEMENT(774);
+ N_STATEMENT(775);
+ N_STATEMENT(776);
+ N_STATEMENT(777);
+ N_STATEMENT(778);
+ N_STATEMENT(779);
+ N_STATEMENT(780);
+ N_STATEMENT(781);
+ N_STATEMENT(782);
+ N_STATEMENT(783);
+ N_STATEMENT(784);
+ N_STATEMENT(785);
+ N_STATEMENT(786);
+ N_STATEMENT(787);
+ N_STATEMENT(788);
+ N_STATEMENT(789);
+ N_STATEMENT(790);
+ N_STATEMENT(791);
+ N_STATEMENT(792);
+ N_STATEMENT(793);
+ N_STATEMENT(794);
+ N_STATEMENT(795);
+ N_STATEMENT(796);
+ N_STATEMENT(797);
+ N_STATEMENT(798);
+ N_STATEMENT(799);
+ N_STATEMENT(800);
+ N_STATEMENT(801);
+ N_STATEMENT(802);
+ N_STATEMENT(803);
+ N_STATEMENT(804);
+ N_STATEMENT(805);
+ N_STATEMENT(806);
+ N_STATEMENT(807);
+ N_STATEMENT(808);
+ N_STATEMENT(809);
+ N_STATEMENT(810);
+ N_STATEMENT(811);
+ N_STATEMENT(812);
+ N_STATEMENT(813);
+ N_STATEMENT(814);
+ N_STATEMENT(815);
+ N_STATEMENT(816);
+ N_STATEMENT(817);
+ N_STATEMENT(818);
+ N_STATEMENT(819);
+ N_STATEMENT(820);
+ N_STATEMENT(821);
+ N_STATEMENT(822);
+ N_STATEMENT(823);
+ N_STATEMENT(824);
+ N_STATEMENT(825);
+ N_STATEMENT(826);
+ N_STATEMENT(827);
+ N_STATEMENT(828);
+ N_STATEMENT(829);
+ N_STATEMENT(830);
+ N_STATEMENT(831);
+ N_STATEMENT(832);
+ N_STATEMENT(833);
+ N_STATEMENT(834);
+ N_STATEMENT(835);
+ N_STATEMENT(836);
+ N_STATEMENT(837);
+ N_STATEMENT(838);
+ N_STATEMENT(839);
+ N_STATEMENT(840);
+ N_STATEMENT(841);
+ N_STATEMENT(842);
+ N_STATEMENT(843);
+ N_STATEMENT(844);
+ N_STATEMENT(845);
+ N_STATEMENT(846);
+ N_STATEMENT(847);
+ N_STATEMENT(848);
+ N_STATEMENT(849);
+ N_STATEMENT(850);
+ N_STATEMENT(851);
+ N_STATEMENT(852);
+ N_STATEMENT(853);
+ N_STATEMENT(854);
+ N_STATEMENT(855);
+ N_STATEMENT(856);
+ N_STATEMENT(857);
+ N_STATEMENT(858);
+ N_STATEMENT(859);
+ N_STATEMENT(860);
+ N_STATEMENT(861);
+ N_STATEMENT(862);
+ N_STATEMENT(863);
+ N_STATEMENT(864);
+ N_STATEMENT(865);
+ N_STATEMENT(866);
+ N_STATEMENT(867);
+ N_STATEMENT(868);
+ N_STATEMENT(869);
+ N_STATEMENT(870);
+ N_STATEMENT(871);
+ N_STATEMENT(872);
+ N_STATEMENT(873);
+ N_STATEMENT(874);
+ N_STATEMENT(875);
+ N_STATEMENT(876);
+ N_STATEMENT(877);
+ N_STATEMENT(878);
+ N_STATEMENT(879);
+ N_STATEMENT(880);
+ N_STATEMENT(881);
+ N_STATEMENT(882);
+ N_STATEMENT(883);
+ N_STATEMENT(884);
+ N_STATEMENT(885);
+ N_STATEMENT(886);
+ N_STATEMENT(887);
+ N_STATEMENT(888);
+ N_STATEMENT(889);
+ N_STATEMENT(890);
+ N_STATEMENT(891);
+ N_STATEMENT(892);
+ N_STATEMENT(893);
+ N_STATEMENT(894);
+ N_STATEMENT(895);
+ N_STATEMENT(896);
+ N_STATEMENT(897);
+ N_STATEMENT(898);
+ N_STATEMENT(899);
+ N_STATEMENT(900);
+ N_STATEMENT(901);
+ N_STATEMENT(902);
+ N_STATEMENT(903);
+ N_STATEMENT(904);
+ N_STATEMENT(905);
+ N_STATEMENT(906);
+ N_STATEMENT(907);
+ N_STATEMENT(908);
+ N_STATEMENT(909);
+ N_STATEMENT(910);
+ N_STATEMENT(911);
+ N_STATEMENT(912);
+ N_STATEMENT(913);
+ N_STATEMENT(914);
+ N_STATEMENT(915);
+ N_STATEMENT(916);
+ N_STATEMENT(917);
+ N_STATEMENT(918);
+ N_STATEMENT(919);
+ N_STATEMENT(920);
+ N_STATEMENT(921);
+ N_STATEMENT(922);
+ N_STATEMENT(923);
+ N_STATEMENT(924);
+ N_STATEMENT(925);
+ N_STATEMENT(926);
+ N_STATEMENT(927);
+ N_STATEMENT(928);
+ N_STATEMENT(929);
+ N_STATEMENT(930);
+ N_STATEMENT(931);
+ N_STATEMENT(932);
+ N_STATEMENT(933);
+ N_STATEMENT(934);
+ N_STATEMENT(935);
+ N_STATEMENT(936);
+ N_STATEMENT(937);
+ N_STATEMENT(938);
+ N_STATEMENT(939);
+ N_STATEMENT(940);
+ N_STATEMENT(941);
+ N_STATEMENT(942);
+ N_STATEMENT(943);
+ N_STATEMENT(944);
+ N_STATEMENT(945);
+ N_STATEMENT(946);
+ N_STATEMENT(947);
+ N_STATEMENT(948);
+ N_STATEMENT(949);
+ N_STATEMENT(950);
+ }
+ return am_error; /* NOTREACHED, shut up the compiler */
+}
+
+#endif /* HAVE_USE_DTRACE */
View
9 erts/emulator/beam/erl_nif.h
@@ -226,6 +226,15 @@ ERL_NIF_INIT_DECL(NAME) \
} \
ERL_NIF_INIT_EPILOGUE
+#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
+#define HAVE_USE_DTRACE 1
+#endif
+
+#ifdef HAVE_USE_DTRACE
+ERL_NIF_TERM erl_nif_user_trace_s1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+ERL_NIF_TERM erl_nif_user_trace_i4s4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+ERL_NIF_TERM erl_nif_user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
#endif /* __ERL_NIF_H__ */
View
2,910 erts/emulator/beam/erlang_dtrace.d
2,910 additions, 0 deletions not shown
View
3,115 lib/runtime_tools/c_src/dtrace_user.d
4 additions, 3,111 deletions not shown
View
1,136 lib/runtime_tools/c_src/dyntrace.c
@@ -36,6 +36,10 @@
void dtrace_nifenv_str(ErlNifEnv *env, char *process_buf);
void get_string_maybe(ErlNifEnv *env, const ERL_NIF_TERM term, char **ptr, char *buf, int bufsiz);
+#ifdef HAVE_USE_DTRACE
+ERL_NIF_TERM erl_nif_user_trace_s1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+ERL_NIF_TERM erl_nif_user_trace_i4s4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
#ifdef VALGRIND
# include <valgrind/memcheck.h>
@@ -98,1151 +102,25 @@ static ERL_NIF_TERM available(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[
static ERL_NIF_TERM user_trace_s1(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
#ifdef HAVE_USE_DTRACE
- ErlNifBinary message_bin;
- DTRACE_CHARBUF(messagebuf, MESSAGE_BUFSIZ + 1);
-
- if (DTRACE_ENABLED(user_trace_s1)) {
- if (!enif_inspect_iolist_as_binary(env, argv[0], &message_bin) ||
- message_bin.size > MESSAGE_BUFSIZ) {
- return atom_badarg;
- }
- memcpy(messagebuf, (char *) message_bin.data, message_bin.size);
- messagebuf[message_bin.size] = '\0';
- DTRACE1(user_trace_s1, messagebuf);
- return atom_true;
- } else {
- return atom_false;
- }
+ return erl_nif_user_trace_s1(env, argc, argv);
#else
return atom_error;
#endif
}
-void
-get_string_maybe(ErlNifEnv *env,
- const ERL_NIF_TERM term, char **ptr, char *buf, int bufsiz)
-{
- ErlNifBinary str_bin;
-
- if (!enif_inspect_iolist_as_binary(env, term, &str_bin) ||
- str_bin.size > bufsiz) {
- *ptr = NULL;
- } else {
- memcpy(buf, (char *) str_bin.data, str_bin.size);
- buf[str_bin.size] = '\0';
- *ptr = buf;
- }
-}
-
static ERL_NIF_TERM user_trace_i4s4(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
#ifdef HAVE_USE_DTRACE
- DTRACE_CHARBUF(procbuf, 32 + 1);
- DTRACE_CHARBUF(user_tagbuf, MESSAGE_BUFSIZ + 1);
- char *utbuf = NULL;
- ErlNifSInt64 i1, i2, i3, i4;
- DTRACE_CHARBUF(messagebuf1, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf2, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf3, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf4, MESSAGE_BUFSIZ + 1);
- char *mbuf1 = NULL, *mbuf2 = NULL, *mbuf3 = NULL, *mbuf4 = NULL;
-
- if (DTRACE_ENABLED(user_trace_i4s4)) {
- dtrace_nifenv_str(env, procbuf);
- get_string_maybe(env, argv[0], &utbuf, user_tagbuf, MESSAGE_BUFSIZ);
- if (! enif_get_int64(env, argv[1], &i1))
- i1 = 0;
- if (! enif_get_int64(env, argv[2], &i2))
- i2 = 0;
- if (! enif_get_int64(env, argv[3], &i3))
- i3 = 0;
- if (! enif_get_int64(env, argv[4], &i4))
- i4 = 0;
- get_string_maybe(env, argv[5], &mbuf1, messagebuf1, MESSAGE_BUFSIZ);
- get_string_maybe(env, argv[6], &mbuf2, messagebuf2, MESSAGE_BUFSIZ);
- get_string_maybe(env, argv[7], &mbuf3, messagebuf3, MESSAGE_BUFSIZ);
- get_string_maybe(env, argv[8], &mbuf4, messagebuf4, MESSAGE_BUFSIZ);
- DTRACE10(user_trace_i4s4, procbuf, utbuf,
- i1, i2, i3, i4, mbuf1, mbuf2, mbuf3, mbuf4);
- return atom_true;
- } else {
- return atom_false;
- }
+ return erl_nif_user_trace_i4s4(env, argc, argv);
#else
return atom_error;
#endif
}
-#define DTRACE10_LABEL(name, label, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) \
- erlang_##name##label((a0), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9))
-#define N_STATEMENT(the_label) \
- case the_label: \
- if (DTRACE_ENABLED(user_trace_n##the_label)) { \
- dtrace_nifenv_str(env, procbuf); \
- get_string_maybe(env, argv[1], &utbuf, user_tagbuf, MESSAGE_BUFSIZ); \
- if (! enif_get_int64(env, argv[2], &i1)) \
- i1 = 0; \
- if (! enif_get_int64(env, argv[3], &i2)) \
- i2 = 0; \
- if (! enif_get_int64(env, argv[4], &i3)) \
- i3 = 0; \
- if (! enif_get_int64(env, argv[5], &i4)) \
- i4 = 0; \
- get_string_maybe(env, argv[6], &mbuf1, messagebuf1, MESSAGE_BUFSIZ); \
- get_string_maybe(env, argv[7], &mbuf2, messagebuf2, MESSAGE_BUFSIZ); \
- get_string_maybe(env, argv[8], &mbuf3, messagebuf3, MESSAGE_BUFSIZ); \
- get_string_maybe(env, argv[9], &mbuf4, messagebuf4, MESSAGE_BUFSIZ); \
- DTRACE10_LABEL(user_trace_n, the_label, procbuf, utbuf, \
- i1, i2, i3, i4, mbuf1, mbuf2, mbuf3, mbuf4); \
- return atom_true; \
- } else { \
- return atom_false; \
- } \
- break
-
static ERL_NIF_TERM user_trace_n(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
#ifdef HAVE_USE_DTRACE
- DTRACE_CHARBUF(procbuf, 32 + 1);
- DTRACE_CHARBUF(user_tagbuf, MESSAGE_BUFSIZ + 1);
- char *utbuf = NULL;
- ErlNifSInt64 i1, i2, i3, i4;
- DTRACE_CHARBUF(messagebuf1, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf2, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf3, MESSAGE_BUFSIZ + 1);
- DTRACE_CHARBUF(messagebuf4, MESSAGE_BUFSIZ + 1);
- char *mbuf1 = NULL, *mbuf2 = NULL, *mbuf3 = NULL, *mbuf4 = NULL;
- ErlNifSInt64 label = 0;
-
- if (! enif_get_int64(env, argv[0], &label) || label < 0 || label > 1023)
- return atom_badarg;
- switch (label) {
- N_STATEMENT(0);
- N_STATEMENT(1);
- N_STATEMENT(2);
- N_STATEMENT(3);
- N_STATEMENT(4);
- N_STATEMENT(5);
- N_STATEMENT(6);
- N_STATEMENT(7);
- N_STATEMENT(8);
- N_STATEMENT(9);
- N_STATEMENT(10);
- N_STATEMENT(11);
- N_STATEMENT(12);
- N_STATEMENT(13);
- N_STATEMENT(14);
- N_STATEMENT(15);
- N_STATEMENT(16);
- N_STATEMENT(17);
- N_STATEMENT(18);
- N_STATEMENT(19);
- N_STATEMENT(20);
- N_STATEMENT(21);
- N_STATEMENT(22);
- N_STATEMENT(23);
- N_STATEMENT(24);
- N_STATEMENT(25);
- N_STATEMENT(26);
- N_STATEMENT(27);
- N_STATEMENT(28);
- N_STATEMENT(29);
- N_STATEMENT(30);
- N_STATEMENT(31);
- N_STATEMENT(32);
- N_STATEMENT(33);
- N_STATEMENT(34);
- N_STATEMENT(35);
- N_STATEMENT(36);
- N_STATEMENT(37);
- N_STATEMENT(38);
- N_STATEMENT(39);
- N_STATEMENT(40);
- N_STATEMENT(41);
- N_STATEMENT(42);
- N_STATEMENT(43);
- N_STATEMENT(44);
- N_STATEMENT(45);
- N_STATEMENT(46);
- N_STATEMENT(47);
- N_STATEMENT(48);
- N_STATEMENT(49);
- N_STATEMENT(50);
- N_STATEMENT(51);
- N_STATEMENT(52);
- N_STATEMENT(53);
- N_STATEMENT(54);
- N_STATEMENT(55);
- N_STATEMENT(56);
- N_STATEMENT(57);
- N_STATEMENT(58);
- N_STATEMENT(59);
- N_STATEMENT(60);
- N_STATEMENT(61);
- N_STATEMENT(62);
- N_STATEMENT(63);
- N_STATEMENT(64);
- N_STATEMENT(65);
- N_STATEMENT(66);
- N_STATEMENT(67);
- N_STATEMENT(68);
- N_STATEMENT(69);
- N_STATEMENT(70);
- N_STATEMENT(71);
- N_STATEMENT(72);
- N_STATEMENT(73);
- N_STATEMENT(74);
- N_STATEMENT(75);
- N_STATEMENT(76);
- N_STATEMENT(77);
- N_STATEMENT(78);
- N_STATEMENT(79);
- N_STATEMENT(80);
- N_STATEMENT(81);
- N_STATEMENT(82);
- N_STATEMENT(83);
- N_STATEMENT(84);
- N_STATEMENT(85);
- N_STATEMENT(86);
- N_STATEMENT(87);
- N_STATEMENT(88);
- N_STATEMENT(89);
- N_STATEMENT(90);
- N_STATEMENT(91);
- N_STATEMENT(92);
- N_STATEMENT(93);
- N_STATEMENT(94);
- N_STATEMENT(95);
- N_STATEMENT(96);
- N_STATEMENT(97);
- N_STATEMENT(98);
- N_STATEMENT(99);
- N_STATEMENT(100);
- N_STATEMENT(101);
- N_STATEMENT(102);
- N_STATEMENT(103);
- N_STATEMENT(104);
- N_STATEMENT(105);
- N_STATEMENT(106);
- N_STATEMENT(107);
- N_STATEMENT(108);
- N_STATEMENT(109);
- N_STATEMENT(110);
- N_STATEMENT(111);
- N_STATEMENT(112);
- N_STATEMENT(113);
- N_STATEMENT(114);
- N_STATEMENT(115);
- N_STATEMENT(116);
- N_STATEMENT(117);
- N_STATEMENT(118);
- N_STATEMENT(119);
- N_STATEMENT(120);
- N_STATEMENT(121);
- N_STATEMENT(122);
- N_STATEMENT(123);
- N_STATEMENT(124);
- N_STATEMENT(125);
- N_STATEMENT(126);
- N_STATEMENT(127);
- N_STATEMENT(128);
- N_STATEMENT(129);
- N_STATEMENT(130);
- N_STATEMENT(131);
- N_STATEMENT(132);
- N_STATEMENT(133);
- N_STATEMENT(134);
- N_STATEMENT(135);
- N_STATEMENT(136);
- N_STATEMENT(137);
- N_STATEMENT(138);
- N_STATEMENT(139);
- N_STATEMENT(140);
- N_STATEMENT(141);
- N_STATEMENT(142);
- N_STATEMENT(143);
- N_STATEMENT(144);
- N_STATEMENT(145);
- N_STATEMENT(146);
- N_STATEMENT(147);
- N_STATEMENT(148);
- N_STATEMENT(149);
- N_STATEMENT(150);
- N_STATEMENT(151);
- N_STATEMENT(152);
- N_STATEMENT(153);
- N_STATEMENT(154);
- N_STATEMENT(155);
- N_STATEMENT(156);
- N_STATEMENT(157);
- N_STATEMENT(158);
- N_STATEMENT(159);
- N_STATEMENT(160);
- N_STATEMENT(161);
- N_STATEMENT(162);
- N_STATEMENT(163);
- N_STATEMENT(164);
- N_STATEMENT(165);
- N_STATEMENT(166);
- N_STATEMENT(167);
- N_STATEMENT(168);
- N_STATEMENT(169);
- N_STATEMENT(170);
- N_STATEMENT(171);
- N_STATEMENT(172);
- N_STATEMENT(173);
- N_STATEMENT(174);
- N_STATEMENT(175);
- N_STATEMENT(176);
- N_STATEMENT(177);
- N_STATEMENT(178);
- N_STATEMENT(179);
- N_STATEMENT(180);
- N_STATEMENT(181);
- N_STATEMENT(182);
- N_STATEMENT(183);
- N_STATEMENT(184);
- N_STATEMENT(185);
- N_STATEMENT(186);
- N_STATEMENT(187);
- N_STATEMENT(188);
- N_STATEMENT(189);
- N_STATEMENT(190);
- N_STATEMENT(191);
- N_STATEMENT(192);
- N_STATEMENT(193);
- N_STATEMENT(194);
- N_STATEMENT(195);
- N_STATEMENT(196);
- N_STATEMENT(197);
- N_STATEMENT(198);
- N_STATEMENT(199);
- N_STATEMENT(200);
- N_STATEMENT(201);
- N_STATEMENT(202);
- N_STATEMENT(203);
- N_STATEMENT(204);
- N_STATEMENT(205);
- N_STATEMENT(206);
- N_STATEMENT(207);
- N_STATEMENT(208);
- N_STATEMENT(209);
- N_STATEMENT(210);
- N_STATEMENT(211);
- N_STATEMENT(212);
- N_STATEMENT(213);
- N_STATEMENT(214);
- N_STATEMENT(215);
- N_STATEMENT(216);
- N_STATEMENT(217);
- N_STATEMENT(218);
- N_STATEMENT(219);
- N_STATEMENT(220);
- N_STATEMENT(221);
- N_STATEMENT(222);
- N_STATEMENT(223);
- N_STATEMENT(224);
- N_STATEMENT(225);
- N_STATEMENT(226);
- N_STATEMENT(227);
- N_STATEMENT(228);
- N_STATEMENT(229);
- N_STATEMENT(230);
- N_STATEMENT(231);
- N_STATEMENT(232);
- N_STATEMENT(233);
- N_STATEMENT(234);
- N_STATEMENT(235);
- N_STATEMENT(236);
- N_STATEMENT(237);
- N_STATEMENT(238);
- N_STATEMENT(239);
- N_STATEMENT(240);
- N_STATEMENT(241);
- N_STATEMENT(242);
- N_STATEMENT(243);
- N_STATEMENT(244);
- N_STATEMENT(245);
- N_STATEMENT(246);
- N_STATEMENT(247);
- N_STATEMENT(248);
- N_STATEMENT(249);
- N_STATEMENT(250);
- N_STATEMENT(251);
- N_STATEMENT(252);
- N_STATEMENT(253);
- N_STATEMENT(254);
- N_STATEMENT(255);
- N_STATEMENT(256);
- N_STATEMENT(257);
- N_STATEMENT(258);
- N_STATEMENT(259);
- N_STATEMENT(260);
- N_STATEMENT(261);
- N_STATEMENT(262);
- N_STATEMENT(263);
- N_STATEMENT(264);
- N_STATEMENT(265);
- N_STATEMENT(266);
- N_STATEMENT(267);
- N_STATEMENT(268);
- N_STATEMENT(269);
- N_STATEMENT(270);
- N_STATEMENT(271);
- N_STATEMENT(272);
- N_STATEMENT(273);
- N_STATEMENT(274);
- N_STATEMENT(275);
- N_STATEMENT(276);
- N_STATEMENT(277);
- N_STATEMENT(278);
- N_STATEMENT(279);
- N_STATEMENT(280);
- N_STATEMENT(281);
- N_STATEMENT(282);
- N_STATEMENT(283);
- N_STATEMENT(284);
- N_STATEMENT(285);
- N_STATEMENT(286);
- N_STATEMENT(287);
- N_STATEMENT(288);
- N_STATEMENT(289);
- N_STATEMENT(290);
- N_STATEMENT(291);
- N_STATEMENT(292);
- N_STATEMENT(293);
- N_STATEMENT(294);
- N_STATEMENT(295);
- N_STATEMENT(296);
- N_STATEMENT(297);
- N_STATEMENT(298);
- N_STATEMENT(299);
- N_STATEMENT(300);
- N_STATEMENT(301);
- N_STATEMENT(302);
- N_STATEMENT(303);
- N_STATEMENT(304);
- N_STATEMENT(305);
- N_STATEMENT(306);
- N_STATEMENT(307);
- N_STATEMENT(308);
- N_STATEMENT(309);
- N_STATEMENT(310);
- N_STATEMENT(311);
- N_STATEMENT(312);
- N_STATEMENT(313);
- N_STATEMENT(314);
- N_STATEMENT(315);
- N_STATEMENT(316);
- N_STATEMENT(317);
- N_STATEMENT(318);
- N_STATEMENT(319);
- N_STATEMENT(320);
- N_STATEMENT(321);
- N_STATEMENT(322);
- N_STATEMENT(323);
- N_STATEMENT(324);
- N_STATEMENT(325);
- N_STATEMENT(326);
- N_STATEMENT(327);
- N_STATEMENT(328);
- N_STATEMENT(329);
- N_STATEMENT(330);
- N_STATEMENT(331);
- N_STATEMENT(332);
- N_STATEMENT(333);
- N_STATEMENT(334);
- N_STATEMENT(335);
- N_STATEMENT(336);
- N_STATEMENT(337);
- N_STATEMENT(338);
- N_STATEMENT(339);
- N_STATEMENT(340);
- N_STATEMENT(341);
- N_STATEMENT(342);
- N_STATEMENT(343);
- N_STATEMENT(344);
- N_STATEMENT(345);
- N_STATEMENT(346);
- N_STATEMENT(347);
- N_STATEMENT(348);
- N_STATEMENT(349);
- N_STATEMENT(350);
- N_STATEMENT(351);
- N_STATEMENT(352);
- N_STATEMENT(353);
- N_STATEMENT(354);
- N_STATEMENT(355);
- N_STATEMENT(356);
- N_STATEMENT(357);
- N_STATEMENT(358);
- N_STATEMENT(359);
- N_STATEMENT(360);
- N_STATEMENT(361);
- N_STATEMENT(362);
- N_STATEMENT(363);
- N_STATEMENT(364);
- N_STATEMENT(365);
- N_STATEMENT(366);
- N_STATEMENT(367);
- N_STATEMENT(368);
- N_STATEMENT(369);
- N_STATEMENT(370);
- N_STATEMENT(371);
- N_STATEMENT(372);
- N_STATEMENT(373);
- N_STATEMENT(374);
- N_STATEMENT(375);
- N_STATEMENT(376);
- N_STATEMENT(377);
- N_STATEMENT(378);
- N_STATEMENT(379);
- N_STATEMENT(380);
- N_STATEMENT(381);
- N_STATEMENT(382);
- N_STATEMENT(383);
- N_STATEMENT(384);
- N_STATEMENT(385);
- N_STATEMENT(386);
- N_STATEMENT(387);
- N_STATEMENT(388);
- N_STATEMENT(389);
- N_STATEMENT(390);
- N_STATEMENT(391);
- N_STATEMENT(392);
- N_STATEMENT(393);
- N_STATEMENT(394);
- N_STATEMENT(395);
- N_STATEMENT(396);
- N_STATEMENT(397);
- N_STATEMENT(398);
- N_STATEMENT(399);
- N_STATEMENT(400);
- N_STATEMENT(401);
- N_STATEMENT(402);
- N_STATEMENT(403);
- N_STATEMENT(404);
- N_STATEMENT(405);
- N_STATEMENT(406);
- N_STATEMENT(407);
- N_STATEMENT(408);
- N_STATEMENT(409);
- N_STATEMENT(410);
- N_STATEMENT(411);
- N_STATEMENT(412);
- N_STATEMENT(413);
- N_STATEMENT(414);
- N_STATEMENT(415);
- N_STATEMENT(416);
- N_STATEMENT(417);
- N_STATEMENT(418);
- N_STATEMENT(419);
- N_STATEMENT(420);
- N_STATEMENT(421);
- N_STATEMENT(422);
- N_STATEMENT(423);
- N_STATEMENT(424);
- N_STATEMENT(425);
- N_STATEMENT(426);
- N_STATEMENT(427);
- N_STATEMENT(428);
- N_STATEMENT(429);
- N_STATEMENT(430);
- N_STATEMENT(431);
- N_STATEMENT(432);
- N_STATEMENT(433);
- N_STATEMENT(434);
- N_STATEMENT(435);
- N_STATEMENT(436);
- N_STATEMENT(437);
- N_STATEMENT(438);
- N_STATEMENT(439);
- N_STATEMENT(440);
- N_STATEMENT(441);
- N_STATEMENT(442);
- N_STATEMENT(443);
- N_STATEMENT(444);
- N_STATEMENT(445);
- N_STATEMENT(446);
- N_STATEMENT(447);
- N_STATEMENT(448);
- N_STATEMENT(449);
- N_STATEMENT(450);
- N_STATEMENT(451);
- N_STATEMENT(452);
- N_STATEMENT(453);
- N_STATEMENT(454);
- N_STATEMENT(455);
- N_STATEMENT(456);
- N_STATEMENT(457);
- N_STATEMENT(458);
- N_STATEMENT(459);
- N_STATEMENT(460);
- N_STATEMENT(461);
- N_STATEMENT(462);
- N_STATEMENT(463);
- N_STATEMENT(464);
- N_STATEMENT(465);
- N_STATEMENT(466);
- N_STATEMENT(467);
- N_STATEMENT(468);
- N_STATEMENT(469);
- N_STATEMENT(470);
- N_STATEMENT(471);
- N_STATEMENT(472);
- N_STATEMENT(473);
- N_STATEMENT(474);
- N_STATEMENT(475);
- N_STATEMENT(476);
- N_STATEMENT(477);
- N_STATEMENT(478);
- N_STATEMENT(479);
- N_STATEMENT(480);
- N_STATEMENT(481);
- N_STATEMENT(482);
- N_STATEMENT(483);
- N_STATEMENT(484);
- N_STATEMENT(485);
- N_STATEMENT(486);
- N_STATEMENT(487);
- N_STATEMENT(488);
- N_STATEMENT(489);
- N_STATEMENT(490);
- N_STATEMENT(491);
- N_STATEMENT(492);
- N_STATEMENT(493);
- N_STATEMENT(494);
- N_STATEMENT(495);
- N_STATEMENT(496);
- N_STATEMENT(497);
- N_STATEMENT(498);
- N_STATEMENT(499);
- N_STATEMENT(500);
- N_STATEMENT(501);
- N_STATEMENT(502);
- N_STATEMENT(503);
- N_STATEMENT(504);
- N_STATEMENT(505);
- N_STATEMENT(506);
- N_STATEMENT(507);
- N_STATEMENT(508);
- N_STATEMENT(509);
- N_STATEMENT(510);
- N_STATEMENT(511);
- N_STATEMENT(512);
- N_STATEMENT(513);
- N_STATEMENT(514);
- N_STATEMENT(515);
- N_STATEMENT(516);
- N_STATEMENT(517);
- N_STATEMENT(518);
- N_STATEMENT(519);
- N_STATEMENT(520);
- N_STATEMENT(521);
- N_STATEMENT(522);
- N_STATEMENT(523);
- N_STATEMENT(524);
- N_STATEMENT(525);
- N_STATEMENT(526);
- N_STATEMENT(527);
- N_STATEMENT(528);
- N_STATEMENT(529);
- N_STATEMENT(530);
- N_STATEMENT(531);
- N_STATEMENT(532);
- N_STATEMENT(533);
- N_STATEMENT(534);
- N_STATEMENT(535);
- N_STATEMENT(536);
- N_STATEMENT(537);
- N_STATEMENT(538);
- N_STATEMENT(539);
- N_STATEMENT(540);
- N_STATEMENT(541);
- N_STATEMENT(542);
- N_STATEMENT(543);
- N_STATEMENT(544);
- N_STATEMENT(545);
- N_STATEMENT(546);
- N_STATEMENT(547);
- N_STATEMENT(548);
- N_STATEMENT(549);
- N_STATEMENT(550);
- N_STATEMENT(551);
- N_STATEMENT(552);
- N_STATEMENT(553);
- N_STATEMENT(554);
- N_STATEMENT(555);
- N_STATEMENT(556);
- N_STATEMENT(557);
- N_STATEMENT(558);
- N_STATEMENT(559);
- N_STATEMENT(560);
- N_STATEMENT(561);
- N_STATEMENT(562);
- N_STATEMENT(563);
- N_STATEMENT(564);
- N_STATEMENT(565);
- N_STATEMENT(566);
- N_STATEMENT(567);
- N_STATEMENT(568);
- N_STATEMENT(569);
- N_STATEMENT(570);
- N_STATEMENT(571);
- N_STATEMENT(572);
- N_STATEMENT(573);
- N_STATEMENT(574);
- N_STATEMENT(575);
- N_STATEMENT(576);
- N_STATEMENT(577);
- N_STATEMENT(578);
- N_STATEMENT(579);
- N_STATEMENT(580);
- N_STATEMENT(581);
- N_STATEMENT(582);
- N_STATEMENT(583);
- N_STATEMENT(584);
- N_STATEMENT(585);
- N_STATEMENT(586);
- N_STATEMENT(587);
- N_STATEMENT(588);
- N_STATEMENT(589);
- N_STATEMENT(590);
- N_STATEMENT(591);
- N_STATEMENT(592);
- N_STATEMENT(593);
- N_STATEMENT(594);
- N_STATEMENT(595);
- N_STATEMENT(596);
- N_STATEMENT(597);
- N_STATEMENT(598);
- N_STATEMENT(599);
- N_STATEMENT(600);
- N_STATEMENT(601);
- N_STATEMENT(602);
- N_STATEMENT(603);
- N_STATEMENT(604);
- N_STATEMENT(605);
- N_STATEMENT(606);
- N_STATEMENT(607);
- N_STATEMENT(608);
- N_STATEMENT(609);
- N_STATEMENT(610);
- N_STATEMENT(611);
- N_STATEMENT(612);
- N_STATEMENT(613);
- N_STATEMENT(614);
- N_STATEMENT(615);
- N_STATEMENT(616);
- N_STATEMENT(617);
- N_STATEMENT(618);
- N_STATEMENT(619);
- N_STATEMENT(620);
- N_STATEMENT(621);
- N_STATEMENT(622);
- N_STATEMENT(623);
- N_STATEMENT(624);
- N_STATEMENT(625);
- N_STATEMENT(626);
- N_STATEMENT(627);
- N_STATEMENT(628);
- N_STATEMENT(629);
- N_STATEMENT(630);
- N_STATEMENT(631);
- N_STATEMENT(632);
- N_STATEMENT(633);
- N_STATEMENT(634);
- N_STATEMENT(635);
- N_STATEMENT(636);
- N_STATEMENT(637);
- N_STATEMENT(638);
- N_STATEMENT(639);
- N_STATEMENT(640);
- N_STATEMENT(641);
- N_STATEMENT(642);
- N_STATEMENT(643);
- N_STATEMENT(644);
- N_STATEMENT(645);
- N_STATEMENT(646);
- N_STATEMENT(647);
- N_STATEMENT(648);
- N_STATEMENT(649);
- N_STATEMENT(650);
- N_STATEMENT(651);
- N_STATEMENT(652);
- N_STATEMENT(653);
- N_STATEMENT(654);
- N_STATEMENT(655);
- N_STATEMENT(656);
- N_STATEMENT(657);
- N_STATEMENT(658);
- N_STATEMENT(659);
- N_STATEMENT(660);
- N_STATEMENT(661);
- N_STATEMENT(662);
- N_STATEMENT(663);
- N_STATEMENT(664);
- N_STATEMENT(665);
- N_STATEMENT(666);
- N_STATEMENT(667);
- N_STATEMENT(668);
- N_STATEMENT(669);
- N_STATEMENT(670);
- N_STATEMENT(671);
- N_STATEMENT(672);
- N_STATEMENT(673);
- N_STATEMENT(674);
- N_STATEMENT(675);
- N_STATEMENT(676);
- N_STATEMENT(677);
- N_STATEMENT(678);
- N_STATEMENT(679);
- N_STATEMENT(680);
- N_STATEMENT(681);
- N_STATEMENT(682);
- N_STATEMENT(683);
- N_STATEMENT(684);
- N_STATEMENT(685);
- N_STATEMENT(686);
- N_STATEMENT(687);
- N_STATEMENT(688);
- N_STATEMENT(689);
- N_STATEMENT(690);
- N_STATEMENT(691);
- N_STATEMENT(692);
- N_STATEMENT(693);
- N_STATEMENT(694);
- N_STATEMENT(695);
- N_STATEMENT(696);
- N_STATEMENT(697);
- N_STATEMENT(698);
- N_STATEMENT(699);
- N_STATEMENT(700);
- N_STATEMENT(701);
- N_STATEMENT(702);
- N_STATEMENT(703);
- N_STATEMENT(704);
- N_STATEMENT(705);
- N_STATEMENT(706);
- N_STATEMENT(707);
- N_STATEMENT(708);
- N_STATEMENT(709);
- N_STATEMENT(710);
- N_STATEMENT(711);
- N_STATEMENT(712);
- N_STATEMENT(713);
- N_STATEMENT(714);
- N_STATEMENT(715);
- N_STATEMENT(716);
- N_STATEMENT(717);
- N_STATEMENT(718);
- N_STATEMENT(719);
- N_STATEMENT(720);
- N_STATEMENT(721);
- N_STATEMENT(722);
- N_STATEMENT(723);
- N_STATEMENT(724);
- N_STATEMENT(725);
- N_STATEMENT(726);
- N_STATEMENT(727);
- N_STATEMENT(728);
- N_STATEMENT(729);
- N_STATEMENT(730);
- N_STATEMENT(731);
- N_STATEMENT(732);
- N_STATEMENT(733);
- N_STATEMENT(734);
- N_STATEMENT(735);
- N_STATEMENT(736);
- N_STATEMENT(737);
- N_STATEMENT(738);
- N_STATEMENT(739);
- N_STATEMENT(740);
- N_STATEMENT(741);
- N_STATEMENT(742);
- N_STATEMENT(743);
- N_STATEMENT(744);
- N_STATEMENT(745);
- N_STATEMENT(746);
- N_STATEMENT(747);
- N_STATEMENT(748);
- N_STATEMENT(749);
- N_STATEMENT(750);
- N_STATEMENT(751);
- N_STATEMENT(752);
- N_STATEMENT(753);
- N_STATEMENT(754);
- N_STATEMENT(755);
- N_STATEMENT(756);
- N_STATEMENT(757);
- N_STATEMENT(758);
- N_STATEMENT(759);
- N_STATEMENT(760);
- N_STATEMENT(761);
- N_STATEMENT(762);
- N_STATEMENT(763);
- N_STATEMENT(764);
- N_STATEMENT(765);
- N_STATEMENT(766);
- N_STATEMENT(767);
- N_STATEMENT(768);
- N_STATEMENT(769);
- N_STATEMENT(770);
- N_STATEMENT(771);
- N_STATEMENT(772);
- N_STATEMENT(773);
- N_STATEMENT(774);
- N_STATEMENT(775);
- N_STATEMENT(776);
- N_STATEMENT(777);
- N_STATEMENT(778);
- N_STATEMENT(779);
- N_STATEMENT(780);
- N_STATEMENT(781);
- N_STATEMENT(782);
- N_STATEMENT(783);
- N_STATEMENT(784);
- N_STATEMENT(785);
- N_STATEMENT(786);
- N_STATEMENT(787);
- N_STATEMENT(788);
- N_STATEMENT(789);
- N_STATEMENT(790);
- N_STATEMENT(791);
- N_STATEMENT(792);
- N_STATEMENT(793);
- N_STATEMENT(794);
- N_STATEMENT(795);
- N_STATEMENT(796);
- N_STATEMENT(797);
- N_STATEMENT(798);
- N_STATEMENT(799);
- N_STATEMENT(800);
- N_STATEMENT(801);
- N_STATEMENT(802);
- N_STATEMENT(803);
- N_STATEMENT(804);
- N_STATEMENT(805);
- N_STATEMENT(806);
- N_STATEMENT(807);
- N_STATEMENT(808);
- N_STATEMENT(809);
- N_STATEMENT(810);
- N_STATEMENT(811);
- N_STATEMENT(812);
- N_STATEMENT(813);
- N_STATEMENT(814);
- N_STATEMENT(815);
- N_STATEMENT(816);
- N_STATEMENT(817);
- N_STATEMENT(818);
- N_STATEMENT(819);
- N_STATEMENT(820);
- N_STATEMENT(821);
- N_STATEMENT(822);
- N_STATEMENT(823);
- N_STATEMENT(824);
- N_STATEMENT(825);
- N_STATEMENT(826);
- N_STATEMENT(827);
- N_STATEMENT(828);
- N_STATEMENT(829);
- N_STATEMENT(830);
- N_STATEMENT(831);
- N_STATEMENT(832);
- N_STATEMENT(833);
- N_STATEMENT(834);
- N_STATEMENT(835);
- N_STATEMENT(836);
- N_STATEMENT(837);
- N_STATEMENT(838);
- N_STATEMENT(839);
- N_STATEMENT(840);
- N_STATEMENT(841);
- N_STATEMENT(842);
- N_STATEMENT(843);
- N_STATEMENT(844);
- N_STATEMENT(845);
- N_STATEMENT(846);
- N_STATEMENT(847);
- N_STATEMENT(848);
- N_STATEMENT(849);
- N_STATEMENT(850);
- N_STATEMENT(851);
- N_STATEMENT(852);
- N_STATEMENT(853);
- N_STATEMENT(854);
- N_STATEMENT(855);
- N_STATEMENT(856);
- N_STATEMENT(857);
- N_STATEMENT(858);
- N_STATEMENT(859);
- N_STATEMENT(860);
- N_STATEMENT(861);
- N_STATEMENT(862);
- N_STATEMENT(863);
- N_STATEMENT(864);
- N_STATEMENT(865);
- N_STATEMENT(866);
- N_STATEMENT(867);
- N_STATEMENT(868);
- N_STATEMENT(869);
- N_STATEMENT(870);
- N_STATEMENT(871);
- N_STATEMENT(872);
- N_STATEMENT(873);
- N_STATEMENT(874);
- N_STATEMENT(875);
- N_STATEMENT(876);
- N_STATEMENT(877);
- N_STATEMENT(878);
- N_STATEMENT(879);
- N_STATEMENT(880);
- N_STATEMENT(881);
- N_STATEMENT(882);
- N_STATEMENT(883);
- N_STATEMENT(884);
- N_STATEMENT(885);
- N_STATEMENT(886);
- N_STATEMENT(887);
- N_STATEMENT(888);
- N_STATEMENT(889);
- N_STATEMENT(890);
- N_STATEMENT(891);
- N_STATEMENT(892);
- N_STATEMENT(893);
- N_STATEMENT(894);
- N_STATEMENT(895);
- N_STATEMENT(896);
- N_STATEMENT(897);
- N_STATEMENT(898);
- N_STATEMENT(899);
- N_STATEMENT(900);
- N_STATEMENT(901);
- N_STATEMENT(902);
- N_STATEMENT(903);
- N_STATEMENT(904);
- N_STATEMENT(905);
- N_STATEMENT(906);
- N_STATEMENT(907);
- N_STATEMENT(908);
- N_STATEMENT(909);
- N_STATEMENT(910);
- N_STATEMENT(911);
- N_STATEMENT(912);
- N_STATEMENT(913);
- N_STATEMENT(914);
- N_STATEMENT(915);
- N_STATEMENT(916);
- N_STATEMENT(917);
- N_STATEMENT(918);
- N_STATEMENT(919);
- N_STATEMENT(920);
- N_STATEMENT(921);
- N_STATEMENT(922);
- N_STATEMENT(923);
- N_STATEMENT(924);
- N_STATEMENT(925);
- N_STATEMENT(926);
- N_STATEMENT(927);
- N_STATEMENT(928);
- N_STATEMENT(929);
- N_STATEMENT(930);
- N_STATEMENT(931);
- N_STATEMENT(932);
- N_STATEMENT(933);
- N_STATEMENT(934);
- N_STATEMENT(935);
- N_STATEMENT(936);
- N_STATEMENT(937);
- N_STATEMENT(938);
- N_STATEMENT(939);
- N_STATEMENT(940);
- N_STATEMENT(941);
- N_STATEMENT(942);
- N_STATEMENT(943);
- N_STATEMENT(944);
- N_STATEMENT(945);
- N_STATEMENT(946);
- N_STATEMENT(947);
- N_STATEMENT(948);
- N_STATEMENT(949);
- N_STATEMENT(950);
- N_STATEMENT(951);
- N_STATEMENT(952);
- N_STATEMENT(953);
- N_STATEMENT(954);
- N_STATEMENT(955);
- N_STATEMENT(956);
- N_STATEMENT(957);
- N_STATEMENT(958);
- N_STATEMENT(959);
- N_STATEMENT(960);
- N_STATEMENT(961);
- N_STATEMENT(962);
- N_STATEMENT(963);
- N_STATEMENT(964);
- N_STATEMENT(965);
- N_STATEMENT(966);
- N_STATEMENT(967);
- N_STATEMENT(968);
- N_STATEMENT(969);
- N_STATEMENT(970);
- N_STATEMENT(971);
- N_STATEMENT(972);
- N_STATEMENT(973);
- N_STATEMENT(974);
- N_STATEMENT(975);
- N_STATEMENT(976);
- N_STATEMENT(977);
- N_STATEMENT(978);
- N_STATEMENT(979);
- N_STATEMENT(980);
- N_STATEMENT(981);
- N_STATEMENT(982);
- N_STATEMENT(983);
- N_STATEMENT(984);
- N_STATEMENT(985);
- N_STATEMENT(986);
- N_STATEMENT(987);
- N_STATEMENT(988);
- N_STATEMENT(989);
- N_STATEMENT(990);
- N_STATEMENT(991);
- N_STATEMENT(992);
- N_STATEMENT(993);
- N_STATEMENT(994);
- N_STATEMENT(995);
- N_STATEMENT(996);
- N_STATEMENT(997);
- N_STATEMENT(998);
- N_STATEMENT(999);
- N_STATEMENT(1000);
- N_STATEMENT(1001);
- N_STATEMENT(1002);
- N_STATEMENT(1003);
- N_STATEMENT(1004);
- N_STATEMENT(1005);
- N_STATEMENT(1006);
- N_STATEMENT(1007);
- N_STATEMENT(1008);
- N_STATEMENT(1009);
- N_STATEMENT(1010);
- N_STATEMENT(1011);
- N_STATEMENT(1012);
- N_STATEMENT(1013);
- N_STATEMENT(1014);
- N_STATEMENT(1015);
- N_STATEMENT(1016);
- N_STATEMENT(1017);
- N_STATEMENT(1018);
- N_STATEMENT(1019);
- N_STATEMENT(1020);
- N_STATEMENT(1021);
- N_STATEMENT(1022);
- N_STATEMENT(1023);
- }
- return atom_error; /* NOTREACHED, shut up the compiler */
+ return erl_nif_user_trace_n(env, argc, argv);
#else
return atom_error;
#endif
View
44 lib/runtime_tools/examples/user-probe-n.d
@@ -0,0 +1,44 @@
+/* example usage: dtrace -q -s /path/to/user-probe.d */
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Scott Lystig Fritchie 2011-2012. 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.
+ *
+ * %CopyrightEnd%
+ */
+
+erlang*:::user_trace-n0
+{
+ printf("probe n0: %s %s %d %d %d %d '%s' '%s' '%s' '%s'\n",
+ copyinstr(arg0),
+ arg1 == NULL ? "" : copyinstr(arg1),
+ arg2, arg3, arg4, arg5,
+ arg6 == NULL ? "" : copyinstr(arg6),
+ arg7 == NULL ? "" : copyinstr(arg7),
+ arg8 == NULL ? "" : copyinstr(arg8),
+ arg9 == NULL ? "" : copyinstr(arg9));
+}
+
+erlang*:::user_trace-n1
+{
+ printf("probe n1: %s %s %d %d %d %d '%s' '%s' '%s' '%s'\n",
+ copyinstr(arg0),
+ arg1 == NULL ? "" : copyinstr(arg1),
+ arg2, arg3, arg4, arg5,
+ arg6 == NULL ? "" : copyinstr(arg6),
+ arg7 == NULL ? "" : copyinstr(arg7),
+ arg8 == NULL ? "" : copyinstr(arg8),
+ arg9 == NULL ? "" : copyinstr(arg9));
+}
+
View
53 lib/runtime_tools/examples/user-probe-n.systemtap
@@ -0,0 +1,53 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Scott Lystig Fritchie and Andreas Schultz, 2011-2012. 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.
+ *
+ * %CopyrightEnd%
+ */
+/*
+ * Note: This file assumes that you're using the non-SMP-enabled Erlang
+ * virtual machine, "beam". The SMP-enabled VM is called "beam.smp".
+ * Note that other variations of the virtual machine also have
+ * different names, e.g. the debug build of the SMP-enabled VM
+ * is "beam.debug.smp".
+ *
+ * To use a different virtual machine, replace each instance of
+ * "beam" with "beam.smp" or the VM name appropriate to your
+ * environment.
+ */
+
+probe process("beam").mark("user_trace-n0")
+{
+ printf("probe n0: %s %s %d %d %d %d '%s' '%s' '%s' '%s'\n",
+ user_string($arg1),
+ $arg2 == NULL ? "" : user_string($arg2),
+ $arg3, $arg4, $arg5, $arg6,
+ $arg7 == NULL ? "" : user_string($arg7),
+ $arg8 == NULL ? "" : user_string($arg8),
+ $arg9 == NULL ? "" : user_string($arg9),
+ $arg9 == NULL ? "" : user_string($arg9));
+}
+
+probe process("beam").mark("user_trace-n1")
+{
+ printf("probe n1: %s %s %d %d %d %d '%s' '%s' '%s' '%s'\n",
+ user_string($arg1),
+ $arg2 == NULL ? "" : user_string($arg2),
+ $arg3, $arg4, $arg5, $arg6,
+ $arg7 == NULL ? "" : user_string($arg7),
+ $arg8 == NULL ? "" : user_string($arg8),
+ $arg9 == NULL ? "" : user_string($arg9),
+ $arg9 == NULL ? "" : user_string($arg9));
+}
View
4 lib/runtime_tools/examples/user-probe.systemtap
@@ -28,12 +28,12 @@
* environment.
*/
-probe process("dyntrace.so").mark("user_trace-s1")
+probe process("beam").mark("user_trace-s1")
{
printf("%s\n", user_string($arg1));
}
-probe process("dyntrace.so").mark("user_trace-i4s4")
+probe process("beam").mark("user_trace-i4s4")
{
printf("%s %s %d %d %d %d '%s' '%s' '%s' '%s'\n",
user_string($arg1),
Please sign in to comment.
Something went wrong with that request. Please try again.