diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index 82f542cbb..7b096dbc4 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -134,6 +134,10 @@ int mkdirat(int dirfd, const char *pathname, mode_t mode) 323,296 int fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags) 325,298 int fchmodat(int dirfd, const char *path, mode_t mode, int flags) 333,306 int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath) 329,302 +int fsetxattr(int, const char *, const void *, size_t, int) 228 +ssize_t fgetxattr(int, const char *, void *, size_t) 231 +ssize_t flistxattr(int, char *, size_t) 234 +int fremovexattr(int, const char *) 237 # file system int link (const char*, const char*) 9 @@ -159,7 +163,16 @@ int access(const char *, int) 33 int symlink(const char *, const char *) 83 int fchdir(int) 133 int truncate(const char*, off_t) 92 +int setxattr(const char *, const char *, const void *, size_t, int) 226 +int lsetxattr(const char *, const char *, const void *, size_t, int) 227 +ssize_t getxattr(const char *, const char *, void *, size_t) 229 +ssize_t lgetxattr(const char *, const char *, void *, size_t) 230 +ssize_t listxattr(const char *, char *, size_t) 232 +ssize_t llistxattr(const char *, char *, size_t) 233 +int removexattr(const char *, const char *) 235 +int lremovexattr(const char *, const char *) 236 int __statfs64:statfs64(const char *, size_t, struct statfs *) 266,268 + # time int pause () 29 int gettimeofday(struct timeval*, struct timezone*) 78 diff --git a/libc/arch-arm/syscalls.mk b/libc/arch-arm/syscalls.mk index b7a453252..b19fb68e8 100644 --- a/libc/arch-arm/syscalls.mk +++ b/libc/arch-arm/syscalls.mk @@ -85,6 +85,10 @@ syscall_src += arch-arm/syscalls/mkdirat.S syscall_src += arch-arm/syscalls/fchownat.S syscall_src += arch-arm/syscalls/fchmodat.S syscall_src += arch-arm/syscalls/renameat.S +syscall_src += arch-arm/syscalls/fsetxattr.S +syscall_src += arch-arm/syscalls/fgetxattr.S +syscall_src += arch-arm/syscalls/flistxattr.S +syscall_src += arch-arm/syscalls/fremovexattr.S syscall_src += arch-arm/syscalls/link.S syscall_src += arch-arm/syscalls/unlink.S syscall_src += arch-arm/syscalls/unlinkat.S @@ -107,6 +111,14 @@ syscall_src += arch-arm/syscalls/access.S syscall_src += arch-arm/syscalls/symlink.S syscall_src += arch-arm/syscalls/fchdir.S syscall_src += arch-arm/syscalls/truncate.S +syscall_src += arch-arm/syscalls/setxattr.S +syscall_src += arch-arm/syscalls/lsetxattr.S +syscall_src += arch-arm/syscalls/getxattr.S +syscall_src += arch-arm/syscalls/lgetxattr.S +syscall_src += arch-arm/syscalls/listxattr.S +syscall_src += arch-arm/syscalls/llistxattr.S +syscall_src += arch-arm/syscalls/removexattr.S +syscall_src += arch-arm/syscalls/lremovexattr.S syscall_src += arch-arm/syscalls/__statfs64.S syscall_src += arch-arm/syscalls/pause.S syscall_src += arch-arm/syscalls/gettimeofday.S diff --git a/libc/arch-arm/syscalls/fgetxattr.S b/libc/arch-arm/syscalls/fgetxattr.S new file mode 100644 index 000000000..32b8ef852 --- /dev/null +++ b/libc/arch-arm/syscalls/fgetxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(fgetxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_fgetxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(fgetxattr) diff --git a/libc/arch-arm/syscalls/flistxattr.S b/libc/arch-arm/syscalls/flistxattr.S new file mode 100644 index 000000000..0785e7775 --- /dev/null +++ b/libc/arch-arm/syscalls/flistxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(flistxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_flistxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(flistxattr) diff --git a/libc/arch-arm/syscalls/fremovexattr.S b/libc/arch-arm/syscalls/fremovexattr.S new file mode 100644 index 000000000..ae97d13d2 --- /dev/null +++ b/libc/arch-arm/syscalls/fremovexattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(fremovexattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_fremovexattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(fremovexattr) diff --git a/libc/arch-arm/syscalls/fsetxattr.S b/libc/arch-arm/syscalls/fsetxattr.S new file mode 100644 index 000000000..176cad99e --- /dev/null +++ b/libc/arch-arm/syscalls/fsetxattr.S @@ -0,0 +1,16 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(fsetxattr) + mov ip, sp + .save {r4, r5, r6, r7} + stmfd sp!, {r4, r5, r6, r7} + ldmfd ip, {r4, r5, r6} + ldr r7, =__NR_fsetxattr + swi #0 + ldmfd sp!, {r4, r5, r6, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(fsetxattr) diff --git a/libc/arch-arm/syscalls/getxattr.S b/libc/arch-arm/syscalls/getxattr.S new file mode 100644 index 000000000..18532ce71 --- /dev/null +++ b/libc/arch-arm/syscalls/getxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(getxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_getxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(getxattr) diff --git a/libc/arch-arm/syscalls/lgetxattr.S b/libc/arch-arm/syscalls/lgetxattr.S new file mode 100644 index 000000000..61fc09825 --- /dev/null +++ b/libc/arch-arm/syscalls/lgetxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(lgetxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_lgetxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(lgetxattr) diff --git a/libc/arch-arm/syscalls/listxattr.S b/libc/arch-arm/syscalls/listxattr.S new file mode 100644 index 000000000..6bbdb6ac0 --- /dev/null +++ b/libc/arch-arm/syscalls/listxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(listxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_listxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(listxattr) diff --git a/libc/arch-arm/syscalls/llistxattr.S b/libc/arch-arm/syscalls/llistxattr.S new file mode 100644 index 000000000..89682df63 --- /dev/null +++ b/libc/arch-arm/syscalls/llistxattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(llistxattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_llistxattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(llistxattr) diff --git a/libc/arch-arm/syscalls/lremovexattr.S b/libc/arch-arm/syscalls/lremovexattr.S new file mode 100644 index 000000000..62f6722dd --- /dev/null +++ b/libc/arch-arm/syscalls/lremovexattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(lremovexattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_lremovexattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(lremovexattr) diff --git a/libc/arch-arm/syscalls/lsetxattr.S b/libc/arch-arm/syscalls/lsetxattr.S new file mode 100644 index 000000000..bde7c249b --- /dev/null +++ b/libc/arch-arm/syscalls/lsetxattr.S @@ -0,0 +1,16 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(lsetxattr) + mov ip, sp + .save {r4, r5, r6, r7} + stmfd sp!, {r4, r5, r6, r7} + ldmfd ip, {r4, r5, r6} + ldr r7, =__NR_lsetxattr + swi #0 + ldmfd sp!, {r4, r5, r6, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(lsetxattr) diff --git a/libc/arch-arm/syscalls/removexattr.S b/libc/arch-arm/syscalls/removexattr.S new file mode 100644 index 000000000..1a44caf24 --- /dev/null +++ b/libc/arch-arm/syscalls/removexattr.S @@ -0,0 +1,14 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(removexattr) + .save {r4, r7} + stmfd sp!, {r4, r7} + ldr r7, =__NR_removexattr + swi #0 + ldmfd sp!, {r4, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(removexattr) diff --git a/libc/arch-arm/syscalls/setxattr.S b/libc/arch-arm/syscalls/setxattr.S new file mode 100644 index 000000000..e86fe9f4d --- /dev/null +++ b/libc/arch-arm/syscalls/setxattr.S @@ -0,0 +1,16 @@ +/* autogenerated by gensyscalls.py */ +#include +#include + +ENTRY(setxattr) + mov ip, sp + .save {r4, r5, r6, r7} + stmfd sp!, {r4, r5, r6, r7} + ldmfd ip, {r4, r5, r6} + ldr r7, =__NR_setxattr + swi #0 + ldmfd sp!, {r4, r5, r6, r7} + movs r0, r0 + bxpl lr + b __set_syscall_errno +END(setxattr) diff --git a/libc/arch-sh/syscalls.mk b/libc/arch-sh/syscalls.mk index 36cc5946c..48fb4d9e4 100644 --- a/libc/arch-sh/syscalls.mk +++ b/libc/arch-sh/syscalls.mk @@ -89,6 +89,10 @@ syscall_src += arch-sh/syscalls/mkdirat.S syscall_src += arch-sh/syscalls/fchownat.S syscall_src += arch-sh/syscalls/fchmodat.S syscall_src += arch-sh/syscalls/renameat.S +syscall_src += arch-sh/syscalls/fsetxattr.S +syscall_src += arch-sh/syscalls/fgetxattr.S +syscall_src += arch-sh/syscalls/flistxattr.S +syscall_src += arch-sh/syscalls/fremovexattr.S syscall_src += arch-sh/syscalls/link.S syscall_src += arch-sh/syscalls/unlink.S syscall_src += arch-sh/syscalls/unlinkat.S @@ -111,6 +115,14 @@ syscall_src += arch-sh/syscalls/access.S syscall_src += arch-sh/syscalls/symlink.S syscall_src += arch-sh/syscalls/fchdir.S syscall_src += arch-sh/syscalls/truncate.S +syscall_src += arch-sh/syscalls/setxattr.S +syscall_src += arch-sh/syscalls/lsetxattr.S +syscall_src += arch-sh/syscalls/getxattr.S +syscall_src += arch-sh/syscalls/lgetxattr.S +syscall_src += arch-sh/syscalls/listxattr.S +syscall_src += arch-sh/syscalls/llistxattr.S +syscall_src += arch-sh/syscalls/removexattr.S +syscall_src += arch-sh/syscalls/lremovexattr.S syscall_src += arch-sh/syscalls/__statfs64.S syscall_src += arch-sh/syscalls/pause.S syscall_src += arch-sh/syscalls/gettimeofday.S diff --git a/libc/arch-sh/syscalls/fgetxattr.S b/libc/arch-sh/syscalls/fgetxattr.S new file mode 100644 index 000000000..49b43deee --- /dev/null +++ b/libc/arch-sh/syscalls/fgetxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fgetxattr, @function + .globl fgetxattr + .align 4 + +fgetxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(4 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_fgetxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_fgetxattr_end: + rts + nop + + .align 2 +0: .long __NR_fgetxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/flistxattr.S b/libc/arch-sh/syscalls/flistxattr.S new file mode 100644 index 000000000..9b914241c --- /dev/null +++ b/libc/arch-sh/syscalls/flistxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type flistxattr, @function + .globl flistxattr + .align 4 + +flistxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(3 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_flistxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_flistxattr_end: + rts + nop + + .align 2 +0: .long __NR_flistxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/fremovexattr.S b/libc/arch-sh/syscalls/fremovexattr.S new file mode 100644 index 000000000..b6ebc8ec7 --- /dev/null +++ b/libc/arch-sh/syscalls/fremovexattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fremovexattr, @function + .globl fremovexattr + .align 4 + +fremovexattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(2 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_fremovexattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_fremovexattr_end: + rts + nop + + .align 2 +0: .long __NR_fremovexattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/fsetxattr.S b/libc/arch-sh/syscalls/fsetxattr.S new file mode 100644 index 000000000..7e0681af2 --- /dev/null +++ b/libc/arch-sh/syscalls/fsetxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fsetxattr, @function + .globl fsetxattr + .align 4 + +fsetxattr: + + /* get ready for additonal arg */ + mov.l @r15, r0 + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(5 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_fsetxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_fsetxattr_end: + rts + nop + + .align 2 +0: .long __NR_fsetxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/getxattr.S b/libc/arch-sh/syscalls/getxattr.S new file mode 100644 index 000000000..7d16c2143 --- /dev/null +++ b/libc/arch-sh/syscalls/getxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type getxattr, @function + .globl getxattr + .align 4 + +getxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(4 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_getxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_getxattr_end: + rts + nop + + .align 2 +0: .long __NR_getxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/lgetxattr.S b/libc/arch-sh/syscalls/lgetxattr.S new file mode 100644 index 000000000..d0c5014ed --- /dev/null +++ b/libc/arch-sh/syscalls/lgetxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lgetxattr, @function + .globl lgetxattr + .align 4 + +lgetxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(4 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_lgetxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_lgetxattr_end: + rts + nop + + .align 2 +0: .long __NR_lgetxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/listxattr.S b/libc/arch-sh/syscalls/listxattr.S new file mode 100644 index 000000000..f2817a5bb --- /dev/null +++ b/libc/arch-sh/syscalls/listxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type listxattr, @function + .globl listxattr + .align 4 + +listxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(3 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_listxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_listxattr_end: + rts + nop + + .align 2 +0: .long __NR_listxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/llistxattr.S b/libc/arch-sh/syscalls/llistxattr.S new file mode 100644 index 000000000..877c15e86 --- /dev/null +++ b/libc/arch-sh/syscalls/llistxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type llistxattr, @function + .globl llistxattr + .align 4 + +llistxattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(3 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_llistxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_llistxattr_end: + rts + nop + + .align 2 +0: .long __NR_llistxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/lremovexattr.S b/libc/arch-sh/syscalls/lremovexattr.S new file mode 100644 index 000000000..d7aa8b970 --- /dev/null +++ b/libc/arch-sh/syscalls/lremovexattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lremovexattr, @function + .globl lremovexattr + .align 4 + +lremovexattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(2 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_lremovexattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_lremovexattr_end: + rts + nop + + .align 2 +0: .long __NR_lremovexattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/lsetxattr.S b/libc/arch-sh/syscalls/lsetxattr.S new file mode 100644 index 000000000..0cc4c9df8 --- /dev/null +++ b/libc/arch-sh/syscalls/lsetxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lsetxattr, @function + .globl lsetxattr + .align 4 + +lsetxattr: + + /* get ready for additonal arg */ + mov.l @r15, r0 + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(5 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_lsetxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_lsetxattr_end: + rts + nop + + .align 2 +0: .long __NR_lsetxattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/removexattr.S b/libc/arch-sh/syscalls/removexattr.S new file mode 100644 index 000000000..ea7174354 --- /dev/null +++ b/libc/arch-sh/syscalls/removexattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type removexattr, @function + .globl removexattr + .align 4 + +removexattr: + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(2 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_removexattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_removexattr_end: + rts + nop + + .align 2 +0: .long __NR_removexattr +1: .long __set_syscall_errno diff --git a/libc/arch-sh/syscalls/setxattr.S b/libc/arch-sh/syscalls/setxattr.S new file mode 100644 index 000000000..abef6b6cc --- /dev/null +++ b/libc/arch-sh/syscalls/setxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type setxattr, @function + .globl setxattr + .align 4 + +setxattr: + + /* get ready for additonal arg */ + mov.l @r15, r0 + + /* invoke trap */ + mov.l 0f, r3 /* trap num */ + trapa #(5 + 0x10) + + /* check return value */ + cmp/pz r0 + bt __NR_setxattr_end + + /* keep error number */ + sts.l pr, @-r15 + mov.l 1f, r1 + jsr @r1 + mov r0, r4 + lds.l @r15+, pr + +__NR_setxattr_end: + rts + nop + + .align 2 +0: .long __NR_setxattr +1: .long __set_syscall_errno diff --git a/libc/arch-x86/syscalls.mk b/libc/arch-x86/syscalls.mk index 03b4cbd4a..d2ceb424f 100644 --- a/libc/arch-x86/syscalls.mk +++ b/libc/arch-x86/syscalls.mk @@ -89,6 +89,10 @@ syscall_src += arch-x86/syscalls/mkdirat.S syscall_src += arch-x86/syscalls/fchownat.S syscall_src += arch-x86/syscalls/fchmodat.S syscall_src += arch-x86/syscalls/renameat.S +syscall_src += arch-x86/syscalls/fsetxattr.S +syscall_src += arch-x86/syscalls/fgetxattr.S +syscall_src += arch-x86/syscalls/flistxattr.S +syscall_src += arch-x86/syscalls/fremovexattr.S syscall_src += arch-x86/syscalls/link.S syscall_src += arch-x86/syscalls/unlink.S syscall_src += arch-x86/syscalls/unlinkat.S @@ -111,6 +115,14 @@ syscall_src += arch-x86/syscalls/access.S syscall_src += arch-x86/syscalls/symlink.S syscall_src += arch-x86/syscalls/fchdir.S syscall_src += arch-x86/syscalls/truncate.S +syscall_src += arch-x86/syscalls/setxattr.S +syscall_src += arch-x86/syscalls/lsetxattr.S +syscall_src += arch-x86/syscalls/getxattr.S +syscall_src += arch-x86/syscalls/lgetxattr.S +syscall_src += arch-x86/syscalls/listxattr.S +syscall_src += arch-x86/syscalls/llistxattr.S +syscall_src += arch-x86/syscalls/removexattr.S +syscall_src += arch-x86/syscalls/lremovexattr.S syscall_src += arch-x86/syscalls/__statfs64.S syscall_src += arch-x86/syscalls/pause.S syscall_src += arch-x86/syscalls/gettimeofday.S diff --git a/libc/arch-x86/syscalls/fgetxattr.S b/libc/arch-x86/syscalls/fgetxattr.S new file mode 100644 index 000000000..d9f582f82 --- /dev/null +++ b/libc/arch-x86/syscalls/fgetxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fgetxattr, @function + .globl fgetxattr + .align 4 + +fgetxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + mov 20(%esp), %ebx + mov 24(%esp), %ecx + mov 28(%esp), %edx + mov 32(%esp), %esi + movl $__NR_fgetxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/flistxattr.S b/libc/arch-x86/syscalls/flistxattr.S new file mode 100644 index 000000000..43ff73d4a --- /dev/null +++ b/libc/arch-x86/syscalls/flistxattr.S @@ -0,0 +1,29 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type flistxattr, @function + .globl flistxattr + .align 4 + +flistxattr: + pushl %ebx + pushl %ecx + pushl %edx + mov 16(%esp), %ebx + mov 20(%esp), %ecx + mov 24(%esp), %edx + movl $__NR_flistxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/fremovexattr.S b/libc/arch-x86/syscalls/fremovexattr.S new file mode 100644 index 000000000..eeed57f29 --- /dev/null +++ b/libc/arch-x86/syscalls/fremovexattr.S @@ -0,0 +1,26 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fremovexattr, @function + .globl fremovexattr + .align 4 + +fremovexattr: + pushl %ebx + pushl %ecx + mov 12(%esp), %ebx + mov 16(%esp), %ecx + movl $__NR_fremovexattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/fsetxattr.S b/libc/arch-x86/syscalls/fsetxattr.S new file mode 100644 index 000000000..a70ca4fbf --- /dev/null +++ b/libc/arch-x86/syscalls/fsetxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type fsetxattr, @function + .globl fsetxattr + .align 4 + +fsetxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + pushl %edi + mov 24(%esp), %ebx + mov 28(%esp), %ecx + mov 32(%esp), %edx + mov 36(%esp), %esi + mov 40(%esp), %edi + movl $__NR_fsetxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edi + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/getxattr.S b/libc/arch-x86/syscalls/getxattr.S new file mode 100644 index 000000000..80d2fc444 --- /dev/null +++ b/libc/arch-x86/syscalls/getxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type getxattr, @function + .globl getxattr + .align 4 + +getxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + mov 20(%esp), %ebx + mov 24(%esp), %ecx + mov 28(%esp), %edx + mov 32(%esp), %esi + movl $__NR_getxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/lgetxattr.S b/libc/arch-x86/syscalls/lgetxattr.S new file mode 100644 index 000000000..3f5b63ea5 --- /dev/null +++ b/libc/arch-x86/syscalls/lgetxattr.S @@ -0,0 +1,32 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lgetxattr, @function + .globl lgetxattr + .align 4 + +lgetxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + mov 20(%esp), %ebx + mov 24(%esp), %ecx + mov 28(%esp), %edx + mov 32(%esp), %esi + movl $__NR_lgetxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/listxattr.S b/libc/arch-x86/syscalls/listxattr.S new file mode 100644 index 000000000..88109bbc9 --- /dev/null +++ b/libc/arch-x86/syscalls/listxattr.S @@ -0,0 +1,29 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type listxattr, @function + .globl listxattr + .align 4 + +listxattr: + pushl %ebx + pushl %ecx + pushl %edx + mov 16(%esp), %ebx + mov 20(%esp), %ecx + mov 24(%esp), %edx + movl $__NR_listxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/llistxattr.S b/libc/arch-x86/syscalls/llistxattr.S new file mode 100644 index 000000000..fa8505ce5 --- /dev/null +++ b/libc/arch-x86/syscalls/llistxattr.S @@ -0,0 +1,29 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type llistxattr, @function + .globl llistxattr + .align 4 + +llistxattr: + pushl %ebx + pushl %ecx + pushl %edx + mov 16(%esp), %ebx + mov 20(%esp), %ecx + mov 24(%esp), %edx + movl $__NR_llistxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/lremovexattr.S b/libc/arch-x86/syscalls/lremovexattr.S new file mode 100644 index 000000000..f6c7afe06 --- /dev/null +++ b/libc/arch-x86/syscalls/lremovexattr.S @@ -0,0 +1,26 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lremovexattr, @function + .globl lremovexattr + .align 4 + +lremovexattr: + pushl %ebx + pushl %ecx + mov 12(%esp), %ebx + mov 16(%esp), %ecx + movl $__NR_lremovexattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/lsetxattr.S b/libc/arch-x86/syscalls/lsetxattr.S new file mode 100644 index 000000000..56c8cf88d --- /dev/null +++ b/libc/arch-x86/syscalls/lsetxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type lsetxattr, @function + .globl lsetxattr + .align 4 + +lsetxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + pushl %edi + mov 24(%esp), %ebx + mov 28(%esp), %ecx + mov 32(%esp), %edx + mov 36(%esp), %esi + mov 40(%esp), %edi + movl $__NR_lsetxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edi + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/removexattr.S b/libc/arch-x86/syscalls/removexattr.S new file mode 100644 index 000000000..235086539 --- /dev/null +++ b/libc/arch-x86/syscalls/removexattr.S @@ -0,0 +1,26 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type removexattr, @function + .globl removexattr + .align 4 + +removexattr: + pushl %ebx + pushl %ecx + mov 12(%esp), %ebx + mov 16(%esp), %ecx + movl $__NR_removexattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %ecx + popl %ebx + ret diff --git a/libc/arch-x86/syscalls/setxattr.S b/libc/arch-x86/syscalls/setxattr.S new file mode 100644 index 000000000..38be736ba --- /dev/null +++ b/libc/arch-x86/syscalls/setxattr.S @@ -0,0 +1,35 @@ +/* autogenerated by gensyscalls.py */ +#include + + .text + .type setxattr, @function + .globl setxattr + .align 4 + +setxattr: + pushl %ebx + pushl %ecx + pushl %edx + pushl %esi + pushl %edi + mov 24(%esp), %ebx + mov 28(%esp), %ecx + mov 32(%esp), %edx + mov 36(%esp), %esi + mov 40(%esp), %edi + movl $__NR_setxattr, %eax + int $0x80 + cmpl $-129, %eax + jb 1f + negl %eax + pushl %eax + call __set_errno + addl $4, %esp + orl $-1, %eax +1: + popl %edi + popl %esi + popl %edx + popl %ecx + popl %ebx + ret diff --git a/libc/include/sys/linux-syscalls.h b/libc/include/sys/linux-syscalls.h index e6d7dfb12..9664dc1be 100644 --- a/libc/include/sys/linux-syscalls.h +++ b/libc/include/sys/linux-syscalls.h @@ -79,6 +79,10 @@ #define __NR_sync (__NR_SYSCALL_BASE + 36) #define __NR_fcntl64 (__NR_SYSCALL_BASE + 221) #define __NR_sendfile (__NR_SYSCALL_BASE + 187) +#define __NR_fsetxattr (__NR_SYSCALL_BASE + 228) +#define __NR_fgetxattr (__NR_SYSCALL_BASE + 231) +#define __NR_flistxattr (__NR_SYSCALL_BASE + 234) +#define __NR_fremovexattr (__NR_SYSCALL_BASE + 237) #define __NR_link (__NR_SYSCALL_BASE + 9) #define __NR_unlink (__NR_SYSCALL_BASE + 10) #define __NR_chdir (__NR_SYSCALL_BASE + 12) @@ -100,6 +104,14 @@ #define __NR_symlink (__NR_SYSCALL_BASE + 83) #define __NR_fchdir (__NR_SYSCALL_BASE + 133) #define __NR_truncate (__NR_SYSCALL_BASE + 92) +#define __NR_setxattr (__NR_SYSCALL_BASE + 226) +#define __NR_lsetxattr (__NR_SYSCALL_BASE + 227) +#define __NR_getxattr (__NR_SYSCALL_BASE + 229) +#define __NR_lgetxattr (__NR_SYSCALL_BASE + 230) +#define __NR_listxattr (__NR_SYSCALL_BASE + 232) +#define __NR_llistxattr (__NR_SYSCALL_BASE + 233) +#define __NR_removexattr (__NR_SYSCALL_BASE + 235) +#define __NR_lremovexattr (__NR_SYSCALL_BASE + 236) #define __NR_pause (__NR_SYSCALL_BASE + 29) #define __NR_gettimeofday (__NR_SYSCALL_BASE + 78) #define __NR_settimeofday (__NR_SYSCALL_BASE + 79) diff --git a/libc/include/sys/xattr.h b/libc/include/sys/xattr.h new file mode 100644 index 000000000..39b25b172 --- /dev/null +++ b/libc/include/sys/xattr.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#ifndef _SYS_XATTR_H_ +#define _SYS_XATTR_H_ + +#include + +__BEGIN_DECLS + +#define XATTR_CREATE 1 +#define XATTR_REPLACE 2 + +extern int fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); +extern int setxattr(const char *path, const char *name, const void *value, size_t size, int flags); +extern int lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); + +extern ssize_t fgetxattr(int fd, const char *name, void *value, size_t size); +extern ssize_t getxattr(const char *path, const char *name, void *value, size_t size); +extern ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size); + +extern ssize_t listxattr(const char *path, char *list, size_t size); +extern ssize_t llistxattr(const char *path, char *list, size_t size); +extern ssize_t flistxattr(int fd, char *list, size_t size); + +extern int removexattr(const char *path, const char *name); +extern int lremovexattr(const char *path, const char *name); +extern int fremovexattr(int fd, const char *name); + +__END_DECLS + +#endif /* _SYS_XATTR_H_ */