{
assert(cinfo);
- char pid_str[11], tid_str[11];
+ char pid_str[11], tid_str[11], sig_str[11];
char *prstatus_fd_str = NULL;
if (asprintf(&prstatus_fd_str, "%d", cinfo->prstatus_fd) == -1) {
SNPRINTF_OR_EXIT(pid, "%d")
SNPRINTF_OR_EXIT(tid, "%d")
+ SNPRINTF_OR_EXIT(sig, "%d")
char *av[] = { CRASH_NOTIFY_BIN_PATH,
"--cmdline", cinfo->cmd_line,
"--pkgid", cinfo->pkgid,
"--reportpath", cinfo->result_path,
"--prstatus_fd", prstatus_fd_str,
+ "--signal", sig_str,
NULL };
spawn(av, NULL, NULL, NULL, NULL);
int prstatus_fd;
pid_t pid;
pid_t tid;
+ int signal;
char *cmd_name;
char *cmd_path;
char *report_path;
g_variant_builder_open(&md_builder, G_VARIANT_TYPE("a{sv}"));
+ if (notify_params->signal) {
+ g_variant_builder_open(&md_builder, G_VARIANT_TYPE("{sv}"));
+ g_variant_builder_add(&md_builder, "s", "sys.signal");
+ g_variant_builder_add(&md_builder, "v", g_variant_new_int32(notify_params->signal));
+ g_variant_builder_close(&md_builder);
+ }
+
struct RegInfo *reg_info;
int regs_count = _get_important_registers(notify_params->prstatus_fd, ®_info);
FLAG_PKGID,
FLAG_REPORTPATH,
FLAG_PRSTATUS_FD,
+ FLAG_SIGNAL,
};
static const struct option options[] = {
{ .name = "cmdline", .has_arg = required_argument, .flag = NULL, .val = FLAG_CMDLINE },
{ .name = "pkgid", .has_arg = required_argument, .flag = NULL, .val = FLAG_PKGID },
{ .name = "reportpath", .has_arg = required_argument, .flag = NULL, .val = FLAG_REPORTPATH },
{ .name = "prstatus_fd", .has_arg = required_argument, .flag = NULL, .val = FLAG_PRSTATUS_FD },
+ { .name = "signal", .has_arg = required_argument, .flag = NULL, .val = FLAG_SIGNAL },
{ NULL },
};
params->pkgid = optarg;
else if (FLAG_PRSTATUS_FD == val)
params->prstatus_fd = atoi(optarg);
+ else if (FLAG_SIGNAL == val)
+ params->signal = atoi(optarg);
} while (val != -1);
return params->cmd_name && params->cmd_path && params->appid && params->pkgid && params->prstatus_fd > 0;
{
assert(progname);
- printf("%s --prstatus_fd N --pid PID --tid TID --cmdline CMDLINE --cmdpath CMDPATH --appid APPID --pkgid PKGID\n", progname);
+ printf("%s --prstatus_fd N --pid PID --tid TID --cmdline CMDLINE --cmdpath CMDPATH --appid APPID --pkgid PKGID --signal SIGNALNR\n", progname);
}
int main(int ac, char *av[])