Module Name: src Committed By: rin Date: Wed Apr 27 14:48:50 UTC 2022
Modified Files: src/sys/lib/libsa: ext2fs.c minixfs3.c stand.h ufs.c Log Message: Revert previous at the moment. This is wrong reasoning; 68020 and above (incl. 040 and 060) support 32-bit displacements for PC relative addressing (via "fully extension addressing mode" with null index register). I've still not figured out what goes wrong with amiga/boot(8) when compiled without -l option for gas(1)... On 2022/04/27 20:48, Rin Okuyama wrote: > 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. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/lib/libsa/ext2fs.c cvs rdiff -u -r1.11 -r1.12 src/sys/lib/libsa/minixfs3.c cvs rdiff -u -r1.84 -r1.85 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.32 src/sys/lib/libsa/ext2fs.c:1.33 --- src/sys/lib/libsa/ext2fs.c:1.32 Wed Apr 27 11:48:26 2022 +++ src/sys/lib/libsa/ext2fs.c Wed Apr 27 14:48:50 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ext2fs.c,v 1.32 2022/04/27 11:48:26 rin Exp $ */ +/* $NetBSD: ext2fs.c,v 1.33 2022/04/27 14:48:50 rin Exp $ */ /* * Copyright (c) 1997 Manuel Bouyer. @@ -415,9 +415,15 @@ 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 / GETSECSIZE(f), SBSIZE, sbbuf, &buf_size); + SBOFF / secsize, SBSIZE, sbbuf, &buf_size); if (rc) return rc; Index: src/sys/lib/libsa/minixfs3.c diff -u src/sys/lib/libsa/minixfs3.c:1.11 src/sys/lib/libsa/minixfs3.c:1.12 --- src/sys/lib/libsa/minixfs3.c:1.11 Wed Apr 27 11:48:26 2022 +++ src/sys/lib/libsa/minixfs3.c Wed Apr 27 14:48:50 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: minixfs3.c,v 1.11 2022/04/27 11:48:26 rin Exp $ */ +/* $NetBSD: minixfs3.c,v 1.12 2022/04/27 14:48:50 rin Exp $ */ /*- * Copyright (c) 2012 @@ -449,6 +449,7 @@ 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. @@ -456,8 +457,13 @@ 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 / GETSECSIZE(f), MINBSIZE, sbbuf, &buf_size); + SUPER_BLOCK_OFF / secsize, MINBSIZE, sbbuf, &buf_size); if (rc) return rc; Index: src/sys/lib/libsa/stand.h diff -u src/sys/lib/libsa/stand.h:1.84 src/sys/lib/libsa/stand.h:1.85 --- src/sys/lib/libsa/stand.h:1.84 Wed Apr 27 11:48:26 2022 +++ src/sys/lib/libsa/stand.h Wed Apr 27 14:48:50 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: stand.h,v 1.84 2022/04/27 11:48:26 rin Exp $ */ +/* $NetBSD: stand.h,v 1.85 2022/04/27 14:48:50 rin Exp $ */ /* * Copyright (c) 1999 Christopher G. Demetriou. All rights reserved. @@ -64,7 +64,6 @@ #ifndef _LIBSA_STAND_H_ #define _LIBSA_STAND_H_ -#include <sys/param.h> #include <sys/types.h> #include <sys/cdefs.h> #include <sys/stat.h> @@ -321,22 +320,4 @@ 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.84 src/sys/lib/libsa/ufs.c:1.85 --- src/sys/lib/libsa/ufs.c:1.84 Wed Apr 27 11:48:26 2022 +++ src/sys/lib/libsa/ufs.c Wed Apr 27 14:48:50 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs.c,v 1.84 2022/04/27 11:48:26 rin Exp $ */ +/* $NetBSD: ufs.c,v 1.85 2022/04/27 14:48:50 rin Exp $ */ /*- * Copyright (c) 1993 @@ -594,15 +594,21 @@ 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] / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size); + sblock_try[i] / secsize, SBLOCKSIZE, fs, &buf_size); if (rc) return rc; if (buf_size != SBLOCKSIZE) @@ -617,7 +623,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 / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size); + SBLOCKOFFSET / secsize, SBLOCKSIZE, fs, &buf_size); if (rc) return rc; if (buf_size != SBLOCKSIZE)