Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F154910583
D14377.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
D14377.diff
View Options
Index: stand/efi/boot1/Makefile
===================================================================
--- stand/efi/boot1/Makefile
+++ stand/efi/boot1/Makefile
@@ -23,7 +23,8 @@
CWARNFLAGS.zfs_module.c += -Wno-unused-function
# architecture-specific loader code
-SRCS= boot1.c self_reloc.c start.S ufs_module.c
+SRCS= boot1.c self_reloc.c start.S ufs_module.c ufsread.c
+
.if ${MK_ZFS} != "no"
SRCS+= zfs_module.c
CFLAGS.zfs_module.c+= -I${ZFSSRC}
@@ -51,6 +52,9 @@
.PATH: ${LDRSRC}
CFLAGS+= -I${LDRSRC}
+# Add libsa for ufsread.c
+.PATH: ${SASRC}
+
FILES= boot1.efi boot1.efifat
FILESMODE_boot1.efi= ${BINMODE}
Index: stand/efi/boot1/ufs_module.c
===================================================================
--- stand/efi/boot1/ufs_module.c
+++ stand/efi/boot1/ufs_module.c
@@ -38,12 +38,15 @@
#include <sys/param.h>
#include <efi.h>
+#include <ufs/ffs/fs.h>
+
#include "boot_module.h"
+#include "ufsread.h"
static dev_info_t *devinfo;
static dev_info_t *devices;
-static int
+int
dskread(void *buf, u_int64_t lba, int nblk)
{
int size;
@@ -66,8 +69,6 @@
return (0);
}
-#include "ufsread.c"
-
static struct dmadat __dmadat;
static int
Index: stand/i386/boot2/Makefile
===================================================================
--- stand/i386/boot2/Makefile
+++ stand/i386/boot2/Makefile
@@ -61,7 +61,7 @@
${LD} ${LD_FLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} boot1.o
CLEANFILES+= boot2 boot2.ld boot2.ldr boot2.bin boot2.out boot2.o \
- boot2.h sio.o
+ boot2.h sio.o ufsread.o
BOOT2SIZE= 7680
@@ -80,10 +80,13 @@
boot2.bin: boot2.out
${OBJCOPY} -S -O binary boot2.out ${.TARGET}
-boot2.out: ${BTXCRT} boot2.o sio.o
+boot2.out: ${BTXCRT} boot2.o sio.o ufsread.o
${LD} ${LD_FLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
-SRCS= boot2.c boot2.h
+SRCS= boot2.c boot2.h ufsread.c
+CFLAGS.ufsread.c= -DUFS_SMALL_CGBASE
+
+.PATH: ${SASRC}
boot2.h: boot1.out
${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \
Index: stand/i386/boot2/boot2.c
===================================================================
--- stand/i386/boot2/boot2.c
+++ stand/i386/boot2/boot2.c
@@ -25,6 +25,8 @@
#include <machine/bootinfo.h>
#include <machine/elf.h>
+#include <ufs/ffs/fs.h>
+
#include <stdarg.h>
#include <a.out.h>
@@ -35,6 +37,7 @@
#include "lib.h"
#include "paths.h"
#include "rbx.h"
+#include "ufsread.h"
/* Define to 0 to omit serial support */
#ifndef SERIAL
@@ -109,21 +112,23 @@
static uint8_t ioctrl = IO_KEYBOARD;
#endif
-int main(void);
-void exit(int);
-static void load(void);
-static int parse(void);
-static int dskread(void *, unsigned, unsigned);
-static void printf(const char *,...);
-static void putchar(int);
-static int drvread(void *, unsigned, unsigned);
-static int keyhit(unsigned);
-static int xputc(int);
-static int xgetc(int);
-static inline int getc(int);
-
-static void memcpy(void *, const void *, int);
-static void
+int main(void);
+void exit(int);
+void memcpy(void *, const void *, int);
+void printf(const char *, ...);
+int strcmp(const char *, const char *);
+int dskread(void *, unsigned, unsigned);
+
+static void load(void);
+static int parse(void);
+static void putchar(int);
+static int drvread(void *, unsigned, unsigned);
+static int keyhit(unsigned);
+static int xputc(int);
+static int xgetc(int);
+static inline int getc(int);
+
+void
memcpy(void *dst, const void *src, int len)
{
const char *s;
@@ -135,7 +140,7 @@
*d++ = *s++;
}
-static inline int
+int
strcmp(const char *s1, const char *s2)
{
@@ -143,9 +148,6 @@
return ((unsigned char)*s1 - (unsigned char)*s2);
}
-#define UFS_SMALL_CGBASE
-#include "ufsread.c"
-
static int
xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
@@ -470,7 +472,7 @@
return (0);
}
-static int
+int
dskread(void *buf, unsigned lba, unsigned nblk)
{
struct dos_partition *dp;
@@ -537,8 +539,8 @@
return (-1);
}
-static void
-printf(const char *fmt,...)
+void
+printf(const char *fmt, ...)
{
va_list ap;
static char buf[10];
Index: stand/i386/gptboot/Makefile
===================================================================
--- stand/i386/gptboot/Makefile
+++ stand/i386/gptboot/Makefile
@@ -63,9 +63,12 @@
gptboot.bin: gptboot.out
${OBJCOPY} -S -O binary gptboot.out ${.TARGET}
-gptboot.out: ${BTXCRT} gptboot.o sio.o crc32.o drv.o cons.o ${OPENCRYPTO_XTS}
+gptboot.out: ${BTXCRT} gptboot.o sio.o crc32.o drv.o cons.o ufsread.o ${OPENCRYPTO_XTS}
${LD} ${LD_FLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBGELIBOOT} ${LIBSA32}
+SRCS+= ufsread.c
+CLEANFILES+= ufsread.o
+
.include <bsd.prog.mk>
# XXX: clang integrated-as doesn't grok .codeNN directives yet
Index: stand/i386/gptboot/gptboot.c
===================================================================
--- stand/i386/gptboot/gptboot.c
+++ stand/i386/gptboot/gptboot.c
@@ -26,6 +26,8 @@
#include <machine/pc/bios.h>
#include <machine/psl.h>
+#include <ufs/ffs/fs.h>
+
#include <stdarg.h>
#include <a.out.h>
@@ -41,6 +43,7 @@
#include "cons.h"
#include "gpt.h"
#include "paths.h"
+#include "ufsread.h"
#define ARGS 0x900
#define NOPT 14
@@ -102,15 +105,15 @@
static char *heap_next;
static char *heap_end;
+int dskread(void *, daddr_t, unsigned);
+
static void load(void);
static int parse_cmds(char *, int *);
-static int dskread(void *, daddr_t, unsigned);
#ifdef LOADER_GELI_SUPPORT
static int vdev_read(void *vdev __unused, void *priv, off_t off, void *buf,
size_t bytes);
#endif
-#include "ufsread.c"
#include "gpt.c"
#ifdef LOADER_GELI_SUPPORT
#include "geliboot.c"
@@ -574,7 +577,7 @@
return 0;
}
-static int
+int
dskread(void *buf, daddr_t lba, unsigned nblk)
{
int err;
Index: stand/libsa/ufsread.h
===================================================================
--- /dev/null
+++ stand/libsa/ufsread.h
@@ -0,0 +1,40 @@
+#ifndef UFSREAD_H
+#define UFSREAD_H
+
+typedef uint32_t ufs_ino_t;
+
+/*
+ * We use 4k `virtual' blocks for filesystem data, whatever the actual
+ * filesystem block size. FFS blocks are always a multiple of 4k.
+ */
+#define VBLKSHIFT 12
+#define VBLKSIZE (1 << VBLKSHIFT)
+#define VBLKMASK (VBLKSIZE - 1)
+#define DBPERVBLK (VBLKSIZE / DEV_BSIZE)
+#define INDIRPERVBLK(fs) (NINDIR(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
+#define IPERVBLK(fs) (INOPB(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
+#define INO_TO_VBA(fs, ipervblk, x) \
+ (fsbtodb(fs, cgimin(fs, ino_to_cg(fs, x))) + \
+ (((x) % (fs)->fs_ipg) / (ipervblk) * DBPERVBLK))
+#define INO_TO_VBO(ipervblk, x) ((x) % ipervblk)
+#define FS_TO_VBA(fs, fsb, off) (fsbtodb(fs, fsb) + \
+ ((off) / VBLKSIZE) * DBPERVBLK)
+#define FS_TO_VBO(fs, fsb, off) ((off) & VBLKMASK)
+
+/* Buffers that must not span a 64k boundary. */
+struct dmadat {
+ char blkbuf[VBLKSIZE]; /* filesystem blocks */
+ char indbuf[VBLKSIZE]; /* indir blocks */
+ char sbbuf[SBLOCKSIZE]; /* superblock */
+ char secbuf[DEV_BSIZE]; /* for MBR/disklabel */
+};
+extern struct dmadat *dmadat;
+
+extern uint8_t ls, dsk_meta;
+extern uint32_t fs_off;
+
+ufs_ino_t lookup(const char *);
+ssize_t fsread(ufs_ino_t, void *, size_t);
+ssize_t fsread_size(ufs_ino_t, void *, size_t, size_t *);
+
+#endif /* UFSREAD_H */
Index: stand/libsa/ufsread.c
===================================================================
--- stand/libsa/ufsread.c
+++ stand/libsa/ufsread.c
@@ -46,10 +46,20 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+
#include <ufs/ufs/dinode.h>
#include <ufs/ufs/dir.h>
#include <ufs/ffs/fs.h>
+#include "ufsread.h"
+
+/* These routines must be provided by other code. */
+void memcpy(void *, const void *, int);
+void printf(const char *, ...);
+int strcmp(const char *, const char *);
+int dskread(void *, unsigned, unsigned);
+
#ifdef UFS_SMALL_CGBASE
/* XXX: Revert to old (broken for over 1.5Tb filesystems) version of cgbase
(see sys/ufs/ffs/fs.h rev 1.39) so that small boot loaders (e.g. boot2) can
@@ -58,40 +68,10 @@
#define cgbase(fs, c) ((ufs2_daddr_t)((fs)->fs_fpg * (c)))
#endif
-typedef uint32_t ufs_ino_t;
-
-/*
- * We use 4k `virtual' blocks for filesystem data, whatever the actual
- * filesystem block size. FFS blocks are always a multiple of 4k.
- */
-#define VBLKSHIFT 12
-#define VBLKSIZE (1 << VBLKSHIFT)
-#define VBLKMASK (VBLKSIZE - 1)
-#define DBPERVBLK (VBLKSIZE / DEV_BSIZE)
-#define INDIRPERVBLK(fs) (NINDIR(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
-#define IPERVBLK(fs) (INOPB(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
-#define INO_TO_VBA(fs, ipervblk, x) \
- (fsbtodb(fs, cgimin(fs, ino_to_cg(fs, x))) + \
- (((x) % (fs)->fs_ipg) / (ipervblk) * DBPERVBLK))
-#define INO_TO_VBO(ipervblk, x) ((x) % ipervblk)
-#define FS_TO_VBA(fs, fsb, off) (fsbtodb(fs, fsb) + \
- ((off) / VBLKSIZE) * DBPERVBLK)
-#define FS_TO_VBO(fs, fsb, off) ((off) & VBLKMASK)
-
-/* Buffers that must not span a 64k boundary. */
-struct dmadat {
- char blkbuf[VBLKSIZE]; /* filesystem blocks */
- char indbuf[VBLKSIZE]; /* indir blocks */
- char sbbuf[SBLOCKSIZE]; /* superblock */
- char secbuf[DEV_BSIZE]; /* for MBR/disklabel */
-};
-static struct dmadat *dmadat;
-
-static ufs_ino_t lookup(const char *);
-static ssize_t fsread(ufs_ino_t, void *, size_t);
+struct dmadat *dmadat;
-static uint8_t ls, dsk_meta;
-static uint32_t fs_off;
+uint8_t ls, dsk_meta;
+uint32_t fs_off;
static __inline uint8_t
fsfind(const char *name, ufs_ino_t * ino)
@@ -118,7 +98,7 @@
return 0;
}
-static ufs_ino_t
+ufs_ino_t
lookup(const char *path)
{
static char name[UFS_MAXNAMLEN + 1];
@@ -164,7 +144,7 @@
#define DIP(field) fs.fs_magic == FS_UFS1_MAGIC ? dp1.field : dp2.field
#endif
-static ssize_t
+ssize_t
fsread_size(ufs_ino_t inode, void *buf, size_t nbyte, size_t *fsizep)
{
#ifndef UFS2_ONLY
@@ -317,7 +297,7 @@
return nbyte;
}
-static ssize_t
+ssize_t
fsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
Index: stand/mips/beri/boot2/Makefile
===================================================================
--- stand/mips/beri/boot2/Makefile
+++ stand/mips/beri/boot2/Makefile
@@ -41,7 +41,8 @@
boot2.c \
altera_jtag_uart.c \
cfi.c \
- sdcard.c
+ sdcard.c \
+ ufsread.c
AFLAGS= -G0
@@ -56,10 +57,13 @@
-G0 \
-L${.CURDIR}
+.PATH: ${SASRC}
.PATH: ${BOOTSRC}/mips/beri/common
CFLAGS+= -I${BOOTSRC}/mips/beri/common
+CFLAGS.ufsread.c= -DUFS_SMALL_CGBASE
-flashboot.elf: relocate.o start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o
+flashboot.elf: relocate.o start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o \
+ ufsread.o
${CC} ${LDFLAGS} -T ${.CURDIR}/flashboot.ldscript -o ${.TARGET} \
${.ALLSRC} ${LIBSA}
flashboot: flashboot.elf
@@ -67,7 +71,7 @@
flashboot.md5: flashboot
md5 flashboot > flashboot.md5
-jtagboot: start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o
+jtagboot: start.o boot2.o altera_jtag_uart.o cfi.o sdcard.o ufsread.o
${CC} ${LDFLAGS} -T ${.CURDIR}/jtagboot.ldscript -o ${.TARGET} \
${.ALLSRC} ${LIBSA}
jtagboot.md5: jtagboot
Index: stand/mips/beri/boot2/boot2.c
===================================================================
--- stand/mips/beri/boot2/boot2.c
+++ stand/mips/beri/boot2/boot2.c
@@ -54,6 +54,8 @@
#include <machine/bootinfo.h>
#include <machine/elf.h>
+#include <ufs/ffs/fs.h>
+
#include <stand.h>
#include <stdarg.h>
#include <string.h>
@@ -66,6 +68,7 @@
#include "paths.h"
#include "rbx.h"
+#include "ufsread.h"
static int beri_argc;
static const char **beri_argv, **beri_envv;
@@ -138,17 +141,15 @@
static uint8_t ioctrl = IO_KEYBOARD;
void putchar(int);
+int dskread(void *, unsigned, unsigned);
+
static void boot_fromdram(void);
static void boot_fromfs(void);
static void load(void);
static int parse(void);
-static int dskread(void *, unsigned, unsigned);
static int xputc(int);
static int xgetc(int);
-#define UFS_SMALL_CGBASE
-#include "ufsread.c"
-
static struct dmadat __dmadat;
static inline int
@@ -543,7 +544,7 @@
}
}
-static int
+int
dskread(void *buf, unsigned lba, unsigned nblk)
{
#if 0
Index: stand/powerpc/boot1.chrp/Makefile
===================================================================
--- stand/powerpc/boot1.chrp/Makefile
+++ stand/powerpc/boot1.chrp/Makefile
@@ -7,12 +7,12 @@
INSTALLFLAGS= -b
FILES= boot1.hfs
-SRCS= boot1.c ashldi3.c syncicache.c
+SRCS= boot1.c ashldi3.c syncicache.c ufsread.c
CFLAGS+=-I${LDRSRC}
LDFLAGS=-nostdlib -static -Wl,-N
-.PATH: ${SYSDIR}/libkern ${SRCTOP}/lib/libc/powerpc/gen ${.CURDIR}
+.PATH: ${SYSDIR}/libkern ${SASRC} ${SRCTOP}/lib/libc/powerpc/gen ${.CURDIR}
# The following inserts out objects into a template HFS
# created by generate-hfs.sh
Index: stand/powerpc/boot1.chrp/boot1.c
===================================================================
--- stand/powerpc/boot1.chrp/boot1.c
+++ stand/powerpc/boot1.chrp/boot1.c
@@ -24,7 +24,10 @@
#include <machine/stdarg.h>
#include <machine/md_var.h>
+#include <ufs/ffs/fs.h>
+
#include "paths.h"
+#include "ufsread.h"
#define BSIZEMAX 16384
@@ -48,13 +51,14 @@
static char blkbuf[BSIZEMAX];
static unsigned int fsblks;
-static uint32_t fs_off;
-
int main(int ac, char **av);
+int dskread(void *, u_int64_t, int);
+void memcpy(void *dst, const void *src, size_t len);
+int printf(const char *fmt, ...);
+int strcmp(const char *s1, const char *s2);
static void exit(int) __dead2;
static void load(const char *);
-static int dskread(void *, u_int64_t, int);
static void usage(void);
@@ -64,7 +68,6 @@
static int domount(const char *device, int quiet);
static void panic(const char *fmt, ...) __dead2;
-static int printf(const char *fmt, ...);
static int putchar(char c, void *arg);
static int vprintf(const char *fmt, va_list ap);
static int vsnprintf(char *str, size_t sz, const char *fmt, va_list ap);
@@ -364,7 +367,7 @@
*d++ = *s++;
}
-static void
+void
memcpy(void *dst, const void *src, size_t len)
{
bcopy(src, dst, len);
@@ -379,7 +382,7 @@
*p++ = 0;
}
-static int
+int
strcmp(const char *s1, const char *s2)
{
for (; *s1 == *s2 && *s1; s1++, s2++)
@@ -387,8 +390,6 @@
return ((u_char)*s1 - (u_char)*s2);
}
-#include "ufsread.c"
-
int
main(int ac, char **av)
{
@@ -540,7 +541,7 @@
ofw,NULL,0);
}
-static int
+int
dskread(void *buf, u_int64_t lba, int nblk)
{
/*
@@ -567,7 +568,7 @@
exit(1);
}
-static int
+int
printf(const char *fmt, ...)
{
va_list ap;
Index: stand/sparc64/boot1/Makefile
===================================================================
--- stand/sparc64/boot1/Makefile
+++ stand/sparc64/boot1/Makefile
@@ -5,7 +5,7 @@
PROG= boot1.elf
INTERNALPROG=
FILES?= boot1
-SRCS= _start.s boot1.c
+SRCS= _start.s boot1.c ufsread.c
CLEANFILES+=${FILES} boot1.aout
BOOTBLOCKBASE= 0x4000
@@ -15,6 +15,8 @@
CFLAGS+=-Os -I${LDRSRC}
LDFLAGS+=-Ttext ${BOOTBLOCKBASE} -Wl,-N
+.PATH: ${SASRC}
+
# Construct boot1. sunlabel expects it to contain zeroed-out space for the
# label, and to be of the correct size.
${FILES}: boot1.aout
Index: stand/sparc64/boot1/boot1.c
===================================================================
--- stand/sparc64/boot1/boot1.c
+++ stand/sparc64/boot1/boot1.c
@@ -24,7 +24,10 @@
#include <machine/elf.h>
#include <machine/stdarg.h>
+#include <ufs/ffs/fs.h>
+
#include "paths.h"
+#include "ufsread.h"
#define READ_BUF_SIZE 8192
@@ -44,9 +47,12 @@
static ofwh_t bootdev;
-static uint32_t fs_off;
-
int main(int ac, char **av);
+int dskread(void *buf, u_int64_t lba, int nblk);
+void memcpy(void *dst, const void *src, size_t len);
+int printf(const char *fmt, ...);
+int strcmp(const char *s1, const char *s2);
+
static void exit(int) __dead2;
static void usage(void);
@@ -61,10 +67,8 @@
static void bzero(void *b, size_t len);
static int domount(const char *device);
-static int dskread(void *buf, u_int64_t lba, int nblk);
static void panic(const char *fmt, ...) __dead2;
-static int printf(const char *fmt, ...);
static int putchar(char c, void *arg);
static int vprintf(const char *fmt, va_list ap);
static int vsnprintf(char *str, size_t sz, const char *fmt, va_list ap);
@@ -293,7 +297,7 @@
*d++ = *s++;
}
-static void
+void
memcpy(void *dst, const void *src, size_t len)
{
@@ -309,7 +313,7 @@
*p++ = 0;
}
-static int
+int
strcmp(const char *s1, const char *s2)
{
@@ -448,8 +452,6 @@
#else
-#include "ufsread.c"
-
static struct dmadat __dmadat;
static void
@@ -514,7 +516,7 @@
return (0);
}
-static int
+int
dskread(void *buf, u_int64_t lba, int nblk)
{
@@ -542,7 +544,7 @@
exit(1);
}
-static int
+int
printf(const char *fmt, ...)
{
va_list ap;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 30, 11:46 PM (2 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32545346
Default Alt Text
D14377.diff (16 KB)
Attached To
Mode
D14377: Make it so ufsread.c is linked rather than included.
Attached
Detach File
Event Timeline
Log In to Comment