summaryrefslogtreecommitdiffstats
path: root/9/platforms/android-19
diff options
context:
space:
mode:
authorAndrew Hsieh <andrewhsieh@google.com>2014-02-04 16:02:42 +0800
committerAndrew Hsieh <andrewhsieh@google.com>2014-02-04 16:02:42 +0800
commit25e8269fe70d5fd56328eb85a7a094d28e771396 (patch)
tree7188398b0d7821b8fa671d4ce9b67231c6a4387f /9/platforms/android-19
parent2d727d338240e8303e57a9c77a34737664cbea7b (diff)
downloadprebuilts_ndk-25e8269fe70d5fd56328eb85a7a094d28e771396.zip
prebuilts_ndk-25e8269fe70d5fd56328eb85a7a094d28e771396.tar.gz
prebuilts_ndk-25e8269fe70d5fd56328eb85a7a094d28e771396.tar.bz2
Refresh headers for arm64/x86_64
Change-Id: Ib11270df554644ca44e008565dda1f6e8beeac03
Diffstat (limited to '9/platforms/android-19')
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/fcntl.h14
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/linux/binder.h127
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/sys/cdefs.h2
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/sys/ucontext.h261
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/sys/user.h13
-rw-r--r--9/platforms/android-19/arch-arm64/usr/include/ucontext.h34
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/fcntl.h14
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/linux/binder.h127
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/sys/cdefs.h2
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/sys/ucontext.h261
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/sys/user.h13
-rw-r--r--9/platforms/android-19/arch-x86_64/usr/include/ucontext.h34
12 files changed, 772 insertions, 130 deletions
diff --git a/9/platforms/android-19/arch-arm64/usr/include/fcntl.h b/9/platforms/android-19/arch-arm64/usr/include/fcntl.h
index f6a89ef..b7b91f2 100644
--- a/9/platforms/android-19/arch-arm64/usr/include/fcntl.h
+++ b/9/platforms/android-19/arch-arm64/usr/include/fcntl.h
@@ -41,11 +41,15 @@ __BEGIN_DECLS
#define O_ASYNC FASYNC
#endif
-extern int open(const char* path, int mode, ...);
-extern int openat(int fd, const char* path, int mode, ...);
-extern int unlinkat(int dirfd, const char *pathname, int flags);
-extern int fcntl(int fd, int command, ...);
-extern int creat(const char* path, mode_t mode);
+extern int creat(const char*, mode_t);
+extern int fallocate64(int, int, off64_t, off64_t);
+extern int fallocate(int, int, off_t, off_t);
+extern int fcntl(int, int, ...);
+extern int openat(int, const char*, int, ...);
+extern int open(const char*, int, ...);
+extern int posix_fallocate64(int, off64_t, off64_t);
+extern int posix_fallocate(int, off_t, off_t);
+extern int unlinkat(int, const char*, int);
#if defined(__BIONIC_FORTIFY)
diff --git a/9/platforms/android-19/arch-arm64/usr/include/linux/binder.h b/9/platforms/android-19/arch-arm64/usr/include/linux/binder.h
index 1472382..02101ab 100644
--- a/9/platforms/android-19/arch-arm64/usr/include/linux/binder.h
+++ b/9/platforms/android-19/arch-arm64/usr/include/linux/binder.h
@@ -36,136 +36,155 @@ enum {
FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef BINDER_IPC_32BIT
+typedef __u32 binder_size_t;
+typedef __u32 binder_uintptr_t;
+#else
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+typedef __u64 binder_size_t;
+typedef __u64 binder_uintptr_t;
+#endif
struct flat_binder_object {
- unsigned long type;
- unsigned long flags;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 type;
+ __u32 flags;
union {
+ binder_uintptr_t binder;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void __user *binder;
- signed long handle;
+ __u32 handle;
};
- void __user *cookie;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ binder_uintptr_t cookie;
};
-struct binder_write_read {
- signed long write_size;
- signed long write_consumed;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- unsigned long write_buffer;
- signed long read_size;
- signed long read_consumed;
- unsigned long read_buffer;
+struct binder_write_read {
+ binder_size_t write_size;
+ binder_size_t write_consumed;
+ binder_uintptr_t write_buffer;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ binder_size_t read_size;
+ binder_size_t read_consumed;
+ binder_uintptr_t read_buffer;
};
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct binder_version {
- signed long protocol_version;
+ __s32 protocol_version;
};
+#ifdef BINDER_IPC_32BIT
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_CURRENT_PROTOCOL_VERSION 7
+#else
+#define BINDER_CURRENT_PROTOCOL_VERSION 8
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read)
#define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, __s64)
-#define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32)
#define BINDER_SET_IDLE_PRIORITY _IOW('b', 6, __s32)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_SET_CONTEXT_MGR _IOW('b', 7, __s32)
#define BINDER_THREAD_EXIT _IOW('b', 8, __s32)
#define BINDER_VERSION _IOWR('b', 9, struct binder_version)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum transaction_flags {
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
TF_ONE_WAY = 0x01,
TF_ROOT_OBJECT = 0x04,
TF_STATUS_CODE = 0x08,
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
TF_ACCEPT_FDS = 0x10,
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct binder_transaction_data {
union {
+ __u32 handle;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- size_t handle;
- void *ptr;
+ binder_uintptr_t ptr;
} target;
- void *cookie;
+ binder_uintptr_t cookie;
+ __u32 code;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- unsigned int code;
- unsigned int flags;
+ __u32 flags;
pid_t sender_pid;
uid_t sender_euid;
+ binder_size_t data_size;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- size_t data_size;
- size_t offsets_size;
+ binder_size_t offsets_size;
union {
struct {
+ binder_uintptr_t buffer;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- const void __user *buffer;
- const void __user *offsets;
+ binder_uintptr_t offsets;
} ptr;
- uint8_t buf[8];
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u8 buf[8];
} data;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct binder_ptr_cookie {
- void *ptr;
+ binder_uintptr_t ptr;
+ binder_uintptr_t cookie;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void *cookie;
};
+struct binder_handle_cookie {
+ __u32 handle;
+ binder_uintptr_t cookie;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+} __attribute__((packed));
struct binder_pri_desc {
- int priority;
+ __s32 priority;
+ __u32 desc;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- int desc;
};
struct binder_pri_ptr_cookie {
- int priority;
+ __s32 priority;
+ binder_uintptr_t ptr;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void *ptr;
- void *cookie;
+ binder_uintptr_t cookie;
};
enum binder_driver_return_protocol {
+ BR_ERROR = _IOR('r', 0, __s32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_ERROR = _IOR('r', 0, int),
BR_OK = _IO('r', 1),
BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
+ BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_ACQUIRE_RESULT = _IOR('r', 4, int),
BR_DEAD_REPLY = _IO('r', 5),
BR_TRANSACTION_COMPLETE = _IO('r', 6),
BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_NOOP = _IO('r', 12),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_SPAWN_LOOPER = _IO('r', 13),
BR_FINISHED = _IO('r', 14),
- BR_DEAD_BINDER = _IOR('r', 15, void *),
+ BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
+ BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, void *),
BR_FAILED_REPLY = _IO('r', 17),
};
enum binder_driver_command_protocol {
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
- BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
- BC_ACQUIRE_RESULT = _IOW('c', 2, int),
- BC_FREE_BUFFER = _IOW('c', 3, int),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BC_INCREFS = _IOW('c', 4, int),
- BC_ACQUIRE = _IOW('c', 5, int),
- BC_RELEASE = _IOW('c', 6, int),
- BC_DECREFS = _IOW('c', 7, int),
+ BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
+ BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
+ BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
+ BC_INCREFS = _IOW('c', 4, __u32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ BC_ACQUIRE = _IOW('c', 5, __u32),
+ BC_RELEASE = _IOW('c', 6, __u32),
+ BC_DECREFS = _IOW('c', 7, __u32),
BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
BC_REGISTER_LOOPER = _IO('c', 11),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_ENTER_LOOPER = _IO('c', 12),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_EXIT_LOOPER = _IO('c', 13),
- BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_ptr_cookie),
- BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_ptr_cookie),
+ BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_handle_cookie),
+ BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_handle_cookie),
+ BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BC_DEAD_BINDER_DONE = _IOW('c', 16, void *),
};
#endif
diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/cdefs.h b/9/platforms/android-19/arch-arm64/usr/include/sys/cdefs.h
index 7c8f7bf..1f7cfc8 100644
--- a/9/platforms/android-19/arch-arm64/usr/include/sys/cdefs.h
+++ b/9/platforms/android-19/arch-arm64/usr/include/sys/cdefs.h
@@ -546,7 +546,7 @@
#define __bos0(s) __builtin_object_size((s), 0)
#define __BIONIC_FORTIFY_INLINE \
- extern inline \
+ extern __inline__ \
__attribute__ ((always_inline)) \
__attribute__ ((gnu_inline))
#endif
diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/ucontext.h b/9/platforms/android-19/arch-arm64/usr/include/sys/ucontext.h
new file mode 100644
index 0000000..94b7a68
--- /dev/null
+++ b/9/platforms/android-19/arch-arm64/usr/include/sys/ucontext.h
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2014 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_UCONTEXT_H_
+#define _SYS_UCONTEXT_H_
+
+#include <signal.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+#if defined(__arm__)
+
+enum {
+ REG_R0 = 0,
+ REG_R1,
+ REG_R2,
+ REG_R3,
+ REG_R4,
+ REG_R5,
+ REG_R6,
+ REG_R7,
+ REG_R8,
+ REG_R9,
+ REG_R10,
+ REG_R11,
+ REG_R12,
+ REG_R13,
+ REG_R14,
+ REG_R15,
+};
+
+#define NGREG 18 /* Like glibc. */
+
+typedef int greg_t;
+typedef greg_t gregset_t[NGREG];
+
+/* TODO: fpregset_t. */
+
+#include <asm/sigcontext.h>
+typedef struct sigcontext mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: uc_regspace */
+} ucontext_t;
+
+#elif defined(__aarch64__)
+
+/* TODO: gregset_t and fpregset_t. */
+
+#include <asm/sigcontext.h>
+typedef struct sigcontext mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ sigset_t uc_sigmask;
+ mcontext_t uc_mcontext;
+} ucontext_t;
+
+#elif defined(__i386__)
+
+enum {
+ REG_GS = 0,
+ REG_FS,
+ REG_ES,
+ REG_DS,
+ REG_EDI,
+ REG_ESI,
+ REG_EBP,
+ REG_ESP,
+ REG_EBX,
+ REG_EDX,
+ REG_ECX,
+ REG_EAX,
+ REG_TRAPNO,
+ REG_ERR,
+ REG_EIP,
+ REG_CS,
+ REG_EFL,
+ REG_UESP,
+ REG_SS,
+ NGREG
+};
+
+typedef int greg_t;
+typedef greg_t gregset_t[NGREG];
+
+struct _libc_fpreg {
+ unsigned short significand[4];
+ unsigned short exponent;
+};
+
+struct _libc_fpstate {
+ unsigned long cw;
+ unsigned long sw;
+ unsigned long tag;
+ unsigned long ipoff;
+ unsigned long cssel;
+ unsigned long dataoff;
+ unsigned long datasel;
+ struct _libc_fpreg _st[8];
+ unsigned long status;
+};
+
+typedef struct _libc_fpstate* fpregset_t;
+
+typedef struct {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ unsigned long oldmask;
+ unsigned long cr2;
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: __fpregs_mem? */
+} ucontext_t;
+
+#elif defined(__mips__)
+
+/* glibc doesn't have names for MIPS registers. */
+
+#define NGREG 32
+#define NFPREG 32
+
+typedef unsigned long long greg_t;
+typedef greg_t gregset_t[NGREG];
+
+typedef struct fpregset {
+ union {
+ double fp_dregs[NFPREG];
+ struct {
+ float _fp_fregs;
+ unsigned _fp_pad;
+ } fp_fregs[NFPREG];
+ } fp_r;
+} fpregset_t;
+
+typedef struct {
+ unsigned regmask;
+ unsigned status;
+ greg_t pc;
+ gregset_t gregs;
+ fpregset_t fpregs;
+ unsigned fp_owned;
+ unsigned fpc_csr;
+ unsigned fpc_eir;
+ unsigned used_math;
+ unsigned dsp;
+ greg_t mdhi;
+ greg_t mdlo;
+ unsigned long hi1;
+ unsigned long lo1;
+ unsigned long hi2;
+ unsigned long lo2;
+ unsigned long hi3;
+ unsigned long lo3;
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+} ucontext_t;
+
+#elif defined(__mips64__)
+
+#error TODO
+
+#elif defined(__x86_64__)
+
+enum {
+ REG_R8 = 0,
+ REG_R9,
+ REG_R10,
+ REG_R11,
+ REG_R12,
+ REG_R13,
+ REG_R14,
+ REG_R15,
+ REG_RDI,
+ REG_RSI,
+ REG_RBP,
+ REG_RBX,
+ REG_RDX,
+ REG_RAX,
+ REG_RCX,
+ REG_RSP,
+ REG_RIP,
+ REG_EFL,
+ REG_CSGSFS,
+ REG_ERR,
+ REG_TRAPNO,
+ REG_OLDMASK,
+ REG_CR2,
+ NGREG
+};
+
+typedef long greg_t;
+typedef greg_t gregset_t[NGREG];
+
+typedef struct user_i387_struct* fpregset_t;
+
+typedef struct {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ /* TODO: reserved space? */
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: __fpregs_mem? */
+} ucontext_t;
+
+#endif
+
+__END_DECLS
+
+#endif /* _SYS_UCONTEXT_H_ */
diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/user.h b/9/platforms/android-19/arch-arm64/usr/include/sys/user.h
index 9f11a83..90cce80 100644
--- a/9/platforms/android-19/arch-arm64/usr/include/sys/user.h
+++ b/9/platforms/android-19/arch-arm64/usr/include/sys/user.h
@@ -181,7 +181,7 @@ struct user {
#elif defined(__arm__)
-struct user_fp {
+struct user_fpregs {
struct fp_reg {
unsigned int sign1:1;
unsigned int unused:15;
@@ -196,6 +196,9 @@ struct user_fp {
unsigned char ftype[8];
unsigned int init_flag;
};
+struct user_regs {
+ unsigned long uregs[18];
+};
struct user_vfp {
unsigned long long fpregs[32];
unsigned long fpscr;
@@ -206,7 +209,7 @@ struct user_vfp_exc {
unsigned long fpinst2;
};
struct user {
- struct pt_regs regs;
+ struct user_regs regs;
int u_fpvalid;
unsigned long int u_tsize;
unsigned long int u_dsize;
@@ -215,12 +218,12 @@ struct user {
unsigned long start_stack;
long int signal;
int reserved;
- unsigned long u_ar0;
+ struct user_regs* u_ar0;
unsigned long magic;
char u_comm[32];
int u_debugreg[8];
- struct user_fp u_fp;
- struct user_fp_struct* u_fp0;
+ struct user_fpregs u_fp;
+ struct user_fpregs* u_fp0;
};
#elif defined(__aarch64__)
diff --git a/9/platforms/android-19/arch-arm64/usr/include/ucontext.h b/9/platforms/android-19/arch-arm64/usr/include/ucontext.h
new file mode 100644
index 0000000..5ea2982
--- /dev/null
+++ b/9/platforms/android-19/arch-arm64/usr/include/ucontext.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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 _UCONTEXT_H_
+#define _UCONTEXT_H_
+
+#include <sys/ucontext.h>
+
+#endif /* _UCONTEXT_H_ */
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h b/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h
index f6a89ef..b7b91f2 100644
--- a/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h
+++ b/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h
@@ -41,11 +41,15 @@ __BEGIN_DECLS
#define O_ASYNC FASYNC
#endif
-extern int open(const char* path, int mode, ...);
-extern int openat(int fd, const char* path, int mode, ...);
-extern int unlinkat(int dirfd, const char *pathname, int flags);
-extern int fcntl(int fd, int command, ...);
-extern int creat(const char* path, mode_t mode);
+extern int creat(const char*, mode_t);
+extern int fallocate64(int, int, off64_t, off64_t);
+extern int fallocate(int, int, off_t, off_t);
+extern int fcntl(int, int, ...);
+extern int openat(int, const char*, int, ...);
+extern int open(const char*, int, ...);
+extern int posix_fallocate64(int, off64_t, off64_t);
+extern int posix_fallocate(int, off_t, off_t);
+extern int unlinkat(int, const char*, int);
#if defined(__BIONIC_FORTIFY)
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/linux/binder.h b/9/platforms/android-19/arch-x86_64/usr/include/linux/binder.h
index 1472382..02101ab 100644
--- a/9/platforms/android-19/arch-x86_64/usr/include/linux/binder.h
+++ b/9/platforms/android-19/arch-x86_64/usr/include/linux/binder.h
@@ -36,136 +36,155 @@ enum {
FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef BINDER_IPC_32BIT
+typedef __u32 binder_size_t;
+typedef __u32 binder_uintptr_t;
+#else
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+typedef __u64 binder_size_t;
+typedef __u64 binder_uintptr_t;
+#endif
struct flat_binder_object {
- unsigned long type;
- unsigned long flags;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u32 type;
+ __u32 flags;
union {
+ binder_uintptr_t binder;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void __user *binder;
- signed long handle;
+ __u32 handle;
};
- void __user *cookie;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ binder_uintptr_t cookie;
};
-struct binder_write_read {
- signed long write_size;
- signed long write_consumed;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- unsigned long write_buffer;
- signed long read_size;
- signed long read_consumed;
- unsigned long read_buffer;
+struct binder_write_read {
+ binder_size_t write_size;
+ binder_size_t write_consumed;
+ binder_uintptr_t write_buffer;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ binder_size_t read_size;
+ binder_size_t read_consumed;
+ binder_uintptr_t read_buffer;
};
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct binder_version {
- signed long protocol_version;
+ __s32 protocol_version;
};
+#ifdef BINDER_IPC_32BIT
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_CURRENT_PROTOCOL_VERSION 7
+#else
+#define BINDER_CURRENT_PROTOCOL_VERSION 8
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read)
#define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, __s64)
-#define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32)
#define BINDER_SET_IDLE_PRIORITY _IOW('b', 6, __s32)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define BINDER_SET_CONTEXT_MGR _IOW('b', 7, __s32)
#define BINDER_THREAD_EXIT _IOW('b', 8, __s32)
#define BINDER_VERSION _IOWR('b', 9, struct binder_version)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum transaction_flags {
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
TF_ONE_WAY = 0x01,
TF_ROOT_OBJECT = 0x04,
TF_STATUS_CODE = 0x08,
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
TF_ACCEPT_FDS = 0x10,
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct binder_transaction_data {
union {
+ __u32 handle;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- size_t handle;
- void *ptr;
+ binder_uintptr_t ptr;
} target;
- void *cookie;
+ binder_uintptr_t cookie;
+ __u32 code;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- unsigned int code;
- unsigned int flags;
+ __u32 flags;
pid_t sender_pid;
uid_t sender_euid;
+ binder_size_t data_size;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- size_t data_size;
- size_t offsets_size;
+ binder_size_t offsets_size;
union {
struct {
+ binder_uintptr_t buffer;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- const void __user *buffer;
- const void __user *offsets;
+ binder_uintptr_t offsets;
} ptr;
- uint8_t buf[8];
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __u8 buf[8];
} data;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct binder_ptr_cookie {
- void *ptr;
+ binder_uintptr_t ptr;
+ binder_uintptr_t cookie;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void *cookie;
};
+struct binder_handle_cookie {
+ __u32 handle;
+ binder_uintptr_t cookie;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+} __attribute__((packed));
struct binder_pri_desc {
- int priority;
+ __s32 priority;
+ __u32 desc;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- int desc;
};
struct binder_pri_ptr_cookie {
- int priority;
+ __s32 priority;
+ binder_uintptr_t ptr;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- void *ptr;
- void *cookie;
+ binder_uintptr_t cookie;
};
enum binder_driver_return_protocol {
+ BR_ERROR = _IOR('r', 0, __s32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_ERROR = _IOR('r', 0, int),
BR_OK = _IO('r', 1),
BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
+ BR_ACQUIRE_RESULT = _IOR('r', 4, __s32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_ACQUIRE_RESULT = _IOR('r', 4, int),
BR_DEAD_REPLY = _IO('r', 5),
BR_TRANSACTION_COMPLETE = _IO('r', 6),
BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_NOOP = _IO('r', 12),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BR_SPAWN_LOOPER = _IO('r', 13),
BR_FINISHED = _IO('r', 14),
- BR_DEAD_BINDER = _IOR('r', 15, void *),
+ BR_DEAD_BINDER = _IOR('r', 15, binder_uintptr_t),
+ BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, binder_uintptr_t),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, void *),
BR_FAILED_REPLY = _IO('r', 17),
};
enum binder_driver_command_protocol {
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
- BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
- BC_ACQUIRE_RESULT = _IOW('c', 2, int),
- BC_FREE_BUFFER = _IOW('c', 3, int),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BC_INCREFS = _IOW('c', 4, int),
- BC_ACQUIRE = _IOW('c', 5, int),
- BC_RELEASE = _IOW('c', 6, int),
- BC_DECREFS = _IOW('c', 7, int),
+ BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
+ BC_ACQUIRE_RESULT = _IOW('c', 2, __s32),
+ BC_FREE_BUFFER = _IOW('c', 3, binder_uintptr_t),
+ BC_INCREFS = _IOW('c', 4, __u32),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ BC_ACQUIRE = _IOW('c', 5, __u32),
+ BC_RELEASE = _IOW('c', 6, __u32),
+ BC_DECREFS = _IOW('c', 7, __u32),
BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
BC_REGISTER_LOOPER = _IO('c', 11),
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_ENTER_LOOPER = _IO('c', 12),
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
BC_EXIT_LOOPER = _IO('c', 13),
- BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_ptr_cookie),
- BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_ptr_cookie),
+ BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_handle_cookie),
+ BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_handle_cookie),
+ BC_DEAD_BINDER_DONE = _IOW('c', 16, binder_uintptr_t),
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
- BC_DEAD_BINDER_DONE = _IOW('c', 16, void *),
};
#endif
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/cdefs.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/cdefs.h
index 7c8f7bf..1f7cfc8 100644
--- a/9/platforms/android-19/arch-x86_64/usr/include/sys/cdefs.h
+++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/cdefs.h
@@ -546,7 +546,7 @@
#define __bos0(s) __builtin_object_size((s), 0)
#define __BIONIC_FORTIFY_INLINE \
- extern inline \
+ extern __inline__ \
__attribute__ ((always_inline)) \
__attribute__ ((gnu_inline))
#endif
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/ucontext.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/ucontext.h
new file mode 100644
index 0000000..94b7a68
--- /dev/null
+++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/ucontext.h
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2014 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_UCONTEXT_H_
+#define _SYS_UCONTEXT_H_
+
+#include <signal.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+#if defined(__arm__)
+
+enum {
+ REG_R0 = 0,
+ REG_R1,
+ REG_R2,
+ REG_R3,
+ REG_R4,
+ REG_R5,
+ REG_R6,
+ REG_R7,
+ REG_R8,
+ REG_R9,
+ REG_R10,
+ REG_R11,
+ REG_R12,
+ REG_R13,
+ REG_R14,
+ REG_R15,
+};
+
+#define NGREG 18 /* Like glibc. */
+
+typedef int greg_t;
+typedef greg_t gregset_t[NGREG];
+
+/* TODO: fpregset_t. */
+
+#include <asm/sigcontext.h>
+typedef struct sigcontext mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: uc_regspace */
+} ucontext_t;
+
+#elif defined(__aarch64__)
+
+/* TODO: gregset_t and fpregset_t. */
+
+#include <asm/sigcontext.h>
+typedef struct sigcontext mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ sigset_t uc_sigmask;
+ mcontext_t uc_mcontext;
+} ucontext_t;
+
+#elif defined(__i386__)
+
+enum {
+ REG_GS = 0,
+ REG_FS,
+ REG_ES,
+ REG_DS,
+ REG_EDI,
+ REG_ESI,
+ REG_EBP,
+ REG_ESP,
+ REG_EBX,
+ REG_EDX,
+ REG_ECX,
+ REG_EAX,
+ REG_TRAPNO,
+ REG_ERR,
+ REG_EIP,
+ REG_CS,
+ REG_EFL,
+ REG_UESP,
+ REG_SS,
+ NGREG
+};
+
+typedef int greg_t;
+typedef greg_t gregset_t[NGREG];
+
+struct _libc_fpreg {
+ unsigned short significand[4];
+ unsigned short exponent;
+};
+
+struct _libc_fpstate {
+ unsigned long cw;
+ unsigned long sw;
+ unsigned long tag;
+ unsigned long ipoff;
+ unsigned long cssel;
+ unsigned long dataoff;
+ unsigned long datasel;
+ struct _libc_fpreg _st[8];
+ unsigned long status;
+};
+
+typedef struct _libc_fpstate* fpregset_t;
+
+typedef struct {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ unsigned long oldmask;
+ unsigned long cr2;
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: __fpregs_mem? */
+} ucontext_t;
+
+#elif defined(__mips__)
+
+/* glibc doesn't have names for MIPS registers. */
+
+#define NGREG 32
+#define NFPREG 32
+
+typedef unsigned long long greg_t;
+typedef greg_t gregset_t[NGREG];
+
+typedef struct fpregset {
+ union {
+ double fp_dregs[NFPREG];
+ struct {
+ float _fp_fregs;
+ unsigned _fp_pad;
+ } fp_fregs[NFPREG];
+ } fp_r;
+} fpregset_t;
+
+typedef struct {
+ unsigned regmask;
+ unsigned status;
+ greg_t pc;
+ gregset_t gregs;
+ fpregset_t fpregs;
+ unsigned fp_owned;
+ unsigned fpc_csr;
+ unsigned fpc_eir;
+ unsigned used_math;
+ unsigned dsp;
+ greg_t mdhi;
+ greg_t mdlo;
+ unsigned long hi1;
+ unsigned long lo1;
+ unsigned long hi2;
+ unsigned long lo2;
+ unsigned long hi3;
+ unsigned long lo3;
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+} ucontext_t;
+
+#elif defined(__mips64__)
+
+#error TODO
+
+#elif defined(__x86_64__)
+
+enum {
+ REG_R8 = 0,
+ REG_R9,
+ REG_R10,
+ REG_R11,
+ REG_R12,
+ REG_R13,
+ REG_R14,
+ REG_R15,
+ REG_RDI,
+ REG_RSI,
+ REG_RBP,
+ REG_RBX,
+ REG_RDX,
+ REG_RAX,
+ REG_RCX,
+ REG_RSP,
+ REG_RIP,
+ REG_EFL,
+ REG_CSGSFS,
+ REG_ERR,
+ REG_TRAPNO,
+ REG_OLDMASK,
+ REG_CR2,
+ NGREG
+};
+
+typedef long greg_t;
+typedef greg_t gregset_t[NGREG];
+
+typedef struct user_i387_struct* fpregset_t;
+
+typedef struct {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ /* TODO: reserved space? */
+} mcontext_t;
+
+typedef struct ucontext {
+ unsigned long uc_flags;
+ struct ucontext* uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ /* TODO: __fpregs_mem? */
+} ucontext_t;
+
+#endif
+
+__END_DECLS
+
+#endif /* _SYS_UCONTEXT_H_ */
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h
index 9f11a83..90cce80 100644
--- a/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h
+++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h
@@ -181,7 +181,7 @@ struct user {
#elif defined(__arm__)
-struct user_fp {
+struct user_fpregs {
struct fp_reg {
unsigned int sign1:1;
unsigned int unused:15;
@@ -196,6 +196,9 @@ struct user_fp {
unsigned char ftype[8];
unsigned int init_flag;
};
+struct user_regs {
+ unsigned long uregs[18];
+};
struct user_vfp {
unsigned long long fpregs[32];
unsigned long fpscr;
@@ -206,7 +209,7 @@ struct user_vfp_exc {
unsigned long fpinst2;
};
struct user {
- struct pt_regs regs;
+ struct user_regs regs;
int u_fpvalid;
unsigned long int u_tsize;
unsigned long int u_dsize;
@@ -215,12 +218,12 @@ struct user {
unsigned long start_stack;
long int signal;
int reserved;
- unsigned long u_ar0;
+ struct user_regs* u_ar0;
unsigned long magic;
char u_comm[32];
int u_debugreg[8];
- struct user_fp u_fp;
- struct user_fp_struct* u_fp0;
+ struct user_fpregs u_fp;
+ struct user_fpregs* u_fp0;
};
#elif defined(__aarch64__)
diff --git a/9/platforms/android-19/arch-x86_64/usr/include/ucontext.h b/9/platforms/android-19/arch-x86_64/usr/include/ucontext.h
new file mode 100644
index 0000000..5ea2982
--- /dev/null
+++ b/9/platforms/android-19/arch-x86_64/usr/include/ucontext.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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 _UCONTEXT_H_
+#define _UCONTEXT_H_
+
+#include <sys/ucontext.h>
+
+#endif /* _UCONTEXT_H_ */