PERFORCE change 39479 for review
Sam Leffler
sam at FreeBSD.org
Fri Oct 10 16:33:46 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=39479
Change 39479 by sam at sam_ebb on 2003/10/10 16:32:52
IFC @ 39478
Affected files ...
.. //depot/projects/netperf/sys/alpha/alpha/trap.c#3 integrate
.. //depot/projects/netperf/sys/amd64/amd64/trap.c#4 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/Makefile#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx.h#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_context.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_env.h#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_scoreboard.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_self.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_step.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_step.h#1 branch
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_trace.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_trace.h#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_ttrace.c#2 integrate
.. //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_uinfo.c#2 integrate
.. //depot/projects/netperf/sys/crypto/cast128/cast128.c#2 integrate
.. //depot/projects/netperf/sys/crypto/cast128/cast128.h#2 integrate
.. //depot/projects/netperf/sys/crypto/cast128/cast128_subkey.h#2 delete
.. //depot/projects/netperf/sys/crypto/cast128/cast128sb.h#1 branch
.. //depot/projects/netperf/sys/dev/amr/amr.c#4 integrate
.. //depot/projects/netperf/sys/dev/amr/amr_disk.c#3 integrate
.. //depot/projects/netperf/sys/dev/amr/amrvar.h#2 integrate
.. //depot/projects/netperf/sys/dev/ata/ata-all.c#7 integrate
.. //depot/projects/netperf/sys/dev/ata/ata-lowlevel.c#7 integrate
.. //depot/projects/netperf/sys/dev/em/if_em.c#7 edit
.. //depot/projects/netperf/sys/dev/em/if_em.h#7 edit
.. //depot/projects/netperf/sys/dev/usb/usbdevs#6 integrate
.. //depot/projects/netperf/sys/dev/usb/usbdevs.h#6 integrate
.. //depot/projects/netperf/sys/dev/usb/usbdevs_data.h#6 integrate
.. //depot/projects/netperf/sys/i386/i386/machdep.c#6 integrate
.. //depot/projects/netperf/sys/i386/i386/trap.c#4 integrate
.. //depot/projects/netperf/sys/ia64/ia64/trap.c#6 integrate
.. //depot/projects/netperf/sys/ia64/ia64/unwind.c#2 integrate
.. //depot/projects/netperf/sys/kern/sys_process.c#5 integrate
.. //depot/projects/netperf/sys/kern/vfs_bio.c#8 integrate
.. //depot/projects/netperf/sys/netinet6/esp_core.c#3 integrate
.. //depot/projects/netperf/sys/netinet6/icmp6.c#6 integrate
.. //depot/projects/netperf/sys/netinet6/in6.c#7 integrate
.. //depot/projects/netperf/sys/netinet6/in6_gif.c#4 integrate
.. //depot/projects/netperf/sys/netinet6/in6_ifattach.c#8 integrate
.. //depot/projects/netperf/sys/netinet6/ip6_forward.c#7 integrate
.. //depot/projects/netperf/sys/netinet6/ip6_input.c#9 integrate
.. //depot/projects/netperf/sys/netinet6/ip6_output.c#13 integrate
.. //depot/projects/netperf/sys/netinet6/ipcomp_input.c#3 integrate
.. //depot/projects/netperf/sys/netinet6/mld6.c#2 integrate
.. //depot/projects/netperf/sys/netinet6/mld6_var.h#2 integrate
.. //depot/projects/netperf/sys/netinet6/nd6.c#9 integrate
.. //depot/projects/netperf/sys/netinet6/nd6.h#3 integrate
.. //depot/projects/netperf/sys/netinet6/nd6_nbr.c#3 integrate
.. //depot/projects/netperf/sys/netinet6/nd6_rtr.c#6 integrate
.. //depot/projects/netperf/sys/netinet6/raw_ip6.c#3 integrate
.. //depot/projects/netperf/sys/netinet6/scope6.c#3 integrate
.. //depot/projects/netperf/sys/netinet6/scope6_var.h#2 integrate
.. //depot/projects/netperf/sys/netinet6/udp6_usrreq.c#3 integrate
.. //depot/projects/netperf/sys/pci/if_ti.c#4 integrate
.. //depot/projects/netperf/sys/sparc64/sparc64/trap.c#3 integrate
.. //depot/projects/netperf/sys/sys/ptrace.h#3 integrate
Differences ...
==== //depot/projects/netperf/sys/alpha/alpha/trap.c#3 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.116 2003/08/22 07:20:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/trap.c,v 1.117 2003/10/09 10:17:15 robert Exp $");
/* #include "opt_fix_unaligned_vax_fp.h" */
#include "opt_ddb.h"
@@ -45,6 +45,7 @@
#include <sys/smp.h>
#include <sys/vmmeter.h>
#include <sys/sysent.h>
+#include <sys/signalvar.h>
#include <sys/syscall.h>
#include <sys/pioctl.h>
#include <vm/vm.h>
@@ -729,6 +730,8 @@
STOPEVENT(p, S_SCE, (callp->sy_narg & SYF_ARGMASK));
+ PTRACESTOP_SC(p, td, S_PT_SCE);
+
error = (*callp->sy_call)(td, args + hidden);
}
@@ -775,6 +778,8 @@
*/
STOPEVENT(p, S_SCX, code);
+ PTRACESTOP_SC(p, td, S_PT_SCX);
+
#ifdef DIAGNOSTIC
cred_free_thread(td);
#endif
==== //depot/projects/netperf/sys/amd64/amd64/trap.c#4 (text+ko) ====
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.264 2003/09/22 22:52:46 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.265 2003/10/09 10:17:16 robert Exp $");
/*
* AMD64 Trap and System call handling
@@ -55,6 +55,7 @@
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/pioctl.h>
+#include <sys/ptrace.h>
#include <sys/kernel.h>
#include <sys/ktr.h>
#include <sys/lock.h>
@@ -740,6 +741,8 @@
STOPEVENT(p, S_SCE, narg);
+ PTRACESTOP_SC(p, td, S_PT_SCE);
+
error = (*callp->sy_call)(td, argp);
}
@@ -808,6 +811,8 @@
*/
STOPEVENT(p, S_SCX, code);
+ PTRACESTOP_SC(p, td, S_PT_SCX);
+
#ifdef DIAGNOSTIC
cred_free_thread(td);
#endif
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/Makefile#2 (text+ko) ====
@@ -8,11 +8,11 @@
AR = ar
RANLIB = :
+OTHERCFLAGS =
# OTHERCFLAGS = -DUWX_TRACE_ENABLE # Enables trace output
# OTHERCFLAGS = +DD64 # Builds 64-bit library
-OTHERCFLAGS =
-CFLAGS = +W944 -O $(OTHERCFLAGS)
+CFLAGS = -O $(OTHERCFLAGS)
OBJS = uwx_bstream.o uwx_context.o uwx_env.o uwx_scoreboard.o \
uwx_step.o uwx_str.o uwx_swap.o uwx_trace.o uwx_uinfo.o \
@@ -36,7 +36,7 @@
uwx_bstream.o: uwx.h uwx_env.h uwx_bstream.h
-uwx_context.o: uwx.h uwx_env.h uwx_scoreboard.h uwx_trace.h
+uwx_context.o: uwx.h uwx_env.h uwx_scoreboard.h uwx_step.h uwx_trace.h
uwx_env.o: uwx.h uwx_env.h uwx_scoreboard.h uwx_str.h uwx_trace.h
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx.h#2 (text+ko) ====
@@ -208,18 +208,26 @@
#define UWX_REG_CFM 3 /* cfm (no spill info) */
#define UWX_REG_RP 4 /* rp (pseudo-register) */
#define UWX_REG_PSP 5 /* psp (pseudo-register) */
-#define UWX_REG_PFS 6 /* ar.pfs */
+#define UWX_REG_PFS 6 /* pfs (pseudo-register) */
#define UWX_REG_PREDS 7 /* p0 - p63 */
#define UWX_REG_PRIUNAT 8 /* primary unat (pseudo-register) */
-#define UWX_REG_BSPSTORE 9 /* ar.bspstore */
-#define UWX_REG_RNAT 10 /* ar.rnat */
-#define UWX_REG_UNAT 11 /* ar.unat */
-#define UWX_REG_FPSR 12 /* ar.fpsr */
-#define UWX_REG_LC 13 /* ar.lc */
+#define UWX_REG_AR_PFS 9 /* ar.pfs */
+#define UWX_REG_AR_BSPSTORE 10 /* ar.bspstore */
+#define UWX_REG_AR_RNAT 11 /* ar.rnat */
+#define UWX_REG_AR_UNAT 12 /* ar.unat */
+#define UWX_REG_AR_FPSR 13 /* ar.fpsr */
+#define UWX_REG_AR_LC 14 /* ar.lc */
#define UWX_REG_GR(gr) (0x100 | (gr))
#define UWX_REG_FR(fr) (0x200 | (fr))
#define UWX_REG_BR(br) (0x300 | (br))
+/* for backwards compatibility with previous releases... */
+#define UWX_REG_BSPSTORE UWX_REG_AR_BSPSTORE
+#define UWX_REG_RNAT UWX_REG_AR_RNAT
+#define UWX_REG_UNAT UWX_REG_AR_UNAT
+#define UWX_REG_FPSR UWX_REG_AR_FPSR
+#define UWX_REG_LC UWX_REG_AR_LC
+
/* Values corresponding to UWX_KEY_SPILL keys indicate the disposition */
/* of the spilled register -- either in the memory stack or in another */
/* register. The PSP register may also have a disposition of "SPPLUS", */
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_context.c#2 (text+ko) ====
@@ -23,6 +23,7 @@
#include "uwx_env.h"
#include "uwx_context.h"
#include "uwx_scoreboard.h"
+#include "uwx_step.h"
#include "uwx_trace.h"
int uwx_init_context(
@@ -46,6 +47,7 @@
for (i = 0; i < NPRESERVEDGR; i++)
env->context.gr[i] = 0;
env->context.valid_regs = VALID_BASIC4;
+ env->context.valid_frs = 0;
env->rstate = 0;
(void)uwx_init_history(env);
return UWX_OK;
@@ -64,8 +66,17 @@
status = UWX_OK;
+ if (regid == UWX_REG_GR(12))
+ regid = UWX_REG_SP;
if (regid < NSPECIALREG && (env->context.valid_regs & (1 << regid)))
*valp = env->context.special[regid];
+ else if (regid == UWX_REG_PSP || regid == UWX_REG_RP ||
+ regid == UWX_REG_PFS) {
+ status = uwx_restore_markers(env);
+ if (status != UWX_OK)
+ return status;
+ *valp = env->context.special[regid];
+ }
else if (regid >= UWX_REG_GR(4) && regid <= UWX_REG_GR(7) &&
(env->context.valid_regs &
(1 << (regid - UWX_REG_GR(4) + VALID_GR_SHIFT))) )
@@ -94,13 +105,13 @@
(env->context.valid_regs &
(1 << (regid - UWX_REG_BR(1) + VALID_BR_SHIFT))) )
*valp = env->context.br[regid - UWX_REG_BR(1)];
- else if (regid >= UWX_REG_FR(2) && regid <= UWX_REG_BR(5) &&
- (env->context.valid_frs & (1 << (regid - UWX_REG_FR(2)))) ) {
+ else if (regid >= UWX_REG_FR(2) && regid <= UWX_REG_FR(5) &&
+ (env->context.valid_frs & (1 << (regid - UWX_REG_FR(2)))) ) {
valp[0] = env->context.fr[regid - UWX_REG_FR(2)].part0;
valp[1] = env->context.fr[regid - UWX_REG_FR(2)].part1;
}
- else if (regid >= UWX_REG_FR(16) && regid <= UWX_REG_BR(31) &&
- (env->context.valid_frs & (1 << (regid - UWX_REG_FR(2)))) ) {
+ else if (regid >= UWX_REG_FR(16) && regid <= UWX_REG_FR(31) &&
+ (env->context.valid_frs & (1 << (regid - UWX_REG_FR(16) + 4))) ) {
valp[0] = env->context.fr[regid - UWX_REG_FR(16) + 4].part0;
valp[1] = env->context.fr[regid - UWX_REG_FR(16) + 4].part1;
}
@@ -114,7 +125,7 @@
if (n != DWORDSZ)
status = UWX_ERR_COPYIN_REG;
}
- else if (regid >= UWX_REG_FR(2) && regid <= UWX_REG_BR(127)) {
+ else if (regid >= UWX_REG_FR(2) && regid <= UWX_REG_FR(127)) {
if (env->copyin == 0)
return UWX_ERR_NOCALLBACKS;
n = (*env->copyin)(UWX_COPYIN_REG, (char *)valp,
@@ -170,7 +181,7 @@
natcollp = bsp | 0x01f8;
if (natcollp >= bsp)
n = (*env->copyin)(UWX_COPYIN_REG, (char *)&natcoll,
- (uint64_t)UWX_REG_RNAT, DWORDSZ, env->cb_token);
+ (uint64_t)UWX_REG_AR_RNAT, DWORDSZ, env->cb_token);
else
n = (*env->copyin)(UWX_COPYIN_RSTACK, (char *)&natcoll,
bsp, DWORDSZ, env->cb_token);
@@ -197,6 +208,8 @@
status = UWX_OK;
+ if (regid == UWX_REG_GR(12))
+ regid = UWX_REG_SP;
if (regid < NSPECIALREG)
*dispp = env->history.special[regid];
else if (regid >= UWX_REG_GR(4) && regid <= UWX_REG_GR(7))
@@ -233,6 +246,8 @@
if (env == 0)
return UWX_ERR_NOENV;
+ if (regid == UWX_REG_GR(12))
+ regid = UWX_REG_SP;
if (regid < NSPECIALREG) {
env->context.special[regid] = val;
env->context.valid_regs |= 1 << regid;
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_env.h#2 (text+ko) ====
@@ -39,7 +39,7 @@
#define NSCOREBOARDS 8 /* Initial allocation of scoreboards */
-#define NSPECIALREG 14
+#define NSPECIALREG 16 /* Must be even, so FRs are aligned */
#define NPRESERVEDGR 4
#define NPRESERVEDBR 5
#define NPRESERVEDFR 20
@@ -61,7 +61,8 @@
#define VALID_GR_SHIFT NSPECIALREG
#define VALID_BR_SHIFT (NSPECIALREG + NPRESERVEDGR)
-#define VALID_BASIC4 0x0f /* IP, SP, BSP, PFS */
+#define VALID_BASIC4 0x0f /* IP, SP, BSP, CFM */
+#define VALID_MARKERS 0x70 /* RP, PSP, PFS */
struct uwx_history {
uint64_t special[NSPECIALREG];
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_scoreboard.c#2 (text+ko) ====
@@ -63,8 +63,8 @@
sb->rstate[i] = UWX_DISP_NONE;
sb->rstate[SBREG_RP] = UWX_DISP_REG(UWX_REG_BR(0));
sb->rstate[SBREG_PSP] = UWX_DISP_SPPLUS(0);
- sb->rstate[SBREG_PFS] = UWX_DISP_REG(UWX_REG_PFS);
- sb->rstate[SBREG_PRIUNAT] = UWX_DISP_REG(UWX_REG_UNAT);
+ sb->rstate[SBREG_PFS] = UWX_DISP_REG(UWX_REG_AR_PFS);
+ sb->rstate[SBREG_PRIUNAT] = UWX_DISP_REG(UWX_REG_AR_UNAT);
sb->label = 0;
return sb;
}
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_self.c#2 (text+ko) ====
@@ -91,18 +91,33 @@
uint64_t cfm;
unsigned int nat;
uint64_t ec;
+ int adj;
info->ucontext = ucontext;
status = __uc_get_reason(ucontext, &reason);
status = __uc_get_ip(ucontext, &ip);
status = __uc_get_grs(ucontext, 12, 1, &sp, &nat);
+ status = __uc_get_cfm(ucontext, &cfm);
+#ifdef NEW_UC_GET_AR
+ status = __uc_get_ar_bsp(ucontext, &bsp);
+ status = __uc_get_ar_bspstore(ucontext, &info->bspstore);
+ status = __uc_get_ar_ec(ucontext, &ec);
+#else
status = __uc_get_ar(ucontext, 17, &bsp);
status = __uc_get_ar(ucontext, 18, &info->bspstore);
status = __uc_get_ar(ucontext, 66, &ec);
- status = __uc_get_cfm(ucontext, &cfm);
+#endif
+ /* The returned bsp needs to be adjusted. */
+ /* For interrupt frames, where bsp was advanced by a cover */
+ /* instruction, subtract sof (size of frame). For non-interrupt */
+ /* frames, where bsp was advanced by br.call, subtract sol */
+ /* (size of locals). */
+ if (reason != 0)
+ adj = (unsigned int)cfm & 0x7f; /* interrupt frame */
+ else
+ adj = ((unsigned int)cfm >> 7) & 0x7f; /* non-interrupt frame */
+ bsp = uwx_add_to_bsp(bsp, -adj);
cfm |= ec << 52;
- if (reason != 0)
- bsp = uwx_add_to_bsp(bsp, -((unsigned int)cfm & 0x7f));
uwx_init_context(env, ip, sp, bsp, cfm);
return UWX_OK;
}
@@ -171,22 +186,22 @@
regid = (int)rem;
if (rem < UWX_REG_GR(0)) {
switch (regid) {
- case UWX_REG_PFS:
- status = __uc_get_ar(info->ucontext, 64, dp);
- break;
case UWX_REG_PREDS:
status = __uc_get_prs(info->ucontext, dp);
break;
- case UWX_REG_RNAT:
+ case UWX_REG_AR_PFS:
+ status = __uc_get_ar(info->ucontext, 64, dp);
+ break;
+ case UWX_REG_AR_RNAT:
status = __uc_get_ar(info->ucontext, 19, dp);
break;
- case UWX_REG_UNAT:
+ case UWX_REG_AR_UNAT:
status = __uc_get_ar(info->ucontext, 36, dp);
break;
- case UWX_REG_FPSR:
+ case UWX_REG_AR_FPSR:
status = __uc_get_ar(info->ucontext, 40, dp);
break;
- case UWX_REG_LC:
+ case UWX_REG_AR_LC:
status = __uc_get_ar(info->ucontext, 65, dp);
break;
default:
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_step.c#2 (text+ko) ====
@@ -26,6 +26,7 @@
#include "uwx_uinfo.h"
#include "uwx_scoreboard.h"
#include "uwx_str.h"
+#include "uwx_step.h"
#include "uwx_trace.h"
/*
@@ -44,6 +45,8 @@
int uwx_decode_uvec(struct uwx_env *env, uint64_t *uvec, uint64_t **rstate);
int uwx_restore_reg(struct uwx_env *env, uint64_t rstate,
uint64_t *valp, uint64_t *histp);
+int uwx_restore_freg(struct uwx_env *env, uint64_t rstate,
+ uint64_t *valp, uint64_t *histp);
int uwx_restore_nat(struct uwx_env *env, uint64_t rstate, int unat);
@@ -59,12 +62,8 @@
struct uwx_utable_entry uentry;
uint64_t uvecout[4];
- if (env == 0)
- return UWX_ERR_NOENV;
if (env->copyin == 0 || env->lookupip == 0)
return UWX_ERR_NOCALLBACKS;
- if ((env->context.valid_regs & VALID_BASIC4) != VALID_BASIC4)
- return UWX_ERR_NOCONTEXT;
env->function_offset = -1LL;
env->function_name = 0;
@@ -131,7 +130,63 @@
}
+/* uwx_restore_markers: Restores the stack markers -- PSP, RP, PFS */
+
+int uwx_restore_markers(struct uwx_env *env)
+{
+ int status;
+ uint64_t val;
+ uint64_t hist;
+
+ if ((env->context.valid_regs & VALID_BASIC4) != VALID_BASIC4)
+ return UWX_ERR_NOCONTEXT;
+
+ /* If we haven't already obtained the frame info for the */
+ /* current frame, get it now. */
+
+ if (env->rstate == 0) {
+ status = uwx_get_frame_info(env);
+ if (status != UWX_OK)
+ return status;
+ }
+
+ TRACE_S_STEP(env->rstate)
+
+ if (env->rstate[SBREG_PSP] != UWX_DISP_NONE) {
+ status = uwx_restore_reg(env, env->rstate[SBREG_PSP], &val, &hist);
+ if (status != UWX_OK)
+ return status;
+ env->context.special[UWX_REG_PSP] = val;
+ env->history.special[UWX_REG_PSP] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_PSP;
+ TRACE_S_RESTORE_REG("PSP", env->rstate[SBREG_PSP], val)
+ }
+
+ if (env->rstate[SBREG_RP] != UWX_DISP_NONE) {
+ status = uwx_restore_reg(env, env->rstate[SBREG_RP], &val, &hist);
+ if (status != UWX_OK)
+ return status;
+ env->context.special[UWX_REG_RP] = val;
+ env->history.special[UWX_REG_RP] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_RP;
+ TRACE_S_RESTORE_REG("RP", env->rstate[SBREG_RP], val)
+ }
+
+ if (env->rstate[SBREG_PFS] != UWX_DISP_NONE) {
+ status = uwx_restore_reg(env, env->rstate[SBREG_PFS], &val, &hist);
+ if (status != UWX_OK)
+ return status;
+ env->context.special[UWX_REG_PFS] = val;
+ env->history.special[UWX_REG_PFS] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_PFS;
+ TRACE_S_RESTORE_REG("PFS", env->rstate[SBREG_PFS], val)
+ }
+
+ return UWX_OK;
+}
+
/* uwx_get_sym_info: Gets symbolic info from current frame */
+
int uwx_get_sym_info(
struct uwx_env *env,
char **modp,
@@ -147,10 +202,6 @@
if (env == 0)
return UWX_ERR_NOENV;
- if (env->copyin == 0 || env->lookupip == 0)
- return UWX_ERR_NOCALLBACKS;
- if ((env->context.valid_regs & VALID_BASIC4) != VALID_BASIC4)
- return UWX_ERR_NOCONTEXT;
/* If we haven't already obtained the frame info for the */
/* current frame, get it now. */
@@ -221,48 +272,15 @@
if (env == 0)
return UWX_ERR_NOENV;
- if (env->copyin == 0 || env->lookupip == 0)
- return UWX_ERR_NOCALLBACKS;
- if ((env->context.valid_regs & VALID_BASIC4) != VALID_BASIC4)
- return UWX_ERR_NOCONTEXT;
-
- /* If we haven't already obtained the frame info for the */
- /* current frame, get it now. */
-
- if (env->rstate == 0) {
- status = uwx_get_frame_info(env);
- if (status != UWX_OK)
- return status;
- }
-
- TRACE_S_STEP(env->rstate)
/* Complete the current context by restoring the current values */
/* of psp, rp, and pfs. */
- if (env->rstate[SBREG_PSP] != UWX_DISP_NONE) {
- status = uwx_restore_reg(env, env->rstate[SBREG_PSP], &val, &hist);
+ if (env->rstate == 0 ||
+ (env->context.valid_regs & VALID_MARKERS) != VALID_MARKERS) {
+ status = uwx_restore_markers(env);
if (status != UWX_OK)
return status;
- env->context.special[UWX_REG_PSP] = val;
- env->history.special[UWX_REG_PSP] = hist;
- TRACE_S_RESTORE_REG("PSP", env->rstate[SBREG_PSP], val)
- }
- if (env->rstate[SBREG_RP] != UWX_DISP_NONE) {
- status = uwx_restore_reg(env, env->rstate[SBREG_RP], &val, &hist);
- if (status != UWX_OK)
- return status;
- env->context.special[UWX_REG_RP] = val;
- env->history.special[UWX_REG_RP] = hist;
- TRACE_S_RESTORE_REG("RP", env->rstate[SBREG_RP], val)
- }
- if (env->rstate[SBREG_PFS] != UWX_DISP_NONE) {
- status = uwx_restore_reg(env, env->rstate[SBREG_PFS], &val, &hist);
- if (status != UWX_OK)
- return status;
- env->context.special[UWX_REG_PFS] = val;
- env->history.special[UWX_REG_PFS] = hist;
- TRACE_S_RESTORE_REG("PFS", env->rstate[SBREG_PFS], val)
}
/* Check for bottom of stack (rp == 0). */
@@ -336,7 +354,7 @@
if (env->nsbreg == NSBREG) {
for (i = 0; i < NSB_FR; i++) {
if (env->rstate[SBREG_FR + i] != UWX_DISP_NONE) {
- status = uwx_restore_reg(env,
+ status = uwx_restore_freg(env,
env->rstate[SBREG_FR + i], fval, &hist);
if (status != UWX_OK)
return status;
@@ -364,36 +382,36 @@
status = uwx_restore_reg(env, env->rstate[SBREG_RNAT], &val, &hist);
if (status != UWX_OK)
return status;
- env->context.special[UWX_REG_RNAT] = val;
- env->history.special[UWX_REG_RNAT] = hist;
- env->context.valid_regs |= 1 << UWX_REG_RNAT;
+ env->context.special[UWX_REG_AR_RNAT] = val;
+ env->history.special[UWX_REG_AR_RNAT] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_AR_RNAT;
TRACE_S_RESTORE_REG("RNAT", env->rstate[SBREG_RNAT], val)
}
if (env->rstate[SBREG_UNAT] != UWX_DISP_NONE) {
status = uwx_restore_reg(env, env->rstate[SBREG_UNAT], &val, &hist);
if (status != UWX_OK)
return status;
- env->context.special[UWX_REG_UNAT] = val;
- env->history.special[UWX_REG_UNAT] = hist;
- env->context.valid_regs |= 1 << UWX_REG_UNAT;
+ env->context.special[UWX_REG_AR_UNAT] = val;
+ env->history.special[UWX_REG_AR_UNAT] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_AR_UNAT;
TRACE_S_RESTORE_REG("UNAT", env->rstate[SBREG_UNAT], val)
}
if (env->rstate[SBREG_FPSR] != UWX_DISP_NONE) {
status = uwx_restore_reg(env, env->rstate[SBREG_FPSR], &val, &hist);
if (status != UWX_OK)
return status;
- env->context.special[UWX_REG_FPSR] = val;
- env->history.special[UWX_REG_FPSR] = hist;
- env->context.valid_regs |= 1 << UWX_REG_FPSR;
+ env->context.special[UWX_REG_AR_FPSR] = val;
+ env->history.special[UWX_REG_AR_FPSR] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_AR_FPSR;
TRACE_S_RESTORE_REG("FPSR", env->rstate[SBREG_FPSR], val)
}
if (env->rstate[SBREG_LC] != UWX_DISP_NONE) {
status = uwx_restore_reg(env, env->rstate[SBREG_LC], &val, &hist);
if (status != UWX_OK)
return status;
- env->context.special[UWX_REG_LC] = val;
- env->history.special[UWX_REG_LC] = hist;
- env->context.valid_regs |= 1 << UWX_REG_LC;
+ env->context.special[UWX_REG_AR_LC] = val;
+ env->history.special[UWX_REG_AR_LC] = hist;
+ env->context.valid_regs |= 1 << UWX_REG_AR_LC;
TRACE_S_RESTORE_REG("LC", env->rstate[SBREG_LC], val)
}
@@ -426,6 +444,7 @@
/* The frame info for the new frame isn't yet available. */
env->rstate = 0;
+ env->context.valid_regs &= ~VALID_MARKERS;
return UWX_OK;
}
@@ -497,6 +516,50 @@
return status;
}
+#define COPYIN_MSTACK_16(dest, src) \
+ (env->remote? \
+ (*env->copyin)(UWX_COPYIN_MSTACK, (dest), (src), \
+ 2*DWORDSZ, env->cb_token) : \
+ (*(uint64_t *)(dest) = *(uint64_t *)(src), \
+ *(uint64_t *)((dest)+8) = *(uint64_t *)((src)+8), \
+ 2*DWORDSZ) )
+
+int uwx_restore_freg(struct uwx_env *env, uint64_t rstate,
+ uint64_t *valp, uint64_t *histp)
+{
+ int status;
+ uint64_t p;
+ int n;
+ int regid;
+
+ status = UWX_OK;
+
+ switch (UWX_GET_DISP_CODE(rstate)) {
+ case UWX_DISP_SPREL(0):
+ p = env->context.special[UWX_REG_SP] +
+ UWX_GET_DISP_OFFSET(rstate);
+ n = COPYIN_MSTACK_16((char *)valp, p);
+ if (n != 2*DWORDSZ)
+ status = UWX_ERR_COPYIN_MSTK;
+ *histp = UWX_DISP_MSTK(p);
+ break;
+ case UWX_DISP_PSPREL(0):
+ p = env->context.special[UWX_REG_PSP] + 16 -
+ UWX_GET_DISP_OFFSET(rstate);
+ n = COPYIN_MSTACK_16((char *)valp, p);
+ if (n != 2*DWORDSZ)
+ status = UWX_ERR_COPYIN_MSTK;
+ *histp = UWX_DISP_MSTK(p);
+ break;
+ case UWX_DISP_REG(0):
+ regid = UWX_GET_DISP_REGID(rstate);
+ status = uwx_get_reg(env, regid, valp);
+ (void) uwx_get_spill_loc(env, regid, histp);
+ break;
+ }
+ return status;
+}
+
/* uwx_restore_nat: Returns the saved NaT bit for a preserved GR */
int uwx_restore_nat(struct uwx_env *env, uint64_t rstate, int unat)
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_trace.c#2 (text+ko) ====
@@ -98,9 +98,9 @@
break;
case UWX_DISP_REG(0):
reg = UWX_GET_DISP_REGID(rstate);
- if (reg == UWX_REG_PFS)
+ if (reg == UWX_REG_AR_PFS)
printf(" [AR.PFS]\n");
- else if (reg == UWX_REG_UNAT)
+ else if (reg == UWX_REG_AR_UNAT)
printf(" [AR.UNAT]\n");
else if (reg >= UWX_REG_GR(0) && reg < UWX_REG_GR(128))
printf(" [GR%d]\n", reg - UWX_REG_GR(0));
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_trace.h#2 (text+ko) ====
@@ -29,55 +29,8 @@
#define UWX_TRACE_COPYIN 64 /* UWX_TRACE=C: copyin callback */
#define UWX_TRACE_LOOKUPIP 128 /* UWX_TRACE=L: lookupip callback */
-#ifndef UWX_TRACE_ENABLE
-
-#define TRACE_INIT
-#define TRACE_B_REUSE(id)
-#define TRACE_B_ALLOC(id)
-#define TRACE_B_POP(id)
-#define TRACE_B_LABEL(label)
-#define TRACE_B_LABEL_COPY(id)
-#define TRACE_B_LABEL_REVERSE(back, new)
-#define TRACE_B_COPY(label, id)
-#define TRACE_B_COPY_FREE(id)
-#define TRACE_B_COPY_FOUND(id)
-#define TRACE_B_COPY_COPY(id)
-#define TRACE_B_COPY_REVERSE(back, new)
-#define TRACE_B_FREE(id)
-#define TRACE_I_DECODE_RHDR_1(name, b0)
-#define TRACE_I_DECODE_RHDR_1L(name, b0, val)
-#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val)
-#define TRACE_I_DECODE_PROLOGUE_1(name, b0)
-#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val)
-#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2)
-#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1)
-#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, parm1)
-#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2)
-#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3)
-#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base)
-#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask)
-#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr)
-#define TRACE_I_DECODE_BODY_1(name, b0)
-#define TRACE_I_DECODE_BODY_1L(name, b0, parm1)
-#define TRACE_I_DECODE_BODY_1LL(name, b0, parm1, parm2)
-#define TRACE_R_UIB(uentry, ulen)
-#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot)
-#define TRACE_S_STEP(rstate)
-#define TRACE_S_RESTORE_REG(regname, rstate, val)
-#define TRACE_S_RESTORE_GR(regid, rstate, val)
-#define TRACE_S_RESTORE_BR(regid, rstate, val)
-#define TRACE_S_RESTORE_FR(regid, rstate, val)
-#define TRACE_T_SEARCH32(ip)
-#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end)
-#define TRACE_C_GET_REG(regid, bsp)
-#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid)
-#define TRACE_SELF_COPYIN4(rem, len, wp)
-#define TRACE_SELF_COPYIN8(rem, len, dp)
-#define TRACE_SELF_LOOKUP(ip)
-#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base)
+#ifdef UWX_TRACE_ENABLE
-#else /* !UWX_TRACE_ENABLE */
-
extern void uwx_trace_init(struct uwx_env *env);
extern void uwx_dump_rstate(int regid, uint64_t rstate);
@@ -235,7 +188,7 @@
#define TRACE_S_STEP(rstate) \
if (env->trace & UWX_TRACE_STEP) { \
- printf("uwx_step:\n"); \
+ printf("uwx_restore_markers:\n"); \
uwx_dump_rstate(SBREG_RP, (rstate)[SBREG_RP]); \
uwx_dump_rstate(SBREG_PSP, (rstate)[SBREG_PSP]); \
uwx_dump_rstate(SBREG_PFS, (rstate)[SBREG_PFS]); \
@@ -344,5 +297,52 @@
(unsigned int) ((text_base)+(unwind_base)[2])); \
}
-#endif /* !UWX_TRACE_ENABLE */
+#else /* !UWX_TRACE_ENABLE */
+
+#define TRACE_INIT
+#define TRACE_B_REUSE(id)
+#define TRACE_B_ALLOC(id)
+#define TRACE_B_POP(id)
+#define TRACE_B_LABEL(label)
+#define TRACE_B_LABEL_COPY(id)
+#define TRACE_B_LABEL_REVERSE(back, new)
+#define TRACE_B_COPY(label, id)
+#define TRACE_B_COPY_FREE(id)
+#define TRACE_B_COPY_FOUND(id)
+#define TRACE_B_COPY_COPY(id)
+#define TRACE_B_COPY_REVERSE(back, new)
+#define TRACE_B_FREE(id)
+#define TRACE_I_DECODE_RHDR_1(name, b0)
+#define TRACE_I_DECODE_RHDR_1L(name, b0, val)
+#define TRACE_I_DECODE_RHDR_2L(name, b0, b1, val)
+#define TRACE_I_DECODE_PROLOGUE_1(name, b0)
+#define TRACE_I_DECODE_PROLOGUE_1L(name, b0, val)
+#define TRACE_I_DECODE_PROLOGUE_1LL(name, b0, val1, val2)
+#define TRACE_I_DECODE_PROLOGUE_2(name, b0, b1)
+#define TRACE_I_DECODE_PROLOGUE_2L(name, b0, b1, parm1)
+#define TRACE_I_DECODE_PROLOGUE_3(name, b0, b1, b2)
+#define TRACE_I_DECODE_PROLOGUE_4(name, b0, b1, b2, b3)
+#define TRACE_I_DECODE_PROLOGUE_SPILL_BASE(spill_base)
+#define TRACE_I_DECODE_PROLOGUE_MASKS(gr_mem_mask, gr_gr_mask)
+#define TRACE_I_DECODE_PROLOGUE_NSPILL(ngr)
+#define TRACE_I_DECODE_BODY_1(name, b0)
+#define TRACE_I_DECODE_BODY_1L(name, b0, parm1)
+#define TRACE_I_DECODE_BODY_1LL(name, b0, parm1, parm2)
+#define TRACE_R_UIB(uentry, ulen)
+#define TRACE_R_DUMP_SB(scoreboard, rhdr, cur_slot, ip_slot)
+#define TRACE_S_STEP(rstate)
+#define TRACE_S_RESTORE_REG(regname, rstate, val)
+#define TRACE_S_RESTORE_GR(regid, rstate, val)
+#define TRACE_S_RESTORE_BR(regid, rstate, val)
+#define TRACE_S_RESTORE_FR(regid, rstate, val)
+#define TRACE_T_SEARCH32(ip)
+#define TRACE_T_BINSEARCH32(lb, ub, mid, code_start, code_end)
+#define TRACE_C_GET_REG(regid, bsp)
+#define TRACE_C_ROTATE_GR(regid, sor, rrb_gr, newregid)
+#define TRACE_SELF_COPYIN4(rem, len, wp)
+#define TRACE_SELF_COPYIN8(rem, len, dp)
+#define TRACE_SELF_LOOKUP(ip)
+#define TRACE_SELF_LOOKUP_DESC(text_base, unwind_base)
+
+#endif /* UWX_TRACE_ENABLE */
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_ttrace.c#2 (text+ko) ====
@@ -249,22 +249,22 @@
if (info->have_ucontext) {
if (regid < UWX_REG_GR(0)) {
switch (regid) {
- case UWX_REG_PFS:
- status = __uc_get_ar(&info->ucontext, 64, dp);
- break;
case UWX_REG_PREDS:
status = __uc_get_prs(&info->ucontext, dp);
break;
- case UWX_REG_RNAT:
+ case UWX_REG_AR_PFS:
+ status = __uc_get_ar(&info->ucontext, 64, dp);
+ break;
+ case UWX_REG_AR_RNAT:
status = __uc_get_ar(&info->ucontext, 19, dp);
break;
- case UWX_REG_UNAT:
+ case UWX_REG_AR_UNAT:
status = __uc_get_ar(&info->ucontext, 36, dp);
break;
- case UWX_REG_FPSR:
+ case UWX_REG_AR_FPSR:
status = __uc_get_ar(&info->ucontext, 40, dp);
break;
- case UWX_REG_LC:
+ case UWX_REG_AR_LC:
status = __uc_get_ar(&info->ucontext, 65, dp);
break;
default:
@@ -283,22 +283,22 @@
else {
if (regid < UWX_REG_GR(0)) {
switch (regid) {
- case UWX_REG_PFS:
- ttreg = __ar_pfs;
- break;
case UWX_REG_PREDS:
ttreg = __pr;
break;
- case UWX_REG_RNAT:
+ case UWX_REG_AR_PFS:
+ ttreg = __ar_pfs;
+ break;
+ case UWX_REG_AR_RNAT:
ttreg = __ar_rnat;
break;
- case UWX_REG_UNAT:
+ case UWX_REG_AR_UNAT:
ttreg = __ar_unat;
break;
- case UWX_REG_FPSR:
+ case UWX_REG_AR_FPSR:
ttreg = __ar_fpsr;
break;
- case UWX_REG_LC:
+ case UWX_REG_AR_LC:
ttreg = __ar_lc;
break;
default:
==== //depot/projects/netperf/sys/contrib/ia64/libuwx/src/uwx_uinfo.c#2 (text+ko) ====
@@ -232,7 +232,8 @@
if ((b0 & 0x20) == 0) {
TRACE_I_DECODE_RHDR_1("(R1) prologue", b0)
rhdr->is_prologue = 1;
- } else {
+ }
+ else {
TRACE_I_DECODE_RHDR_1("(R1) body", b0)
}
rhdr->rlen = b0 & 0x1f;
@@ -263,7 +264,8 @@
if ((b0 & 0x03) == 0) {
TRACE_I_DECODE_RHDR_1L("(R3) prologue", b0, val)
rhdr->is_prologue = 1;
- } else {
+ }
+ else {
TRACE_I_DECODE_RHDR_1L("(R3) body", b0, val)
}
rhdr->rlen = (unsigned int) val;
@@ -863,7 +865,7 @@
if (fr_mem_mask & 1) {
newrstate[SBREG_FR + i] = UWX_DISP_PSPREL(fr_base);
tspill[SBREG_FR + i] = 0;
- fr_base -= 8;
+ fr_base -= 16;
nfr--;
}
fr_mem_mask = fr_mem_mask >> 1;
==== //depot/projects/netperf/sys/crypto/cast128/cast128.c#2 (text+ko) ====
@@ -1,890 +1,247 @@
-/* $KAME: cast128.c,v 1.5 2001/11/27 09:47:32 sakane Exp $ */
+/* $NetBSD: cast128.c,v 1.7 2003/08/26 20:03:57 thorpej Exp $ */
+/* $OpenBSD: cast.c,v 1.2 2000/06/06 06:49:47 deraadt Exp $ */
/*
- * heavily modified by Tomomi Suzuki <suzuki at grelot.elec.ryukoku.ac.jp>
- */
-
-/*
- * The CAST-128 Encryption Algorithm (RFC 2144)
- *
- * original implementation <Hideo "Sir MaNMOS" Morisita>
- * 1997/08/21
- */
-/*
- * Copyright (C) 1997 Hideo "Sir MANMOS" Morishita
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY Hideo "Sir MaNMOS" Morishita ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Hideo "Sir MaNMOS" Morishita BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * CAST-128 in C
+ * Written by Steve Reid <sreid at sea-to-sky.net>
+ * 100% Public Domain - no warranty
+ * Released 1997.10.11
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/crypto/cast128/cast128.c,v 1.6 2003/06/10 21:39:41 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/crypto/cast128/cast128.c,v 1.7 2003/10/10 15:06:16 ume Exp $");
-#include <sys/param.h>
-#include <sys/systm.h>
+#include <sys/types.h>
#include <crypto/cast128/cast128.h>
-#include <crypto/cast128/cast128_subkey.h>
+#include <crypto/cast128/cast128sb.h>
+/* Macros to access 8-bit bytes out of a 32-bit word */
+#define U_INT8_Ta(x) ( (u_int8_t) (x>>24) )
+#define U_INT8_Tb(x) ( (u_int8_t) ((x>>16)&255) )
+#define U_INT8_Tc(x) ( (u_int8_t) ((x>>8)&255) )
+#define U_INT8_Td(x) ( (u_int8_t) ((x)&255) )
-static u_int32_t S1[];
-static u_int32_t S2[];
-static u_int32_t S3[];
-static u_int32_t S4[];
-static u_int32_t S5[];
-static u_int32_t S6[];
-static u_int32_t S7[];
-static u_int32_t S8[];
+/* Circular left shift */
+#define ROL(x, n) ( ((x)<<(n)) | ((x)>>(32-(n))) )
+/* CAST-128 uses three different round functions */
+#define F1(l, r, i) \
+ t = ROL(key->xkey[i] + r, key->xkey[i+16]); \
+ l ^= ((cast_sbox1[U_INT8_Ta(t)] ^ cast_sbox2[U_INT8_Tb(t)]) - \
+ cast_sbox3[U_INT8_Tc(t)]) + cast_sbox4[U_INT8_Td(t)];
+#define F2(l, r, i) \
+ t = ROL(key->xkey[i] ^ r, key->xkey[i+16]); \
+ l ^= ((cast_sbox1[U_INT8_Ta(t)] - cast_sbox2[U_INT8_Tb(t)]) + \
+ cast_sbox3[U_INT8_Tc(t)]) ^ cast_sbox4[U_INT8_Td(t)];
+#define F3(l, r, i) \
+ t = ROL(key->xkey[i] - r, key->xkey[i+16]); \
+ l ^= ((cast_sbox1[U_INT8_Ta(t)] + cast_sbox2[U_INT8_Tb(t)]) ^ \
+ cast_sbox3[U_INT8_Tc(t)]) - cast_sbox4[U_INT8_Td(t)];
-/*
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list