android: support host and target 32bit build

This commit is contained in:
Jiangen Jiao
2021-03-25 12:29:27 +08:00
parent 2dac4e785f
commit c892642057
5 changed files with 168 additions and 23 deletions

View File

@ -2,32 +2,31 @@
#ifndef _ANDROID_ASHMEM_H
#define _ANDROID_ASHMEM_H
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/ashmem.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#if __ANDROID_API__ >= 26
#define shmat bionic_shmat
#define shmctl bionic_shmctl
#define shmdt bionic_shmdt
#define shmget bionic_shmget
#endif
#include <sys/shm.h>
#undef shmat
#undef shmctl
#undef shmdt
#undef shmget
#include <stdio.h>
#define ASHMEM_DEVICE "/dev/ashmem"
int shmdt(const void* address) {
#if defined(SYS_shmdt)
return syscall(SYS_shmdt, address);
#else
return syscall(SYS_ipc, SHMDT, 0, 0, 0, address, 0);
#endif
}
int shmctl(int __shmid, int __cmd, struct shmid_ds *__buf) {
int ret = 0;
if (__cmd == IPC_RMID) {
int length = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
int length = ioctl(__shmid, ASHMEM_GET_SIZE, NULL);
struct ashmem_pin pin = {0, length};
ret = ioctl(__shmid, ASHMEM_UNPIN, &pin);
close(__shmid);
@ -78,6 +77,6 @@ void *shmat(int __shmid, const void *__shmaddr, int __shmflg) {
}
#endif /* !_ANDROID_ASHMEM_H */
#endif /* !__ANDROID__ */
#endif /* !_ANDROID_ASHMEM_H */
#endif /* !__ANDROID__ */