From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Sep 2 19:50:17 2003 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0E5A416A4BF for ; Tue, 2 Sep 2003 19:50:17 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id BB34C43FE9 for ; Tue, 2 Sep 2003 19:50:15 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h832oFUp081802 for ; Tue, 2 Sep 2003 19:50:15 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h832oFHb081801; Tue, 2 Sep 2003 19:50:15 -0700 (PDT) Resent-Date: Tue, 2 Sep 2003 19:50:15 -0700 (PDT) Resent-Message-Id: <200309030250.h832oFHb081801@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Daniel Eischen Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 770B216A4BF for ; Tue, 2 Sep 2003 19:50:06 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2DD8E4400F for ; Tue, 2 Sep 2003 19:50:05 -0700 (PDT) (envelope-from deischen@FreeBSD.org) Received: from freefall.freebsd.org (deischen@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h832o5Up081776 for ; Tue, 2 Sep 2003 19:50:05 -0700 (PDT) (envelope-from deischen@freefall.freebsd.org) Received: (from deischen@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h832o4Hr081775; Tue, 2 Sep 2003 19:50:04 -0700 (PDT) Message-Id: <200309030250.h832o4Hr081775@freefall.freebsd.org> Date: Tue, 2 Sep 2003 19:50:04 -0700 (PDT) From: Daniel Eischen To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: ports/56358: multimedia/mplayer doesn't work with libkse/libthr X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Daniel Eischen List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Sep 2003 02:50:17 -0000 >Number: 56358 >Category: ports >Synopsis: multimedia/mplayer doesn't work with libkse/libthr >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Sep 02 19:50:15 PDT 2003 >Closed-Date: >Last-Modified: >Originator: Daniel Eischen >Release: FreeBSD 5.0-current i386 >Organization: Self >Environment: FreeBSD vespa 5.1-CURRENT FreeBSD 5.1-CURRENT #37: Fri Aug 8 16:05:12 EDT 2003 root@vespa:/opt/FreeBSD/obj/opt/FreeBSD/stable/src/sys/vespa i386 >Description: mplayer uses static ldt assignments which don't work with our new thread libraries. -current has a new interface for dynamic ldt assignments to let applications use ldts and still work with our thread libraries. >How-To-Repeat: run mplayer under a recent -current kernel with /etc/libmap.conf pointed to libkse. >Fix: Add this patch to multimedia/mplayer/files/patch-loader-ldt_keeper.c: --- loader/ldt_keeper.c.orig Sun Nov 17 12:41:19 2002 +++ loader/ldt_keeper.c Tue Sep 2 17:55:21 2003 @@ -88,11 +88,16 @@ #define LDT_SEL(idx) ((idx) << 3 | 1 << 2 | 3) /* i got this value from wine sources, it's the first free LDT entry */ +#if defined(__FreeBSD__) && defined(LDT_AUTO_ALLOC) +#define TEB_SEL_IDX LDT_AUTO_ALLOC +#endif + #ifndef TEB_SEL_IDX #define TEB_SEL_IDX 17 #endif -#define TEB_SEL LDT_SEL(TEB_SEL_IDX) +static unsigned int fs_ldt = TEB_SEL_IDX; + /** * here is a small logical problem with Restore for multithreaded programs - @@ -104,8 +109,10 @@ #endif void Setup_FS_Segment(void) { + unsigned int ldt_desc = LDT_SEL(fs_ldt); + __asm__ __volatile__( - "movl %0,%%eax; movw %%ax, %%fs" : : "i" (TEB_SEL) + "movl %0,%%eax; movw %%ax, %%fs" : : "r" (ldt_desc) ); } @@ -211,7 +218,13 @@ unsigned long d[2]; LDT_EntryToBytes( d, &array ); +#if defined(__FreeBSD__) && defined(LDT_AUTO_ALLOC) + ret = i386_set_ldt(LDT_AUTO_ALLOC, (union descriptor *)d, 1); + array.entry_number = ret; + fs_ldt = ret; +#else ret = i386_set_ldt(array.entry_number, (union descriptor *)d, 1); +#endif if (ret < 0) { perror("install_fs"); @@ -224,7 +237,7 @@ #if defined(__svr4__) { struct ssd ssd; - ssd.sel = TEB_SEL; + ssd.sel = LDT_SEL(TEB_SEL_IDX); ssd.bo = array.base_addr; ssd.ls = array.limit - array.base_addr; ssd.acc1 = ((array.read_exec_only == 0) << 1) | >Release-Note: >Audit-Trail: >Unformatted: