Only in /sys/contrib/ia64/libuwx/src: CVS diff -u ./uwx.h /sys/contrib/ia64/libuwx/src/uwx.h --- ./uwx.h Tue Apr 27 10:42:48 2004 +++ /sys/contrib/ia64/libuwx/src/uwx.h Thu May 6 18:10:15 2004 @@ -25,8 +25,13 @@ #ifndef __UWX_INCLUDED #define __UWX_INCLUDED 1 +#ifndef _KERNEL #include #include +#else +#include +#include +#endif #if defined(__cplusplus) #define __EXTERN_C extern "C" diff -u ./uwx_bstream.c /sys/contrib/ia64/libuwx/src/uwx_bstream.c --- ./uwx_bstream.c Tue Apr 27 10:42:52 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_bstream.c Thu May 6 18:12:11 2004 @@ -64,8 +64,6 @@ int len; int n; int b; - uint32_t *wp; - uint64_t *dp; if (bstream->peekc >= 0) { b = bstream->peekc; @@ -131,6 +129,7 @@ return 0; } +#if 0 int uwx_get_uleb128_alt(struct uwx_bstream *bstream, uint64_t *valp) { uint64_t val; @@ -179,3 +178,4 @@ *valp = val; return 0; } +#endif diff -u ./uwx_context.c /sys/contrib/ia64/libuwx/src/uwx_context.c --- ./uwx_context.c Tue Apr 27 10:42:52 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_context.c Thu May 6 19:04:36 2004 @@ -200,7 +200,6 @@ int sor; int rrb_gr; uint64_t bsp; - int n; if (env == 0) return UWX_ERR_NOENV; @@ -274,7 +273,6 @@ int uwx_set_fr(struct uwx_env *env, int regid, uint64_t *val) { - int status; if (regid >= UWX_REG_FR(2) && regid <= UWX_REG_FR(5)) regid -= UWX_REG_FR(2); @@ -340,6 +338,7 @@ return bsp + nslots * DWORDSZ; } +#if 0 int uwx_selftest_bsp_arithmetic() { int i; @@ -398,3 +397,4 @@ return failed; } +#endif diff -u ./uwx_env.c /sys/contrib/ia64/libuwx/src/uwx_env.c --- ./uwx_env.c Tue Apr 27 10:42:53 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_env.c Thu May 6 21:31:55 2004 @@ -22,13 +22,21 @@ OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef _KERNEL #include +#endif #include "uwx_env.h" #include "uwx_scoreboard.h" #include "uwx_str.h" #include "uwx_trace.h" +#ifdef _KERNEL +static struct uwx_env uwx_env; +#define free(p) /* nullified */ +#define malloc(sz) ((sz == sizeof(uwx_env)) ? &uwx_env : NULL) +#endif + alloc_cb uwx_allocate_cb = 0; free_cb uwx_free_cb = 0; @@ -64,7 +72,6 @@ { int i; struct uwx_env *env; - char *tstr; if (uwx_allocate_cb == 0) env = (struct uwx_env *) malloc(sizeof(struct uwx_env)); diff -u ./uwx_scoreboard.c /sys/contrib/ia64/libuwx/src/uwx_scoreboard.c --- ./uwx_scoreboard.c Tue Apr 27 10:42:53 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_scoreboard.c Thu May 6 21:29:25 2004 @@ -22,12 +22,41 @@ OTHER DEALINGS IN THE SOFTWARE. */ +#ifndef _KERNEL #include +#endif #include "uwx_env.h" #include "uwx_scoreboard.h" #include "uwx_trace.h" +#ifdef _KERNEL +static unsigned short uwx_allocated; +static struct uwx_scoreboard uwx_scoreboard[sizeof(uwx_allocated) << 3]; + +static void +free(struct uwx_scoreboard *p) +{ + int idx = p - uwx_scoreboard; + uwx_allocated &= ~(1 << idx); +} + +static struct uwx_scoreboard * +malloc(size_t sz) +{ + int idx; + if (sz != sizeof(struct uwx_scoreboard)) + return (NULL); + for (idx = 0; idx < (sizeof(uwx_allocated) << 3); idx++) { + if ((uwx_allocated & (1 << idx)) == 0) { + uwx_allocated |= 1 << idx; + return (uwx_scoreboard + idx); + } + } + return (NULL); +} +#endif + struct uwx_scoreboard *uwx_alloc_scoreboard(struct uwx_env *env) { @@ -66,6 +95,7 @@ return sb; } +static void uwx_reclaim_scoreboards(struct uwx_env *env) { struct uwx_scoreboard *sb; @@ -140,6 +170,7 @@ /* in the "nextstack" field. */ back = 0; + new = 0; while (sb != 0) { TRACE_B_LABEL_COPY(sb->id) new = uwx_alloc_scoreboard(env); @@ -223,6 +254,7 @@ /* Now copy its stack, storing reverse links in the nextstack field. */ back = sb; + new = 0; for (next = lsb->nextstack; next != 0; next = next->nextstack) { TRACE_B_COPY_COPY(next->id) new = uwx_alloc_scoreboard(env); diff -u ./uwx_step.c /sys/contrib/ia64/libuwx/src/uwx_step.c --- ./uwx_step.c Tue Apr 27 10:42:54 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_step.c Thu May 6 18:32:03 2004 @@ -66,7 +66,7 @@ /* uwx_get_frame_info: Gets unwind info for current frame */ - +static int uwx_get_frame_info(struct uwx_env *env) { int i; @@ -77,7 +77,6 @@ uint64_t *uvec; uint64_t *rstate; struct uwx_utable_entry uentry; - uint64_t uinfop; uint64_t uvecout[UVECSIZE]; if (env->copyin == 0 || env->lookupip == 0) diff -u ./uwx_step.h /sys/contrib/ia64/libuwx/src/uwx_step.h --- ./uwx_step.h Tue Apr 27 10:42:50 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_step.h Thu May 6 18:45:59 2004 @@ -25,4 +25,6 @@ #define UVECSIZE 20 /* Size of uvec supplied by unwind engine */ /* for callback's use. */ +extern int uwx_lookupip_hook(int request, uint64_t ip, intptr_t tok, + uint64_t **vecp, size_t uvecsize); extern int uwx_restore_markers(struct uwx_env *env); diff -u ./uwx_str.c /sys/contrib/ia64/libuwx/src/uwx_str.c --- ./uwx_str.c Tue Apr 27 10:42:55 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_str.c Thu May 6 21:02:58 2004 @@ -25,6 +25,12 @@ #include "uwx_env.h" #include "uwx_str.h" +#ifdef _KERNEL +static struct uwx_str_pool uwx_str_pool; +#define free(p) /* nullified */ +#define malloc(sz) ((sz == sizeof(uwx_str_pool)) ? &uwx_str_pool : NULL) +#endif + /* * uwx_str.c * diff -u ./uwx_trace.c /sys/contrib/ia64/libuwx/src/uwx_trace.c --- ./uwx_trace.c Tue Apr 27 10:42:55 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_trace.c Thu May 6 18:36:02 2004 @@ -27,6 +27,8 @@ #include "uwx_scoreboard.h" #include "uwx_trace.h" +#ifdef UWX_TRACE_ENABLE + void uwx_trace_init(struct uwx_env *env) { char *tstr; @@ -34,7 +36,7 @@ tstr = getenv("UWX_TRACE"); if (tstr != NULL) { while (*tstr != '\0') { - switch (*tstr++) { + switch (*tstr) { case 'i': env->trace |= UWX_TRACE_UINFO; break; case 't': env->trace |= UWX_TRACE_UTABLE; break; case 'b': env->trace |= UWX_TRACE_SB; break; @@ -44,6 +46,9 @@ case 'C': env->trace |= UWX_TRACE_COPYIN; break; case 'L': env->trace |= UWX_TRACE_LOOKUPIP; break; case '?': +#ifdef _KERNEL + printf("UWX_TRACE flag `%c' unknown.\n", *tstr); +#else fprintf(stderr, "UWX_TRACE flags:\n"); fprintf(stderr, " i: unwind info\n"); fprintf(stderr, " t: unwind table searching\n"); @@ -54,7 +59,9 @@ fprintf(stderr, " C: copyin callback\n"); fprintf(stderr, " L: lookup ip callback\n"); exit(1); +#endif } + tstr++; } } } @@ -107,7 +114,7 @@ printf(" [reg %d]\n", reg); break; default: - printf(" <%08x>\n", rstate); + printf(" <%08llx>\n", (unsigned long long)rstate); break; } } @@ -133,3 +140,4 @@ uwx_dump_rstate(i, scoreboard->rstate[i]); } +#endif /* UWX_TRACE_ENABLE */ diff -u ./uwx_uinfo.c /sys/contrib/ia64/libuwx/src/uwx_uinfo.c --- ./uwx_uinfo.c Tue Apr 27 10:42:56 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_uinfo.c Thu May 6 18:46:51 2004 @@ -28,6 +28,7 @@ #include "uwx_scoreboard.h" #include "uwx_bstream.h" #include "uwx_trace.h" +#include "uwx_swap.h" int uwx_count_ones(unsigned int mask); diff -u ./uwx_utable.c /sys/contrib/ia64/libuwx/src/uwx_utable.c --- ./uwx_utable.c Tue Apr 27 10:42:56 2004 +++ /sys/contrib/ia64/libuwx/src/uwx_utable.c Thu May 6 18:58:55 2004 @@ -76,7 +76,10 @@ /* Make sure all three required values are given. */ keys = 0; + text_base = 0; unwind_flags = 0; + unwind_start = 0; + unwind_end = 0; while (*uvec != 0) { switch ((int)*uvec++) { case UWX_KEY_TBASE: @@ -139,7 +142,6 @@ uint32_t unwind_end, struct uwx_utable_entry *uentry) { - int status; int lb; int ub; int mid; @@ -160,11 +162,13 @@ lb = 0; ub = (unwind_end - unwind_start) / (3 * WORDSZ); + mid = 0; while (ub > lb) { mid = (lb + ub) / 2; - len = COPYIN_UINFO_4((char *)&code_start, unwind_start+mid*3*WORDSZ); + len = COPYIN_UINFO_4((char *)&code_start, + (uintptr_t)(unwind_start+mid*3*WORDSZ)); len += COPYIN_UINFO_4((char *)&code_end, - unwind_start+mid*3*WORDSZ+WORDSZ); + (uintptr_t)(unwind_start+mid*3*WORDSZ+WORDSZ)); if (len != 2 * WORDSZ) return UWX_ERR_COPYIN_UTBL; if (env->byte_swap) { @@ -182,7 +186,7 @@ if (ub <= lb) return UWX_ERR_NOUENTRY; len = COPYIN_UINFO_4((char *)&unwind_info, - unwind_start+mid*3*WORDSZ+2*WORDSZ); + (uintptr_t)(unwind_start+mid*3*WORDSZ+2*WORDSZ)); if (len != WORDSZ) return UWX_ERR_COPYIN_UTBL; if (env->byte_swap) @@ -210,7 +214,6 @@ uint64_t unwind_end, struct uwx_utable_entry *uentry) { - int status; int lb; int ub; int mid; @@ -229,6 +232,7 @@ lb = 0; ub = (unwind_end - unwind_start) / (3 * DWORDSZ); + mid = 0; while (ub > lb) { mid = (lb + ub) / 2; len = COPYIN_UINFO_8((char *)&code_start, unwind_start+mid*3*DWORDSZ);