desctbls_asm.s revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/asm_linkage.h>
#include <sys/asm_misc.h>
#include <sys/privregs.h>
#include <sys/segments.h>
#if defined(__lint)
#include <sys/archsystm.h>
#include <sys/byteorder.h>
#include <sys/x86_archext.h>
#else /* __lint */
#include "assym.h"
#endif /* __lint */
#if defined(__lint)
/*ARGSUSED*/
{}
/*ARGSUSED*/
{}
#else /* __lint */
#if defined(__amd64)
#endif /* __i386 */
#endif /* __lint */
#if defined(__lint)
/*ARGSUSED*/
{}
/*ARGSUSED*/
{}
#else /* __lint */
#if defined(__amd64)
jmp 1f
1:
/*
* zero %ds and %es - they're ignored anyway
*/
/*
* set %fs and %gs (probably to zero also)
*/
.next:
#endif /* __i386 */
#endif /* __lint */
#if defined(__lint)
/*ARGSUSED*/
{}
selector_t rd_ldtr(void)
{ return (0); }
#if defined(__amd64)
void clr_ldt_sregs(void)
{}
#endif
#else /* __lint */
#if defined(__amd64)
/*
* Make sure any stale ldt selectors are cleared by loading
* KDS_SEL (kernel %ds gdt selector). This is necessary
* since the kernel does not use %es, %fs and %ds. %cs and
* %ss are necessary and setup by the kernel along with %gs
* to point to current cpu struct. If we take a kmdb breakpoint
* in the kernel and resume with a stale ldt selector kmdb
* would #gp fault if it points to a ldt in the context of
* another process.
*
* WARNING: Nocona and AMD have different behaviour about storing
* the null selector into %fs and %gs while in long mode. On AMD
* chips fsbase and gsbase is not cleared. But on nocona storing
* null selector into %fs or %gs has the side effect of clearing
* fsbase or gsbase. For that reason we use KDS_SEL which has
* consistent behavoir between AMD and Nocona.
*/
/*
* Save GSBASE before resetting %gs to KDS_SEL
* then restore GSBASE.
*/
#endif /* __i386 */
#endif /* __lint */
#if defined(__lint)
/*ARGSUSED*/
{}
#else /* __lint */
#if defined(__amd64)
#endif /* __i386 */
#endif /* __lint */