Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(591)

Side by Side Diff: runtime/vm/signal_handler.h

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/service_test.cc ('k') | runtime/vm/simulator_arm.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_SIGNAL_HANDLER_H_ 5 #ifndef RUNTIME_VM_SIGNAL_HANDLER_H_
6 #define RUNTIME_VM_SIGNAL_HANDLER_H_ 6 #define RUNTIME_VM_SIGNAL_HANDLER_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/globals.h" 9 #include "vm/globals.h"
10 10
11 #if defined(TARGET_OS_LINUX) 11 #if defined(TARGET_OS_LINUX)
12 #include <signal.h> // NOLINT 12 #include <signal.h> // NOLINT
13 #include <ucontext.h> // NOLINT 13 #include <ucontext.h> // NOLINT
14 #elif defined(TARGET_OS_ANDROID) 14 #elif defined(TARGET_OS_ANDROID)
15 #include <signal.h> // NOLINT 15 #include <signal.h> // NOLINT
16 #if !defined(__BIONIC_HAVE_UCONTEXT_T) 16 #if !defined(__BIONIC_HAVE_UCONTEXT_T)
17 #include <asm/sigcontext.h> // NOLINT 17 #include <asm/sigcontext.h> // NOLINT
18 // If ucontext_t is not defined on Android, define it here. 18 // If ucontext_t is not defined on Android, define it here.
19 typedef struct sigcontext mcontext_t; 19 typedef struct sigcontext mcontext_t;
20 typedef struct ucontext { 20 typedef struct ucontext {
21 uint32_t uc_flags; 21 uint32_t uc_flags;
22 struct ucontext *uc_link; 22 struct ucontext* uc_link;
23 stack_t uc_stack; 23 stack_t uc_stack;
24 struct sigcontext uc_mcontext; 24 struct sigcontext uc_mcontext;
25 uint32_t uc_sigmask; 25 uint32_t uc_sigmask;
26 } ucontext_t; 26 } ucontext_t;
27 #endif // !defined(__BIONIC_HAVE_UCONTEXT_T) 27 #endif // !defined(__BIONIC_HAVE_UCONTEXT_T)
28 #elif defined(TARGET_OS_MACOS) 28 #elif defined(TARGET_OS_MACOS)
29 #include <signal.h> // NOLINT 29 #include <signal.h> // NOLINT
30 #include <sys/ucontext.h> // NOLINT 30 #include <sys/ucontext.h> // NOLINT
31 #elif defined(TARGET_OS_WINDOWS) 31 #elif defined(TARGET_OS_WINDOWS)
32 // Stub out for windows. 32 // Stub out for windows.
33 struct siginfo_t; 33 struct siginfo_t;
34 struct mcontext_t; 34 struct mcontext_t;
35 struct sigset_t { 35 struct sigset_t {};
36 };
37 #elif defined(TARGET_OS_FUCHSIA) 36 #elif defined(TARGET_OS_FUCHSIA)
38 #include <signal.h> // NOLINT 37 #include <signal.h> // NOLINT
39 #include <ucontext.h> // NOLINT 38 #include <ucontext.h> // NOLINT
40 #endif 39 #endif
41 40
42 41
43 // Old linux kernels on ARM might require a trampoline to 42 // Old linux kernels on ARM might require a trampoline to
44 // work around incorrect Thumb -> ARM transitions. See SignalHandlerTrampoline 43 // work around incorrect Thumb -> ARM transitions. See SignalHandlerTrampoline
45 // below for more details. 44 // below for more details.
46 #if defined(HOST_ARCH_ARM) && \ 45 #if defined(HOST_ARCH_ARM) && \
47 (defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)) && \ 46 (defined(TARGET_OS_LINUX) || defined(TARGET_OS_ANDROID)) && \
48 !defined(__thumb__) 47 !defined(__thumb__)
49 #define USE_SIGNAL_HANDLER_TRAMPOLINE 48 #define USE_SIGNAL_HANDLER_TRAMPOLINE
50 #endif 49 #endif
51 50
52 51
53 namespace dart { 52 namespace dart {
54 53
55 typedef void (*SignalAction)(int signal, siginfo_t* info, 54 typedef void (*SignalAction)(int signal, siginfo_t* info, void* context);
56 void* context);
57 55
58 class SignalHandler : public AllStatic { 56 class SignalHandler : public AllStatic {
59 public: 57 public:
60 template<SignalAction action> 58 template <SignalAction action>
61 static void Install() { 59 static void Install() {
62 #if defined(USE_SIGNAL_HANDLER_TRAMPOLINE) 60 #if defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
63 InstallImpl(SignalHandlerTrampoline<action>); 61 InstallImpl(SignalHandlerTrampoline<action>);
64 #else 62 #else
65 InstallImpl(action); 63 InstallImpl(action);
66 #endif // defined(USE_SIGNAL_HANDLER_TRAMPOLINE) 64 #endif // defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
67 } 65 }
68 static void Remove(); 66 static void Remove();
69 static uintptr_t GetProgramCounter(const mcontext_t& mcontext); 67 static uintptr_t GetProgramCounter(const mcontext_t& mcontext);
70 static uintptr_t GetFramePointer(const mcontext_t& mcontext); 68 static uintptr_t GetFramePointer(const mcontext_t& mcontext);
(...skipping 30 matching lines...) Expand all
101 asm volatile("nop; nop; nop; nop" : : : "memory"); 99 asm volatile("nop; nop; nop; nop" : : : "memory");
102 100
103 // Tail-call into the actual signal handler. 101 // Tail-call into the actual signal handler.
104 // Note: this code is split into a separate inline assembly block because 102 // Note: this code is split into a separate inline assembly block because
105 // any code that compiler generates to satisfy register constraints must 103 // any code that compiler generates to satisfy register constraints must
106 // be generated after four NOPs. 104 // be generated after four NOPs.
107 register int arg0 asm("r0") = signal; 105 register int arg0 asm("r0") = signal;
108 register siginfo_t* arg1 asm("r1") = info; 106 register siginfo_t* arg1 asm("r1") = info;
109 register void* arg2 asm("r2") = context_; 107 register void* arg2 asm("r2") = context_;
110 asm volatile("bx %3" 108 asm volatile("bx %3"
111 : 109 :
112 : "r"(arg0), "r"(arg1), "r"(arg2), 110 : "r"(arg0), "r"(arg1), "r"(arg2), "r"(action)
113 "r"(action) 111 : "memory");
114 : "memory");
115 } 112 }
116 #endif // defined(USE_SIGNAL_HANDLER_TRAMPOLINE) 113 #endif // defined(USE_SIGNAL_HANDLER_TRAMPOLINE)
117 }; 114 };
118 115
119 116
120 #undef USE_SIGNAL_HANDLER_TRAMPOLINE 117 #undef USE_SIGNAL_HANDLER_TRAMPOLINE
121 118
122 119
123 } // namespace dart 120 } // namespace dart
124 121
125 #endif // RUNTIME_VM_SIGNAL_HANDLER_H_ 122 #endif // RUNTIME_VM_SIGNAL_HANDLER_H_
OLDNEW
« no previous file with comments | « runtime/vm/service_test.cc ('k') | runtime/vm/simulator_arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698