diff options
author | Juan Cespedes <cespedes@debian.org> | 2002-03-01 19:54:23 +0100 |
---|---|---|
committer | Juan Cespedes <cespedes@debian.org> | 2002-03-01 19:54:23 +0100 |
commit | 8cc1b9d456c8f41e3a8cc0d3ec0d77eb779cb7bb (patch) | |
tree | ad52599fd70a115bbe3837fc0aca4fb2ba4ba3e2 /sysdeps/linux-gnu | |
parent | 5916fda0d07da90cac8a78cbfa73374d81b150be (diff) | |
download | ltrace-8cc1b9d456c8f41e3a8cc0d3ec0d77eb779cb7bb.tar.gz |
Version: 0.3.18
* Simplified arch-dependent stuff
* Updated list of syscalls and signals to Linux 2.4.18
* Unified coding-style of all function declarations
* Do not indent lines indicating signals, exit codes, etc
* Updated description
* fix off-by-one problem in checking syscall number (Tim Waugh
<twaugh@redhat.com> fixed this problem in RedHat two years ago;
thank you for NOT noticing me...)
Diffstat (limited to 'sysdeps/linux-gnu')
-rw-r--r-- | sysdeps/linux-gnu/arm/breakpoint.c | 8 | ||||
-rw-r--r-- | sysdeps/linux-gnu/arm/regs.c | 13 | ||||
-rw-r--r-- | sysdeps/linux-gnu/arm/syscallent.h | 4 | ||||
-rw-r--r-- | sysdeps/linux-gnu/arm/trace.c | 22 | ||||
-rw-r--r-- | sysdeps/linux-gnu/i386/regs.c | 13 | ||||
-rw-r--r-- | sysdeps/linux-gnu/i386/syscallent.h | 16 | ||||
-rw-r--r-- | sysdeps/linux-gnu/i386/trace.c | 24 | ||||
-rw-r--r-- | sysdeps/linux-gnu/m68k/breakpoint.c | 8 | ||||
-rw-r--r-- | sysdeps/linux-gnu/m68k/regs.c | 13 | ||||
-rw-r--r-- | sysdeps/linux-gnu/m68k/trace.c | 22 | ||||
-rw-r--r-- | sysdeps/linux-gnu/proc.c | 4 | ||||
-rw-r--r-- | sysdeps/linux-gnu/trace.c | 54 |
12 files changed, 84 insertions, 117 deletions
diff --git a/sysdeps/linux-gnu/arm/breakpoint.c b/sysdeps/linux-gnu/arm/breakpoint.c index 446c38b..f2eed98 100644 --- a/sysdeps/linux-gnu/arm/breakpoint.c +++ b/sysdeps/linux-gnu/arm/breakpoint.c @@ -5,8 +5,8 @@ #include <sys/ptrace.h> #include "ltrace.h" -void enable_breakpoint(pid_t pid, struct breakpoint * sbp) -{ +void +enable_breakpoint(pid_t pid, struct breakpoint * sbp) { int a; a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr, 0); @@ -18,8 +18,8 @@ void enable_breakpoint(pid_t pid, struct breakpoint * sbp) ptrace(PTRACE_POKETEXT, pid, sbp->addr, a); } -void disable_breakpoint(pid_t pid, const struct breakpoint * sbp) -{ +void +disable_breakpoint(pid_t pid, const struct breakpoint * sbp) { int a; a = sbp->orig_value[0] + (sbp->orig_value[1]<<8) + (sbp->orig_value[2]<<16) + (sbp->orig_value[3]<<24); diff --git a/sysdeps/linux-gnu/arm/regs.c b/sysdeps/linux-gnu/arm/regs.c index 78ee60f..97a3bfe 100644 --- a/sysdeps/linux-gnu/arm/regs.c +++ b/sysdeps/linux-gnu/arm/regs.c @@ -18,20 +18,19 @@ #define off_lr 56 #define off_sp 52 -void * get_instruction_pointer(pid_t pid) -{ +void * +get_instruction_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, off_pc, 0); } -void * get_stack_pointer(pid_t pid) -{ +void * +get_stack_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, off_sp, 0); } /* really, this is given the *stack_pointer expecting * a CISC architecture; in our case, we don't need that */ -void * get_return_addr(pid_t pid, void * stack_pointer) -{ +void * +get_return_addr(pid_t pid, void * stack_pointer) { return (void *)ptrace(PTRACE_PEEKUSER, pid, off_lr, 0); } - diff --git a/sysdeps/linux-gnu/arm/syscallent.h b/sysdeps/linux-gnu/arm/syscallent.h index 5f61c6d..26d7bbf 100644 --- a/sysdeps/linux-gnu/arm/syscallent.h +++ b/sysdeps/linux-gnu/arm/syscallent.h @@ -74,7 +74,7 @@ "sigpending", /* 73 */ "sethostname", /* 74 */ "setrlimit", /* 75 */ - "old_getrlimit", /* 76 */ + "getrlimit", /* 76 */ "getrusage", /* 77 */ "gettimeofday", /* 78 */ "settimeofday", /* 79 */ @@ -189,7 +189,7 @@ "188", /* 188 */ "189", /* 189 */ "vfork", /* 190 */ - "getrlimit", /* 191 */ + "ugetrlimit", /* 191 */ "mmap2", /* 192 */ "truncate64", /* 193 */ "ftruncate64", /* 194 */ diff --git a/sysdeps/linux-gnu/arm/trace.c b/sysdeps/linux-gnu/arm/trace.c index 49d2f20..5e48b2e 100644 --- a/sysdeps/linux-gnu/arm/trace.c +++ b/sysdeps/linux-gnu/arm/trace.c @@ -84,25 +84,3 @@ long gimme_arg(enum tof type, struct process * proc, int arg_num) return 0; } - -int umovestr(struct process * proc, void * addr, int len, void * laddr) -{ - long a; - int i; - int offset=0; - - while(offset<len) { - a = ptrace(PTRACE_PEEKTEXT, proc->pid, addr+offset, 0); - for(i=0; i<sizeof(long); i++) { - if (((char*)&a)[i] && offset+i < len) { - *(char *)(laddr+offset+i) = ((char*)&a)[i]; - } else { - *(char *)(laddr+offset+i) = '\0'; - return 0; - } - } - offset += sizeof(long); - } - *(char *)(laddr+offset) = '\0'; - return 0; -} diff --git a/sysdeps/linux-gnu/i386/regs.c b/sysdeps/linux-gnu/i386/regs.c index f36be55..e60634b 100644 --- a/sysdeps/linux-gnu/i386/regs.c +++ b/sysdeps/linux-gnu/i386/regs.c @@ -14,18 +14,17 @@ # define PTRACE_POKEUSER PTRACE_POKEUSR #endif -void * get_instruction_pointer(pid_t pid) -{ +void * +get_instruction_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, 4*EIP, 0); } -void * get_stack_pointer(pid_t pid) -{ +void * +get_stack_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, 4*UESP, 0); } -void * get_return_addr(pid_t pid, void * stack_pointer) -{ +void * +get_return_addr(pid_t pid, void * stack_pointer) { return (void *)ptrace(PTRACE_PEEKTEXT, pid, stack_pointer, 0); } - diff --git a/sysdeps/linux-gnu/i386/syscallent.h b/sysdeps/linux-gnu/i386/syscallent.h index 52f69c4..e27b529 100644 --- a/sysdeps/linux-gnu/i386/syscallent.h +++ b/sysdeps/linux-gnu/i386/syscallent.h @@ -220,3 +220,19 @@ "madvise1", /* 219 */ "getdents64", /* 220 */ "fcntl64", /* 221 */ + "222", /* 222 */ + "security", /* 223 */ + "gettid", /* 224 */ + "readahead", /* 225 */ + "setxattr", /* 226 */ + "lsetxattr", /* 227 */ + "fsetxattr", /* 228 */ + "getxattr", /* 229 */ + "lgetxattr", /* 230 */ + "fgetxattr", /* 231 */ + "listxattr", /* 232 */ + "llistxattr", /* 233 */ + "flistxattr", /* 234 */ + "removexattr", /* 235 */ + "lremovexattr", /* 236 */ + "fremovexattr", /* 237 */ diff --git a/sysdeps/linux-gnu/i386/trace.c b/sysdeps/linux-gnu/i386/trace.c index 047ae51..1e38a27 100644 --- a/sysdeps/linux-gnu/i386/trace.c +++ b/sysdeps/linux-gnu/i386/trace.c @@ -22,8 +22,6 @@ */ int syscall_p(struct process * proc, int status, int * sysnum) { - static int syscall_active = 0; - if (WIFSTOPPED(status) && WSTOPSIG(status)==SIGTRAP) { *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, 4*ORIG_EAX, 0); @@ -81,25 +79,3 @@ long gimme_arg(enum tof type, struct process * proc, int arg_num) return 0; } - -int umovestr(struct process * proc, void * addr, int len, void * laddr) -{ - long a; - int i; - int offset=0; - - while(offset<len) { - a = ptrace(PTRACE_PEEKTEXT, proc->pid, addr+offset, 0); - for(i=0; i<sizeof(long); i++) { - if (((char*)&a)[i] && offset+i < len) { - *(char *)(laddr+offset+i) = ((char*)&a)[i]; - } else { - *(char *)(laddr+offset+i) = '\0'; - return 0; - } - } - offset += sizeof(long); - } - *(char *)(laddr+offset) = '\0'; - return 0; -} diff --git a/sysdeps/linux-gnu/m68k/breakpoint.c b/sysdeps/linux-gnu/m68k/breakpoint.c index 46c84ce..c74c4d2 100644 --- a/sysdeps/linux-gnu/m68k/breakpoint.c +++ b/sysdeps/linux-gnu/m68k/breakpoint.c @@ -5,8 +5,8 @@ #include <sys/ptrace.h> #include "ltrace.h" -void enable_breakpoint(pid_t pid, struct breakpoint * sbp) -{ +void +enable_breakpoint(pid_t pid, struct breakpoint * sbp) { int a; a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr, 0); @@ -17,8 +17,8 @@ void enable_breakpoint(pid_t pid, struct breakpoint * sbp) ptrace(PTRACE_POKETEXT, pid, sbp->addr, a); } -void disable_breakpoint(pid_t pid, const struct breakpoint * sbp) -{ +void +disable_breakpoint(pid_t pid, const struct breakpoint * sbp) { int a; a = ptrace(PTRACE_PEEKTEXT, pid, sbp->addr, 0); diff --git a/sysdeps/linux-gnu/m68k/regs.c b/sysdeps/linux-gnu/m68k/regs.c index f046f19..1f51417 100644 --- a/sysdeps/linux-gnu/m68k/regs.c +++ b/sysdeps/linux-gnu/m68k/regs.c @@ -14,18 +14,17 @@ # define PTRACE_POKEUSER PTRACE_POKEUSR #endif -void * get_instruction_pointer(pid_t pid) -{ +void * +get_instruction_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, 4*PT_PC, 0); } -void * get_stack_pointer(pid_t pid) -{ +void * +get_stack_pointer(pid_t pid) { return (void *)ptrace(PTRACE_PEEKUSER, pid, 4*PT_USP, 0); } -void * get_return_addr(pid_t pid, void * stack_pointer) -{ +void * +get_return_addr(pid_t pid, void * stack_pointer) { return (void *)ptrace(PTRACE_PEEKTEXT, pid, stack_pointer, 0); } - diff --git a/sysdeps/linux-gnu/m68k/trace.c b/sysdeps/linux-gnu/m68k/trace.c index 8d8af67..43586de 100644 --- a/sysdeps/linux-gnu/m68k/trace.c +++ b/sysdeps/linux-gnu/m68k/trace.c @@ -84,25 +84,3 @@ long gimme_arg(enum tof type, struct process * proc, int arg_num) return 0; } - -int umovestr(struct process * proc, void * addr, int len, void * laddr) -{ - long a; - int i; - int offset=0; - - while(offset<len) { - a = ptrace(PTRACE_PEEKTEXT, proc->pid, addr+offset, 0); - for(i=0; i<sizeof(long); i++) { - if (((char*)&a)[i] && offset+i < len) { - *(char *)(laddr+offset+i) = ((char*)&a)[i]; - } else { - *(char *)(laddr+offset+i) = '\0'; - return 0; - } - } - offset += sizeof(long); - } - *(char *)(laddr+offset) = '\0'; - return 0; -} diff --git a/sysdeps/linux-gnu/proc.c b/sysdeps/linux-gnu/proc.c index 8390136..a5c18f6 100644 --- a/sysdeps/linux-gnu/proc.c +++ b/sysdeps/linux-gnu/proc.c @@ -18,8 +18,8 @@ /* * Returns a file name corresponding to a running pid */ -char * pid2name(pid_t pid) -{ +char * +pid2name(pid_t pid) { char proc_exe[1024]; if (!kill(pid, 0)) { diff --git a/sysdeps/linux-gnu/trace.c b/sysdeps/linux-gnu/trace.c index e9397dd..797fc13 100644 --- a/sysdeps/linux-gnu/trace.c +++ b/sysdeps/linux-gnu/trace.c @@ -12,8 +12,8 @@ * (ie, with fork() or clone()) * Returns 0 otherwise. */ -int fork_p(int sysnum) -{ +int +fork_p(int sysnum) { return 0 #if defined(__NR_fork) || (sysnum == __NR_fork) @@ -29,45 +29,67 @@ int fork_p(int sysnum) /* Returns 1 if the sysnum may make the process exec other program */ -int exec_p(int sysnum) -{ +int +exec_p(int sysnum) { return (sysnum == __NR_execve); } -void trace_me(void) -{ +void +trace_me(void) { if (ptrace(PTRACE_TRACEME, 0, 1, 0)<0) { perror("PTRACE_TRACEME"); exit(1); } } -int trace_pid(pid_t pid) -{ +int +trace_pid(pid_t pid) { if (ptrace(PTRACE_ATTACH, pid, 1, 0) < 0) { return -1; } return 0; } -void untrace_pid(pid_t pid) -{ +void +untrace_pid(pid_t pid) { ptrace(PTRACE_DETACH, pid, 1, 0); } -void continue_after_signal(pid_t pid, int signum) -{ +void +continue_after_signal(pid_t pid, int signum) { /* We should always trace syscalls to be able to control fork(), clone(), execve()... */ ptrace(PTRACE_SYSCALL, pid, 0, signum); } -void continue_process(pid_t pid) -{ +void +continue_process(pid_t pid) { continue_after_signal(pid, 0); } -void continue_enabling_breakpoint(pid_t pid, struct breakpoint * sbp) -{ +void +continue_enabling_breakpoint(pid_t pid, struct breakpoint * sbp) { enable_breakpoint(pid, sbp); continue_process(pid); } + +int +umovestr(struct process * proc, void * addr, int len, void * laddr) { + long a; + int i; + int offset=0; + + while(offset<len) { + a = ptrace(PTRACE_PEEKTEXT, proc->pid, addr+offset, 0); + for(i=0; i<sizeof(long); i++) { + if (((char*)&a)[i] && offset+i < len) { + *(char *)(laddr+offset+i) = ((char*)&a)[i]; + } else { + *(char *)(laddr+offset+i) = '\0'; + return 0; + } + } + offset += sizeof(long); + } + *(char *)(laddr+offset) = '\0'; + return 0; +} |