Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/lib/libsa Revert previous at the moment.



details:   https://anonhg.NetBSD.org/src/rev/061c69fa15f9
branches:  trunk
changeset: 365832:061c69fa15f9
user:      rin <rin%NetBSD.org@localhost>
date:      Wed Apr 27 14:48:50 2022 +0000

description:
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.

diffstat:

 sys/lib/libsa/ext2fs.c   |  10 ++++++++--
 sys/lib/libsa/minixfs3.c |  10 ++++++++--
 sys/lib/libsa/stand.h    |  21 +--------------------
 sys/lib/libsa/ufs.c      |  12 +++++++++---
 4 files changed, 26 insertions(+), 27 deletions(-)

diffs (139 lines):

diff -r defd3da98d6e -r 061c69fa15f9 sys/lib/libsa/ext2fs.c
--- a/sys/lib/libsa/ext2fs.c    Wed Apr 27 12:10:47 2022 +0000
+++ b/sys/lib/libsa/ext2fs.c    Wed Apr 27 14:48:50 2022 +0000
@@ -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 @@
        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;
 
diff -r defd3da98d6e -r 061c69fa15f9 sys/lib/libsa/minixfs3.c
--- a/sys/lib/libsa/minixfs3.c  Wed Apr 27 12:10:47 2022 +0000
+++ b/sys/lib/libsa/minixfs3.c  Wed Apr 27 14:48:50 2022 +0000
@@ -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 @@
        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 @@
        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;
 
diff -r defd3da98d6e -r 061c69fa15f9 sys/lib/libsa/stand.h
--- a/sys/lib/libsa/stand.h     Wed Apr 27 12:10:47 2022 +0000
+++ b/sys/lib/libsa/stand.h     Wed Apr 27 14:48:50 2022 +0000
@@ -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 @@
 
 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_ */
diff -r defd3da98d6e -r 061c69fa15f9 sys/lib/libsa/ufs.c
--- a/sys/lib/libsa/ufs.c       Wed Apr 27 12:10:47 2022 +0000
+++ b/sys/lib/libsa/ufs.c       Wed Apr 27 14:48:50 2022 +0000
@@ -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 @@
        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 @@
        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)



Home | Main Index | Thread Index | Old Index