Lines Matching defs:fsc

96 /* Clear up and free parts of the fsc structure. */
98 free_fsc(struct freebsd32_syscall *fsc)
102 free(fsc->args);
103 free(fsc->args32);
104 if (fsc->s_args) {
105 for (i = 0; i < fsc->nargs; i++)
106 free(fsc->s_args[i]);
107 free(fsc->s_args);
109 free(fsc);
124 struct freebsd32_syscall *fsc;
155 fsc = alloc_fsc();
156 if (fsc == NULL)
158 fsc->number = syscall_num;
159 fsc->name = (syscall_num < 0 || syscall_num >= nsyscalls) ?
161 if (!fsc->name) {
166 if (fsc->name && (trussinfo->flags & FOLLOWFORKS) &&
167 (strcmp(fsc->name, "fork") == 0 ||
168 strcmp(fsc->name, "rfork") == 0 ||
169 strcmp(fsc->name, "vfork") == 0))
175 fsc->args32 = malloc((1 + nargs) * sizeof(unsigned int));
178 iorequest.piod_addr = fsc->args32;
184 fsc->args = malloc((1 + nargs) * sizeof(unsigned long));
186 fsc->args[i] = fsc->args32[i];
189 if (fsc->name)
190 sc = get_syscall(fsc->name);
192 fsc->nargs = sc->nargs;
196 "args to %d\n", fsc->name, nargs);
198 fsc->nargs = nargs;
201 fsc->s_args = calloc(1, (1 + fsc->nargs) * sizeof(char *));
202 fsc->sc = sc;
212 if (fsc->name) {
214 fprintf(stderr, "syscall %s(", fsc->name);
216 for (i = 0; i < fsc->nargs; i++) {
219 fsc->args[sc->args[i].offset] : fsc->args[i],
220 i < (fsc->nargs - 1) ? "," : "");
223 fsc->s_args[i] = print_arg(&sc->args[i],
224 fsc->args, 0, trussinfo);
236 if (fsc->name != NULL && (strcmp(fsc->name, "freebsd32_execve") == 0 ||
237 strcmp(fsc->name, "exit") == 0)) {
243 if (strcmp(fsc->name, "freebsd32_execve") == 0) {
245 if (fsc->s_args[1]) {
246 free(fsc->s_args[1]);
247 fsc->s_args[1] = NULL;
251 if (fsc->s_args[2]) {
252 free(fsc->s_args[2]);
253 fsc->s_args[2] = NULL;
258 trussinfo->curthread->fsc = fsc;
272 struct freebsd32_syscall *fsc;
278 if (trussinfo->curthread->fsc == NULL)
296 fsc = trussinfo->curthread->fsc;
297 sc = fsc->sc;
299 for (i = 0; i < fsc->nargs; i++)
300 asprintf(&fsc->s_args[i], "0x%lx", fsc->args[i]);
315 fsc->args[sc->args[i].offset]);
318 fsc->args, retval, trussinfo);
320 fsc->s_args[i] = temp;
325 if (fsc->name != NULL && (strcmp(fsc->name, "freebsd32_execve") == 0 ||
326 strcmp(fsc->name, "exit") == 0))
334 print_syscall_ret(trussinfo, fsc->name, fsc->nargs, fsc->s_args, errorp,
335 retval, fsc->sc);
336 free_fsc(fsc);