9cc6463a07
this version mostly has bugs fixes.
353 lines
8.8 KiB
Diff
353 lines
8.8 KiB
Diff
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 <stdlib.h>
|
|
#include <inttypes.h>
|
|
+#else
|
|
+#include <sys/param.h>
|
|
+#include <sys/systm.h>
|
|
+#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 <stdlib.h>
|
|
+#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 <stdlib.h>
|
|
+#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);
|