X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=trace%2Ftrace.c;h=fdffaba5f7cdb9d1e25ef3161bdd818d9c248391;hp=d70957d1af83a5e25844c9566c226bed1c577659;hb=7c6cf551df1eb4b59b2576c73db7ad30ac4ce396;hpb=27159f21f76b973a9fa3ec92b8fee2e390d43a43 diff --git a/trace/trace.c b/trace/trace.c index d70957d..fdffaba 100644 --- a/trace/trace.c +++ b/trace/trace.c @@ -42,6 +42,8 @@ # define EF_REG2 8 # endif #define reg_syscall_nr (EF_REG2 / 4) +#elif defined(__arm__) +#define reg_syscall_nr _offsetof(struct user, regs.uregs[7]) #else #error tracing is not supported on this architecture #endif @@ -51,7 +53,7 @@ } while (0) #define ERROR(fmt, ...) do { \ - syslog(0, "utrace: "fmt, ## __VA_ARGS__); \ + syslog(LOG_ERR, "utrace: "fmt, ## __VA_ARGS__); \ fprintf(stderr, "utrace: "fmt, ## __VA_ARGS__); \ } while (0) @@ -174,7 +176,7 @@ int main(int argc, char **argv, char **envp) if (child == 0) { char **_argv = calloc(argc + 1, sizeof(char *)); char **_envp; - char preload[] = "LD_PRELOAD=/lib/libpreload-trace.so"; + char *preload = "LD_PRELOAD=/lib/libpreload-trace.so"; int envc = 1; int ret; @@ -185,10 +187,13 @@ int main(int argc, char **argv, char **envp) _envp = calloc(envc, sizeof(char *)); memcpy(&_envp[1], _envp, envc * sizeof(char *)); - *envp = preload; + *_envp = preload; - ret = execve(_argv[0], _argv, envp); + ret = execve(_argv[0], _argv, _envp); ERROR("failed to exec %s: %s\n", _argv[0], strerror(errno)); + + free(_argv); + free(_envp); return ret; }