From e02ca99d52a536c6040d060efab267dac49280a2 Mon Sep 17 00:00:00 2001 From: Kris Van Hees Date: Fri, 19 Jul 2013 18:17:57 -0400 Subject: [PATCH] Remove unnecessary 32-bit code. Since DTrace for Linux is only being developed for 64-bit platforms, various pieces of conditional-controlled code can be removed because they only apply for 32-bit DTrace implementations. Note that this does not have anything to do with (future) support for 32-bit applications runnings and being traced on a 64-bit host. Signed-off-by: Kris Van Hees --- dtrace/dtrace_dif.c | 7 ++ dtrace/dtrace_isa.c | 68 ++----------------- dtrace/include/dtrace/dtrace_impl_defines.h | 74 ++++++++------------- 3 files changed, 38 insertions(+), 111 deletions(-) diff --git a/dtrace/dtrace_dif.c b/dtrace/dtrace_dif.c index dc6c970c7820..ee8f97b03ddb 100644 --- a/dtrace/dtrace_dif.c +++ b/dtrace/dtrace_dif.c @@ -40,6 +40,13 @@ size_t dtrace_global_maxsize = 16 * 1024; +/* + * This externally visible variable (accessible through the backtick (`) + * syntax is provided as a source of well-known, zero-filled memory. Some + * translators use this in their implementation. + */ +const char dtrace_zero[256] = { 0, }; + static uint64_t dtrace_vtime_references; static int dtrace_difo_err(uint_t pc, const char *format, ...) diff --git a/dtrace/dtrace_isa.c b/dtrace/dtrace_isa.c index 66a95064e44d..c611aab6e3ad 100644 --- a/dtrace/dtrace_isa.c +++ b/dtrace/dtrace_isa.c @@ -129,13 +129,6 @@ uint64_t dtrace_getarg(int arg, int aframes) uintptr_t *stack; int i; uint64_t val; -#ifdef __i386__ - int regmap[] = { - REG_EAX, - REG_EDX, - REG_ECX - }; -#else int regmap[] = { REG_RDI, REG_RSI, @@ -144,18 +137,13 @@ uint64_t dtrace_getarg(int arg, int aframes) REG_R8, REG_R9 }; -#endif int nreg = sizeof(regmap) / sizeof(regmap[0]) - 1; for (i = 1; i <= aframes; i++) { fp = fp->fr_savfp; if (fp->fr_savpc == (uintptr_t)dtrace_invop_callsite) { -#ifdef __i386__ /* FIXME */ -#else - /* FIXME */ -#endif goto load; } @@ -170,18 +158,16 @@ uint64_t dtrace_getarg(int arg, int aframes) */ arg++; -#ifndef __i386__ if (arg <= nreg) { /* * This should not happen. If the argument was passed in a - * register then it should have been, ...passed in a reguster. + * register then it should have been, ...passed in a register. */ DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); return 0; } arg -= nreg + 1; -#endif stack = (uintptr_t *)&fp[1]; @@ -202,51 +188,6 @@ ulong_t dtrace_getreg(struct task_struct *task, uint_t reg) { struct pt_regs *rp = task_pt_regs(task); -#ifdef __i386__ - if (reg > REG_SS) { - DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); - return 0; - } - - switch (reg) { - case REG_GS: - case REG_FS: - case REG_ES: - case REG_DS: - case REG_CS: - return rp->cs; - case REG_EDI: - return rp->di; - case REG_ESI: - return rp->si; - case REG_EBP: - return rp->bp; - case REG_ESP: - case REG_UESP: - return rp->sp; - case REG_EBX: - return rp->bx; - case REG_EDX: - return rp->dx; - case REG_ECX: - return rp->cx; - case REG_EAX: - return rp->ax; - case REG_TRAPNO: - return rp->orig_ax; - case REG_ERR: - return rp->di; - case REG_EIP: - return rp->ip; - case REG_EFL: - return rp->flags; - case REG_SS: - return rp->ss; - default: - DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); - return 0; - } -#else int regmap[] = { REG_RBX, /* 0 -> EBX */ REG_RCX, /* 1 -> ECX */ @@ -266,11 +207,11 @@ ulong_t dtrace_getreg(struct task_struct *task, uint_t reg) REG_RSP, /* 15 -> UESP */ REG_SS, /* 16 -> SS */ }; - if (reg > REG_GS) { + if (reg > REG_TRAPNO) { /* * Convert register alias index into register mapping index. */ - reg -= REG_GS + 1; + reg -= REG_TRAPNO + 1; if (reg >= sizeof(regmap) / sizeof(int)) { DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); @@ -295,11 +236,12 @@ ulong_t dtrace_getreg(struct task_struct *task, uint_t reg) return task->thread.fs; case REG_GS: return task->thread.gs; + case REG_TRAPNO: + return task->thread.trap_nr; default: DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); return 0; } -#endif } static void dtrace_sync_func(void) diff --git a/dtrace/include/dtrace/dtrace_impl_defines.h b/dtrace/include/dtrace/dtrace_impl_defines.h index 3765321b23b4..b493e97e5885 100644 --- a/dtrace/include/dtrace/dtrace_impl_defines.h +++ b/dtrace/include/dtrace/dtrace_impl_defines.h @@ -164,54 +164,32 @@ typedef enum dtrace_vtime_state { /* * regset.h information */ -#ifdef __i386__ -# define REG_SS 18 /* only stored on a privilege transition */ -# define REG_UESP 17 /* only stored on a privilege transition */ -# define REG_EFL 16 -# define REG_CS 15 -# define REG_EIP 14 -# define REG_ERR 13 -# define REG_TRAPNO 12 -# define REG_EAX 11 -# define REG_ECX 10 -# define REG_EDX 9 -# define REG_EBX 8 -# define REG_ESP 7 -# define REG_EBP 6 -# define REG_ESI 5 -# define REG_EDI 4 -# define REG_DS 3 -# define REG_ES 2 -# define REG_FS 1 -# define REG_GS 0 -#else -# define REG_GS 24 -# define REG_FS 23 -# define REG_ES 22 -# define REG_DS 21 -# define REG_SS 20 -# define REG_RSP 19 -# define REG_RFL 18 -# define REG_CS 17 -# define REG_RIP 16 -# define REG_ERR 15 -# define REG_TRAPNO 15 -# define REG_RDI 14 -# define REG_RSI 13 -# define REG_RDX 12 -# define REG_RCX 11 -# define REG_RAX 10 -# define REG_R8 9 -# define REG_R9 8 -# define REG_R10 7 -# define REG_R11 6 -# define REG_RBX 5 -# define REG_RBP 4 -# define REG_R12 3 -# define REG_R13 2 -# define REG_R14 1 -# define REG_R15 0 -#endif +#define REG_TRAPNO 25 +#define REG_GS 24 +#define REG_FS 23 +#define REG_ES 22 +#define REG_DS 21 +#define REG_SS 20 +#define REG_RSP 19 +#define REG_RFL 18 +#define REG_CS 17 +#define REG_RIP 16 +#define REG_ERR 15 +#define REG_RDI 14 +#define REG_RSI 13 +#define REG_RDX 12 +#define REG_RCX 11 +#define REG_RAX 10 +#define REG_R8 9 +#define REG_R9 8 +#define REG_R10 7 +#define REG_R11 6 +#define REG_RBX 5 +#define REG_RBP 4 +#define REG_R12 3 +#define REG_R13 2 +#define REG_R14 1 +#define REG_R15 0 #if defined(__i386__) || defined(__x86_64__) # define DTRACE_INVOP_PUSHL_EBP 1 -- 2.50.1