freebsd-dev/sys/contrib/ia64/libuwx/src.diff
Marcel Moolenaar 9cc6463a07 Update to BETA 7. Besides C++ support, which is irrelevant to us,
this version mostly has bugs fixes.
2004-05-09 03:06:25 +00:00

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);