Module Name:    src
Committed By:   rin
Date:           Wed Apr 27 11:48:26 UTC 2022

Modified Files:
        src/sys/lib/libsa: ext2fs.c minixfs3.c stand.h ufs.c

Log Message:
Introduce SA_HARDCODED_SECSIZE hack, by which hardcoded DEV_BSIZE is
used instead of secsize obtained by SAIOSECSIZE ioctl.

This hack avoids divdi3 and friends from being linked, in order to
support variable secsize.

This is useful for amiga/boot(8); it is loaded by firmware into
unpredictable address, and therefore all symbols should be
addressable by PC relative mode with only 16-bit displacements.

See sys/arch/amiga/stand/bootblock/{boot/bbstart.s,elf2bb,txlt} for
more details.


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/lib/libsa/ext2fs.c
cvs rdiff -u -r1.10 -r1.11 src/sys/lib/libsa/minixfs3.c
cvs rdiff -u -r1.83 -r1.84 src/sys/lib/libsa/stand.h src/sys/lib/libsa/ufs.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/lib/libsa/ext2fs.c
diff -u src/sys/lib/libsa/ext2fs.c:1.31 src/sys/lib/libsa/ext2fs.c:1.32
--- src/sys/lib/libsa/ext2fs.c:1.31	Sun Apr 24 06:48:15 2022
+++ src/sys/lib/libsa/ext2fs.c	Wed Apr 27 11:48:26 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ext2fs.c,v 1.31 2022/04/24 06:48:15 mlelstv Exp $	*/
+/*	$NetBSD: ext2fs.c,v 1.32 2022/04/27 11:48:26 rin Exp $	*/
 
 /*
  * Copyright (c) 1997 Manuel Bouyer.
@@ -415,15 +415,9 @@ read_sblock(struct open_file *f, struct 
 	struct ext2fs ext2fs;
 	size_t buf_size;
 	int rc;
-	u_int secsize;
-
-	secsize = 0;
-	rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-	if (rc != 0 || secsize == 0)
-		secsize = DEV_BSIZE;
 
 	rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-	    SBOFF / secsize, SBSIZE, sbbuf, &buf_size);
+	    SBOFF / GETSECSIZE(f), SBSIZE, sbbuf, &buf_size);
 	if (rc)
 		return rc;
 

Index: src/sys/lib/libsa/minixfs3.c
diff -u src/sys/lib/libsa/minixfs3.c:1.10 src/sys/lib/libsa/minixfs3.c:1.11
--- src/sys/lib/libsa/minixfs3.c:1.10	Sun Apr 24 06:48:15 2022
+++ src/sys/lib/libsa/minixfs3.c	Wed Apr 27 11:48:26 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: minixfs3.c,v 1.10 2022/04/24 06:48:15 mlelstv Exp $	*/
+/*	$NetBSD: minixfs3.c,v 1.11 2022/04/27 11:48:26 rin Exp $	*/
 
 /*-
  * Copyright (c) 2012
@@ -449,7 +449,6 @@ read_sblock(struct open_file *f, struct 
 	static uint8_t sbbuf[MINBSIZE];
 	size_t buf_size;
 	int rc;
-	u_int secsize;
 
 	/* We must read amount multiple of sector size, hence we can't
 	 * read SBSIZE and read MINBSIZE.
@@ -457,13 +456,8 @@ read_sblock(struct open_file *f, struct 
 	if (SBSIZE > MINBSIZE)
 		return EINVAL;
 
-	secsize = 0;
-	rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-	if (rc != 0 || secsize == 0)
-		secsize = DEV_BSIZE;
-
 	rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-	    SUPER_BLOCK_OFF / secsize, MINBSIZE, sbbuf, &buf_size);
+	    SUPER_BLOCK_OFF / GETSECSIZE(f), MINBSIZE, sbbuf, &buf_size);
 	if (rc)
 		return rc;
 

Index: src/sys/lib/libsa/stand.h
diff -u src/sys/lib/libsa/stand.h:1.83 src/sys/lib/libsa/stand.h:1.84
--- src/sys/lib/libsa/stand.h:1.83	Mon May 17 08:50:36 2021
+++ src/sys/lib/libsa/stand.h	Wed Apr 27 11:48:26 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: stand.h,v 1.83 2021/05/17 08:50:36 mrg Exp $	*/
+/*	$NetBSD: stand.h,v 1.84 2022/04/27 11:48:26 rin Exp $	*/
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -64,6 +64,7 @@
 #ifndef _LIBSA_STAND_H_
 #define	_LIBSA_STAND_H_
 
+#include <sys/param.h>
 #include <sys/types.h>
 #include <sys/cdefs.h>
 #include <sys/stat.h>
@@ -320,4 +321,22 @@ void	bzero(void *, size_t);
 
 int	atoi(const char *);
 
+#if !defined(SA_HARDCODED_SECSIZE)
+#define	GETSECSIZE(f)	getsecsize(f)
+static inline u_int
+getsecsize(struct open_file *f)
+{
+	int rc;
+	u_int secsize = 0;
+
+	rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
+	if (rc != 0 || secsize == 0)
+		secsize = DEV_BSIZE;
+
+	return secsize;
+}
+#else
+#define	GETSECSIZE(f)	DEV_BSIZE
+#endif
+
 #endif /* _LIBSA_STAND_H_ */
Index: src/sys/lib/libsa/ufs.c
diff -u src/sys/lib/libsa/ufs.c:1.83 src/sys/lib/libsa/ufs.c:1.84
--- src/sys/lib/libsa/ufs.c:1.83	Sun Apr 24 06:52:59 2022
+++ src/sys/lib/libsa/ufs.c	Wed Apr 27 11:48:26 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs.c,v 1.83 2022/04/24 06:52:59 mlelstv Exp $	*/
+/*	$NetBSD: ufs.c,v 1.84 2022/04/27 11:48:26 rin Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -594,21 +594,15 @@ ffs_find_superblock(struct open_file *f,
 	struct file *fp = (struct file *)f->f_fsdata;
 	int rc;
 	size_t buf_size;
-	u_int secsize;
 #ifdef LIBSA_FFSv2
 	static daddr_t sblock_try[] = SBLOCKSEARCH;
 	int i;
 #endif
 
-	secsize = 0;
-	rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-	if (rc != 0 || secsize == 0)
-		secsize = DEV_BSIZE;
-
 #ifdef LIBSA_FFSv2
 	for (i = 0; sblock_try[i] != -1; i++) {
 		rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-		    sblock_try[i] / secsize, SBLOCKSIZE, fs, &buf_size);
+		    sblock_try[i] / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size);
 		if (rc)
 			return rc;
 		if (buf_size != SBLOCKSIZE)
@@ -623,7 +617,7 @@ ffs_find_superblock(struct open_file *f,
 	return EINVAL;
 #else /* LIBSA_FFSv2 */
 	rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-		SBLOCKOFFSET / secsize, SBLOCKSIZE, fs, &buf_size);
+		SBLOCKOFFSET / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size);
 	if (rc)
 		return rc;
 	if (buf_size != SBLOCKSIZE)

Reply via email to