#define OPT_VALGRIND_XMLFILE "--xml-file="
#define OPT_VALGRIND_XMLFILE_FIXED "--xml-file=/tmp/valgrind_result.xml"
#define PATH_VALGRIND_XMLFILE "/tmp/valgrind_result.xml"
+#define OPT_VALGRIND_MASSIFFILE "--massif-out-file="
+#define OPT_VALGRIND_MASSIFFILE_FIXED "--massif-out-file=/tmp/valgrind_result.xml"
#if (ARCH==arm)
#define PATH_MEMCHECK "/opt/home/developer/sdk_tools/valgrind/usr/lib/valgrind/memcheck-arm-linux"
static int initialized = 0;
static int poll_outputfile = 0;
+static int is_gdbserver_launched;
void __set_oom();
void __set_env(app_info_from_db * menu_info, bundle * kb);
if(str_array[i] == NULL) break;
/* valgrind log file option */
if (strncmp(str_array[i], OPT_VALGRIND_LOGFILE
- , strlen(OPT_VALGRIND_LOGFILE)) == 0)
+ , sizeof(OPT_VALGRIND_LOGFILE)-1) == 0)
{
- if(strncmp(str_array[i], OPT_VALGRIND_LOGFILE_FIXED
- , strlen(str_array[i])))
+ if(strcmp(str_array[i], OPT_VALGRIND_LOGFILE_FIXED))
{
_E("wrong valgrind option(%s). It should be %s"
, str_array[i]
, OPT_VALGRIND_LOGFILE_FIXED);
- return 1;
+ return -1;
}else{
poll_outputfile |= POLL_VALGRIND_LOGFILE;
if(remove(PATH_VALGRIND_LOGFILE)){
}
/* valgrind xml file option */
else if (strncmp(str_array[i], OPT_VALGRIND_XMLFILE
- , strlen(OPT_VALGRIND_XMLFILE)) == 0)
+ , sizeof(OPT_VALGRIND_XMLFILE)-1) == 0)
{
- if(strncmp(str_array[i], OPT_VALGRIND_XMLFILE_FIXED
- , strlen(str_array[i])))
+ if(strcmp(str_array[i], OPT_VALGRIND_XMLFILE_FIXED))
{
_E("wrong valgrind option(%s). It should be %s"
, str_array[i]
, OPT_VALGRIND_XMLFILE_FIXED);
- return 1;
+ return -1;
+ }else{
+ poll_outputfile |= POLL_VALGRIND_XMLFILE;
+ if(remove(PATH_VALGRIND_XMLFILE)){
+ _D("cannot remove %s"
+ , PATH_VALGRIND_XMLFILE);
+ }
+ }
+ }
+ /* valgrind massif file option */
+ else if (strncmp(str_array[i], OPT_VALGRIND_MASSIFFILE
+ , sizeof(OPT_VALGRIND_MASSIFFILE)-1) == 0)
+ {
+ if(strcmp(str_array[i], OPT_VALGRIND_MASSIFFILE_FIXED))
+ {
+ _E("wrong valgrind option(%s). It should be %s"
+ , str_array[i]
+ , OPT_VALGRIND_MASSIFFILE_FIXED);
+ return -1;
}else{
poll_outputfile |= POLL_VALGRIND_XMLFILE;
if(remove(PATH_VALGRIND_XMLFILE)){
}
if(str_array == NULL) return 0;
+ is_gdbserver_launched = 0;
+ gdbserver_pid = -1;
+ gdbserver_app_pid = -1;
+
for (i = 0; i < len; i++) {
if(str_array[i] == NULL) break;
/* gdbserver */
{
if(apply_smack_rules("sdbd",appid,"w")) {
_E("unable to set sdbd rules");
- return 1;
+ return -1;
}
// FIXME: set gdbfolder to 755 also
}
__adjust_file_capability(PATH_GDBSERVER);
need_to_set_inh_cap_after_fork++;
+ is_gdbserver_launched++;
}
/* valgrind */
else if (strncmp(str_array[i], SDK_VALGRIND
, strlen(str_array[i])) == 0)
{
- if (__prepare_valgrind_outputfile(kb)) return 1;
+ if (__prepare_valgrind_outputfile(kb) == -1)
+ return -1;
__adjust_file_capability(PATH_MEMCHECK);
}
}
PERF("get package information & modify bundle done");
- if(__prepare_fork(kb,appid)) goto end;
+ if(__prepare_fork(kb,appid) == -1) goto end;
pid = fork();
if (pid == 0) {
exit(-1);
}
+ if(is_gdbserver_launched) {
+ char buf[MAX_LOCAL_BUFSZ];
+
+ usleep(100 * 1000); /* 100ms sleep */
+ snprintf(buf, MAX_LOCAL_BUFSZ, "%s.exe", app_path);
+ gdbserver_app_pid = __proc_iter_cmdline(NULL, buf);
+
+ if(gdbserver_app_pid == -1) {
+ _E("faild to get app pid");
+ } else {
+ gdbserver_pid = pid;
+ pid = gdbserver_app_pid;
+ }
+ }
+
_D("==> real launch pid : %d %s\n", pid, app_path);
is_real_launch = 1;