mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-27 06:43:32 +00:00
adc8165284
This also removes some workarounds for prehistoric Android NDKs Differential Revision: https://phabricator.services.mozilla.com/D210462
63 lines
2.4 KiB
C++
63 lines
2.4 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include <errno.h> // For EPERM
|
|
#include <sys/syscall.h> // For syscall()
|
|
#include <unistd.h>
|
|
|
|
#include "mozilla/Assertions.h"
|
|
|
|
extern "C" {
|
|
|
|
#if defined(__ANDROID_API__) && (__ANDROID_API__ < 24)
|
|
|
|
// Bionic introduced support for getgrgid_r() and getgrnam_r() only in version
|
|
// 24 (that is Android Nougat / 7.0). Since GeckoView is built with version 21,
|
|
// those functions aren't defined, but nix needs them and minidump-writer
|
|
// relies on nix. These functions should never be called in practice hence we
|
|
// implement them only to satisfy nix linking requirements but we crash if we
|
|
// accidentally enter them.
|
|
|
|
int getgrgid_r(gid_t gid, struct group* grp, char* buf, size_t buflen,
|
|
struct group** result) {
|
|
MOZ_CRASH("getgrgid_r() is not available");
|
|
return EPERM;
|
|
}
|
|
|
|
int getgrnam_r(const char* name, struct group* grp, char* buf, size_t buflen,
|
|
struct group** result) {
|
|
MOZ_CRASH("getgrnam_r() is not available");
|
|
return EPERM;
|
|
}
|
|
|
|
#endif // __ANDROID_API__ && (__ANDROID_API__ < 24)
|
|
|
|
#if defined(__ANDROID_API__) && (__ANDROID_API__ < 23)
|
|
|
|
// Bionic introduced support for process_vm_readv() and process_vm_writev() only
|
|
// in version 23 (that is Android Marshmallow / 6.0). Since GeckoView is built
|
|
// on version 21, those functions aren't defined, but nix needs them and
|
|
// minidump-writer actually calls them.
|
|
|
|
ssize_t process_vm_readv(pid_t pid, const struct iovec* local_iov,
|
|
unsigned long int liovcnt,
|
|
const struct iovec* remote_iov,
|
|
unsigned long int riovcnt, unsigned long int flags) {
|
|
return syscall(__NR_process_vm_readv, pid, local_iov, liovcnt, remote_iov,
|
|
riovcnt, flags);
|
|
}
|
|
|
|
ssize_t process_vm_writev(pid_t pid, const struct iovec* local_iov,
|
|
unsigned long int liovcnt,
|
|
const struct iovec* remote_iov,
|
|
unsigned long int riovcnt, unsigned long int flags) {
|
|
return syscall(__NR_process_vm_writev, pid, local_iov, liovcnt, remote_iov,
|
|
riovcnt, flags);
|
|
}
|
|
|
|
#endif // defined(__ANDROID_API__) && (__ANDROID_API__ < 23)
|
|
}
|