head 1.3; access; symbols pkgsrc-2026Q1:1.3.0.168 pkgsrc-2026Q1-base:1.3 pkgsrc-2025Q4:1.3.0.166 pkgsrc-2025Q4-base:1.3 pkgsrc-2025Q3:1.3.0.164 pkgsrc-2025Q3-base:1.3 pkgsrc-2025Q2:1.3.0.162 pkgsrc-2025Q2-base:1.3 pkgsrc-2025Q1:1.3.0.160 pkgsrc-2025Q1-base:1.3 pkgsrc-2024Q4:1.3.0.158 pkgsrc-2024Q4-base:1.3 pkgsrc-2024Q3:1.3.0.156 pkgsrc-2024Q3-base:1.3 pkgsrc-2024Q2:1.3.0.154 pkgsrc-2024Q2-base:1.3 pkgsrc-2024Q1:1.3.0.152 pkgsrc-2024Q1-base:1.3 pkgsrc-2023Q4:1.3.0.150 pkgsrc-2023Q4-base:1.3 pkgsrc-2023Q3:1.3.0.148 pkgsrc-2023Q3-base:1.3 pkgsrc-2023Q2:1.3.0.146 pkgsrc-2023Q2-base:1.3 pkgsrc-2023Q1:1.3.0.144 pkgsrc-2023Q1-base:1.3 pkgsrc-2022Q4:1.3.0.142 pkgsrc-2022Q4-base:1.3 pkgsrc-2022Q3:1.3.0.140 pkgsrc-2022Q3-base:1.3 pkgsrc-2022Q2:1.3.0.138 pkgsrc-2022Q2-base:1.3 pkgsrc-2022Q1:1.3.0.136 pkgsrc-2022Q1-base:1.3 pkgsrc-2021Q4:1.3.0.134 pkgsrc-2021Q4-base:1.3 pkgsrc-2021Q3:1.3.0.132 pkgsrc-2021Q3-base:1.3 pkgsrc-2021Q2:1.3.0.130 pkgsrc-2021Q2-base:1.3 pkgsrc-2021Q1:1.3.0.128 pkgsrc-2021Q1-base:1.3 pkgsrc-2020Q4:1.3.0.126 pkgsrc-2020Q4-base:1.3 pkgsrc-2020Q3:1.3.0.124 pkgsrc-2020Q3-base:1.3 pkgsrc-2020Q2:1.3.0.120 pkgsrc-2020Q2-base:1.3 pkgsrc-2020Q1:1.3.0.100 pkgsrc-2020Q1-base:1.3 pkgsrc-2019Q4:1.3.0.122 pkgsrc-2019Q4-base:1.3 pkgsrc-2019Q3:1.3.0.118 pkgsrc-2019Q3-base:1.3 pkgsrc-2019Q2:1.3.0.116 pkgsrc-2019Q2-base:1.3 pkgsrc-2019Q1:1.3.0.114 pkgsrc-2019Q1-base:1.3 pkgsrc-2018Q4:1.3.0.112 pkgsrc-2018Q4-base:1.3 pkgsrc-2018Q3:1.3.0.110 pkgsrc-2018Q3-base:1.3 pkgsrc-2018Q2:1.3.0.108 pkgsrc-2018Q2-base:1.3 pkgsrc-2018Q1:1.3.0.106 pkgsrc-2018Q1-base:1.3 pkgsrc-2017Q4:1.3.0.104 pkgsrc-2017Q4-base:1.3 pkgsrc-2017Q3:1.3.0.102 pkgsrc-2017Q3-base:1.3 pkgsrc-2017Q2:1.3.0.98 pkgsrc-2017Q2-base:1.3 pkgsrc-2017Q1:1.3.0.96 pkgsrc-2017Q1-base:1.3 pkgsrc-2016Q4:1.3.0.94 pkgsrc-2016Q4-base:1.3 pkgsrc-2016Q3:1.3.0.92 pkgsrc-2016Q3-base:1.3 pkgsrc-2016Q2:1.3.0.90 pkgsrc-2016Q2-base:1.3 pkgsrc-2016Q1:1.3.0.88 pkgsrc-2016Q1-base:1.3 pkgsrc-2015Q4:1.3.0.86 pkgsrc-2015Q4-base:1.3 pkgsrc-2015Q3:1.3.0.84 pkgsrc-2015Q3-base:1.3 pkgsrc-2015Q2:1.3.0.82 pkgsrc-2015Q2-base:1.3 pkgsrc-2015Q1:1.3.0.80 pkgsrc-2015Q1-base:1.3 pkgsrc-2014Q4:1.3.0.78 pkgsrc-2014Q4-base:1.3 pkgsrc-2014Q3:1.3.0.76 pkgsrc-2014Q3-base:1.3 pkgsrc-2014Q2:1.3.0.74 pkgsrc-2014Q2-base:1.3 pkgsrc-2014Q1:1.3.0.72 pkgsrc-2014Q1-base:1.3 pkgsrc-2013Q4:1.3.0.70 pkgsrc-2013Q4-base:1.3 pkgsrc-2013Q3:1.3.0.68 pkgsrc-2013Q3-base:1.3 pkgsrc-2013Q2:1.3.0.66 pkgsrc-2013Q2-base:1.3 pkgsrc-2013Q1:1.3.0.64 pkgsrc-2013Q1-base:1.3 pkgsrc-2012Q4:1.3.0.62 pkgsrc-2012Q4-base:1.3 pkgsrc-2012Q3:1.3.0.60 pkgsrc-2012Q3-base:1.3 pkgsrc-2012Q2:1.3.0.58 pkgsrc-2012Q2-base:1.3 pkgsrc-2012Q1:1.3.0.56 pkgsrc-2012Q1-base:1.3 pkgsrc-2011Q4:1.3.0.54 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q3:1.3.0.52 pkgsrc-2011Q3-base:1.3 pkgsrc-2011Q2:1.3.0.50 pkgsrc-2011Q2-base:1.3 pkgsrc-2011Q1:1.3.0.48 pkgsrc-2011Q1-base:1.3 pkgsrc-2010Q4:1.3.0.46 pkgsrc-2010Q4-base:1.3 pkgsrc-2010Q3:1.3.0.44 pkgsrc-2010Q3-base:1.3 pkgsrc-2010Q2:1.3.0.42 pkgsrc-2010Q2-base:1.3 pkgsrc-2010Q1:1.3.0.40 pkgsrc-2010Q1-base:1.3 pkgsrc-2009Q4:1.3.0.38 pkgsrc-2009Q4-base:1.3 pkgsrc-2009Q3:1.3.0.36 pkgsrc-2009Q3-base:1.3 pkgsrc-2009Q2:1.3.0.34 pkgsrc-2009Q2-base:1.3 pkgsrc-2009Q1:1.3.0.32 pkgsrc-2009Q1-base:1.3 pkgsrc-2008Q4:1.3.0.30 pkgsrc-2008Q4-base:1.3 pkgsrc-2008Q3:1.3.0.28 pkgsrc-2008Q3-base:1.3 cube-native-xorg:1.3.0.26 cube-native-xorg-base:1.3 pkgsrc-2008Q2:1.3.0.24 pkgsrc-2008Q2-base:1.3 cwrapper:1.3.0.22 pkgsrc-2008Q1:1.3.0.20 pkgsrc-2008Q1-base:1.3 pkgsrc-2007Q4:1.3.0.18 pkgsrc-2007Q4-base:1.3 pkgsrc-2007Q3:1.3.0.16 pkgsrc-2007Q3-base:1.3 pkgsrc-2007Q2:1.3.0.14 pkgsrc-2007Q2-base:1.3 pkgsrc-2007Q1:1.3.0.12 pkgsrc-2007Q1-base:1.3 pkgsrc-2006Q4:1.3.0.10 pkgsrc-2006Q4-base:1.3 pkgsrc-2006Q3:1.3.0.8 pkgsrc-2006Q3-base:1.3 pkgsrc-2006Q2:1.3.0.6 pkgsrc-2006Q2-base:1.3 pkgsrc-2006Q1:1.3.0.4 pkgsrc-2006Q1-base:1.3 pkgsrc-2005Q4:1.3.0.2 pkgsrc-2005Q4-base:1.3 pkgsrc-2005Q3:1.2.0.16 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.14 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.12 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.10 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.8 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.2.0.6 pkgsrc-2004Q2-base:1.2 pkgsrc-2004Q1:1.2.0.4 pkgsrc-2004Q1-base:1.2 pkgsrc-2003Q4:1.2.0.2 pkgsrc-2003Q4-base:1.2; locks; strict; comment @# @; 1.3 date 2005.12.09.10.56.47; author joerg; state Exp; branches; next 1.2; 1.2 date 2003.10.06.11.14.14; author drochner; state Exp; branches; next 1.1; 1.1 date 2003.10.05.13.39.24; author drochner; state Exp; branches; next ; desc @@ 1.3 log @Add DragonFly support. @ text @$NetBSD$ --- lrmi.c.orig 2003-05-14 03:18:12.000000000 +0000 +++ lrmi.c @@@@ -23,7 +23,7 @@@@ ARISING FROM, OUT OF OR IN CONNECTION WI OTHER DEALINGS IN THE SOFTWARE. */ -#if (defined(__linux__) || defined(__NetBSD__) || defined(__FreeBSD__)) && \ +#if (defined(__linux__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)) && \ defined(__i386__) #include @@@@ -37,7 +37,7 @@@@ OTHER DEALINGS IN THE SOFTWARE. #include #endif -#elif defined(__NetBSD__) || defined(__FreeBSD__) +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) #include #include @@@@ -203,7 +203,7 @@@@ LRMI_free_real(void *m) #if defined(__linux__) #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK) -#elif defined(__NetBSD__) || defined(__FreeBSD__) +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) #define DEFAULT_VM86_FLAGS (PSL_I | PSL_IOPL) #define TF_MASK PSL_T #define VIF_MASK PSL_VIF @@@@ -211,13 +211,27 @@@@ LRMI_free_real(void *m) #define DEFAULT_STACK_SIZE 0x1000 #define RETURN_TO_32_INT 255 +#if defined(__NetBSD__) && defined(SA_SIGINFO) +struct gregset_overlay { + int gs, fs, es, ds; + int edi, esi, ebp, esp, ebx, edx, ecx, eax; + int _trapno, _err; + int eip, cs, eflags, uesp, ss; +}; +#endif + #if defined(__linux__) #define CONTEXT_REGS context.vm.regs #define REG(x) x #elif defined(__NetBSD__) +#if defined(SA_SIGINFO) +#define CONTEXT_REGS (*(struct gregset_overlay *)&context.vm.substr.regs) +#define REG(x) x +#else #define CONTEXT_REGS context.vm.substr.regs #define REG(x) vmsc.sc_ ## x -#elif defined(__FreeBSD__) +#endif /* SA_SIGINFO */ +#elif defined(__FreeBSD__) || defined(__DragonFly__) #define CONTEXT_REGS context.vm.uc #define REG(x) uc_mcontext.mc_ ## x #endif @@@@ -228,16 +242,17 @@@@ static struct { unsigned short stack_seg, stack_off; #if defined(__linux__) || defined(__NetBSD__) struct vm86_struct vm; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) struct { struct vm86_init_args init; ucontext_t uc; } vm; #endif -#if defined(__NetBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) int success; jmp_buf env; - void *old_sighandler; + struct sigaction old_sighandler; + int sh_installed; int vret; #endif } context = { 0 }; @@@@ -354,7 +369,7 @@@@ LRMI_init(void) set_bit(RETURN_TO_32_INT, &context.vm.int_revectored); #elif defined(__NetBSD__) set_bit(RETURN_TO_32_INT, &context.vm.int_byuser); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) set_bit(RETURN_TO_32_INT, &context.vm.init.int_map); #endif @@@@ -805,13 +820,25 @@@@ run_vm86(void) return 0; } -#elif defined(__NetBSD__) || defined(__FreeBSD__) +#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) #if defined(__NetBSD__) static void -vm86_callback(int sig, int code, struct sigcontext *sc) +vm86_callback(int sig, +#if defined(SA_SIGINFO) + siginfo_t *info, void *vctx +#else + int code, struct sigcontext *sc +#endif + ) { /* Sync our context with what the kernel develivered to us. */ +#if defined(SA_SIGINFO) + int code = info->si_trap; + ucontext_t *ctx = vctx; + memcpy(&CONTEXT_REGS, &ctx->uc_mcontext.__gregs, sizeof(CONTEXT_REGS)); +#else memcpy(&CONTEXT_REGS, sc, sizeof(*sc)); +#endif switch (VM86_TYPE(code)) { case VM86_INTx: @@@@ -850,9 +877,13 @@@@ vm86_callback(int sig, int code, struct } /* ...and sync our context back to the kernel. */ +#if defined(SA_SIGINFO) + memcpy(&ctx->uc_mcontext.__gregs, &CONTEXT_REGS, sizeof(CONTEXT_REGS)); +#else memcpy(sc, &CONTEXT_REGS, sizeof(*sc)); +#endif } -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) static void vm86_callback(int sig, int code, struct sigcontext *sc) { @@@@ -899,34 +930,44 @@@@ vm86_callback(int sig, int code, struct static int run_vm86(void) { - if (context.old_sighandler) { + struct sigaction sa; + int res; + + if (context.sh_installed) { #ifdef LRMI_DEBUG fprintf(stderr, "run_vm86: callback already installed\n"); #endif return (0); } + memset(&sa, 0, sizeof(sa)); +#if defined(__NetBSD__) && defined(SA_SIGINFO) + sa.sa_sigaction = vm86_callback; + sa.sa_flags = SA_SIGINFO; +#else + sa.sa_handler = (void (*)(int))vm86_callback; +#endif #if defined(__NetBSD__) - context.old_sighandler = signal(SIGURG, (void (*)(int))vm86_callback); -#elif defined(__FreeBSD__) - context.old_sighandler = signal(SIGBUS, (void (*)(int))vm86_callback); + res = sigaction(SIGURG, &sa, &context.old_sighandler); +#elif defined(__FreeBSD__) || defined(__DragonFly__) + res = sigaction(SIGBUS, &sa, &context.old_sighandler); #endif - if (context.old_sighandler == (void *)-1) { - context.old_sighandler = NULL; + if (res < 0) { #ifdef LRMI_DEBUG fprintf(stderr, "run_vm86: cannot install callback\n"); #endif return (0); } + context.sh_installed = 1; if (setjmp(context.env)) { #if defined(__NetBSD__) - (void) signal(SIGURG, context.old_sighandler); -#elif defined(__FreeBSD__) - (void) signal(SIGBUS, context.old_sighandler); + sigaction(SIGURG, &context.old_sighandler, 0); +#elif defined(__FreeBSD__) || defined(__DragonFly__) + sigaction(SIGBUS, &context.old_sighandler, 0); #endif - context.old_sighandler = NULL; + context.sh_installed = 0; if (context.success) return (1); @@@@ -937,7 +978,7 @@@@ run_vm86(void) #if defined(__NetBSD__) if (i386_vm86(&context.vm) == -1) return (0); -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) if (i386_vm86(VM86_INIT, &context.vm.init)) return 0; @ 1.2 log @Oops, need another #ifdef and a typecast to make this compile with old "struct sigaction" declarations. Also clean up bookkeeping whether the handler is already installed (which didn't work as intended because SIG_DFL is represented by a zero). @ text @d3 30 a32 3 --- lrmi.c.orig Wed May 14 05:18:12 2003 +++ lrmi.c Mon Oct 6 13:03:05 2003 @@@@ -211,12 +211,26 @@@@ LRMI_free_real(void *m) d55 1 d57 1 a57 1 #elif defined(__FreeBSD__) d60 14 a73 2 @@@@ -237,7 +251,8 @@@@ static struct { #if defined(__NetBSD__) || defined(__FreeBSD__) d82 15 a96 2 @@@@ -808,10 +823,22 @@@@ run_vm86(void) #elif defined(__NetBSD__) || defined(__FreeBSD__) d119 1 a119 1 @@@@ -850,7 +877,11 @@@@ vm86_callback(int sig, int code, struct d129 2 a130 1 #elif defined(__FreeBSD__) d132 2 d158 2 d161 1 a161 2 #elif defined(__FreeBSD__) - context.old_sighandler = signal(SIGBUS, (void (*)(int))vm86_callback); d178 2 d181 1 a181 2 #elif defined(__FreeBSD__) - (void) signal(SIGBUS, context.old_sighandler); d189 9 @ 1.1 log @adapt to API (and ABI) changes of the i386_vm86() call due to the siginfo changes in -current (changed to use sigaction() instead of signal() in all cases to limit the number of #ifdefs) @ text @d3 2 a4 2 --- lrmi.c.orig 2003-05-14 05:18:12.000000000 +0200 +++ lrmi.c d32 1 a32 1 @@@@ -237,7 +251,7 @@@@ static struct { d38 1 d42 1 a42 1 @@@@ -808,10 +822,22 @@@@ run_vm86(void) d66 1 a66 1 @@@@ -850,7 +876,11 @@@@ vm86_callback(int sig, int code, struct d78 1 a78 1 @@@@ -899,21 +929,28 @@@@ vm86_callback(int sig, int code, struct d86 1 a86 1 + if (context.old_sighandler.sa_sigaction) { d94 1 d96 4 a101 3 +#if defined(SA_SIGINFO) + sa.sa_flags = SA_SIGINFO; +#endif d114 3 a116 1 @@@@ -922,11 +959,11 @@@@ run_vm86(void) d127 1 a127 1 + context.old_sighandler.sa_sigaction = NULL; @