From ef3449daf58bcf12f27d26e2af9d06b7400bd697 Mon Sep 17 00:00:00 2001 From: maxv Date: Wed, 30 Aug 2017 15:46:19 +0000 Subject: [PATCH] Don't test call gates, they are not supported anymore. --- regress/sys/arch/i386/ldt/testldt.c | 81 ++--------------------------- 1 file changed, 5 insertions(+), 76 deletions(-) diff --git a/regress/sys/arch/i386/ldt/testldt.c b/regress/sys/arch/i386/ldt/testldt.c index c62f342a4478..f7bef19f3c0a 100644 --- a/regress/sys/arch/i386/ldt/testldt.c +++ b/regress/sys/arch/i386/ldt/testldt.c @@ -1,6 +1,6 @@ -/* $NetBSD: testldt.c,v 1.16 2016/09/03 08:47:38 maxv Exp $ */ +/* $NetBSD: testldt.c,v 1.17 2017/08/30 15:46:19 maxv Exp $ */ -/*- +/* * Copyright (c) 1993 The NetBSD Foundation, Inc. * All rights reserved. * @@ -53,15 +53,6 @@ get_fs_byte(const char *addr) return _v; } -static unsigned short -get_cs(void) -{ - unsigned short _v; - - __asm ("movw %%cs,%0": "=r" (_v)); - return _v; -} - static int check_desc(int desc) { @@ -70,15 +61,6 @@ check_desc(int desc) return get_fs_byte((char *)0); } -static void -gated_call(void) -{ - printf("Called from call gate..."); - __asm volatile("movl %ebp,%esp"); - __asm volatile("popl %ebp"); - __asm volatile(".byte 0xcb"); -} - static union descriptor * make_sd(void *basep, unsigned limit, int type, int dpl, int seg32, int inpgs) { @@ -99,23 +81,6 @@ make_sd(void *basep, unsigned limit, int type, int dpl, int seg32, int inpgs) return &d; } -static union descriptor * -make_gd(void *func, unsigned int sel, unsigned stkcpy, int type, int dpl) -{ - static union descriptor d; - unsigned long offset = (unsigned long)func; - - d.gd.gd_looffset = offset & 0x0000ffff; - d.gd.gd_selector = sel & 0xffff; - d.gd.gd_stkcpy = stkcpy & 0x1ff; - d.gd.gd_type = type & 0x1ff; - d.gd.gd_dpl = dpl & 0x3; - d.gd.gd_p = 1; - d.gd.gd_hioffset = (offset & 0xffff0000) >> 16; - - return &d; -} - static const char * seg_type_name[] = { "SYSNULL", "SYS286TSS", "SYSLDT", "SYS286BSY", @@ -206,9 +171,8 @@ main(int argc, char *argv[]) union descriptor ldt[MAX_USER_LDT]; int n, ch; int num; - unsigned int cs = get_cs(); unsigned char *data; - union descriptor *sd, *gd; + union descriptor *sd; unsigned char one = 1, two = 2, val; struct sigaction segv_act; int verbose = 0; @@ -229,10 +193,8 @@ main(int argc, char *argv[]) } printf("Testing i386_get_ldt\n"); - if ((num = i386_get_ldt(0, ldt, MAX_USER_LDT)) < 0) - err(2, "get_ldt"); - if (num == 0) - errx(1, "i386_get_ldt() returned empty initial LDT"); + if ((num = i386_get_ldt(0, ldt, MAX_USER_LDT)) >= 0) + err(2, "get_ldt succeeded"); if (verbose) { printf("Got %d (initial) LDT entries\n", num); @@ -274,39 +236,6 @@ main(int argc, char *argv[]) errx(1, "ERROR: descriptor check failed; " "expected 0x97, got 0x%x", check_desc(num)); - /* - * Test a Call Gate - */ - printf("Making call gate\n"); - fflush(stdout); - - gd = make_gd((void *)gated_call, cs, 0, SDT_SYS386CGT, SEL_UPL); - if ((num = i386_set_ldt(4095, gd, 1)) < 0) - err(1, "set_ldt: call gate"); - - if (verbose) { - printf("setldt returned: %d\n", num); - printf("Call gate sel = 0x%x\n", LSEL(num, SEL_UPL)); - } - - if ((n = i386_get_ldt(num, ldt, 1)) < 0) - err(1, "get_ldt"); - - if (verbose) { - printf("Entry %d: ", num); - print_ldt(&ldt[0]); - } - - printf("Testing call gate..."); - fflush(stdout); - /* - * Long call to call gate. - * Only the selector matters; offset is irrelevant. - */ - __asm volatile("lcall $0x7fff,$0x0"); - - printf("Gated call returned\n"); - /* * Test multiple sets. */