From owner-freebsd-threads@FreeBSD.ORG Thu Jun 19 13:20:14 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7505437B401 for ; Thu, 19 Jun 2003 13:20:14 -0700 (PDT) Received: from ns1.xcllnt.net (209-128-86-226.BAYAREA.NET [209.128.86.226]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9E87F43F85 for ; Thu, 19 Jun 2003 13:20:13 -0700 (PDT) (envelope-from marcel@xcllnt.net) Received: from dhcp01.pn.xcllnt.net (dhcp01.pn.xcllnt.net [192.168.4.201]) by ns1.xcllnt.net (8.12.9/8.12.9) with ESMTP id h5JKKDDZ071077 for ; Thu, 19 Jun 2003 13:20:13 -0700 (PDT) (envelope-from marcel@piii.pn.xcllnt.net) Received: from dhcp01.pn.xcllnt.net (localhost [127.0.0.1]) by dhcp01.pn.xcllnt.net (8.12.9/8.12.9) with ESMTP id h5JKKD17000926 for ; Thu, 19 Jun 2003 13:20:13 -0700 (PDT) (envelope-from marcel@dhcp01.pn.xcllnt.net) Received: (from marcel@localhost) by dhcp01.pn.xcllnt.net (8.12.9/8.12.9/Submit) id h5JKKDfA000925 for threads@FreeBSD.org; Thu, 19 Jun 2003 13:20:13 -0700 (PDT) (envelope-from marcel) Date: Thu, 19 Jun 2003 13:20:13 -0700 From: Marcel Moolenaar To: threads@FreeBSD.org Message-ID: <20030619202013.GA833@dhcp01.pn.xcllnt.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.4i Subject: Implementing TLS: step 1 X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Jun 2003 20:20:14 -0000 Ok, Step 1: static TLS in libthr. I have gcc33 installed and looked at the access sequences for TLS on both i386 and ia64. Then I looked at libthr to see what was needed and the first and obvious orbservation is that we need a way to figure out if the binary has a TLS template and use it if it does. If not, we probably need some minimal glue to have the TLS pointer point to something meaningful. Note again, we don't have RTLD involved. We're talking staticly linking now. What about the following: 1. The kernel already iterates over the program headers and can pass the address and size of the TLS template to the process (or RTLD) by means of the auxargs (ie have AT_TLS_ADDR and AT_TLS_SIZE). If no template exists AT_TLS_* will be zero. This prevents coding object file dependencies on thread and allows the RTLD to modify the args even in the event that the program itself does not have TLS, but libraries in the startup set do. 2. On thread creation we allocate the TLS space according to the template (or some MD specific placebo) and put a pointer to it in struct thread. For static TLS we don't have a means to lazily allocate the TLS. 3. The MD _get_curthread() and _set_curthread() will be adjusted according to the RT spec. if not currently compliant. Question: 1. What's the best way to expose the auxargs to the thread library? Alternatives? -- Marcel Moolenaar USPA: A-39004 marcel@xcllnt.net