From owner-freebsd-hackers@FreeBSD.ORG Mon Oct 25 22:23:36 2010 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BAF1A106564A for ; Mon, 25 Oct 2010 22:23:36 +0000 (UTC) (envelope-from selphie.keller@gmail.com) Received: from mail-gx0-f182.google.com (mail-gx0-f182.google.com [209.85.161.182]) by mx1.freebsd.org (Postfix) with ESMTP id 7994E8FC12 for ; Mon, 25 Oct 2010 22:23:36 +0000 (UTC) Received: by gxk9 with SMTP id 9so466189gxk.13 for ; Mon, 25 Oct 2010 15:23:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=eH3A8PVp7Uo3Aw3okohu+BXCF5dbx2Jp1WbfTKIsRNo=; b=BjDZ6OzgetpY5GDwMT13d6te/SHN2PqArXcFKkfRpqqo2yu6nkCfEFis1VZ9/zLYrG yJHeAKfiQLnjPCkpsPaY1Pud5cxsCELb+xhdFDB/kopEWJnF72Sxx8D3Jn7/eUL67B2e vGKzg8+2mBKPnZt74xIuGembvwryUfKJWd01w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=NVLvnP67lrA31GshDz1O9tJdKlJ8GIwN1ynZ5soguR6yADT3shiO0ErdBk0ssjG5F2 RvnSxTIImXBO895Fsz1ujhaSqSXnYGun3temrZgsOmJvtJ3LzDLLq0uEUQtf/b9Uisg+ rJRgn2fDVL+UMh//YViwb1YBhHraJXN0Qc1aM= MIME-Version: 1.0 Received: by 10.42.170.197 with SMTP id g5mr5193126icz.347.1288044061314; Mon, 25 Oct 2010 15:01:01 -0700 (PDT) Received: by 10.42.164.68 with HTTP; Mon, 25 Oct 2010 15:01:01 -0700 (PDT) Date: Mon, 25 Oct 2010 15:01:01 -0700 Message-ID: From: Selphie Keller To: freebsd-hackers@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Subject: SYSCALL_MODULE() macro and modfind() issues X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Oct 2010 22:23:36 -0000 hi fbsd-hackers, Noticed a issue in 8.1-release, 8.1p1-release and 8.1-stable amd64/i386, to where modfind() will no longer find pmap_helper for the /usr/ports/sysutils/pmap port, or other syscall modules using SYSCALL_MODULE() macro. The issue is that modfind() function no longer finds any modules using SYSCALL_MODULE() macro to register the kernel module. Making it difficult for userland apps to call the syscall provided. modfind() always returns -1 which prevents modstat() from getting the required information to perform the syscall. Also tested, the demo syscall module: cat /usr/share/examples/kld/syscall/module/syscall.c /*- * Copyright (c) 1999 Assar Westerlund * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD: src/share/examples/kld/syscall/module/syscall.c,v 1.6.2.1.4.1 2010/06/14 02:09:06 kensmith Exp $ */ #include #include #include #include #include #include #include /* * The function for implementing the syscall. */ static int hello(struct thread *td, void *arg) { printf("hello kernel\n"); return (0); } /* * The `sysent' for the new syscall */ static struct sysent hello_sysent = { 0, /* sy_narg */ hello /* sy_call */ }; /* * The offset in sysent where the syscall is allocated. */ static int offset = NO_SYSCALL; /* * The function called at load/unload. */ static int load(struct module *module, int cmd, void *arg) { int error = 0; switch (cmd) { case MOD_LOAD : printf("syscall loaded at %d\n", offset); break; case MOD_UNLOAD : printf("syscall unloaded from %d\n", offset); break; default : error = EOPNOTSUPP; break; } return (error); } SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL); --------------------------------------------------------------------------------------------------------------------- /* userland app to call syscall */ #include #include #include #include int main(int argc, char **argv) { char *endptr; int syscall_num; struct module_stat stat; /*Helloworld syscall test*/ stat.version = sizeof(stat); modstat(modfind("syscall"), &stat); syscall_num = stat.data.intval; syscall (syscall_num); } --------------------------------------------------------------------------------------------------------------------- -Estella Mystagic (Selphie)