From owner-freebsd-bugs@FreeBSD.ORG Sun Apr 1 06:30:06 2007 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2FB1916A405 for ; Sun, 1 Apr 2007 06:30:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id EC10B13C455 for ; Sun, 1 Apr 2007 06:30:05 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l316U51v003306 for ; Sun, 1 Apr 2007 06:30:05 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l316U5B9003305; Sun, 1 Apr 2007 06:30:05 GMT (envelope-from gnats) Resent-Date: Sun, 1 Apr 2007 06:30:05 GMT Resent-Message-Id: <200704010630.l316U5B9003305@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Brian Walenz Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 54CE116A401 for ; Sun, 1 Apr 2007 06:27:37 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [69.147.83.33]) by mx1.freebsd.org (Postfix) with ESMTP id 4609313C44B for ; Sun, 1 Apr 2007 06:27:37 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id l316RbSn002107 for ; Sun, 1 Apr 2007 06:27:37 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id l316MZZq001719; Sun, 1 Apr 2007 06:22:35 GMT (envelope-from nobody) Message-Id: <200704010622.l316MZZq001719@www.freebsd.org> Date: Sun, 1 Apr 2007 06:22:35 GMT From: Brian Walenz To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.0 Cc: Subject: kern/111085: [patch] qsort fails on large (> 2GB) arrays X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 01 Apr 2007 06:30:06 -0000 >Number: 111085 >Category: kern >Synopsis: [patch] qsort fails on large (> 2GB) arrays >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Apr 01 06:30:05 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Brian Walenz >Release: 6.2-RELEASE >Organization: >Environment: FreeBSD xxxx 6.2-RELEASE FreeBSD 6.2-RELEASE #2: Tue Mar 27 20:00:46 EDT 2007 xxxx:/usr/src/sys/amd64/compile/TWOBYFOUR amd64 >Description: qsort(3) fails if given an array of many small elements, where the total size of the array is >> 2GB. Exact conditions not known; 200 million 16 byte elements (~3GB total size) fails. >How-To-Repeat: Compile and run (needs > 3GB core): #include #include #include typedef struct { uint64_t x; uint64_t a; } thing; int cmp(const void *a, const void *b) { thing const *A = (thing const *)a; thing const *B = (thing const *)b; if (A->x < B->x) return(-1); if (A->x > B->x) return(1); return(0); } int main(int argc, char **argv) { uint64_t i; uint64_t Tn; thing *T; srand48(4); Tn = 3; Tn *= 1024; Tn *= 1024; Tn *= 1024; Tn /= sizeof(thing); T = (thing *)malloc(sizeof(thing) * Tn); if (T == NULL) exit(1); fprintf(stderr, "building %lu %lu\n", Tn, Tn * sizeof(thing)); for (i=0; iFix: In /usr/src/lib/libc/stdlib/qsort.c, line 118, change the type of 'd and 'r' from int to long. >Release-Note: >Audit-Trail: >Unformatted: