update for routerboard. change vdb to match hardware, add elf header type, etc. a few random fixes have slipped in. Reference: /n/atom/patch/applied2013/libmachrb Date: Wed Jul 31 17:36:06 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/libmach/vdb.c Wed Jul 31 17:35:03 2013 +++ /sys/src/libmach/vdb.c Wed Jul 31 17:35:04 2013 @@ -28,7 +28,12 @@ mipsexcep, /* print exception */ 0, /* breakpoint fixup */ beieeesftos, /* single precision float printer */ - beieeedftos, /* double precisioin float printer */ + /* + * this works for doubles in memory, but FP register pairs have + * the words in little-endian order, so they will print as + * denormalised doubles. + */ + beieeedftos, /* double precision float printer */ mipsfoll, /* following addresses */ mipsinst, /* print instruction */ mipsdas, /* dissembler */ @@ -48,7 +53,7 @@ mipsexcep, /* print exception */ 0, /* breakpoint fixup */ leieeesftos, /* single precision float printer */ - leieeedftos, /* double precisioin float printer */ + leieeedftos, /* double precision float printer */ mipsfoll, /* following addresses */ mipsinst, /* print instruction */ mipsdas, /* dissembler */ @@ -71,7 +76,7 @@ mipsexcep, /* print exception */ 0, /* breakpoint fixup */ leieeesftos, /* single precision float printer */ - leieeedftos, /* double precisioin float printer */ + leieeedftos, /* double precision float printer */ mipsfoll, /* following addresses */ mipsinst, /* print instruction */ mipsdas, /* dissembler */ @@ -94,7 +99,7 @@ mipsexcep, /* print exception */ 0, /* breakpoint fixup */ beieeesftos, /* single precision float printer */ - beieeedftos, /* double precisioin float printer */ + beieeedftos, /* double precision float printer */ mipsfoll, /* following addresses */ mipsinst, /* print instruction */ mipsdas, /* dissembler */ @@ -131,7 +136,8 @@ long c; c = (*rget)(map, "CAUSE"); - if(c & 0x00002000) /* INTR3 */ + /* i don't think this applies to any current machines */ + if(0 && c & 0x00002000) /* INTR3 */ e = 16; /* Floating point exception */ else e = (c>>2)&0x0F; --- /sys/src/libmach/v.c Wed Jul 31 17:35:05 2013 +++ /sys/src/libmach/v.c Wed Jul 31 17:35:05 2013 @@ -106,9 +106,9 @@ "R31", /* name of link register */ "setR30", /* static base register name */ 0, /* value */ - 0x1000, /* page size */ - 0xC0000000ULL, /* kernel base */ - 0x40000000ULL, /* kernel text mask */ + 16*1024, /* page size */ + 0x80000000ULL, /* kernel base */ + 0x80000000ULL, /* kernel text mask */ 0x7FFFFFFFULL, /* user stack top */ 4, /* quantization of pc */ 4, /* szaddr */ --- /sys/src/libmach/sym.c Wed Jul 31 17:35:07 2013 +++ /sys/src/libmach/sym.c Wed Jul 31 17:35:08 2013 @@ -687,6 +687,8 @@ top = ntxt; for (mid = (bot+top)/2; mid < top; mid = (bot+top)/2) { sp = txt[mid].sym; + if(sp == nil) + return -1; if(val < sp->value) top = mid; else if(mid != ntxt-1 && val >= txt[mid+1].sym->value) @@ -712,6 +714,8 @@ val = addr; for(mid = (bot+top)/2; mid < top; mid = (bot+top)/2) { sp = globals[mid]; + if(sp == nil) + return -1; if(val < sp->value) top = mid; else if(mid < nglob-1 && val >= globals[mid+1]->value) --- /sys/src/libmach/5.c Wed Jul 31 17:35:09 2013 +++ /sys/src/libmach/5.c Wed Jul 31 17:35:10 2013 @@ -2,10 +2,10 @@ * arm definition */ #include +#include #include #include "/arm/include/ureg.h" #include - #define REGOFF(x) (ulong) (&((struct Ureg *) 0)->x) --- /sys/src/libmach/elf.h Wed Jul 31 17:35:10 2013 +++ /sys/src/libmach/elf.h Wed Jul 31 17:35:11 2013 @@ -119,6 +119,7 @@ I860 = 7, /* Intel i860 */ MIPS = 8, /* Mips R2000 */ S370 = 9, /* Amdhal */ + MIPSR4K = 10, /* Mips R4000 */ SPARC64 = 18, /* Sun SPARC v9 */ POWER = 20, /* PowerPC */ POWER64 = 21, /* PowerPC64 */ --- /sys/src/libmach/8.c Wed Jul 31 17:35:12 2013 +++ /sys/src/libmach/8.c Wed Jul 31 17:35:12 2013 @@ -2,6 +2,7 @@ * 386 definition */ #include +#include #include #include "/386/include/ureg.h" #include --- /sys/src/libmach/5.c Wed Jul 31 17:35:13 2013 +++ /sys/src/libmach/5.c Wed Jul 31 17:35:14 2013 @@ -2,10 +2,10 @@ * arm definition */ #include +#include #include #include "/arm/include/ureg.h" #include - #define REGOFF(x) (ulong) (&((struct Ureg *) 0)->x)