From owner-svn-src-all@FreeBSD.ORG Tue Jun 3 01:55:28 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4F4E9C6D; Tue, 3 Jun 2014 01:55:28 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 311CB2C1E; Tue, 3 Jun 2014 01:55:28 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s531tSJ1056464; Tue, 3 Jun 2014 01:55:28 GMT (envelope-from markj@svn.freebsd.org) Received: (from markj@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s531tRBE056462; Tue, 3 Jun 2014 01:55:27 GMT (envelope-from markj@svn.freebsd.org) Message-Id: <201406030155.s531tRBE056462@svn.freebsd.org> From: Mark Johnston Date: Tue, 3 Jun 2014 01:55:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r266994 - in vendor/illumos/dist: cmd/dtrace/test/tst/common/arithmetic lib/libdtrace/common X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jun 2014 01:55:28 -0000 Author: markj Date: Tue Jun 3 01:55:27 2014 New Revision: 266994 URL: http://svnweb.freebsd.org/changeset/base/266994 Log: 4470 overly aggressive D integer narrowing breaks 32-bit ustack helpers illumos/illumos-gate@2e0552679e3175533ade93573ac1229d20a8367b Added: vendor/illumos/dist/cmd/dtrace/test/tst/common/arithmetic/tst.nonarrow.ksh Modified: vendor/illumos/dist/lib/libdtrace/common/dt_cg.c Added: vendor/illumos/dist/cmd/dtrace/test/tst/common/arithmetic/tst.nonarrow.ksh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/illumos/dist/cmd/dtrace/test/tst/common/arithmetic/tst.nonarrow.ksh Tue Jun 3 01:55:27 2014 (r266994) @@ -0,0 +1,48 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright (c) 2012, Joyent, Inc. All rights reserved. +# + +# +# Somewhat surprisingly, DTrace very much relies on the fact that when 32-bit +# is forced, pointers are not, in fact, narrowed to 32-bits. In particular, if +# this is not so (that is, if pointers are narrowed to their seemingly correct +# 32-bit width), helpers attached to 32-bit programs will fail to operate: +# they will erroneously zero the high 32-bits of the return values of 64-bit +# kernel pointers as returned by copyin(), alloca(), etc. This test asserts +# this implicit behavior -- and this comment regrettably serves as this +# behavior's only documentation. +# +doit() +{ + /usr/sbin/dtrace $1 -n BEGIN'{trace(sizeof (long))}' \ + -n 'BEGIN{*(int *)alloca(4) = 21506; exit(0)}' \ + -n 'ERROR{exit(1)}' + + if [ "$?" -ne 0 ]; then + exit $? + fi +} + +doit +doit -32 Modified: vendor/illumos/dist/lib/libdtrace/common/dt_cg.c ============================================================================== --- vendor/illumos/dist/lib/libdtrace/common/dt_cg.c Tue Jun 3 01:52:05 2014 (r266993) +++ vendor/illumos/dist/lib/libdtrace/common/dt_cg.c Tue Jun 3 01:55:27 2014 (r266994) @@ -476,7 +476,7 @@ dt_cg_typecast(const dt_node_t *src, con if (!dt_node_is_scalar(dst)) return; /* not a scalar */ if (dstsize == srcsize && - ((src->dn_flags ^ dst->dn_flags) & DT_NF_SIGNED) != 0) + ((src->dn_flags ^ dst->dn_flags) & DT_NF_SIGNED) == 0) return; /* not narrowing or changing signed-ness */ if (dstsize > srcsize && (src->dn_flags & DT_NF_SIGNED) == 0) return; /* nothing to do in this case */