Lines Matching defs:fsc

93 /* Clear up and free parts of the fsc structure. */
95 free_fsc(struct freebsd_syscall *fsc)
99 free(fsc->args);
100 if (fsc->s_args) {
101 for (i = 0; i < fsc->nargs; i++)
102 free(fsc->s_args[i]);
103 free(fsc->s_args);
105 free(fsc);
120 struct freebsd_syscall *fsc;
147 fsc = alloc_fsc();
148 if (fsc == NULL)
150 fsc->number = syscall_num;
151 fsc->name = (syscall_num < 0 || syscall_num >= nsyscalls) ?
153 if (!fsc->name) {
158 if (fsc->name && (trussinfo->flags & FOLLOWFORKS) &&
159 (strcmp(fsc->name, "fork") == 0 ||
160 strcmp(fsc->name, "rfork") == 0 ||
161 strcmp(fsc->name, "vfork") == 0))
167 fsc->args = malloc((1 + nargs) * sizeof(unsigned long));
170 memmove(&fsc->args[0], args, regargs * sizeof(fsc->args[0]));
174 iorequest.piod_addr = &fsc->args[regargs];
175 iorequest.piod_len = (nargs - regargs) * sizeof(fsc->args[0]);
180 memmove(&fsc->args[0], args, nargs * sizeof(fsc->args[0]));
182 sc = get_syscall(fsc->name);
184 fsc->nargs = sc->nargs;
188 "args to %d\n", fsc->name, nargs);
190 fsc->nargs = nargs;
193 fsc->s_args = calloc(1, (1 + fsc->nargs) * sizeof(char *));
194 fsc->sc = sc;
204 if (fsc->name) {
206 fprintf(stderr, "syscall %s(", fsc->name);
208 for (i = 0; i < fsc->nargs; i++) {
211 fsc->args[sc->args[i].offset] : fsc->args[i],
212 i < (fsc->nargs - 1) ? "," : "");
215 fsc->s_args[i] = print_arg(&sc->args[i],
216 fsc->args, 0, trussinfo);
228 if (fsc->name && (strcmp(fsc->name, "execve") == 0 ||
229 strcmp(fsc->name, "exit") == 0)) {
235 if (strcmp(fsc->name, "execve") == 0) {
237 if (fsc->s_args[1]) {
238 free(fsc->s_args[1]);
239 fsc->s_args[1] = NULL;
243 if (fsc->s_args[2]) {
244 free(fsc->s_args[2]);
245 fsc->s_args[2] = NULL;
250 trussinfo->curthread->fsc = fsc;
264 struct freebsd_syscall *fsc;
270 if (trussinfo->curthread->fsc == NULL)
288 fsc = trussinfo->curthread->fsc;
289 sc = fsc->sc;
291 for (i = 0; i < fsc->nargs; i++)
292 asprintf(&fsc->s_args[i], "0x%lx", fsc->args[i]);
307 fsc->args[sc->args[i].offset]);
310 fsc->args, retval, trussinfo);
312 fsc->s_args[i] = temp;
317 if (fsc->name != NULL && (strcmp(fsc->name, "execve") == 0 ||
318 strcmp(fsc->name, "exit") == 0))
326 print_syscall_ret(trussinfo, fsc->name, fsc->nargs, fsc->s_args, errorp,
327 retval, fsc->sc);
328 free_fsc(fsc);