diff options
author | Dave Brolley <brolley@redhat.com> | 2009-09-14 11:58:49 -0400 |
---|---|---|
committer | Dave Brolley <brolley@redhat.com> | 2009-09-14 11:58:49 -0400 |
commit | 775c3771bb4a5f663a763d7c65b1571e24e4b212 (patch) | |
tree | df01d695bcf1f0d0e7fac567a4b917bc273a00e3 /runtime | |
parent | d2c9ec9b6933fbe36834d7ad52be0994e96eb12c (diff) | |
parent | ef0e74fc1131f1d217c78aa839d0de731ea7c940 (diff) | |
download | systemtap-steved-775c3771bb4a5f663a763d7c65b1571e24e4b212.tar.gz systemtap-steved-775c3771bb4a5f663a763d7c65b1571e24e4b212.tar.xz systemtap-steved-775c3771bb4a5f663a763d7c65b1571e24e4b212.zip |
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/regs.h | 20 | ||||
-rw-r--r-- | runtime/staprun/relay_old.c | 6 | ||||
-rw-r--r-- | runtime/syscall.h | 1 | ||||
-rw-r--r-- | runtime/transport/ring_buffer.c | 10 | ||||
-rw-r--r-- | runtime/transport/symbols.c | 2 | ||||
-rw-r--r-- | runtime/transport/transport.c | 5 |
6 files changed, 28 insertions, 16 deletions
diff --git a/runtime/regs.h b/runtime/regs.h index d80cdf0a..dc6b50af 100644 --- a/runtime/regs.h +++ b/runtime/regs.h @@ -12,53 +12,61 @@ #define _REGS_H_ #if defined (STAPCONF_X86_UNIREGS) && (defined (__x86_64__) || defined (__i386__)) + #define REG_IP(regs) regs->ip -#define REG_IP_LVALUE 1 #define REG_SP(regs) regs->sp #define REG_FP(regs) regs->bp #elif defined (__x86_64__) #define REG_IP(regs) regs->rip -#define REG_IP_LVALUE 1 #define REG_SP(regs) regs->rsp #elif defined (__i386__) #define REG_IP(regs) regs->eip -#define REG_IP_LVALUE 1 #define REG_SP(regs) regs->esp #define REG_FP(regs) regs->ebp #elif defined (__ia64__) + #define REG_IP(regs) ((regs)->cr_iip +ia64_psr(regs)->ri) #define REG_SP(regs) ((regs)->r12) +#define SET_REG_IP(regs, x) \ + (((regs)->cr_iip = (x) & ~3UL), (ia64_psr(regs)->ri = (x) & 3UL)) + #elif defined (__powerpc64__) #define REG_IP(regs) regs->nip -#define REG_IP_LVALUE 1 #define REG_SP(regs) regs->gpr[1] #define REG_LINK(regs) regs->link #elif defined (__arm__) #define REG_IP(regs) regs->ARM_pc -#define REG_IP_LVALUE 1 #define REG_SP(regs) regs->ARM_sp #define REG_LINK(regs) regs->ARM_lr #elif defined (__s390__) || defined (__s390x__) + #ifndef __s390x__ #define PSW_ADDR_AMODE 0x80000000UL +#define PSW_ADDR_INSN 0x7FFFFFFFUL #else /* __s390x__ */ #define PSW_ADDR_AMODE 0x0000000000000000UL +#define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL #endif /* __s390x__ */ -#define REG_IP(regs) (((regs)->psw.addr) | PSW_ADDR_AMODE) +#define REG_IP(regs) (((regs)->psw.addr) & PSW_ADDR_INSN) #define REG_SP(regs) (regs)->gprs[15] +#define SET_REG_IP(regs,x) (regs)->psw.addr = (x) | PSW_ADDR_AMODE #else #error "Unimplemented architecture" #endif +#ifndef SET_REG_IP +#define SET_REG_IP(regs, x) REG_IP(regs) = x +#endif + #endif /* _REGS_H_ */ diff --git a/runtime/staprun/relay_old.c b/runtime/staprun/relay_old.c index 71d8acee..0254173f 100644 --- a/runtime/staprun/relay_old.c +++ b/runtime/staprun/relay_old.c @@ -110,7 +110,8 @@ static int open_oldoutfile(int fnum, int cpu, int remove_file) perr("Couldn't open output file %s", buf); return -1; } - if (set_clexec(fileno(percpu_tmpfile[cpu])) < 0) { + out_fd[cpu] = fileno(percpu_tmpfile[cpu]); + if (set_clexec(out_fd[cpu]) < 0) { perr("Couldn't clear exec bit of open output file %s", buf); return -1; } @@ -181,7 +182,8 @@ static int open_relayfs_files(int cpu, const char *relay_filebase, const char *p perr("Couldn't open output file %s", tmp); goto err2; } - if (set_clexec(fileno(percpu_tmpfile[cpu])) < 0) { + out_fd[cpu] = fileno(percpu_tmpfile[cpu]); + if (set_clexec(out_fd[cpu]) < 0) { perr("Couldn't open output file %s", tmp); goto err2; } diff --git a/runtime/syscall.h b/runtime/syscall.h index 38b523e1..786965f4 100644 --- a/runtime/syscall.h +++ b/runtime/syscall.h @@ -52,6 +52,7 @@ : __MREMAP_SYSCALL_NO_X86_64) # else #define MMAP_SYSCALL_NO(tsk) __MMAP_SYSCALL_NO_X86_64 +#define MMAP2_SYSCALL_NO(tsk) __MMAP2_SYSCALL_NO_X86_64 #define MPROTECT_SYSCALL_NO(tsk) __MPROTECT_SYSCALL_NO_X86_64 #define MUNMAP_SYSCALL_NO(tsk) __MUNMAP_SYSCALL_NO_X86_64 #define MREMAP_SYSCALL_NO(tsk) __MREMAP_SYSCALL_NO_X86_64 diff --git a/runtime/transport/ring_buffer.c b/runtime/transport/ring_buffer.c index 43448076..251d6ed9 100644 --- a/runtime/transport/ring_buffer.c +++ b/runtime/transport/ring_buffer.c @@ -162,7 +162,7 @@ _stp_event_to_user(struct ring_buffer_event *event, char __user *ubuf, return -EFAULT; } - entry = (struct _stp_data_entry *)ring_buffer_event_data(event); + entry = ring_buffer_event_data(event); if (entry == NULL) { dbug_trans(1, "returning -EFAULT(2)\n"); return -EFAULT; @@ -578,7 +578,7 @@ _stp_data_write_reserve(size_t size_request, void **entry) if (event) { ssize_t len; - sde = (struct _stp_data_entry *)ring_buffer_event_data(event); + sde = ring_buffer_event_data(event); if (sde->len < size_request) size_request = sde->len; _stp_ring_buffer_consume(iter); @@ -605,7 +605,7 @@ _stp_data_write_reserve(size_t size_request, void **entry) } } - sde = (struct _stp_data_entry *)ring_buffer_event_data(event); + sde = ring_buffer_event_data(event); sde->len = size_request; *entry = event; @@ -620,7 +620,7 @@ static unsigned char *_stp_data_entry_data(void *entry) if (event == NULL) return NULL; - sde = (struct _stp_data_entry *)ring_buffer_event_data(event); + sde = ring_buffer_event_data(event); return sde->buf; } @@ -635,7 +635,7 @@ static int _stp_data_write_commit(void *entry) #if defined(DEBUG_TRANS) && (DEBUG_TRANS >= 2) { - struct _stp_data_entry *sde = (struct _stp_data_entry *)ring_buffer_event_data(event); + struct _stp_data_entry *sde = ring_buffer_event_data(event); char *last = sde->buf + (sde->len - 5); dbug_trans2("commiting %.5s...%.5s\n", sde->buf, last); } diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c index 3e6a2fb1..a214d1f2 100644 --- a/runtime/transport/symbols.c +++ b/runtime/transport/symbols.c @@ -15,7 +15,7 @@ static void _stp_do_relocation(const char __user *buf, size_t count) { - struct _stp_msg_relocation msg; + static struct _stp_msg_relocation msg; /* by protocol, never concurrently used */ unsigned mi, si; if (sizeof(msg) != count) diff --git a/runtime/transport/transport.c b/runtime/transport/transport.c index 1d029e53..f5efce9f 100644 --- a/runtime/transport/transport.c +++ b/runtime/transport/transport.c @@ -31,8 +31,9 @@ static int _stp_ctl_attached = 0; static pid_t _stp_target = 0; static int _stp_probes_started = 0; -// For now, disable transport version 3 -#if STP_TRANSPORT_VERSION == 3 +// For now, disable transport version 3 (unless STP_USE_RING_BUFFER is +// defined). +#if STP_TRANSPORT_VERSION == 3 && !defined(STP_USE_RING_BUFFER) #undef STP_TRANSPORT_VERSION #define STP_TRANSPORT_VERSION 2 #endif |