hello hpa, rebased my branch, please pull latest git pull git://brane.itp.tuwien.ac.at/~mattems/klibc.git maks for the following shortlog maximilian attems (6): fstype: add squashfs v3 support reiser4_fs.h: add attribute packed to reiser4_master_sb fstype: add ext4 support .gitignore: add subdir specific entries usr/klibc/Kbuild: beautify klibc build fstype: add gfs2 support the diffstat is .gitignore | 2 usr/dash/.gitignore | 17 ++++++ usr/gzip/.gitignore | 3 + usr/kinit/.gitignore | 3 + usr/kinit/fstype/ext3_fs.h | 4 + usr/kinit/fstype/fstype.c | 51 ++++++++++++++++++ usr/kinit/fstype/gfs2_fs.h | 56 ++++++++++++++++++++ usr/kinit/fstype/reiser4_fs.h | 2 usr/kinit/fstype/squashfs_fs.h | 41 ++++++++++++++ usr/klibc/.gitignore | 9 +++ usr/klibc/Kbuild | 109 ++++++++++++++++++++------------------- usr/klibc/socketcalls/.gitignore | 3 + usr/klibc/syscalls/.gitignore | 6 ++ 13 files changed, 254 insertions(+), 52 deletions(-) leaves currently only ocfs2 on my fstype todo list. -- maks commit 8094659e23e6c25293868b58c485b7b21cf314a1 Author: maximilian attems <max at stro.at> Date: Wed Aug 15 13:28:32 2007 +0200 fstype: add gfs2 support ./gfs2_mkfs -t mycluster:mygfs -p lock_dlm -j 2 /dev/mapper/nancy_vg1-gfs2 ./usr/kinit/fstype/static/fstype /dev/mapper/nancy_vg1-gfs2 FSTYPE=gfs2 FSSIZE=0 set the fssize to zero for now. Signed-off-by: maximilian attems <max at stro.at> diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c index 3465676..197a259 100644 --- a/usr/kinit/fstype/fstype.c +++ b/usr/kinit/fstype/fstype.c @@ -31,6 +31,7 @@ #include "lvm2_sb.h" #include "iso9660_sb.h" #include "squashfs_fs.h" +#include "gfs2_fs.h" /* * Slightly cleaned up version of jfs_superblock to @@ -297,6 +298,20 @@ static int squashfs_image(const void *buf, unsigned long long *blocks) return 0; } +static int gfs2_image(const void *buf, unsigned long long *bytes) +{ + const struct gfs2_sb *sb + (const struct gfs2_sb *)buf; + + if (__be32_to_cpu(sb->sb_header.mh_magic) == GFS2_MAGIC + && (__be32_to_cpu(sb->sb_fs_format) == GFS2_FORMAT_FS + || __be32_to_cpu(sb->sb_fs_format) == GFS2_FORMAT_MULTI)) { + *bytes = 0; /* cpu_to_be32(sb->sb_bsize) * ?; */ + return 1; + } + return 0; +} + struct imagetype { off_t block; const char name[12]; @@ -328,6 +343,7 @@ static struct imagetype images[] = { {8, "reiserfs", reiserfs_image}, {64, "reiserfs", reiserfs_image}, {64, "reiser4", reiser4_image}, + {64, "gfs2", gfs2_image}, {32, "jfs", jfs_image}, {32, "iso9660", iso_image}, {0, "luks", luks_image}, diff --git a/usr/kinit/fstype/gfs2_fs.h b/usr/kinit/fstype/gfs2_fs.h new file mode 100644 index 0000000..028e0c9 --- /dev/null +++ b/usr/kinit/fstype/gfs2_fs.h @@ -0,0 +1,56 @@ +#ifndef __GFS2_FS_H +#define __GFS2_FS_H + +#define GFS2_MAGIC 0x01161970 +#define GFS2_FORMAT_FS 1801 +#define GFS2_FORMAT_MULTI 1900 + + +/* + * An on-disk inode number + */ +struct gfs2_inum { + __be64 no_formal_ino; + __be64 no_addr; +}; + +/* + * Generic metadata head structure + * Every inplace buffer logged in the journal must start with this. + */ +struct gfs2_meta_header { + uint32_t mh_magic; + uint32_t mh_type; + uint64_t __pad0; /* Was generation number in gfs1 */ + uint32_t mh_format; + uint32_t __pad1; /* Was incarnation number in gfs1 */ +}; + +/* Requirement: GFS2_LOCKNAME_LEN % 8 == 0 + * Includes: the fencing zero at the end */ +#define GFS2_LOCKNAME_LEN 64 + +/* + * super-block structure + */ +struct gfs2_sb { + struct gfs2_meta_header sb_header; + + uint32_t sb_fs_format; + uint32_t sb_multihost_format; + uint32_t __pad0; /* Was superblock flags in gfs1 */ + + uint32_t sb_bsize; + uint32_t sb_bsize_shift; + uint32_t __pad1; /* Was journal segment size in gfs1 */ + + struct gfs2_inum sb_master_dir; /* Was jindex dinode in gfs1 */ + struct gfs2_inum __pad2; /* Was rindex dinode in gfs1 */ + struct gfs2_inum sb_root_dir; + + char sb_lockproto[GFS2_LOCKNAME_LEN]; + char sb_locktable[GFS2_LOCKNAME_LEN]; + /* In gfs1, quota and license dinodes followed */ +} __attribute__ ((__packed__)); + +#endif /* __GFS2_FS_H */ commit 98154fb9583ad099f4b1f82e717478001e2e90b1 Author: maximilian attems <max at stro.at> Date: Wed Aug 15 11:18:18 2007 +0200 usr/klibc/Kbuild: beautify klibc build alphanumerically sort the klib-y entries. should make it easier to add specific functions in specific trees without conflicting against each other. checked before and after patch with: max at nancy:~/src/klibc$ find usr/klibc/ -name *.o | wc -l 375 max at nancy:~/src/klibc$ find usr/klibc/ -name *.o | wc -l 375 Signed-off-by: maximilian attems <max at stro.at> diff --git a/usr/klibc/Kbuild b/usr/klibc/Kbuild index ad72116..512f841 100644 --- a/usr/klibc/Kbuild +++ b/usr/klibc/Kbuild @@ -5,57 +5,64 @@ # Tell that we are building klibc export klibc-build := y -klib-y := vsnprintf.o snprintf.o vsprintf.o sprintf.o \ - asprintf.o vasprintf.o \ - vsscanf.o sscanf.o ctypes.o \ - strntoumax.o strntoimax.o \ - atoi.o atol.o atoll.o \ - strtol.o strtoll.o strtoul.o strtoull.o \ - strtoimax.o strtoumax.o \ - globals.o exit.o atexit.o onexit.o \ - execl.o execle.o execv.o execvpe.o execvp.o execlp.o execlpe.o \ - fork.o vfork.o wait.o wait3.o waitpid.o system.o \ - setpgrp.o getpgrp.o daemon.o \ - printf.o vprintf.o fprintf.o vfprintf.o perror.o \ - statfs.o fstatfs.o umount.o \ - creat.o open.o openat.o open_cloexec.o \ - fopen.o fread.o fread2.o fgetc.o fgets.o \ - fwrite.o fwrite2.o fputc.o fputs.o puts.o putchar.o \ - sleep.o usleep.o strtotimespec.o strtotimeval.o \ - raise.o abort.o assert.o alarm.o pause.o \ - __signal.o sysv_signal.o bsd_signal.o siglist.o sigabbrev.o \ - siglongjmp.o \ - sigaction.o sigpending.o sigprocmask.o sigsuspend.o \ - pselect.o ppoll.o \ - brk.o sbrk.o malloc.o realloc.o calloc.o \ - mmap.o shm_open.o shm_unlink.o \ - memcpy.o memcmp.o memset.o memccpy.o memmem.o memswap.o \ - memmove.o memchr.o memrchr.o \ - strcasecmp.o strncasecmp.o strndup.o strerror.o strsignal.o \ - strcat.o strchr.o strcmp.o strcpy.o strdup.o strlen.o strnlen.o \ - strncat.o strlcpy.o strlcat.o \ - strstr.o strncmp.o strncpy.o strrchr.o \ - strxspn.o strspn.o strcspn.o strpbrk.o strsep.o strtok.o \ - fnmatch.o \ - gethostname.o getdomainname.o getcwd.o \ - seteuid.o setegid.o \ - getenv.o setenv.o putenv.o __put_env.o unsetenv.o \ - clearenv.o nullenv.o \ - getopt.o getopt_long.o readdir.o remove.o \ - syslog.o closelog.o pty.o getpt.o isatty.o reboot.o \ - time.o utime.o llseek.o nice.o getpriority.o \ - qsort.o bsearch.o \ - lrand48.o jrand48.o mrand48.o nrand48.o srand48.o seed48.o \ - inet/inet_ntoa.o inet/inet_aton.o inet/inet_addr.o \ - inet/inet_ntop.o inet/inet_pton.o inet/bindresvport.o \ - send.o recv.o \ - ctype/isalnum.o ctype/isalpha.o ctype/isascii.o \ - ctype/isblank.o ctype/iscntrl.o ctype/isdigit.o \ - ctype/isgraph.o ctype/islower.o ctype/isprint.o \ - ctype/ispunct.o ctype/isspace.o ctype/isupper.o \ - ctype/isxdigit.o ctype/tolower.o ctype/toupper.o \ - userdb/getgrgid.o userdb/getgrnam.o userdb/getpwnam.o \ - userdb/getpwuid.o userdb/root_group.o userdb/root_user.o +klib-y := abort.o alarm.o asprintf.o assert.o \ + atexit.o atoi.o atoll.o atol.o brk.o \ + bsd_signal.o bsearch.o calloc.o clearenv.o \ + closelog.o creat.o ctype/isalnum.o \ + ctype/isalpha.o ctype/isascii.o \ + ctype/isblank.o ctype/iscntrl.o \ + ctype/isdigit.o ctype/isgraph.o \ + ctype/islower.o ctype/isprint.o \ + ctype/ispunct.o ctype/isspace.o \ + ctype/isupper.o ctype/isxdigit.o \ + ctypes.o ctype/tolower.o ctype/toupper.o \ + daemon.o execle.o execl.o execlpe.o \ + execlp.o execv.o execvpe.o execvp.o \ + exit.o fgetc.o fgets.o fnmatch.o fopen.o \ + fork.o fprintf.o fputc.o fputs.o \ + fread2.o fread.o fstatfs.o fwrite2.o \ + fwrite.o getcwd.o getdomainname.o \ + getenv.o gethostname.o getopt_long.o \ + getopt.o getpgrp.o getpriority.o getpt.o \ + globals.o inet/bindresvport.o \ + inet/inet_addr.o inet/inet_aton.o \ + inet/inet_ntoa.o inet/inet_ntop.o \ + inet/inet_pton.o isatty.o jrand48.o \ + llseek.o lrand48.o malloc.o memccpy.o \ + memchr.o memcmp.o memcpy.o memmem.o \ + memmove.o memrchr.o memset.o memswap.o \ + mmap.o mrand48.o nice.o nrand48.o \ + nullenv.o onexit.o openat.o \ + open_cloexec.o open.o pause.o perror.o \ + ppoll.o printf.o pselect.o \ + pty.o putchar.o __put_env.o putenv.o \ + puts.o qsort.o raise.o readdir.o \ + realloc.o reboot.o recv.o remove.o \ + sbrk.o seed48.o send.o setegid.o \ + setenv.o seteuid.o setpgrp.o shm_open.o \ + shm_unlink.o sigabbrev.o sigaction.o \ + siglist.o siglongjmp.o __signal.o \ + sigpending.o sigprocmask.o sigsuspend.o \ + sleep.o snprintf.o sprintf.o srand48.o \ + sscanf.o statfs.o strcasecmp.o strcat.o \ + strchr.o strcmp.o strcpy.o strcspn.o \ + strdup.o strerror.o strlcat.o strlcpy.o \ + strlen.o strncasecmp.o strncat.o \ + strncmp.o strncpy.o strndup.o strnlen.o \ + strntoimax.o strntoumax.o strpbrk.o \ + strrchr.o strsep.o strsignal.o strspn.o \ + strstr.o strtoimax.o strtok.o strtoll.o \ + strtol.o strtotimespec.o strtotimeval.o \ + strtoull.o strtoul.o strtoumax.o \ + strxspn.o syslog.o system.o \ + sysv_signal.o time.o umount.o unsetenv.o \ + userdb/getgrgid.o userdb/getgrnam.o \ + userdb/getpwnam.o userdb/getpwuid.o \ + userdb/root_group.o userdb/root_user.o \ + usleep.o utime.o vasprintf.o vfork.o \ + vfprintf.o vprintf.o vsnprintf.o \ + vsprintf.o vsscanf.o wait3.o wait.o \ + waitpid.o klib-$(CONFIG_KLIBC_ERRLIST) += errlist.o commit d8db398b3f0b893522bf12605e3095789eede748 Author: maximilian attems <max at stro.at> Date: Wed Aug 15 10:58:13 2007 +0200 .gitignore: add subdir specific entries ignore * toplevel: generated *.g and .*.cmd files * .S autognerated files in klibc/{socketcalls,syscalls}/ + targets * dash: generates a bunch of specific .c and .h files + targets * klibc targets * gzip targets * kinit targets * klibc: errlist.c, sha1hash git status after a build is now down to < 25 lines. :) Signed-off-by: maximilian attems <max at stro.at> diff --git a/.gitignore b/.gitignore index 1ab997c..d67ae65 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ # *.o *.o.cmd +.*.cmd +*.g diff --git a/usr/dash/.gitignore b/usr/dash/.gitignore new file mode 100644 index 0000000..bf6dab5 --- /dev/null +++ b/usr/dash/.gitignore @@ -0,0 +1,17 @@ +.builtins.def.d +arith.c +arith.h +builtins.c +builtins.def +builtins.h +init.c +mkinit +mknodes +mksyntax +nodes.c +nodes.h +sh +sh.shared +syntax.c +syntax.h +token.h diff --git a/usr/gzip/.gitignore b/usr/gzip/.gitignore new file mode 100644 index 0000000..b665e3f --- /dev/null +++ b/usr/gzip/.gitignore @@ -0,0 +1,3 @@ +gunzip +gzip +zcat diff --git a/usr/kinit/.gitignore b/usr/kinit/.gitignore new file mode 100644 index 0000000..f5a4f24 --- /dev/null +++ b/usr/kinit/.gitignore @@ -0,0 +1,3 @@ +lib.a +kinit +kinit.shared diff --git a/usr/klibc/.gitignore b/usr/klibc/.gitignore new file mode 100644 index 0000000..7cb400a --- /dev/null +++ b/usr/klibc/.gitignore @@ -0,0 +1,9 @@ +errlist.c +.interp.o.d +klibc*.so +klib.list +.klib.list.cmd +libc.a +libc.so +libc.so.hash +sha1hash diff --git a/usr/klibc/socketcalls/.gitignore b/usr/klibc/socketcalls/.gitignore new file mode 100644 index 0000000..60e5b1d --- /dev/null +++ b/usr/klibc/socketcalls/.gitignore @@ -0,0 +1,3 @@ +*.S +SOCKETCALLS.i +socketcalls.mk diff --git a/usr/klibc/syscalls/.gitignore b/usr/klibc/syscalls/.gitignore new file mode 100644 index 0000000..d255e6e --- /dev/null +++ b/usr/klibc/syscalls/.gitignore @@ -0,0 +1,6 @@ +*.S +SYSCALLS.i +syscalls.mk +syscalls.nrs +typesize.bin +typesize.c commit cfbff10509b1ee6964339684e739d6f086e44b5e Author: maximilian attems <max at stro.at> Date: Sat Aug 11 12:34:01 2007 +0200 fstype: add ext4 support ext3_fs.h: add the new flags. one still need some oot e2fsprogs, but ext4dev is in linus ./misc/mke2fs -j /dev/mapper/nancy_vg1-ext4 mount /dev/mapper/nancy_vg1-ext4 /mnt -t ext4dev -o extents touch /mnt/oooo ./src/klibc/usr/kinit/fstype/static/fstype /dev/mapper/nancy_vg1-ext4 FSTYPE=ext4dev FSSIZE=314572800 will probably once get renamed to ext4, but for now module is ext4dev egrep ext /proc/filesystems ext3 ext4dev Signed-off-by: maximilian attems <max at stro.at> diff --git a/usr/kinit/fstype/ext3_fs.h b/usr/kinit/fstype/ext3_fs.h index e3deb72..12d64fe 100644 --- a/usr/kinit/fstype/ext3_fs.h +++ b/usr/kinit/fstype/ext3_fs.h @@ -7,6 +7,10 @@ #define EXT3_SUPER_MAGIC 0xEF53 #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 +#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 +#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040 +#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 +#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 /* * Structure of the super block diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c index 015b7a0..3465676 100644 --- a/usr/kinit/fstype/fstype.c +++ b/usr/kinit/fstype/fstype.c @@ -107,6 +107,25 @@ static int minix_image(const void *buf, unsigned long long *bytes) return 0; } +static int ext4_image(const void *buf, unsigned long long *bytes) +{ + const struct ext3_super_block *sb + (const struct ext3_super_block *)buf; + + if (sb->s_magic == __cpu_to_le16(EXT2_SUPER_MAGIC) + && (sb->s_feature_incompat + & __cpu_to_le32(EXT3_FEATURE_INCOMPAT_EXTENTS) + || sb->s_feature_incompat + & __cpu_to_le32(EXT4_FEATURE_INCOMPAT_64BIT) + || sb->s_feature_incompat + & __cpu_to_le32(EXT4_FEATURE_INCOMPAT_MMP))) { + *bytes = (unsigned long long)__le32_to_cpu(sb->s_blocks_count) + << (10 + __le32_to_cpu(sb->s_log_block_size)); + return 1; + } + return 0; +} + static int ext3_image(const void *buf, unsigned long long *bytes) { const struct ext3_super_block *sb @@ -302,6 +321,7 @@ static struct imagetype images[] = { {0, "romfs", romfs_image}, {0, "xfs", xfs_image}, {0, "squashfs", squashfs_image}, + {1, "ext4dev", ext4_image}, {1, "ext3", ext3_image}, {1, "ext2", ext2_image}, {1, "minix", minix_image}, commit bdd1ca2344edd06c873980c7023b8be006abd4f0 Author: maximilian attems <max at stro.at> Date: Sat Aug 11 11:25:15 2007 +0200 reiser4_fs.h: add attribute packed to reiser4_master_sb forgot to add it while working on the reiser4_fs.h cleanup Signed-off-by: maximilian attems <max at stro.at> diff --git a/usr/kinit/fstype/reiser4_fs.h b/usr/kinit/fstype/reiser4_fs.h index caca897..fb2fa12 100644 --- a/usr/kinit/fstype/reiser4_fs.h +++ b/usr/kinit/fstype/reiser4_fs.h @@ -24,7 +24,7 @@ struct reiser4_master_sb { /* Filesystem label in use. */ char ms_label[SS_MAGIC_SIZE]; -}; +} __attribute__ ((packed)); #define REISER4_SUPER_MAGIC_STRING "ReIsEr4" commit 4040381e3ef98c6fd5dedf26ebfcb4db79a74263 Author: maximilian attems <max at stro.at> Date: Sat Aug 11 11:17:11 2007 +0200 fstype: add squashfs v3 support squashfs although not in mainline is a widely used ro fs. mksquashfs /tmp bla > /dev/null ./usr/kinit/fstype/static/fstype ~/foo1 FSTYPE=squashfs FSSIZE=1951042 cleaned up version of an ubuntu patch against 1.1.15 klibc. Signed-off-by: maximilian attems <max at stro.at> diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c index 52354f0..015b7a0 100644 --- a/usr/kinit/fstype/fstype.c +++ b/usr/kinit/fstype/fstype.c @@ -30,6 +30,7 @@ #include "luks_fs.h" #include "lvm2_sb.h" #include "iso9660_sb.h" +#include "squashfs_fs.h" /* * Slightly cleaned up version of jfs_superblock to @@ -264,6 +265,19 @@ static int iso_image(const void *buf, unsigned long long *blocks) return 0; } +static int squashfs_image(const void *buf, unsigned long long *blocks) +{ + const struct squashfs_super_block *sb + (const struct squashfs_super_block *)buf; + + if (sb->s_magic == SQUASHFS_MAGIC + || sb->s_magic == SQUASHFS_MAGIC_SWAP) { + *blocks = (unsigned long long) sb->bytes_used; + return 1; + } + return 0; +} + struct imagetype { off_t block; const char name[12]; @@ -287,6 +301,7 @@ static struct imagetype images[] = { {0, "cramfs", cramfs_image}, {0, "romfs", romfs_image}, {0, "xfs", xfs_image}, + {0, "squashfs", squashfs_image}, {1, "ext3", ext3_image}, {1, "ext2", ext2_image}, {1, "minix", minix_image}, diff --git a/usr/kinit/fstype/squashfs_fs.h b/usr/kinit/fstype/squashfs_fs.h new file mode 100644 index 0000000..017b8a5 --- /dev/null +++ b/usr/kinit/fstype/squashfs_fs.h @@ -0,0 +1,41 @@ +#ifndef __SQUASHFS_FS_H +#define __SQUASHFS_FS_H + +/* + * Squashfs + */ + +#define SQUASHFS_MAGIC 0x73717368 +#define SQUASHFS_MAGIC_SWAP 0x68737173 + +/* definitions for structures on disk */ +struct squashfs_super_block { + unsigned int s_magic; + unsigned int inodes; + unsigned int bytes_used_2; + unsigned int uid_start_2; + unsigned int guid_start_2; + unsigned int inode_table_start_2; + unsigned int directory_table_start_2; + unsigned int s_major:16; + unsigned int s_minor:16; + unsigned int block_size_1:16; + unsigned int block_log:16; + unsigned int flags:8; + unsigned int no_uids:8; + unsigned int no_guids:8; + unsigned int mkfs_time /* time of filesystem creation */; + long long root_inode; + unsigned int block_size; + unsigned int fragments; + unsigned int fragment_table_start_2; + long long bytes_used; + long long uid_start; + long long guid_start; + long long inode_table_start; + long long directory_table_start; + long long fragment_table_start; + long long lookup_table_start; +} __attribute__ ((packed)); + +#endif /* __SQUASHFS_FS_H */