Skip to content

Commit

Permalink
linux: Add ExceptionHandlerServer and ExceptionHandlerClient
Browse files Browse the repository at this point in the history
Bug: crashpad:30
Change-Id: I60874a26ccb281144f870df2b4d16c6970a39f6b
Reviewed-on: https://chromium-review.googlesource.com/772824
Commit-Queue: Joshua Peraza <[email protected]>
Reviewed-by: Mark Mentovai <[email protected]>
  • Loading branch information
Joshua Peraza authored and Commit Bot committed Dec 19, 2017
1 parent 99b0030 commit 9b2ba58
Show file tree
Hide file tree
Showing 27 changed files with 1,483 additions and 58 deletions.
37 changes: 37 additions & 0 deletions compat/android/sys/epoll.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright 2017 The Crashpad Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <sys/epoll.h>

#include <dlfcn.h>
#include <sys/syscall.h>
#include <unistd.h>

#if __ANDROID_API__ < 21

extern "C" {

int epoll_create1(int flags) {
static const auto epoll_create1_p =
reinterpret_cast<int (*)(int)>(dlsym(RTLD_DEFAULT, "epoll_create1"));
if (epoll_create1_p) {
return epoll_create1_p(flags);
}

return syscall(SYS_epoll_create1, flags);
}

} // extern "C"

#endif // __ANDROID_API__ < 21
50 changes: 50 additions & 0 deletions compat/android/sys/epoll.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2017 The Crashpad Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef CRASHPAD_COMPAT_ANDROID_SYS_EPOLL_H_
#define CRASHPAD_COMPAT_ANDROID_SYS_EPOLL_H_

#include_next <sys/epoll.h>

#include <android/api-level.h>
#include <fcntl.h>

// This is missing from traditional headers before API 21.
#if !defined(EPOLLRDHUP)
#define EPOLLRDHUP 0x00002000
#endif

// EPOLL_CLOEXEC is undefined in traditional headers before API 21 and removed
// from unified headers at API levels < 21 as a means to indicate that
// epoll_create1 is missing from the C library, but the raw system call should
// still be available.
#if !defined(EPOLL_CLOEXEC)
#define EPOLL_CLOEXEC O_CLOEXEC
#endif

#if __ANDROID_API__ < 21

#ifdef __cplusplus
extern "C" {
#endif

int epoll_create1(int flags);

#ifdef __cplusplus
} // extern "C"
#endif

#endif // __ANDROID_API__ < 21

#endif // CRASHPAD_COMPAT_ANDROID_SYS_EPOLL_H_
4 changes: 4 additions & 0 deletions compat/android/sys/syscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@

// Android 5.0.0 (API 21) NDK

#if !defined(SYS_epoll_create1)
#define SYS_epoll_create1 __NR_epoll_create1
#endif

#if !defined(SYS_gettid)
#define SYS_gettid __NR_gettid
#endif
Expand Down
2 changes: 2 additions & 0 deletions compat/compat.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
'android/linux/prctl.h',
'android/linux/ptrace.h',
'android/sched.h',
'android/sys/epoll.cc',
'android/sys/epoll.h',
'android/sys/mman.cc',
'android/sys/mman.h',
'android/sys/syscall.h',
Expand Down
23 changes: 23 additions & 0 deletions handler/handler.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
'crash_report_upload_thread.h',
'handler_main.cc',
'handler_main.h',
'linux/exception_handler_server.cc',
'linux/exception_handler_server.h',
'mac/crash_report_exception_handler.cc',
'mac/crash_report_exception_handler.h',
'mac/exception_handler_server.cc',
Expand All @@ -54,6 +56,27 @@
'win/crash_report_exception_handler.cc',
'win/crash_report_exception_handler.h',
],
'conditions': [
['OS=="linux" or OS=="android"', {
'sources!': [
'handler_main.cc',
],
}],
['OS=="linux"', {
'link_settings': {
'libraries': [
'-lcap',
],
},
}],
],
'target_conditions': [
['OS=="android"', {
'sources/': [
['include', '^linux/'],
],
}],
],
},
{
'target_name': 'crashpad_handler',
Expand Down
8 changes: 8 additions & 0 deletions handler/handler_test.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
],
'sources': [
'crashpad_handler_test.cc',
'linux/exception_handler_server_test.cc',
'minidump_to_upload_parameters_test.cc',
],
'conditions': [
Expand All @@ -50,6 +51,13 @@
],
}],
],
'target_conditions': [
['OS=="android"', {
'sources/': [
['include', '^linux/'],
],
}],
],
},
{
'target_name': 'crashpad_handler_test_extended_handler',
Expand Down
Loading

0 comments on commit 9b2ba58

Please sign in to comment.