1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 // Generic implementation that relies on guest arch-specific headers. This file must be compiled 18 // separately for each guest architecture. 19 20 #include "berberis/guest_os_primitives/guest_signal.h" 21 22 #include "berberis/base/host_signal.h" 23 #include "berberis/guest_abi/function_wrappers.h" // WrapHostFunction 24 #include "berberis/guest_os_primitives/guest_signal_arch.h" 25 #include "berberis/guest_state/guest_addr.h" // ToGuestAddr, ToHostAddr 26 27 namespace berberis { 28 WrapHostSigactionForGuest(const HostStructSigaction & host_sa)29GuestAddr WrapHostSigactionForGuest(const HostStructSigaction& host_sa) { 30 if (host_sa.sa_flags & SA_SIGINFO) { 31 WrapHostFunction(host_sa.sa_sigaction, "<host-sa_sigaction>"); 32 return ToGuestAddr(host_sa.sa_sigaction); 33 } else if (host_sa.sa_handler == SIG_DFL) { 34 return Guest_SIG_DFL; 35 } else if (host_sa.sa_handler == SIG_IGN) { 36 return Guest_SIG_IGN; 37 } else if (host_sa.sa_handler == SIG_ERR) { 38 return Guest_SIG_ERR; 39 } else { 40 WrapHostFunction(host_sa.sa_handler, "<host-sa_handler>"); 41 return ToGuestAddr(host_sa.sa_handler); 42 } 43 } 44 45 } // namespace berberis 46