ust: fix several segfaults, now seems to trace without errors
[ust.git] / hello / hello.c
CommitLineData
68c1021b
PMF
1#include <stdio.h>
2#include <unistd.h>
b6bf28ec 3#include <sys/mman.h>
68c1021b 4
59b161cd 5#include "../libmarkers/marker.h"
5f54827b
PMF
6#include "usterr.h"
7#include "tracer.h"
ba6459ba 8#include "marker-control.h"
59b161cd
PMF
9
10void probe(const struct marker *mdata,
11 void *probe_private, void *call_private,
12 const char *fmt, va_list *args)
13{
14 printf("In probe\n");
15}
16
5f54827b
PMF
17//ust// void try_map()
18//ust// {
19//ust// char *m;
20//ust//
21//ust// /* maybe add MAP_LOCKED */
22//ust// m = mmap(NULL, 4096, PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE , -1, 0);
23//ust// if(m == (char*)-1) {
24//ust// perror("mmap");
25//ust// return;
26//ust// }
27//ust//
28//ust// printf("The mapping is at %p.\n", m);
29//ust// strcpy(m, "Hello, Mapping!");
30//ust// }
31
8d938dbd
PMF
32//sig_atomic_t must_quit;
33
34void inthandler(int sig)
35{
36 printf("in handler\n");
37 exit(0);
38}
39
40int init_int_handler(void)
41{
42 int result;
43 struct sigaction act;
44
45 result = sigemptyset(&act.sa_mask);
46 if(result == -1) {
47 PERROR("sigemptyset");
48 return -1;
49 }
50
51 act.sa_handler = inthandler;
52 act.sa_flags = SA_RESTART;
53
54 /* Only defer ourselves. Also, try to restart interrupted
55 * syscalls to disturb the traced program as little as possible.
56 */
57 result = sigaction(SIGINT, &act, NULL);
58 if(result == -1) {
59 PERROR("sigaction");
60 return -1;
61 }
62
63 return 0;
64}
65
ba6459ba
PMF
66//ust// DEFINE_MUTEX(probes_mutex);
67//ust//
68//ust// static LIST_HEAD(probes_registered_list);
69//ust//
70//ust// int ltt_marker_connect(const char *channel, const char *mname,
71//ust// const char *pname)
72//ust//
73//ust// {
74//ust// int ret;
75//ust// struct ltt_active_marker *pdata;
76//ust// struct ltt_available_probe *probe;
77//ust//
78//ust// ltt_lock_traces();
79//ust// mutex_lock(&probes_mutex);
80//ust// probe = get_probe_from_name(pname);
81//ust// if (!probe) {
82//ust// ret = -ENOENT;
83//ust// goto end;
84//ust// }
85//ust// pdata = marker_get_private_data(channel, mname, probe->probe_func, 0);
86//ust// if (pdata && !IS_ERR(pdata)) {
87//ust// ret = -EEXIST;
88//ust// goto end;
89//ust// }
90//ust// pdata = kmem_cache_zalloc(markers_loaded_cachep, GFP_KERNEL);
91//ust// if (!pdata) {
92//ust// ret = -ENOMEM;
93//ust// goto end;
94//ust// }
95//ust// pdata->probe = probe;
96//ust// /*
97//ust// * ID has priority over channel in case of conflict.
98//ust// */
99//ust// ret = marker_probe_register(channel, mname, NULL,
100//ust// probe->probe_func, pdata);
101//ust// if (ret)
102//ust// kmem_cache_free(markers_loaded_cachep, pdata);
103//ust// else
104//ust// list_add(&pdata->node, &markers_loaded_list);
105//ust// end:
106//ust// mutex_unlock(&probes_mutex);
107//ust// ltt_unlock_traces();
108//ust// return ret;
109//ust// }
110//ust//
111//ust//
112//ust// int ltt_probe_register(struct ltt_available_probe *pdata)
113//ust// {
114//ust// int ret = 0;
115//ust// int comparison;
116//ust// struct ltt_available_probe *iter;
117//ust//
118//ust// mutex_lock(&probes_mutex);
119//ust// list_for_each_entry_reverse(iter, &probes_registered_list, node) {
120//ust// comparison = strcmp(pdata->name, iter->name);
121//ust// if (!comparison) {
122//ust// ret = -EBUSY;
123//ust// goto end;
124//ust// } else if (comparison > 0) {
125//ust// /* We belong to the location right after iter. */
126//ust// list_add(&pdata->node, &iter->node);
127//ust// goto end;
128//ust// }
129//ust// }
130//ust// /* Should be added at the head of the list */
131//ust// list_add(&pdata->node, &probes_registered_list);
132//ust// end:
133//ust// mutex_unlock(&probes_mutex);
134//ust// return ret;
135//ust// }
136//ust//
137//ust//
138//ust// struct ltt_available_probe default_probe = {
139//ust// .name = "default",
140//ust// .format = NULL,
141//ust// .probe_func = ltt_vtrace,
142//ust// .callbacks[0] = ltt_serialize_data,
143//ust// };
8d938dbd 144
5f54827b 145int main()
b6bf28ec 146{
5f54827b
PMF
147 int result;
148
8d938dbd
PMF
149 init_int_handler();
150
5f54827b
PMF
151 init_ustrelay_transport();
152
8d938dbd
PMF
153 printf("page size is %d\n", sysconf(_SC_PAGE_SIZE));
154
5f54827b 155 char trace_name[] = "theusttrace";
8d938dbd 156 char trace_type[] = "ustrelay";
5f54827b 157
ba6459ba
PMF
158 marker_control_init();
159
5f54827b
PMF
160 marker_probe_register("abc", "testmark", "", probe, NULL);
161 marker_probe_register("metadata", "core_marker_id", "channel %s name %s event_id %hu int #1u%zu long #1u%zu pointer #1u%zu size_t #1u%zu alignment #1u%u", probe, NULL);
ba6459ba
PMF
162//ust// result = ltt_probe_register(&default_probe);
163//ust// if(result)
164//ust// ERR("ltt_probe_register");
8d938dbd
PMF
165
166 result = ltt_marker_connect("abc", "testmark2", "default");
167 if(result)
168 ERR("ltt_marker_connect");
169
b6bf28ec 170
5f54827b
PMF
171 result = ltt_trace_setup(trace_name);
172 if(result < 0) {
173 ERR("ltt_trace_setup failed");
174 return 1;
b6bf28ec
PMF
175 }
176
8d938dbd
PMF
177 result = ltt_trace_set_type(trace_name, trace_type);
178 if(result < 0) {
179 ERR("ltt_trace_set_type failed");
180 return 1;
181 }
b6bf28ec 182
5f54827b
PMF
183 result = ltt_trace_alloc(trace_name);
184 if(result < 0) {
185 ERR("ltt_trace_alloc failed");
186 return 1;
187 }
b6bf28ec 188
8d938dbd
PMF
189 result = ltt_trace_start(trace_name);
190 if(result < 0) {
191 ERR("ltt_trace_start failed");
192 return 1;
193 }
194
b6bf28ec 195
68c1021b 196 printf("Hello, World!\n");
59b161cd 197
8d938dbd
PMF
198 for(;;) {
199 trace_mark(abc, testmark, "", MARK_NOARGS);
200 trace_mark(abc, testmark2, "", MARK_NOARGS);
201 sleep(1);
202 }
59b161cd 203
68c1021b
PMF
204 scanf("%*s");
205
206 return 0;
207}
This page took 0.030591 seconds and 4 git commands to generate.