Module Name: src Committed By: rin Date: Fri Apr 29 07:12:42 UTC 2022
Modified Files: src/sys/arch/amiga/stand/bootblock/boot: bbstart.s src/sys/arch/amiga/stand/bootblock/elf2bb: elf2bb.c Log Message: Simplify relocation rules. Now, both single- and triple-byte encodings in relocation table represent addrdiff (instead of absolute file offset for the latter). Shave off one insn for boot.amiga. Also, for elf2bb(1), relocation overflow is mitigated and detectable at least even if inevitable (it seems unlikely to happen although). To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/amiga/stand/bootblock/boot/bbstart.s cvs rdiff -u -r1.29 -r1.30 src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/amiga/stand/bootblock/boot/bbstart.s diff -u src/sys/arch/amiga/stand/bootblock/boot/bbstart.s:1.14 src/sys/arch/amiga/stand/bootblock/boot/bbstart.s:1.15 --- src/sys/arch/amiga/stand/bootblock/boot/bbstart.s:1.14 Fri Apr 29 06:42:58 2022 +++ src/sys/arch/amiga/stand/bootblock/boot/bbstart.s Fri Apr 29 07:12:41 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: bbstart.s,v 1.14 2022/04/29 06:42:58 rin Exp $ */ +/* $NetBSD: bbstart.s,v 1.15 2022/04/29 07:12:41 rin Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -159,7 +159,6 @@ Lrelocate: Loopw: clrw %a2@+ - movl %d1,%a0 | for a variant with relative words, erase this line Loopb: addl %d0,%a0 addl %d1,%a0@ Index: src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c diff -u src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c:1.29 src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c:1.30 --- src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c:1.29 Fri Apr 29 06:59:29 2022 +++ src/sys/arch/amiga/stand/bootblock/elf2bb/elf2bb.c Fri Apr 29 07:12:42 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: elf2bb.c,v 1.29 2022/04/29 06:59:29 rin Exp $ */ +/* $NetBSD: elf2bb.c,v 1.30 2022/04/29 07:12:42 rin Exp $ */ /*- * Copyright (c) 1996,2006 The NetBSD Foundation, Inc. @@ -394,15 +394,16 @@ main(int argc, char *argv[]) "oldaddr = 0x%08x, abort.\n", relbuf[i], oldaddr); } else if (addrdiff > 0xff) { *rpo = 0; + tmp16 = htobe16(addrdiff); if (delta > 0) { ++rpo; - *rpo++ = (relbuf[i] >> 8) & 0xff; - *rpo++ = relbuf[i] & 0xff; + memcpy(rpo, &tmp16, sizeof(tmp16)); + rpo += sizeof(tmp16); dprintf(("%02x%02x%02x\n", rpo[-3], rpo[-2], rpo[-1])); } else { - *--rpo = relbuf[i] & 0xff; - *--rpo = (relbuf[i] >> 8) & 0xff; + rpo -= sizeof(tmp16); + memcpy(rpo, &tmp16, sizeof(tmp16)); --rpo; dprintf(("%02x%02x%02x\n", rpo[0], rpo[1], rpo[2]));