summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHwankyu Jhun <h.jhun@samsung.com>2016-03-31 14:34:37 +0900
committerHwankyu Jhun <h.jhun@samsung.com>2016-04-07 20:08:41 +0900
commit7f092270b7a55c4af3202a439c771cf182f50152 (patch)
treefdbe14d9fb9d13b5a2c96d0a9ea3a1b0f0a59d99
parent34e91f0746adab8e8475ab90385d0066eec010dc (diff)
downloaddebug-launchpad-7f092270b7a55c4af3202a439c771cf182f50152.tar.gz
debug-launchpad-7f092270b7a55c4af3202a439c771cf182f50152.tar.bz2
debug-launchpad-7f092270b7a55c4af3202a439c771cf182f50152.zip
- Remove hardcoded path Change-Id: Ica171199d95b8b6310cc6c28876ec33b2b53258b Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
-rw-r--r--include/common.h2
-rw-r--r--include/defs.h4
-rw-r--r--src/common.c101
-rw-r--r--src/debug-launchpad.c25
-rw-r--r--src/debug_util.c29
5 files changed, 76 insertions, 85 deletions
diff --git a/include/common.h b/include/common.h
index cff6fa6..fa7e9b4 100644
--- a/include/common.h
+++ b/include/common.h
@@ -70,6 +70,6 @@ void _modify_bundle(bundle *kb, int caller_pid, appinfo_t *appinfo, int cmd);
void _set_env(appinfo_t *app_info, bundle *kb);
char **_create_argc_argv(bundle *kb, int *margc, const char *app_path);
-char *_proc_get_cmdline_bypid(int pid);
+int _proc_check_cmdline_bypid(int pid);
#endif /* __COMMON_H__ */
diff --git a/include/defs.h b/include/defs.h
index 8e48b21..9af5393 100644
--- a/include/defs.h
+++ b/include/defs.h
@@ -45,9 +45,9 @@
#define DLP_K_UNIT_TEST_ARG "__DLP_UNIT_TEST_ARG__"
#define DLP_K_VALGRIND_ARG "__DLP_VALGRIND_ARG__"
#define DLP_K_ATTACH_ARG "__DLP_ATTACH_ARG__"
+#define DLP_K_GDBSERVER_PATH "__DLP_GDBSERVER_PATH__"
+#define DLP_K_VALGRIND_PATH "__DLP_VALGRIND_PATH__"
-#define PATH_GDBSERVER "/home/developer/sdk_tools/gdbserver/gdbserver"
-#define PATH_VALGRIND "/home/developer/sdk_tools/valgrind/usr/bin/valgrind"
#define PATH_DA_SO "/home/developer/sdk_tools/da/da_probe.so"
#define OPT_VALGRIND_LOGFILE_FIXED "--log-file=/tmp/valgrind_result.txt"
diff --git a/src/common.c b/src/common.c
index 5cb31e1..4b05749 100644
--- a/src/common.c
+++ b/src/common.c
@@ -38,16 +38,6 @@
#include "defs.h"
#define MAX_PATH_LEN 1024
-#define BINSH_NAME "/bin/sh"
-#define BINSH_SIZE 7
-#define VALGRIND_NAME "/home/developer/sdk_tools/valgrind/usr/bin/valgrind"
-#define VALGRIND_SIZE 51
-#define BASH_NAME "/bin/bash"
-#define BASH_SIZE 9
-#define OPROFILE_NAME "/usr/bin/oprofile_command"
-#define OPROFILE_SIZE 25
-#define OPTION_VALGRIND_NAME "valgrind"
-#define OPTION_VALGRIND_SIZE 8
#define MAX_CMD_BUFSZ 1024
#define PATH_TMP "/tmp"
#define PATH_DATA "/data"
@@ -515,7 +505,7 @@ void _set_env(appinfo_t *appinfo, bundle *kb)
__set_sdk_env(appinfo->appid, str_array[i]);
}
-static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
+static char **__add_arg(bundle *kb, char **argv, int *margc, const char *key)
{
const char *str = NULL;
const char **str_array = NULL;
@@ -523,9 +513,9 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
int i;
char **new_argv = NULL;
- if (bundle_get_type(kb, key) & BUNDLE_TYPE_ARRAY)
+ if (bundle_get_type(kb, key) & BUNDLE_TYPE_ARRAY) {
str_array = bundle_get_str_array(kb, key, &len);
- else {
+ } else {
str = bundle_get_val(kb, key);
if (str) {
str_array = &str;
@@ -535,7 +525,7 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
if (str_array) {
if (strncmp(key, DLP_K_DEBUG_ARG, strlen(key)) == 0
- || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
+ || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
new_argv = (char **)realloc(argv,
sizeof(char *) * (*margc + len + 2));
if (new_argv == NULL) {
@@ -579,7 +569,7 @@ static char **__add_arg(bundle * kb, char **argv, int *margc, const char *key)
*margc += len;
} else {
if (strncmp(key, DLP_K_DEBUG_ARG, strlen(key)) == 0
- || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
+ || strncmp(key, DLP_K_VALGRIND_ARG, strlen(key)) == 0) {
new_argv = (char **)realloc(argv,
sizeof(char *) * (*margc + 2));
if (new_argv == NULL) {
@@ -611,18 +601,19 @@ char **_create_argc_argv(bundle *kb, int *margc, const char *app_path)
const char *str;
const char **str_array = NULL;
int len = 0;
+ const char *path;
argc = bundle_export_to_argv(kb, &argv);
- if (argv)
+ if (argv) {
argv[0] = strdup(app_path);
- else {
+ } else {
_E("bundle_export_to_argv() is failed.");
return NULL;
}
- if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY)
+ if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY) {
str_array = bundle_get_str_array(kb, AUL_K_SDK, &len);
- else {
+ } else {
str = bundle_get_val(kb, AUL_K_SDK);
if (str) {
str_array = &str;
@@ -645,19 +636,46 @@ char **_create_argc_argv(bundle *kb, int *margc, const char *app_path)
else
argv[0] = strdup(buf);
+ path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+ if (path == NULL) {
+ _E("Failed to get gdbserver path");
+ if (argv[0])
+ free(argv[0]);
+ bundle_free_exported_argv(argc, &argv);
+ *margc = 0;
+ return NULL;
+ }
new_argv = __add_arg(kb, argv, &argc, DLP_K_DEBUG_ARG);
- new_argv[0] = strdup(PATH_GDBSERVER);
+ new_argv[0] = strdup(path);
argv = new_argv;
} else if (strncmp(str_array[i], SDK_VALGRIND, strlen(str_array[i])) == 0) {
+ path = bundle_get_val(kb, DLP_K_VALGRIND_PATH);
+ if (path == NULL) {
+ _E("Failed to get valgrind path");
+ if (argv[0])
+ free(argv[0]);
+ bundle_free_exported_argv(argc, &argv);
+ *margc = 0;
+ return NULL;
+ }
new_argv = __add_arg(kb, argv, &argc, DLP_K_VALGRIND_ARG);
- new_argv[0] = strdup(PATH_VALGRIND);
+ new_argv[0] = strdup(path);
argv = new_argv;
} else if (strncmp(str_array[i], SDK_UNIT_TEST, strlen(str_array[i])) == 0) {
new_argv = __add_arg(kb, argv, &argc, DLP_K_UNIT_TEST_ARG);
argv = new_argv;
} else if (strncmp(str_array[i], SDK_ATTACH, strlen(str_array[i])) == 0) {
+ path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+ if (path == NULL) {
+ _E("Failed to get gdbserver path");
+ if (argv[0])
+ free(argv[0]);
+ bundle_free_exported_argv(argc, &argv);
+ *margc = 0;
+ return NULL;
+ }
new_argv = __add_arg(kb, argv, &argc, DLP_K_ATTACH_ARG);
- new_argv[0] = strdup(PATH_GDBSERVER);
+ new_argv[0] = strdup(path);
argv = new_argv;
}
@@ -684,53 +702,26 @@ static int __read_proc(const char *path, char *buf, int size)
if (ret <= 0) {
close(fd);
return -1;
- } else
+ } else {
buf[ret] = 0;
+ }
close(fd);
return ret;
}
-char *_proc_get_cmdline_bypid(int pid)
+int _proc_check_cmdline_bypid(int pid)
{
char buf[MAX_CMD_BUFSZ];
int ret;
- char* ptr = NULL;
snprintf(buf, sizeof(buf), "/proc/%d/cmdline", pid);
ret = __read_proc(buf, buf, sizeof(buf));
if (ret <= 0)
- return NULL;
-
- /* support app launched by shell script*/
- if (strncmp(buf, BINSH_NAME, BINSH_SIZE) == 0)
- return strdup(&buf[BINSH_SIZE + 1]);
- else if (strncmp(buf, VALGRIND_NAME, VALGRIND_SIZE) == 0) {
- /* buf comes with double null-terminated string */
- while (1) {
- while (*ptr)
- ptr++;
- ptr++;
-
- if (!(*ptr))
- break;
-
- /* ignore trailing "--" */
- if (strncmp(ptr, "-", 1) != 0)
- break;
- }
+ return -1;
- return strdup(ptr);
- } else if (strncmp(buf, BASH_NAME, BASH_SIZE) == 0) {
- if (strncmp(&buf[BASH_SIZE + 1], OPROFILE_NAME, OPROFILE_SIZE) == 0) {
- if (strncmp(&buf[BASH_SIZE + OPROFILE_SIZE + 2],
- OPTION_VALGRIND_NAME, OPTION_VALGRIND_SIZE) == 0) {
- return strdup(&buf[BASH_SIZE + OPROFILE_SIZE +
- OPTION_VALGRIND_SIZE + 3]);
- }
- }
- }
+ _D("cmdline: %s", buf);
- return strdup(buf);
+ return 0;
}
diff --git a/src/debug-launchpad.c b/src/debug-launchpad.c
index c9c4cc4..10cc305 100644
--- a/src/debug-launchpad.c
+++ b/src/debug-launchpad.c
@@ -61,9 +61,9 @@ static int __real_send(int clifd, int ret)
return 0;
}
-static void __send_result_to_caller(int clifd, int ret, const char* app_path)
+static void __send_result_to_caller(int clifd, int ret)
{
- char *cmdline;
+ int res;
_W("Check app launching");
@@ -76,8 +76,8 @@ static void __send_result_to_caller(int clifd, int ret, const char* app_path)
return;
}
- cmdline = _proc_get_cmdline_bypid(ret);
- if (cmdline == NULL) {
+ res = _proc_check_cmdline_bypid(ret);
+ if (res < 0) {
_E("The app process might be terminated while we are wating %d", ret);
__real_send(clifd, -1); /* abnormally launched */
return;
@@ -141,13 +141,15 @@ static int __prepare_exec(const char *appid, const char *app_path,
static int __prepare_fork(bundle *kb, const char *appid)
{
- const char *str = NULL;
+ const char *str;
const char **str_array = NULL;
int len = 0;
- if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY)
+ if (bundle_get_type(kb, AUL_K_SDK) & BUNDLE_TYPE_ARRAY) {
str_array = bundle_get_str_array(kb, AUL_K_SDK, &len);
- else {
+ if (str_array == NULL)
+ return -1;
+ } else {
str = bundle_get_val(kb, AUL_K_SDK);
if (str) {
str_array = &str;
@@ -236,14 +238,14 @@ static void __real_launch(const char *app_path, bundle *kb)
int i;
app_argv = _create_argc_argv(kb, &app_argc, app_path);
+ if (app_argv == NULL)
+ return;
+
for (i = 0; i < app_argc; i++)
_D("input argument %d : %s##", i, app_argv[i]);
PERF("setup argument done");
- /* Temporary log: launch time checking */
- LOG(LOG_DEBUG, "LAUNCH", "[%s:Platform:launchpad:done]", app_path);
-
__normal_fork_exec(app_argc, app_argv);
}
@@ -380,7 +382,7 @@ static gboolean __handle_launch_event(gpointer data)
pid = __start_process(appinfo->appid, app_path, kb, appinfo);
end:
- __send_result_to_caller(clifd, pid, app_path);
+ __send_result_to_caller(clifd, pid);
if (pid > 0)
_send_app_launch_signal(pid, appinfo->appid);
@@ -539,3 +541,4 @@ int main(int argc, char **argv)
return 0;
}
+
diff --git a/src/debug_util.c b/src/debug_util.c
index 5e9074e..ab18d35 100644
--- a/src/debug_util.c
+++ b/src/debug_util.c
@@ -66,7 +66,7 @@ static int __check_pkginfo(const char *appid)
char *storeclientid = NULL;
pkgmgrinfo_pkginfo_h handle;
- r = pkgmgrinfo_pkginfo_get_pkginfo(appid, &handle);
+ r = pkgmgrinfo_pkginfo_get_usr_pkginfo(appid, getuid(), &handle);
if (r != PMINFO_R_OK) {
_E("Failed to get pkginfo: %s", appid);
return -1;
@@ -101,29 +101,24 @@ static int __check_pkginfo(const char *appid)
return 0;
}
-static int __prepare_gdbserver(const char *appid)
+static int __prepare_gdbserver(bundle *kb, const char *appid)
{
int r;
+ const char *path;
r = __check_pkginfo(appid);
if (r < 0)
return -1;
- if (_apply_smack_rules(LABEL_SDBD, appid, "w"))
- _E("Failed to apply smack rule %s %s w", LABEL_SDBD, appid);
-
- /* fixed debug-as fail issue (grant permission to use 10.0.2.2, 10.0.2.16) */
- if (_apply_smack_rules(appid, LABEL_NETWORK, "rw"))
- _E("Failed to apply smack rule %s %s rw", appid, LABEL_NETWORK);
-
- if (_apply_smack_rules(LABEL_NETWORK, appid, "w"))
- _E("Failed to apply smack rule %s %s w", LABEL_NETWORK, appid);
+ path = bundle_get_val(kb, DLP_K_GDBSERVER_PATH);
+ if (path == NULL)
+ return -1;
- r = dlp_chmod(PATH_GDBSERVER, S_IRUSR | S_IWUSR
+ r = dlp_chmod(path, S_IRUSR | S_IWUSR
| S_IXUSR | S_IRGRP | S_IXGRP
| S_IROTH | S_IXOTH, 1);
if (r != 0)
- _W("Failed to set 755: %s", PATH_GDBSERVER);
+ _W("Failed to set 755: %s", path);
gdbserver = true;
@@ -137,9 +132,11 @@ static int __prepare_valgrind(bundle *kb)
int len = 0;
int i;
- if (bundle_get_type(kb, DLP_K_VALGRIND_ARG) & BUNDLE_TYPE_ARRAY)
+ if (bundle_get_type(kb, DLP_K_VALGRIND_ARG) & BUNDLE_TYPE_ARRAY) {
str_arr = bundle_get_str_array(kb, DLP_K_VALGRIND_ARG, &len);
- else {
+ if (str_arr == NULL)
+ return -1;
+ } else {
str = bundle_get_val(kb, DLP_K_VALGRIND_ARG);
if (str) {
str_arr = &str;
@@ -200,7 +197,7 @@ int _prepare_debug_tool(bundle *kb, const char *appid,
if (strncmp(str_arr[i], SDK_DEBUG, strlen(SDK_DEBUG)) == 0
|| strncmp(str_arr[i], SDK_ATTACH, strlen(SDK_ATTACH)) == 0) {
- if (__prepare_gdbserver(appid) < 0)
+ if (__prepare_gdbserver(kb, appid) < 0)
return -1;
} else if (strncmp(str_arr[i], SDK_VALGRIND, strlen(SDK_VALGRIND)) == 0) {
__prepare_valgrind(kb);