Changeset 4982


Ignore:
Timestamp:
Aug 20, 2006, 10:56:17 PM (18 years ago)
Author:
Gary Byers
Message:

DARWIN_GS_HACK macros.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/lisp-kernel/x86-macros.s

    r4753 r4982  
    445445macro_label(done):
    446446])
    447                        
     447
     448/* This should only be called from a foreign context; it should be */
     449/* assumed to bash all non-volatile C registers.  And of course it's */
     450/* ugly, awful, non-portable, and slow.  %rdi should point to the */
     451/* linear address that %gs should be made to address (tcr or pthread data) */
     452                               
     453ifdef([DARWIN_GS_HACK],[
     454define([set_gs_base],[
     455        ifelse($1,[],[
     456        ],[
     457        movq $1,%rdi
     458        ])
     459        movl [$]0x3000003,%eax
     460        syscall
     461])
     462
     463/* %gs addresses the tcr.  Make it address pthread data before running */
     464/* foreign code */       
     465       
     466define([set_foreign_gs_base],[
     467        set_gs_base([%rcontext:tcr.osid])
     468])
     469
     470/* %gs addresses the tcr.  Get the linear address of the tcr and */
     471/* copy it to $1 */
     472
     473define([save_tcr_linear],[
     474        movq %rcontxt:tcr.linear,$1
     475])
     476       
     477])
     478
     479       
Note: See TracChangeset for help on using the changeset viewer.