[klibc] [git pull] small fixes, sh4, getruage() README's
maximilian attems
max at stro.at
Sun Apr 25 15:54:45 PDT 2010
hello hpa,
current patch queue for review, please pull:
git pull git://git.debian.org/users/maks/klibc.git maks
Aurelien Jarno (1):
[klibc] sh4: syscalls fixes
Benjamin Cama (1):
[klibc] fstype: btrfs size endianness fix
Thorsten Glaser (1):
[klibc] add getrusage()
maximilian attems (3):
[klibc] resume: silence warning on resume try
[klibc] bootp_packet.h minor stylistic fix
[klibc] fstype: list the includes in alphabetic order
git diff -M --stat --summary master...maks
usr/include/sys/resource.h | 2 ++
usr/kinit/fstype/fstype.c | 18 +++++++++---------
usr/kinit/ipconfig/bootp_packet.h | 2 +-
usr/kinit/resume/resumelib.c | 2 +-
usr/klibc/SYSCALLS.def | 3 ++-
usr/klibc/arch/sh/Kbuild | 2 +-
usr/klibc/arch/sh/pipe.S | 35 +++++++++++++++++++++++++++++++++++
usr/klibc/arch/sh/syscall.S | 14 +++++++-------
8 files changed, 58 insertions(+), 20 deletions(-)
create mode 100644 usr/klibc/arch/sh/pipe.S
thanks
--
maks
commit a1ffdac59c837f18a35dc9d3f3a0f4f738cb61e8
Author: Benjamin Cama <benoar at free.fr>
Date: Sun Apr 25 22:39:05 2010 +0200
[klibc] fstype: btrfs size endianness fix
Tested OK on both little endian (amd64) and big endian (powerpc).
Signed-off-by: Benjamin Cama <benoar at free.fr>
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c
index d57b937..451d60c 100644
--- a/usr/kinit/fstype/fstype.c
+++ b/usr/kinit/fstype/fstype.c
@@ -460,7 +460,7 @@ static int btrfs_image(const void *buf, unsigned long long *bytes)
(const struct btrfs_super_block *)buf;
if (!memcmp(sb->magic, BTRFS_MAGIC, BTRFS_MAGIC_L)) {
- *bytes = sb->total_bytes;
+ *bytes = (unsigned long long)__le64_to_cpu(sb->total_bytes);
return 1;
}
return 0;
commit 30c21662ec3c036aa551dd75375a4d8d7e008ad6
Author: Aurelien Jarno <aurel32 at debian.org>
Date: Fri Apr 16 18:17:58 2010 +0200
[klibc] sh4: syscalls fixes
Using the patch from bug #574834 klibc now builds, but does not work. It
assumes that the kernel returns the result of the syscalls in register
r3, while it behaves like a normal call, with the results in register
r0.
Also the pipe syscall needs a special handling as on some other
architectures, the structure passed in argument is not filled, instead
the two fd are returned in r0 and r1.
The patch below fixes the problem. It has been tested by creating an
initrd with initramfs and booting the system with it.
Closes: #578076
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
index e395119..437dfa7 100644
--- a/usr/klibc/SYSCALLS.def
+++ b/usr/klibc/SYSCALLS.def
@@ -115,7 +115,7 @@ int fchmod(int, mode_t);
int mkdir(const char *, mode_t);
<?> int mkdirat(int, const char *, const char *, mode_t);
int rmdir(const char *);
-<!alpha,ia64,mips,mips64,sparc,sparc64> int pipe(int *);
+<!alpha,ia64,mips,mips64,sh,sparc,sparc64> int pipe(int *);
mode_t umask(mode_t);
int chroot(const char *);
int symlink(const char *, const char *);
diff --git a/usr/klibc/arch/sh/Kbuild b/usr/klibc/arch/sh/Kbuild
index ab7ad5a..29b606a 100644
--- a/usr/klibc/arch/sh/Kbuild
+++ b/usr/klibc/arch/sh/Kbuild
@@ -2,7 +2,7 @@
# klibc files for sh
#
-klib-y := setjmp.o syscall.o
+klib-y := pipe.o setjmp.o syscall.o
always := crt0.o
targets := crt0.o
diff --git a/usr/klibc/arch/sh/pipe.S b/usr/klibc/arch/sh/pipe.S
new file mode 100644
index 0000000..01b055b
--- /dev/null
+++ b/usr/klibc/arch/sh/pipe.S
@@ -0,0 +1,35 @@
+/*
+ * arch/sh/pipe.S
+ *
+ * The pipe system call is special on sh: it returns
+ * the two file descriptors in r0 and r1.
+ */
+
+#include <asm/unistd.h>
+
+ .section ".text.syscall","ax"
+ .align 2
+ .globl pipe
+ .type pipe, at function
+pipe:
+ mov #__NR_pipe, r3
+ trapa #0x10
+ mov.l 1f,r2
+ cmp/hs r0,r2
+ bt/s 3f
+ neg r0,r2
+ mov.l 2f,r3
+ mov.l r2, at r3
+ rts
+ mov #-1,r0
+3:
+ mov.l r0, @r4
+ mov.l r1, @(4, r4)
+ rts
+ mov #0,r0
+
+ .align 2
+1: .long -4096 /* Errno limit */
+2: .long errno
+
+ .size pipe,.-pipe
diff --git a/usr/klibc/arch/sh/syscall.S b/usr/klibc/arch/sh/syscall.S
index f5f85cc..77245b7 100644
--- a/usr/klibc/arch/sh/syscall.S
+++ b/usr/klibc/arch/sh/syscall.S
@@ -5,7 +5,7 @@
* r4..r7 contain arguments 0-3 per the standard calling convention,
* and arguments 4-5 are passed in r0 and r1.
*
- * The return value is in r3 rather than standard r0.
+ * The return value is in r0.
*/
.section ".text.syscall","ax"
@@ -16,17 +16,17 @@ __syscall_common:
mov.l @(0,sp),r0
mov.l @(4,sp),r1
trapa #0x15
- mov.l 1f,r0
- cmp/hs r0,r3
+ mov.l 1f,r1
+ cmp/hs r0,r1
bt/s 3f
- neg r3,r4
- mov.l 2f,r5
- mov.l r4, at r5
+ neg r0,r1
+ mov.l 2f,r2
+ mov.l r1, at r2
rts
mov #-1,r0
3:
rts
- mov r3,r0
+ nop
.align 2
1: .long -4096 /* Errno limit */
commit e99c86408fa88b7a8740ea02a8157f71a14ec2ba
Author: maximilian attems <max at stro.at>
Date: Sat Apr 10 16:24:52 2010 +0200
[klibc] fstype: list the includes in alphabetic order
currently there is no order.
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c
index 6aa82fc..d57b937 100644
--- a/usr/kinit/fstype/fstype.c
+++ b/usr/kinit/fstype/fstype.c
@@ -23,20 +23,20 @@
#define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
-#include "romfs_fs.h"
+#include "btrfs.h"
#include "cramfs_fs.h"
-#include "minix_fs.h"
#include "ext2_fs.h"
#include "ext3_fs.h"
-#include "xfs_sb.h"
+#include "gfs2_fs.h"
+#include "iso9660_sb.h"
#include "luks_fs.h"
#include "lvm2_sb.h"
-#include "iso9660_sb.h"
-#include "squashfs_fs.h"
-#include "gfs2_fs.h"
-#include "ocfs2_fs.h"
+#include "minix_fs.h"
#include "nilfs_fs.h"
-#include "btrfs.h"
+#include "ocfs2_fs.h"
+#include "romfs_fs.h"
+#include "squashfs_fs.h"
+#include "xfs_sb.h"
/*
* Slightly cleaned up version of jfs_superblock to
commit 5d3b7024db283d2518eb60718768b05638de3698
Author: maximilian attems <max at stro.at>
Date: Sat Apr 10 16:22:55 2010 +0200
[klibc] bootp_packet.h minor stylistic fix
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/kinit/ipconfig/bootp_packet.h b/usr/kinit/ipconfig/bootp_packet.h
index 3525ec3..6016e5f 100644
--- a/usr/kinit/ipconfig/bootp_packet.h
+++ b/usr/kinit/ipconfig/bootp_packet.h
@@ -28,4 +28,4 @@ struct bootp_hdr {
/* 312 bytes of extensions */
};
-#endif
+#endif /* BOOTP_PACKET_H */
commit 7416d9a51082b9ecd322d71bd2f96597195e141a
Author: maximilian attems <max at stro.at>
Date: Mon Apr 5 04:18:09 2010 +0200
[klibc] resume: silence warning on resume try
We most propably didn't hibernate in the first place.
s/fprintf/dprintf/
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/kinit/resume/resumelib.c b/usr/kinit/resume/resumelib.c
index 5233e7e..4a615f0 100644
--- a/usr/kinit/resume/resumelib.c
+++ b/usr/kinit/resume/resumelib.c
@@ -77,7 +77,7 @@ int resume(const char *resume_file, unsigned long long resume_offset)
failure:
if (powerfd >= 0)
close(powerfd);
- fprintf(stderr, "kinit: No resume image, doing normal boot...\n");
+ dprintf(stderr, "kinit: No resume image, doing normal boot...\n");
return -1;
fail_r:
commit 8d38b56e6f2c9dac342df3de919775cc38eba603
Author: Thorsten Glaser <tg at mirbsd.de>
Date: Sat Mar 13 19:36:33 2010 +0100
[klibc] add getrusage()
we define rusage, but had no way to see this stats.
allows to compile mksh against klibc.
Signed-off-by: maximilian attems <max at stro.at>
diff --git a/usr/include/sys/resource.h b/usr/include/sys/resource.h
index 41cefb4..5d8bd52 100644
--- a/usr/include/sys/resource.h
+++ b/usr/include/sys/resource.h
@@ -12,4 +12,6 @@
__extern int getpriority(int, int);
__extern int setpriority(int, int, int);
+__extern int getrusage(int, struct rusage *);
+
#endif /* _SYS_RESOURCE_H */
diff --git a/usr/klibc/SYSCALLS.def b/usr/klibc/SYSCALLS.def
index f81452c..e395119 100644
--- a/usr/klibc/SYSCALLS.def
+++ b/usr/klibc/SYSCALLS.def
@@ -47,6 +47,7 @@ int execve(const char *, char * const *, char * const *);
<alpha,ia64> int getpriority(int, int);
<!alpha,ia64> int getpriority::__getpriority(int, int);
int setpriority(int, int, int);
+int getrusage(int, struct rusage *);
int sched_setscheduler(pid_t, int, const struct sched_param *);
int sched_yield();
<i386> int prctl at varadic(int, unsigned long, unsigned long, unsigned long, unsigned long);
More information about the klibc
mailing list