summaryrefslogtreecommitdiff
path: root/utils/libmach
diff options
context:
space:
mode:
Diffstat (limited to 'utils/libmach')
-rw-r--r--utils/libmach/5.c6
-rw-r--r--utils/libmach/5db.c2
-rw-r--r--utils/libmach/5obj.c7
-rw-r--r--utils/libmach/8.c21
-rw-r--r--utils/libmach/8obj.c7
-rw-r--r--utils/libmach/k.c3
-rw-r--r--utils/libmach/kobj.c7
-rw-r--r--utils/libmach/v.c1
-rw-r--r--utils/libmach/vobj.c7
9 files changed, 38 insertions, 23 deletions
diff --git a/utils/libmach/5.c b/utils/libmach/5.c
index 1210d7f2..a96f9385 100644
--- a/utils/libmach/5.c
+++ b/utils/libmach/5.c
@@ -16,7 +16,6 @@
Reglist armreglist[] =
{
- {"LINK", REGOFF(link), RINT|RRDONLY, 'X'},
{"TYPE", REGOFF(type), RINT|RRDONLY, 'X'},
{"PSR", REGOFF(psr), RINT|RRDONLY, 'X'},
{"PC", PC, RINT, 'X'},
@@ -50,12 +49,13 @@ Mach marm =
0, /* fp register set size */
"PC", /* name of PC */
"SP", /* name of SP */
- "R15", /* name of link register */
+ "R14", /* name of link register */
"setR12", /* static base register name */
0, /* static base register value */
0x1000, /* page size */
0xC0000000, /* kernel base */
- 0, /* kernel text mask */
+ 0xC0000000, /* kernel text mask */
+ 0x3FFFFFFF, /* user stack top */
4, /* quantization of pc */
4, /* szaddr */
4, /* szreg */
diff --git a/utils/libmach/5db.c b/utils/libmach/5db.c
index 535739e8..d3628749 100644
--- a/utils/libmach/5db.c
+++ b/utils/libmach/5db.c
@@ -60,7 +60,7 @@ static int arminstlen(Map*, uvlong);
*/
Machdata armmach =
{
- {0, 0, 0, 0xD}, /* break point */
+ {0x70, 0x00, 0x20, 0xD1}, /* break point */ /* D1200070 */
4, /* break point size */
leswab, /* short to local byte order */
diff --git a/utils/libmach/5obj.c b/utils/libmach/5obj.c
index e7e3437c..3051b8e0 100644
--- a/utils/libmach/5obj.c
+++ b/utils/libmach/5obj.c
@@ -36,9 +36,12 @@ _read5(Biobuf *bp, Prog *p)
if(as < 0)
return 0;
p->kind = aNone;
+ p->sig = 0;
if(as == ANAME || as == ASIGNAME){
- if(as == ASIGNAME)
- skip(bp, 4); /* signature */
+ if(as == ASIGNAME){
+ Bread(bp, &p->sig, 4);
+ p->sig = leswal(p->sig);
+ }
p->kind = aName;
p->type = type2char(Bgetc(bp)); /* type */
p->sym = Bgetc(bp); /* sym */
diff --git a/utils/libmach/8.c b/utils/libmach/8.c
index 9c7bff11..c636bd00 100644
--- a/utils/libmach/8.c
+++ b/utils/libmach/8.c
@@ -15,7 +15,7 @@
#define REGSIZE sizeof(struct Ureg)
#define FP_CTL(x) (REGSIZE+4*(x))
#define FP_REG(x) (FP_CTL(7)+10*(x))
-#define FPREGSIZE (6*4+8*10)
+#define FPREGSIZE (7*4+8*10)
Reglist i386reglist[] = {
{"DI", REGOFF(di), RINT, 'X'},
@@ -44,14 +44,14 @@ Reglist i386reglist[] = {
{"E4", FP_CTL(4), RFLT, 'X'},
{"E5", FP_CTL(5), RFLT, 'X'},
{"E6", FP_CTL(6), RFLT, 'X'},
- {"F0", FP_REG(7), RFLT, '3'},
- {"F1", FP_REG(6), RFLT, '3'},
- {"F2", FP_REG(5), RFLT, '3'},
- {"F3", FP_REG(4), RFLT, '3'},
- {"F4", FP_REG(3), RFLT, '3'},
- {"F5", FP_REG(2), RFLT, '3'},
- {"F6", FP_REG(1), RFLT, '3'},
- {"F7", FP_REG(0), RFLT, '3'},
+ {"F0", FP_REG(0), RFLT, '3'},
+ {"F1", FP_REG(1), RFLT, '3'},
+ {"F2", FP_REG(2), RFLT, '3'},
+ {"F3", FP_REG(3), RFLT, '3'},
+ {"F4", FP_REG(4), RFLT, '3'},
+ {"F5", FP_REG(5), RFLT, '3'},
+ {"F6", FP_REG(6), RFLT, '3'},
+ {"F7", FP_REG(7), RFLT, '3'},
{ 0 }
};
@@ -69,7 +69,8 @@ Mach mi386 =
0, /* static base register value */
0x1000, /* page size */
0x80100000, /* kernel base */
- 0, /* kernel text mask */
+ 0x80000000, /* kernel text mask */
+ 0x7FFFFFFF, /* user stack top */
1, /* quantization of pc */
4, /* szaddr */
4, /* szreg */
diff --git a/utils/libmach/8obj.c b/utils/libmach/8obj.c
index 9e322f12..0ec13c4a 100644
--- a/utils/libmach/8obj.c
+++ b/utils/libmach/8obj.c
@@ -42,9 +42,12 @@ _read8(Biobuf *bp, Prog* p)
return 0;
as |= ((c & 0xff) << 8);
p->kind = aNone;
+ p->sig = 0;
if(as == ANAME || as == ASIGNAME){
- if(as == ASIGNAME)
- skip(bp, 4); /* signature */
+ if(as == ASIGNAME){
+ Bread(bp, &p->sig, 4);
+ p->sig = leswal(p->sig);
+ }
p->kind = aName;
p->type = type2char(Bgetc(bp)); /* type */
p->sym = Bgetc(bp); /* sym */
diff --git a/utils/libmach/k.c b/utils/libmach/k.c
index 30ae15a0..9b0a45e7 100644
--- a/utils/libmach/k.c
+++ b/utils/libmach/k.c
@@ -108,7 +108,8 @@ Mach msparc =
0, /* value */
0x1000, /* page size */
0xE0000000, /* kernel base */
- 0, /* kernel text mask */
+ 0xE0000000, /* kernel text mask */
+ 0x7FFFFFFF, /* user stack top */
4, /* quantization of pc */
4, /* szaddr */
4, /* szreg */
diff --git a/utils/libmach/kobj.c b/utils/libmach/kobj.c
index f8d7e613..d2a6ad27 100644
--- a/utils/libmach/kobj.c
+++ b/utils/libmach/kobj.c
@@ -38,9 +38,12 @@ _readk(Biobuf *bp, Prog *p)
if(as < 0)
return 0;
p->kind = aNone;
+ p->sig = 0;
if(as == ANAME || as == ASIGNAME){
- if(as == ASIGNAME)
- skip(bp, 4); /* signature */
+ if(as == ASIGNAME){
+ Bread(bp, &p->sig, 4);
+ p->sig = beswal(p->sig);
+ }
p->kind = aName;
p->type = type2char(Bgetc(bp)); /* type */
p->sym = Bgetc(bp); /* sym */
diff --git a/utils/libmach/v.c b/utils/libmach/v.c
index add94113..3b2daf87 100644
--- a/utils/libmach/v.c
+++ b/utils/libmach/v.c
@@ -108,6 +108,7 @@ Mach mmips =
0x1000, /* page size */
0xC0000000, /* kernel base */
0x40000000, /* kernel text mask */
+ 0x7FFFFFFF, /* user stack top */
4, /* quantization of pc */
4, /* szaddr */
4, /* szreg */
diff --git a/utils/libmach/vobj.c b/utils/libmach/vobj.c
index f676d219..2feeb8ca 100644
--- a/utils/libmach/vobj.c
+++ b/utils/libmach/vobj.c
@@ -36,9 +36,12 @@ _readv(Biobuf *bp, Prog *p)
if(as < 0)
return 0;
p->kind = aNone;
+ p->sig = 0;
if(as == ANAME || as == ASIGNAME){
- if(as == ASIGNAME)
- skip(bp, 4); /* signature */
+ if(as == ASIGNAME){
+ Bread(bp, &p->sig, 4);
+ p->sig = beswal(p->sig);
+ }
p->kind = aName;
p->type = type2char(Bgetc(bp)); /* type */
p->sym = Bgetc(bp); /* sym */