cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

processor_32.h (1306B)


      1/*
      2 * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
      3 * Licensed under the GPL
      4 */
      5
      6#ifndef __UM_PROCESSOR_I386_H
      7#define __UM_PROCESSOR_I386_H
      8
      9#include <linux/string.h>
     10#include <asm/segment.h>
     11#include <asm/ldt.h>
     12
     13extern int host_has_cmov;
     14
     15struct uml_tls_struct {
     16	struct user_desc tls;
     17	unsigned flushed:1;
     18	unsigned present:1;
     19};
     20
     21struct arch_thread {
     22	struct uml_tls_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
     23	unsigned long debugregs[8];
     24	int debugregs_seq;
     25	struct faultinfo faultinfo;
     26};
     27
     28#define INIT_ARCH_THREAD { \
     29	.tls_array  		= { [ 0 ... GDT_ENTRY_TLS_ENTRIES - 1 ] = \
     30				    { .present = 0, .flushed = 0 } }, \
     31	.debugregs  		= { [ 0 ... 7 ] = 0 }, \
     32	.debugregs_seq		= 0, \
     33	.faultinfo		= { 0, 0, 0 } \
     34}
     35
     36#define STACKSLOTS_PER_LINE 8
     37
     38static inline void arch_flush_thread(struct arch_thread *thread)
     39{
     40	/* Clear any TLS still hanging */
     41	memset(&thread->tls_array, 0, sizeof(thread->tls_array));
     42}
     43
     44static inline void arch_copy_thread(struct arch_thread *from,
     45                                    struct arch_thread *to)
     46{
     47        memcpy(&to->tls_array, &from->tls_array, sizeof(from->tls_array));
     48}
     49
     50#define current_sp() ({ void *sp; __asm__("movl %%esp, %0" : "=r" (sp) : ); sp; })
     51#define current_bp() ({ unsigned long bp; __asm__("movl %%ebp, %0" : "=r" (bp) : ); bp; })
     52
     53#endif