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

Reply via email to