forked from mirrors/gecko-dev
Bug 1896845 - Update the replacement functions for the missing ones in bionic r=KrisWright
This also removes some workarounds for prehistoric Android NDKs Differential Revision: https://phabricator.services.mozilla.com/D210462
This commit is contained in:
parent
b547f02b10
commit
adc8165284
3 changed files with 65 additions and 39 deletions
62
toolkit/crashreporter/bionic_missing_funcs.cpp
Normal file
62
toolkit/crashreporter/bionic_missing_funcs.cpp
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- 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)
|
||||
}
|
||||
|
|
@ -96,12 +96,12 @@ if CONFIG["MOZ_CRASHREPORTER"]:
|
|||
DEFINES["ANDROID_NDK_MAJOR_VERSION"] = CONFIG["ANDROID_NDK_MAJOR_VERSION"]
|
||||
DEFINES["ANDROID_NDK_MINOR_VERSION"] = CONFIG["ANDROID_NDK_MINOR_VERSION"]
|
||||
DEFINES["ANDROID_PACKAGE_NAME"] = '"%s"' % CONFIG["ANDROID_PACKAGE_NAME"]
|
||||
# NDK5 workarounds
|
||||
DEFINES["_STLP_CONST_CONSTRUCTOR_BUG"] = True
|
||||
DEFINES["_STLP_NO_MEMBER_TEMPLATES"] = True
|
||||
LOCAL_INCLUDES += [
|
||||
"/toolkit/crashreporter/google-breakpad/src/common/android/include",
|
||||
]
|
||||
UNIFIED_SOURCES += [
|
||||
"bionic_missing_funcs.cpp",
|
||||
]
|
||||
|
||||
DEFINES["UNICODE"] = True
|
||||
DEFINES["_UNICODE"] = True
|
||||
|
|
|
|||
|
|
@ -3882,39 +3882,3 @@ void SetNotificationPipeForChild(int childCrashFd) {
|
|||
#endif
|
||||
|
||||
} // namespace CrashReporter
|
||||
|
||||
#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.1.2). Since GeckoView is built by version 16
|
||||
// (32-bit) or 21 (64-bit), 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.
|
||||
|
||||
extern "C" {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
int mlockall(int flags) {
|
||||
MOZ_CRASH("mlockall() is not available");
|
||||
return EPERM;
|
||||
}
|
||||
|
||||
int munlockall(void) {
|
||||
MOZ_CRASH("munlockall() is not available");
|
||||
return EPERM;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // __ANDROID_API__ && (__ANDROID_API__ < 24)
|
||||
|
|
|
|||
Loading…
Reference in a new issue