projects
/
project
/
procd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
system: always support staged sysupgrade
[project/procd.git]
/
trace
/
trace.c
diff --git
a/trace/trace.c
b/trace/trace.c
index
d70957d
..
fdffaba
100644
(file)
--- a/
trace/trace.c
+++ b/
trace/trace.c
@@
-42,6
+42,8
@@
# define EF_REG2 8
# endif
#define reg_syscall_nr (EF_REG2 / 4)
# 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
#else
#error tracing is not supported on this architecture
#endif
@@
-51,7
+53,7
@@
} while (0)
#define ERROR(fmt, ...) do { \
} 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)
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;
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;
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 = 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));
ERROR("failed to exec %s: %s\n", _argv[0], strerror(errno));
+
+ free(_argv);
+ free(_envp);
return ret;
}
return ret;
}