162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Copyright 2003 PathScale, Inc. 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Licensed under the GPL 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __UM_PROCESSOR_X86_64_H 862306a36Sopenharmony_ci#define __UM_PROCESSOR_X86_64_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct arch_thread { 1162306a36Sopenharmony_ci unsigned long debugregs[8]; 1262306a36Sopenharmony_ci int debugregs_seq; 1362306a36Sopenharmony_ci unsigned long fs; 1462306a36Sopenharmony_ci struct faultinfo faultinfo; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define INIT_ARCH_THREAD { .debugregs = { [ 0 ... 7 ] = 0 }, \ 1862306a36Sopenharmony_ci .debugregs_seq = 0, \ 1962306a36Sopenharmony_ci .fs = 0, \ 2062306a36Sopenharmony_ci .faultinfo = { 0, 0, 0 } } 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define STACKSLOTS_PER_LINE 4 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic inline void arch_flush_thread(struct arch_thread *thread) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic inline void arch_copy_thread(struct arch_thread *from, 2962306a36Sopenharmony_ci struct arch_thread *to) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci to->fs = from->fs; 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#define current_sp() ({ void *sp; __asm__("movq %%rsp, %0" : "=r" (sp) : ); sp; }) 3562306a36Sopenharmony_ci#define current_bp() ({ unsigned long bp; __asm__("movq %%rbp, %0" : "=r" (bp) : ); bp; }) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#endif 38