Automate generation of assembly offsets from C structures via XTADK
This commit is contained in:
14
sdk/xtadk/CMakeLists.txt
Normal file
14
sdk/xtadk/CMakeLists.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
# XT Assembly Development Kit
|
||||
PROJECT(XTADK)
|
||||
|
||||
# Specify include directories
|
||||
include_directories(
|
||||
${EXECTOS_SOURCE_DIR}/sdk/xtdk
|
||||
${XTADK_SOURCE_DIR}/includes)
|
||||
|
||||
# Specify list of XTADK source code files
|
||||
list(APPEND XTADK_SOURCE
|
||||
${XTADK_SOURCE_DIR}/${ARCH}/ke.cc)
|
||||
|
||||
# Generate assembly header from XTADK sources
|
||||
generate_xtadk(xtadk "${XTADK_SOURCE}")
|
||||
83
sdk/xtadk/amd64/ke.cc
Normal file
83
sdk/xtadk/amd64/ke.cc
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: sdk/xtadk/amd64/ke.cc
|
||||
* DESCRIPTION: ADK generator for AMD64 version of Kernel Library
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#include <xtkmapi.h>
|
||||
#include <adkdefs.h>
|
||||
|
||||
|
||||
/**
|
||||
* Generates a definitions file for the Kernel Library used by the XTOS kernel assembly code
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCLINK
|
||||
XTAPI
|
||||
VOID
|
||||
GenerateAssemblyDefinitions(VOID)
|
||||
{
|
||||
/* Generate KTRAP_FRAME offsets */
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm0);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm1);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm2);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm3);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm4);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm5);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm6);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm7);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm8);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm9);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm10);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm11);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm12);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm13);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm14);
|
||||
ADK_OFFSET(KTRAP_FRAME, Xmm15);
|
||||
ADK_OFFSET(KTRAP_FRAME, MxCsr);
|
||||
ADK_OFFSET(KTRAP_FRAME, PreviousMode);
|
||||
ADK_OFFSET(KTRAP_FRAME, Cr2);
|
||||
ADK_OFFSET(KTRAP_FRAME, Cr3);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr0);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr1);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr2);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr3);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr6);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr7);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegDs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegEs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegFs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegGs);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rax);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rbx);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rcx);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rdx);
|
||||
ADK_OFFSET(KTRAP_FRAME, R8);
|
||||
ADK_OFFSET(KTRAP_FRAME, R9);
|
||||
ADK_OFFSET(KTRAP_FRAME, R10);
|
||||
ADK_OFFSET(KTRAP_FRAME, R11);
|
||||
ADK_OFFSET(KTRAP_FRAME, R12);
|
||||
ADK_OFFSET(KTRAP_FRAME, R13);
|
||||
ADK_OFFSET(KTRAP_FRAME, R14);
|
||||
ADK_OFFSET(KTRAP_FRAME, R15);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rsi);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rdi);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rbp);
|
||||
ADK_OFFSET(KTRAP_FRAME, Vector);
|
||||
ADK_OFFSET(KTRAP_FRAME, ErrorCode);
|
||||
ADK_OFFSET(KTRAP_FRAME, ExceptionFrame);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rip);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegCs);
|
||||
ADK_OFFSET(KTRAP_FRAME, Flags);
|
||||
ADK_OFFSET(KTRAP_FRAME, Rsp);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegSs);
|
||||
|
||||
/* Generate KTRAP_FRAME size and REGISTERS_SIZE */
|
||||
ADK_SIZE(KTRAP_FRAME);
|
||||
ADK_SIZE_FROM(REGISTERS_SIZE, KTRAP_FRAME, Rax);
|
||||
}
|
||||
57
sdk/xtadk/i686/ke.cc
Normal file
57
sdk/xtadk/i686/ke.cc
Normal file
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: sdk/xtadk/i686/ke.cc
|
||||
* DESCRIPTION: ADK generator for i686 version of Kernel Library
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#include <xtkmapi.h>
|
||||
#include <adkdefs.h>
|
||||
|
||||
|
||||
/**
|
||||
* Generates a definitions file for the Kernel Library used by the XTOS kernel assembly code
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTCLINK
|
||||
XTAPI
|
||||
VOID
|
||||
GenerateAssemblyDefinitions(VOID)
|
||||
{
|
||||
/* Generate KTRAP_FRAME offsets */
|
||||
ADK_OFFSET(KTRAP_FRAME, PreviousMode);
|
||||
ADK_OFFSET(KTRAP_FRAME, Cr2);
|
||||
ADK_OFFSET(KTRAP_FRAME, Cr3);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr0);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr1);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr2);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr3);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr6);
|
||||
ADK_OFFSET(KTRAP_FRAME, Dr7);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegDs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegEs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegFs);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegGs);
|
||||
ADK_OFFSET(KTRAP_FRAME, Eax);
|
||||
ADK_OFFSET(KTRAP_FRAME, Ebx);
|
||||
ADK_OFFSET(KTRAP_FRAME, Ecx);
|
||||
ADK_OFFSET(KTRAP_FRAME, Edx);
|
||||
ADK_OFFSET(KTRAP_FRAME, Esi);
|
||||
ADK_OFFSET(KTRAP_FRAME, Edi);
|
||||
ADK_OFFSET(KTRAP_FRAME, Ebp);
|
||||
ADK_OFFSET(KTRAP_FRAME, Vector);
|
||||
ADK_OFFSET(KTRAP_FRAME, ErrorCode);
|
||||
ADK_OFFSET(KTRAP_FRAME, Eip);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegCs);
|
||||
ADK_OFFSET(KTRAP_FRAME, Flags);
|
||||
ADK_OFFSET(KTRAP_FRAME, Esp);
|
||||
ADK_OFFSET(KTRAP_FRAME, SegSs);
|
||||
|
||||
/* Generate KTRAP_FRAME size and REGISTERS_SIZE */
|
||||
ADK_SIZE(KTRAP_FRAME);
|
||||
ADK_SIZE_FROM(REGISTERS_SIZE, KTRAP_FRAME, Rax);
|
||||
}
|
||||
19
sdk/xtadk/includes/adkdefs.h
Normal file
19
sdk/xtadk/includes/adkdefs.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: sdk/xtadk/adkdefs.h
|
||||
* DESCRIPTION: Definitions for XTADK
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __XTADK_ADKDEFS_H
|
||||
#define __XTADK_ADKDEFS_H
|
||||
|
||||
|
||||
/* Macros for calculating structure size and offsets for assembler code */
|
||||
#define ADK_DEFINE(Symbol, Value) __asm__ volatile("\n\t# ==> " #Symbol " %c0" : : "i" ((SIZE_T)(Value)))
|
||||
#define ADK_OFFSET(Structure, Member) ADK_DEFINE(Structure ## _ ## Member, FIELD_OFFSET(Structure, Member))
|
||||
#define ADK_SIZE(Structure) ADK_DEFINE(Structure ## _SIZE, sizeof(Structure))
|
||||
#define ADK_SIZE_FROM(Name, Structure, Member) ADK_DEFINE(Structure ## _ ## Name, sizeof(Structure) - FIELD_OFFSET(Structure, Member))
|
||||
|
||||
#endif /* __XTADK_ADKDEFS_H */
|
||||
Reference in New Issue
Block a user