The Pedigree Project 0.1
linux-amd64-signal.h
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#ifndef POSIX_LINUX_AMD64_SIGNAL_H
21#define POSIX_LINUX_AMD64_SIGNAL_H
22#include "pedigree/kernel/compiler.h"
23#include "pedigree/kernel/processor/state_forward.h"
24
25#include <config.h>
26
27#include "PosixSubsystem.h"
28
29namespace LinuxAmd64Signal {
30enum DeliveryResult { NotApplicable, Delivered, Failed };
31
32#if X64
33class AsyncEvent final : public SignalEvent {
34 public:
35 AsyncEvent(uintptr_t handler, size_t signal, uint64_t signalMask, bool deferSignal,
36 uint32_t flags, uintptr_t restorer, bool useAlternateStack, bool isDeletable = false);
37
38 bool requiresExactUserReturnState() const override {
39 return true;
40 }
41
42 Event::UserReturnDelivery deliverAtUserReturn(InterruptState& state) override;
43 Event::UserReturnDelivery deliverAtUserReturn(SyscallState& state) override;
44 Event* cloneForDelivery() override;
46
47 uint32_t getFlags() const {
48 return m_Flags;
49 }
50
51 uintptr_t getRestorer() const {
52 return m_Restorer;
53 }
54
55 private:
56 AsyncEvent(const AsyncEvent& other, bool isDeletable);
57
58 uint32_t m_Flags;
59 uintptr_t m_Restorer;
60};
61
62DeliveryResult deliverSynchronous(Thread* thread, int signal,
63 const PosixSubsystem::SignalDisposition& disposition,
64 Subsystem::ExceptionType exception, InterruptState& state,
65 uintptr_t faultAddress, uintptr_t errorCode);
66
67void sigreturn(SyscallState& state);
68#endif
69} // namespace LinuxAmd64Signal
70
71#endif
Definition Event.h:49
virtual bool isDeletable()
Definition Event.cc:225
UserReturnDelivery
Definition Event.h:58
SignalEvent * cloneForDisposition() override
Event::UserReturnDelivery deliverAtUserReturn(InterruptState &state) override
bool requiresExactUserReturnState() const override