TrapFrame.h 984 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. #include <Kernel/Arch/x86/InterruptDisabler.h>
  9. #include <Kernel/Arch/x86/Processor.h>
  10. #include <Kernel/Arch/x86/RegisterState.h>
  11. namespace Kernel {
  12. struct TrapFrame {
  13. FlatPtr prev_irq_level;
  14. TrapFrame* next_trap;
  15. RegisterState* regs; // must be last
  16. TrapFrame() = delete;
  17. TrapFrame(const TrapFrame&) = delete;
  18. TrapFrame(TrapFrame&&) = delete;
  19. TrapFrame& operator=(const TrapFrame&) = delete;
  20. TrapFrame& operator=(TrapFrame&&) = delete;
  21. };
  22. #if ARCH(I386)
  23. # define TRAP_FRAME_SIZE (3 * 4)
  24. #else
  25. # define TRAP_FRAME_SIZE (3 * 8)
  26. #endif
  27. static_assert(TRAP_FRAME_SIZE == sizeof(TrapFrame));
  28. extern "C" void enter_trap_no_irq(TrapFrame* trap) __attribute__((used));
  29. extern "C" void enter_trap(TrapFrame*) __attribute__((used));
  30. extern "C" void exit_trap(TrapFrame*) __attribute__((used));
  31. }