summaryrefslogtreecommitdiffstats
path: root/src/arch/x86_64/include/bits
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86_64/include/bits')
-rw-r--r--src/arch/x86_64/include/bits/byteswap.h1
-rw-r--r--src/arch/x86_64/include/bits/compiler.h1
-rw-r--r--src/arch/x86_64/include/bits/gdbmach.h80
-rw-r--r--src/arch/x86_64/include/bits/profile.h3
-rw-r--r--src/arch/x86_64/include/bits/setjmp.h28
-rw-r--r--src/arch/x86_64/include/bits/stdint.h1
-rw-r--r--src/arch/x86_64/include/bits/strings.h1
7 files changed, 114 insertions, 1 deletions
diff --git a/src/arch/x86_64/include/bits/byteswap.h b/src/arch/x86_64/include/bits/byteswap.h
index d8c5098ef..7c48a27ca 100644
--- a/src/arch/x86_64/include/bits/byteswap.h
+++ b/src/arch/x86_64/include/bits/byteswap.h
@@ -10,6 +10,7 @@
#include <stdint.h>
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
static inline __attribute__ (( always_inline, const )) uint16_t
__bswap_variable_16 ( uint16_t x ) {
diff --git a/src/arch/x86_64/include/bits/compiler.h b/src/arch/x86_64/include/bits/compiler.h
index 1c04a7b30..99185b058 100644
--- a/src/arch/x86_64/include/bits/compiler.h
+++ b/src/arch/x86_64/include/bits/compiler.h
@@ -2,6 +2,7 @@
#define _BITS_COMPILER_H
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
/** Dummy relocation type */
#define RELOC_TYPE_NONE R_X86_64_NONE
diff --git a/src/arch/x86_64/include/bits/gdbmach.h b/src/arch/x86_64/include/bits/gdbmach.h
new file mode 100644
index 000000000..367405fd6
--- /dev/null
+++ b/src/arch/x86_64/include/bits/gdbmach.h
@@ -0,0 +1,80 @@
+#ifndef GDBMACH_H
+#define GDBMACH_H
+
+/** @file
+ *
+ * GDB architecture specifics
+ *
+ * This file declares functions for manipulating the machine state and
+ * debugging context.
+ *
+ */
+
+#include <stdint.h>
+
+typedef unsigned long gdbreg_t;
+
+/* Register snapshot */
+enum {
+ GDBMACH_RAX,
+ GDBMACH_RBX,
+ GDBMACH_RCX,
+ GDBMACH_RDX,
+ GDBMACH_RSI,
+ GDBMACH_RDI,
+ GDBMACH_RBP,
+ GDBMACH_RSP,
+ GDBMACH_R8,
+ GDBMACH_R9,
+ GDBMACH_R10,
+ GDBMACH_R11,
+ GDBMACH_R12,
+ GDBMACH_R13,
+ GDBMACH_R14,
+ GDBMACH_R15,
+ GDBMACH_RIP,
+ GDBMACH_RFLAGS,
+ GDBMACH_CS,
+ GDBMACH_SS,
+ GDBMACH_DS,
+ GDBMACH_ES,
+ GDBMACH_FS,
+ GDBMACH_GS,
+ GDBMACH_NREGS,
+};
+
+#define GDBMACH_SIZEOF_REGS ( GDBMACH_NREGS * sizeof ( gdbreg_t ) )
+
+/* Breakpoint types */
+enum {
+ GDBMACH_BPMEM,
+ GDBMACH_BPHW,
+ GDBMACH_WATCH,
+ GDBMACH_RWATCH,
+ GDBMACH_AWATCH,
+};
+
+/* Exception vectors */
+extern void gdbmach_sigfpe ( void );
+extern void gdbmach_sigtrap ( void );
+extern void gdbmach_sigstkflt ( void );
+extern void gdbmach_sigill ( void );
+
+static inline void gdbmach_set_pc ( gdbreg_t *regs, gdbreg_t pc ) {
+ regs[GDBMACH_RIP] = pc;
+}
+
+static inline void gdbmach_set_single_step ( gdbreg_t *regs, int step ) {
+ regs[GDBMACH_RFLAGS] &= ~( 1 << 8 ); /* Trace Flag (TF) */
+ regs[GDBMACH_RFLAGS] |= ( step << 8 );
+}
+
+static inline void gdbmach_breakpoint ( void ) {
+ __asm__ __volatile__ ( "int $3\n" );
+}
+
+extern int gdbmach_set_breakpoint ( int type, unsigned long addr, size_t len,
+ int enable );
+extern void gdbmach_init ( void );
+
+#endif /* GDBMACH_H */
diff --git a/src/arch/x86_64/include/bits/profile.h b/src/arch/x86_64/include/bits/profile.h
index b7c74fbe7..c8e0a21f1 100644
--- a/src/arch/x86_64/include/bits/profile.h
+++ b/src/arch/x86_64/include/bits/profile.h
@@ -8,6 +8,7 @@
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
#include <stdint.h>
@@ -16,7 +17,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*
* @ret timestamp Timestamp
*/
-static inline __attribute__ (( always_inline )) uint64_t
+static inline __attribute__ (( always_inline )) unsigned long
profile_timestamp ( void ) {
uint32_t eax;
uint32_t edx;
diff --git a/src/arch/x86_64/include/bits/setjmp.h b/src/arch/x86_64/include/bits/setjmp.h
new file mode 100644
index 000000000..adfb869ea
--- /dev/null
+++ b/src/arch/x86_64/include/bits/setjmp.h
@@ -0,0 +1,28 @@
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#include <stdint.h>
+
+/** A jump buffer */
+typedef struct {
+ /** Saved return address */
+ uint64_t retaddr;
+ /** Saved stack pointer */
+ uint64_t stack;
+ /** Saved %rbx */
+ uint64_t rbx;
+ /** Saved %rbp */
+ uint64_t rbp;
+ /** Saved %r12 */
+ uint64_t r12;
+ /** Saved %r13 */
+ uint64_t r13;
+ /** Saved %r14 */
+ uint64_t r14;
+ /** Saved %r15 */
+ uint64_t r15;
+} jmp_buf[1];
+
+#endif /* _BITS_SETJMP_H */
diff --git a/src/arch/x86_64/include/bits/stdint.h b/src/arch/x86_64/include/bits/stdint.h
index fe1f9946a..e75bed502 100644
--- a/src/arch/x86_64/include/bits/stdint.h
+++ b/src/arch/x86_64/include/bits/stdint.h
@@ -2,6 +2,7 @@
#define _BITS_STDINT_H
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
typedef __SIZE_TYPE__ size_t;
typedef signed long ssize_t;
diff --git a/src/arch/x86_64/include/bits/strings.h b/src/arch/x86_64/include/bits/strings.h
index 3b7911f3b..6da8f1350 100644
--- a/src/arch/x86_64/include/bits/strings.h
+++ b/src/arch/x86_64/include/bits/strings.h
@@ -2,6 +2,7 @@
#define _BITS_STRINGS_H
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+FILE_SECBOOT ( PERMITTED );
/**
* Find first (i.e. least significant) set bit