mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-04 21:01:40 +00:00
[Pal] Move x86_64/Linux specifics from pal.h into arch/x86_64/pal-arch.h
Also, adapt the Makefiles to add the directory to the CFLAGS.
This commit is contained in:
committed by
Michał Kowalczyk
parent
76a6a2e706
commit
74dc2ebfc3
@@ -8,7 +8,8 @@ CFLAGS += -fPIC -Winline -Wwrite-strings \
|
||||
$(cc-option, -Wnull-dereference) \
|
||||
-fno-stack-protector -fno-builtin -Wno-inline \
|
||||
-I../include -I../../../Pal/include/lib -I../../../Pal/include/pal \
|
||||
-I../../../Pal/include/elf -I../../../Pal/include/lib/$(ARCH)
|
||||
-I../../../Pal/include/elf -I../../../Pal/include/lib/$(ARCH) \
|
||||
-I../../../Pal/include/arch/$(ARCH)
|
||||
|
||||
CFLAGS += -Wextra
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ include ../../../../Scripts/Makefile.configs
|
||||
include ../../../../Scripts/Makefile.manifest
|
||||
include ../../../../Scripts/Makefile.Test
|
||||
|
||||
CFLAGS += -I $(PALDIR)/../include/arch/$(ARCH)
|
||||
|
||||
.PHONY: crt_init-recurse
|
||||
crt_init-recurse:
|
||||
$(MAKE) -C ../crt_init all
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
/* Copyright (C) 2014 Stony Brook University
|
||||
This file is part of Graphene Library OS.
|
||||
|
||||
Graphene Library OS is free software: you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License
|
||||
as published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
Graphene Library OS is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/*!
|
||||
* \file pal-arch.h
|
||||
*
|
||||
* This file contains definition of x86_64-specific aspects of PAL.
|
||||
*/
|
||||
|
||||
#ifndef PAL_ARCH_H
|
||||
#define PAL_ARCH_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct pal_tcb PAL_TCB;
|
||||
|
||||
static inline PAL_TCB * pal_get_tcb (void)
|
||||
{
|
||||
PAL_TCB * tcb;
|
||||
__asm__ ("movq %%gs:%c1,%q0"
|
||||
: "=r" (tcb)
|
||||
: "i" (offsetof(struct pal_tcb, self)));
|
||||
return tcb;
|
||||
}
|
||||
|
||||
union pal_csgsfs {
|
||||
struct {
|
||||
uint16_t cs;
|
||||
uint16_t gs;
|
||||
uint16_t fs;
|
||||
uint16_t ss;
|
||||
};
|
||||
uint64_t csgsfs;
|
||||
};
|
||||
|
||||
/* Adopt Linux style fp layout, _libc_fpstate of glibc:
|
||||
* Because self-contained definition is needed for Pal definition,
|
||||
* same layout is defined with PAL prefix.
|
||||
*/
|
||||
#define PAL_FP_XSTATE_MAGIC1 0x46505853U
|
||||
#define PAL_FP_XSTATE_MAGIC2 0x46505845U
|
||||
#define PAL_FP_XSTATE_MAGIC2_SIZE (sizeof(PAL_FP_XSTATE_MAGIC2))
|
||||
|
||||
enum PAL_XFEATURE {
|
||||
PAL_XFEATURE_FP,
|
||||
PAL_XFEATURE_SSE,
|
||||
PAL_XFEATURE_YMM,
|
||||
PAL_XFEATURE_BNDREGS,
|
||||
PAL_XFEATURE_BNDCSR,
|
||||
PAL_XFEATURE_OPMASK,
|
||||
PAL_XFEATURE_ZMM_Hi256,
|
||||
PAL_XFEATURE_Hi16_ZMM,
|
||||
PAL_XFEATURE_PT,
|
||||
PAL_XFEATURE_PKRU,
|
||||
|
||||
PAL_XFEATURE_MAX,
|
||||
};
|
||||
|
||||
#define PAL_XFEATURE_MASK_FP (1UL << PAL_XFEATURE_FP)
|
||||
#define PAL_XFEATURE_MASK_SSE (1UL << PAL_XFEATURE_SSE)
|
||||
#define PAL_XFEATURE_MASK_YMM (1UL << PAL_XFEATURE_YMM)
|
||||
#define PAL_XFEATURE_MASK_BNDREGS (1UL << PAL_XFEATURE_BNDREGS)
|
||||
#define PAL_XFEATURE_MASK_BNDCSR (1UL << PAL_XFEATURE_BNDCSR)
|
||||
#define PAL_XFEATURE_MASK_OPMASK (1UL << PAL_XFEATURE_OPMASK)
|
||||
#define PAL_XFEATURE_MASK_ZMM_Hi256 (1UL << PAL_XFEATURE_ZMM_Hi256)
|
||||
#define PAL_XFEATURE_MASK_Hi16_ZMM (1UL << PAL_XFEATURE_Hi16_ZMM)
|
||||
#define PAL_XFEATURE_MASK_PT (1UL << PAL_XFEATURE_PT)
|
||||
#define PAL_XFEATURE_MASK_PKRU (1UL << PAL_XFEATURE_PKRU)
|
||||
|
||||
#define PAL_XFEATURE_MASK_FPSSE (PAL_XFEATURE_MASK_FP \
|
||||
| PAL_XFEATURE_MASK_SSE)
|
||||
#define PAL_XFEATURE_MASK_AVX512 (PAL_XFEATURE_MASK_OPMASK \
|
||||
| PAL_XFEATURE_MASK_ZMM_Hi256 \
|
||||
| PAL_XFEATURE_MASK_Hi16_ZMM)
|
||||
|
||||
typedef struct {
|
||||
uint32_t magic1; /*!< PAL_FP_XSTATE_MAGIC1 */
|
||||
uint32_t extended_size; /*!< xsave_size */
|
||||
uint64_t xfeatures; /*!< XSAVE feature */
|
||||
uint32_t xstate_size; /*!< xsave_size + PAL_FP_STATE_MAGIC2_SIZE */
|
||||
uint32_t padding[7];
|
||||
} PAL_FPX_SW_BYTES;
|
||||
|
||||
typedef struct {
|
||||
uint32_t cwd;
|
||||
uint32_t swd;
|
||||
uint32_t twd;
|
||||
uint32_t fip;
|
||||
uint32_t fcs;
|
||||
uint32_t foo;
|
||||
uint32_t fos;
|
||||
uint32_t st_space[20];
|
||||
uint8_t ftop;
|
||||
uint8_t changed;
|
||||
uint8_t lookahead;
|
||||
uint8_t no_update;
|
||||
uint8_t rm;
|
||||
uint8_t alimit;
|
||||
void* info; /* struct math_emu_info */
|
||||
uint32_t entry_eip;
|
||||
} PAL_SWREGS_STATE;
|
||||
|
||||
typedef struct {
|
||||
uint16_t significand[4];
|
||||
uint16_t exponent;
|
||||
uint16_t padding[3];
|
||||
} PAL_FPXREG;
|
||||
|
||||
typedef struct {
|
||||
uint32_t element[4];
|
||||
} PAL_XMMREG;
|
||||
|
||||
typedef struct {
|
||||
/* 64-bit FXSAVE format. */
|
||||
uint16_t cwd;
|
||||
uint16_t swd;
|
||||
uint16_t ftw;
|
||||
uint16_t fop;
|
||||
uint64_t rip;
|
||||
uint64_t rdp;
|
||||
uint32_t mxcsr;
|
||||
uint32_t mxcr_mask;
|
||||
PAL_FPXREG st[8];
|
||||
PAL_XMMREG xmm[16];
|
||||
union {
|
||||
uint32_t padding[24];
|
||||
struct {
|
||||
uint32_t padding2[12];
|
||||
PAL_FPX_SW_BYTES sw_reserved;
|
||||
};
|
||||
};
|
||||
} PAL_FPSTATE;
|
||||
|
||||
typedef struct {
|
||||
uint64_t xfeatures;
|
||||
uint64_t xcomp_bv;
|
||||
uint64_t reserved[6];
|
||||
} __attribute__((packed)) PAL_XSTATE_HEADER;
|
||||
|
||||
#define PAL_XSTATE_ALIGN 64
|
||||
|
||||
typedef struct {
|
||||
PAL_FPSTATE fpstate;
|
||||
PAL_XSTATE_HEADER header;
|
||||
} __attribute__((packed, aligned(PAL_XSTATE_ALIGN))) PAL_XREGS_STATE;
|
||||
|
||||
typedef struct PAL_CONTEXT_ {
|
||||
PAL_NUM r8, r9, r10, r11, r12, r13, r14, r15;
|
||||
PAL_NUM rdi, rsi, rbp, rbx, rdx, rax, rcx;
|
||||
PAL_NUM rsp, rip;
|
||||
PAL_NUM efl, csgsfs, err, trapno, oldmask, cr2;
|
||||
PAL_XREGS_STATE* fpregs;
|
||||
} PAL_CONTEXT;
|
||||
|
||||
#endif /* PAL_ARCH_H */
|
||||
+1
-145
@@ -106,151 +106,7 @@ typedef struct pal_tcb {
|
||||
/* data private to PAL implementation follows this struct. */
|
||||
} PAL_TCB;
|
||||
|
||||
static inline PAL_TCB * pal_get_tcb (void)
|
||||
{
|
||||
PAL_TCB * tcb;
|
||||
__asm__ ("movq %%gs:%c1,%q0"
|
||||
: "=r" (tcb)
|
||||
: "i" (offsetof(struct pal_tcb, self)));
|
||||
return tcb;
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
union pal_csgsfs {
|
||||
struct {
|
||||
uint16_t cs;
|
||||
uint16_t gs;
|
||||
uint16_t fs;
|
||||
uint16_t ss;
|
||||
};
|
||||
uint64_t csgsfs;
|
||||
};
|
||||
|
||||
/* Adopt Linux style fp layout, _libc_fpstate of glibc:
|
||||
* Because self-contained definition is needed for Pal definition,
|
||||
* same layout is defined with PAL prefix.
|
||||
*/
|
||||
#define PAL_FP_XSTATE_MAGIC1 0x46505853U
|
||||
#define PAL_FP_XSTATE_MAGIC2 0x46505845U
|
||||
#define PAL_FP_XSTATE_MAGIC2_SIZE (sizeof(PAL_FP_XSTATE_MAGIC2))
|
||||
|
||||
enum PAL_XFEATURE {
|
||||
PAL_XFEATURE_FP,
|
||||
PAL_XFEATURE_SSE,
|
||||
PAL_XFEATURE_YMM,
|
||||
PAL_XFEATURE_BNDREGS,
|
||||
PAL_XFEATURE_BNDCSR,
|
||||
PAL_XFEATURE_OPMASK,
|
||||
PAL_XFEATURE_ZMM_Hi256,
|
||||
PAL_XFEATURE_Hi16_ZMM,
|
||||
PAL_XFEATURE_PT,
|
||||
PAL_XFEATURE_PKRU,
|
||||
|
||||
PAL_XFEATURE_MAX,
|
||||
};
|
||||
|
||||
#define PAL_XFEATURE_MASK_FP (1UL << PAL_XFEATURE_FP)
|
||||
#define PAL_XFEATURE_MASK_SSE (1UL << PAL_XFEATURE_SSE)
|
||||
#define PAL_XFEATURE_MASK_YMM (1UL << PAL_XFEATURE_YMM)
|
||||
#define PAL_XFEATURE_MASK_BNDREGS (1UL << PAL_XFEATURE_BNDREGS)
|
||||
#define PAL_XFEATURE_MASK_BNDCSR (1UL << PAL_XFEATURE_BNDCSR)
|
||||
#define PAL_XFEATURE_MASK_OPMASK (1UL << PAL_XFEATURE_OPMASK)
|
||||
#define PAL_XFEATURE_MASK_ZMM_Hi256 (1UL << PAL_XFEATURE_ZMM_Hi256)
|
||||
#define PAL_XFEATURE_MASK_Hi16_ZMM (1UL << PAL_XFEATURE_Hi16_ZMM)
|
||||
#define PAL_XFEATURE_MASK_PT (1UL << PAL_XFEATURE_PT)
|
||||
#define PAL_XFEATURE_MASK_PKRU (1UL << PAL_XFEATURE_PKRU)
|
||||
|
||||
#define PAL_XFEATURE_MASK_FPSSE (PAL_XFEATURE_MASK_FP \
|
||||
| PAL_XFEATURE_MASK_SSE)
|
||||
#define PAL_XFEATURE_MASK_AVX512 (PAL_XFEATURE_MASK_OPMASK \
|
||||
| PAL_XFEATURE_MASK_ZMM_Hi256 \
|
||||
| PAL_XFEATURE_MASK_Hi16_ZMM)
|
||||
|
||||
typedef struct {
|
||||
uint32_t magic1; /*!< PAL_FP_XSTATE_MAGIC1 */
|
||||
uint32_t extended_size; /*!< xsave_size */
|
||||
uint64_t xfeatures; /*!< XSAVE feature */
|
||||
uint32_t xstate_size; /*!< xsave_size + PAL_FP_STATE_MAGIC2_SIZE */
|
||||
uint32_t padding[7];
|
||||
} PAL_FPX_SW_BYTES;
|
||||
|
||||
typedef struct {
|
||||
uint32_t cwd;
|
||||
uint32_t swd;
|
||||
uint32_t twd;
|
||||
uint32_t fip;
|
||||
uint32_t fcs;
|
||||
uint32_t foo;
|
||||
uint32_t fos;
|
||||
uint32_t st_space[20];
|
||||
uint8_t ftop;
|
||||
uint8_t changed;
|
||||
uint8_t lookahead;
|
||||
uint8_t no_update;
|
||||
uint8_t rm;
|
||||
uint8_t alimit;
|
||||
void* info; /* struct math_emu_info */
|
||||
uint32_t entry_eip;
|
||||
} PAL_SWREGS_STATE;
|
||||
|
||||
typedef struct {
|
||||
uint16_t significand[4];
|
||||
uint16_t exponent;
|
||||
uint16_t padding[3];
|
||||
} PAL_FPXREG;
|
||||
|
||||
typedef struct {
|
||||
uint32_t element[4];
|
||||
} PAL_XMMREG;
|
||||
|
||||
typedef struct {
|
||||
/* 64-bit FXSAVE format. */
|
||||
uint16_t cwd;
|
||||
uint16_t swd;
|
||||
uint16_t ftw;
|
||||
uint16_t fop;
|
||||
uint64_t rip;
|
||||
uint64_t rdp;
|
||||
uint32_t mxcsr;
|
||||
uint32_t mxcr_mask;
|
||||
PAL_FPXREG st[8];
|
||||
PAL_XMMREG xmm[16];
|
||||
union {
|
||||
uint32_t padding[24];
|
||||
struct {
|
||||
uint32_t padding2[12];
|
||||
PAL_FPX_SW_BYTES sw_reserved;
|
||||
};
|
||||
};
|
||||
} PAL_FPSTATE;
|
||||
|
||||
typedef struct {
|
||||
uint64_t xfeatures;
|
||||
uint64_t xcomp_bv;
|
||||
uint64_t reserved[6];
|
||||
} __attribute__((packed)) PAL_XSTATE_HEADER;
|
||||
|
||||
#define PAL_XSTATE_ALIGN 64
|
||||
|
||||
typedef struct {
|
||||
PAL_FPSTATE fpstate;
|
||||
PAL_XSTATE_HEADER header;
|
||||
} __attribute__((packed, aligned(PAL_XSTATE_ALIGN))) PAL_XREGS_STATE;
|
||||
#else
|
||||
# error "Unsupported architecture"
|
||||
#endif
|
||||
|
||||
typedef struct PAL_CONTEXT_ {
|
||||
#ifdef __x86_64__
|
||||
PAL_NUM r8, r9, r10, r11, r12, r13, r14, r15;
|
||||
PAL_NUM rdi, rsi, rbp, rbx, rdx, rax, rcx;
|
||||
PAL_NUM rsp, rip;
|
||||
PAL_NUM efl, csgsfs, err, trapno, oldmask, cr2;
|
||||
PAL_XREGS_STATE* fpregs;
|
||||
#else
|
||||
# error "Unsupported architecture"
|
||||
#endif
|
||||
} PAL_CONTEXT;
|
||||
#include "pal-arch.h"
|
||||
|
||||
/********** PAL TYPE DEFINITIONS **********/
|
||||
enum {
|
||||
|
||||
+2
-1
@@ -2,7 +2,8 @@ include ../../Scripts/Makefile.configs
|
||||
include ../../Scripts/Makefile.rules
|
||||
include ../src/host/$(PAL_HOST)/Makefile.am
|
||||
|
||||
CFLAGS += -I../include/lib -I../include -I../include/pal -I../include/host/$(PAL_HOST) \
|
||||
CFLAGS += -I../include/lib -I../include -I../include/pal -I../include/arch/$(ARCH) \
|
||||
-I../include/host/$(PAL_HOST) \
|
||||
-I../src/host/$(PAL_HOST) -Icrypto/mbedtls/include -Icrypto/mbedtls/crypto/include
|
||||
|
||||
CRYPTO_PROVIDER ?= mbedtls
|
||||
|
||||
@@ -2,7 +2,8 @@ include ../../Scripts/Makefile.configs
|
||||
include ../../Scripts/Makefile.rules
|
||||
|
||||
CFLAGS += -Wp,-U_FORTIFY_SOURCE -fno-builtin -nostdlib \
|
||||
-I../include/pal -I../include/lib -I../src -I../include/lib/$(ARCH)
|
||||
-I../include/pal -I../include/lib -I../src -I../include/lib/$(ARCH) \
|
||||
-I../include/arch/$(ARCH)
|
||||
|
||||
preloads = \
|
||||
Preload1.so \
|
||||
|
||||
Reference in New Issue
Block a user