Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 80001
b: refs/heads/master
c: e4811f2
h: refs/heads/master
i:
  79999: 44364b8
v: v3
  • Loading branch information
Markus Metzger authored and Ingo Molnar committed Jan 30, 2008
1 parent 918dbdb commit 06b9eaf
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3c68904fee1459b6d51040864e15d19098eedef7
refs/heads/master: e4811f2568c55e595a7bf15a3b9aba863b31fb94
30 changes: 16 additions & 14 deletions trunk/arch/x86/kernel/ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -479,26 +479,33 @@ static int ptrace_bts_get_buffer_size(struct task_struct *child)
return ds_get_bts_size((void *)child->thread.ds_area_msr);
}

static int ptrace_bts_get_index(struct task_struct *child)
{
if (!child->thread.ds_area_msr)
return -ENXIO;

return ds_get_bts_index((void *)child->thread.ds_area_msr);
}

static int ptrace_bts_read_record(struct task_struct *child,
long index,
struct bts_struct __user *out)
{
struct bts_struct ret;
int retval;
int bts_size;
int bts_index;

if (!child->thread.ds_area_msr)
return -ENXIO;

if (index < 0)
return -EINVAL;

bts_size = ds_get_bts_size((void *)child->thread.ds_area_msr);
if (bts_size <= index)
return -EINVAL;

/* translate the ptrace bts index into the ds bts index */
bts_index = ds_get_bts_index((void *)child->thread.ds_area_msr);
bts_index -= (index + 1);
if (bts_index < 0)
bts_index += bts_size;

retval = ds_read_bts((void *)child->thread.ds_area_msr,
index, &ret);
bts_index, &ret);
if (retval)
return retval;

Expand Down Expand Up @@ -813,10 +820,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
ret = ptrace_bts_get_buffer_size(child);
break;

case PTRACE_BTS_GET_INDEX:
ret = ptrace_bts_get_index(child);
break;

case PTRACE_BTS_READ_RECORD:
ret = ptrace_bts_read_record
(child, data,
Expand Down Expand Up @@ -1017,7 +1020,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
case PTRACE_BTS_MAX_BUFFER_SIZE:
case PTRACE_BTS_ALLOCATE_BUFFER:
case PTRACE_BTS_GET_BUFFER_SIZE:
case PTRACE_BTS_GET_INDEX:
case PTRACE_BTS_READ_RECORD:
case PTRACE_BTS_CONFIG:
case PTRACE_BTS_STATUS:
Expand Down
17 changes: 6 additions & 11 deletions trunk/include/asm-x86/ptrace-abi.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,32 +99,27 @@
ENXIO........no buffer allocated */
#define PTRACE_BTS_GET_BUFFER_SIZE 42

/* Return the index of the next bts record to be written,
if successful; -1, otherwise.
EOPNOTSUPP...processor does not support bts tracing
ENXIO........no buffer allocated
After the first warp-around, this is the start of the circular bts buffer. */
#define PTRACE_BTS_GET_INDEX 43

/* Read the DATA'th bts record into a ptrace_bts_record buffer provided in ADDR.
/* Read the DATA'th bts record into a ptrace_bts_record buffer
provided in ADDR.
Records are ordered from newest to oldest.
Return 0, if successful; -1, otherwise
EOPNOTSUPP...processor does not support bts tracing
ENXIO........no buffer allocated
EINVAL.......invalid index */
#define PTRACE_BTS_READ_RECORD 44
#define PTRACE_BTS_READ_RECORD 43

/* Configure last branch trace; the configuration is given as a bit-mask of
PTRACE_BTS_O_* options in DATA; parameter ADDR is ignored.
Return 0, if successful; -1, otherwise
EOPNOTSUPP...processor does not support bts tracing
ENXIO........no buffer allocated */
#define PTRACE_BTS_CONFIG 45
#define PTRACE_BTS_CONFIG 44

/* Return the configuration as bit-mask of PTRACE_BTS_O_* options
if successful; -1, otherwise.
EOPNOTSUPP...processor does not support bts tracing
ENXIO........no buffer allocated */
#define PTRACE_BTS_STATUS 46
#define PTRACE_BTS_STATUS 45

/* Trace configuration options */
/* Collect last branch trace */
Expand Down

0 comments on commit 06b9eaf

Please sign in to comment.