From owner-svn-src-vendor@FreeBSD.ORG Tue Feb 23 01:04:30 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2FC23106566B; Tue, 23 Feb 2010 01:04:30 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1958C8FC12; Tue, 23 Feb 2010 01:04:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1N14URu011776; Tue, 23 Feb 2010 01:04:30 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1N14UM4011768; Tue, 23 Feb 2010 01:04:30 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201002230104.o1N14UM4011768@svn.freebsd.org> From: Xin LI Date: Tue, 23 Feb 2010 01:04:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204237 - in vendor/libz: 1.1.1 1.1.1/lib 1.1.3 1.1.3/lib 1.1.4 1.1.4/lib 1.2.1 1.2.1/lib 1.2.2 1.2.2/lib 1.2.3 1.2.3/lib/libz dist dist/lib X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Feb 2010 01:04:30 -0000 Author: delphij Date: Tue Feb 23 01:04:29 2010 New Revision: 204237 URL: http://svn.freebsd.org/changeset/base/204237 Log: Flattern zlib vendor tree. Added: vendor/libz/1.1.1/ChangeLog - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/ChangeLog vendor/libz/1.1.1/Makefile - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/Makefile vendor/libz/1.1.1/README - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/README vendor/libz/1.1.1/adler32.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/adler32.c vendor/libz/1.1.1/algorithm.txt - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/algorithm.txt vendor/libz/1.1.1/compress.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/compress.c vendor/libz/1.1.1/crc32.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/crc32.c vendor/libz/1.1.1/deflate.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/deflate.c vendor/libz/1.1.1/deflate.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/deflate.h vendor/libz/1.1.1/example.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/example.c vendor/libz/1.1.1/gzio.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/gzio.c vendor/libz/1.1.1/infblock.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infblock.c vendor/libz/1.1.1/infblock.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infblock.h vendor/libz/1.1.1/infcodes.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infcodes.c vendor/libz/1.1.1/infcodes.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infcodes.h vendor/libz/1.1.1/inffast.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/inffast.c vendor/libz/1.1.1/inffast.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/inffast.h vendor/libz/1.1.1/inflate.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/inflate.c vendor/libz/1.1.1/inftrees.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/inftrees.c vendor/libz/1.1.1/inftrees.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/inftrees.h vendor/libz/1.1.1/infutil.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infutil.c vendor/libz/1.1.1/infutil.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/infutil.h vendor/libz/1.1.1/minigzip.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/minigzip.c vendor/libz/1.1.1/trees.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/trees.c vendor/libz/1.1.1/trees.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/trees.h vendor/libz/1.1.1/uncompr.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/uncompr.c vendor/libz/1.1.1/zconf.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/zconf.h vendor/libz/1.1.1/zlib.3 - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/zlib.3 vendor/libz/1.1.1/zlib.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/zlib.h vendor/libz/1.1.1/zutil.c - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/zutil.c vendor/libz/1.1.1/zutil.h - copied unchanged from r204233, vendor/libz/1.1.1/lib/libz/zutil.h vendor/libz/1.1.3/ChangeLog - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/ChangeLog vendor/libz/1.1.3/FAQ - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/FAQ vendor/libz/1.1.3/README - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/README vendor/libz/1.1.3/adler32.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/adler32.c vendor/libz/1.1.3/algorithm.txt - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/algorithm.txt vendor/libz/1.1.3/compress.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/compress.c vendor/libz/1.1.3/crc32.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/crc32.c vendor/libz/1.1.3/deflate.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/deflate.c vendor/libz/1.1.3/deflate.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/deflate.h vendor/libz/1.1.3/example.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/example.c vendor/libz/1.1.3/gzio.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/gzio.c vendor/libz/1.1.3/infblock.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infblock.c vendor/libz/1.1.3/infblock.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infblock.h vendor/libz/1.1.3/infcodes.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infcodes.c vendor/libz/1.1.3/infcodes.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infcodes.h vendor/libz/1.1.3/inffast.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inffast.c vendor/libz/1.1.3/inffast.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inffast.h vendor/libz/1.1.3/inffixed.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inffixed.h vendor/libz/1.1.3/inflate.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inflate.c vendor/libz/1.1.3/inftrees.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inftrees.c vendor/libz/1.1.3/inftrees.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/inftrees.h vendor/libz/1.1.3/infutil.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infutil.c vendor/libz/1.1.3/infutil.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/infutil.h vendor/libz/1.1.3/maketree.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/maketree.c vendor/libz/1.1.3/minigzip.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/minigzip.c vendor/libz/1.1.3/trees.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/trees.c vendor/libz/1.1.3/trees.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/trees.h vendor/libz/1.1.3/uncompr.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/uncompr.c vendor/libz/1.1.3/zconf.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/zconf.h vendor/libz/1.1.3/zlib.3 - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/zlib.3 vendor/libz/1.1.3/zlib.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/zlib.h vendor/libz/1.1.3/zutil.c - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/zutil.c vendor/libz/1.1.3/zutil.h - copied unchanged from r204233, vendor/libz/1.1.3/lib/libz/zutil.h vendor/libz/1.1.4/ChangeLog - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/ChangeLog vendor/libz/1.1.4/FAQ - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/FAQ vendor/libz/1.1.4/INDEX - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/INDEX vendor/libz/1.1.4/README - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/README vendor/libz/1.1.4/adler32.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/adler32.c vendor/libz/1.1.4/algorithm.txt - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/algorithm.txt vendor/libz/1.1.4/compress.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/compress.c vendor/libz/1.1.4/crc32.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/crc32.c vendor/libz/1.1.4/deflate.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/deflate.c vendor/libz/1.1.4/deflate.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/deflate.h vendor/libz/1.1.4/descrip.mms - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/descrip.mms vendor/libz/1.1.4/example.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/example.c vendor/libz/1.1.4/gzio.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/gzio.c vendor/libz/1.1.4/infblock.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infblock.c vendor/libz/1.1.4/infblock.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infblock.h vendor/libz/1.1.4/infcodes.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infcodes.c vendor/libz/1.1.4/infcodes.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infcodes.h vendor/libz/1.1.4/inffast.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inffast.c vendor/libz/1.1.4/inffast.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inffast.h vendor/libz/1.1.4/inffixed.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inffixed.h vendor/libz/1.1.4/inflate.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inflate.c vendor/libz/1.1.4/inftrees.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inftrees.c vendor/libz/1.1.4/inftrees.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/inftrees.h vendor/libz/1.1.4/infutil.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infutil.c vendor/libz/1.1.4/infutil.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/infutil.h vendor/libz/1.1.4/maketree.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/maketree.c vendor/libz/1.1.4/minigzip.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/minigzip.c vendor/libz/1.1.4/trees.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/trees.c vendor/libz/1.1.4/trees.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/trees.h vendor/libz/1.1.4/uncompr.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/uncompr.c vendor/libz/1.1.4/zconf.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/zconf.h vendor/libz/1.1.4/zlib.3 - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/zlib.3 vendor/libz/1.1.4/zlib.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/zlib.h vendor/libz/1.1.4/zutil.c - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/zutil.c vendor/libz/1.1.4/zutil.h - copied unchanged from r204233, vendor/libz/1.1.4/lib/libz/zutil.h vendor/libz/1.2.1/ChangeLog - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/ChangeLog vendor/libz/1.2.1/FAQ - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/FAQ vendor/libz/1.2.1/INDEX - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/INDEX vendor/libz/1.2.1/README - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/README vendor/libz/1.2.1/adler32.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/adler32.c vendor/libz/1.2.1/algorithm.txt - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/algorithm.txt vendor/libz/1.2.1/compress.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/compress.c vendor/libz/1.2.1/crc32.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/crc32.c vendor/libz/1.2.1/crc32.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/crc32.h vendor/libz/1.2.1/deflate.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/deflate.c vendor/libz/1.2.1/deflate.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/deflate.h vendor/libz/1.2.1/example.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/example.c vendor/libz/1.2.1/gzio.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/gzio.c vendor/libz/1.2.1/infback.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/infback.c vendor/libz/1.2.1/inffast.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inffast.c vendor/libz/1.2.1/inffast.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inffast.h vendor/libz/1.2.1/inffixed.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inffixed.h vendor/libz/1.2.1/inflate.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inflate.c vendor/libz/1.2.1/inflate.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inflate.h vendor/libz/1.2.1/inftrees.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inftrees.c vendor/libz/1.2.1/inftrees.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/inftrees.h vendor/libz/1.2.1/minigzip.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/minigzip.c vendor/libz/1.2.1/trees.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/trees.c vendor/libz/1.2.1/trees.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/trees.h vendor/libz/1.2.1/uncompr.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/uncompr.c vendor/libz/1.2.1/zconf.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/zconf.h vendor/libz/1.2.1/zlib.3 - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/zlib.3 vendor/libz/1.2.1/zlib.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/zlib.h vendor/libz/1.2.1/zutil.c - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/zutil.c vendor/libz/1.2.1/zutil.h - copied unchanged from r204233, vendor/libz/1.2.1/lib/libz/zutil.h vendor/libz/1.2.2/ChangeLog - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/ChangeLog vendor/libz/1.2.2/FAQ - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/FAQ vendor/libz/1.2.2/README - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/README vendor/libz/1.2.2/adler32.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/adler32.c vendor/libz/1.2.2/algorithm.txt - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/algorithm.txt vendor/libz/1.2.2/compress.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/compress.c vendor/libz/1.2.2/crc32.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/crc32.c vendor/libz/1.2.2/crc32.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/crc32.h vendor/libz/1.2.2/deflate.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/deflate.c vendor/libz/1.2.2/deflate.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/deflate.h vendor/libz/1.2.2/example.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/example.c vendor/libz/1.2.2/gzio.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/gzio.c vendor/libz/1.2.2/infback.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/infback.c vendor/libz/1.2.2/inffast.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inffast.c vendor/libz/1.2.2/inffast.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inffast.h vendor/libz/1.2.2/inffixed.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inffixed.h vendor/libz/1.2.2/inflate.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inflate.c vendor/libz/1.2.2/inflate.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inflate.h vendor/libz/1.2.2/inftrees.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inftrees.c vendor/libz/1.2.2/inftrees.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/inftrees.h vendor/libz/1.2.2/minigzip.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/minigzip.c vendor/libz/1.2.2/trees.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/trees.c vendor/libz/1.2.2/trees.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/trees.h vendor/libz/1.2.2/uncompr.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/uncompr.c vendor/libz/1.2.2/zconf.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/zconf.h vendor/libz/1.2.2/zlib.3 - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/zlib.3 vendor/libz/1.2.2/zlib.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/zlib.h vendor/libz/1.2.2/zutil.c - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/zutil.c vendor/libz/1.2.2/zutil.h - copied unchanged from r204233, vendor/libz/1.2.2/lib/libz/zutil.h vendor/libz/1.2.3/ChangeLog - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/ChangeLog vendor/libz/1.2.3/FAQ - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/FAQ vendor/libz/1.2.3/README - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/README vendor/libz/1.2.3/adler32.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/adler32.c vendor/libz/1.2.3/algorithm.txt - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/algorithm.txt vendor/libz/1.2.3/compress.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/compress.c vendor/libz/1.2.3/crc32.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/crc32.c vendor/libz/1.2.3/crc32.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/crc32.h vendor/libz/1.2.3/deflate.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/deflate.c vendor/libz/1.2.3/deflate.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/deflate.h vendor/libz/1.2.3/example.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/example.c vendor/libz/1.2.3/gzio.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/gzio.c vendor/libz/1.2.3/infback.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/infback.c vendor/libz/1.2.3/inffast.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inffast.c vendor/libz/1.2.3/inffast.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inffast.h vendor/libz/1.2.3/inffixed.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inffixed.h vendor/libz/1.2.3/inflate.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inflate.c vendor/libz/1.2.3/inflate.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inflate.h vendor/libz/1.2.3/inftrees.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inftrees.c vendor/libz/1.2.3/inftrees.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/inftrees.h vendor/libz/1.2.3/minigzip.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/minigzip.c vendor/libz/1.2.3/trees.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/trees.c vendor/libz/1.2.3/trees.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/trees.h vendor/libz/1.2.3/uncompr.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/uncompr.c vendor/libz/1.2.3/zconf.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/zconf.h vendor/libz/1.2.3/zlib.3 - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/zlib.3 vendor/libz/1.2.3/zlib.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/zlib.h vendor/libz/1.2.3/zutil.c - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/zutil.c vendor/libz/1.2.3/zutil.h - copied unchanged from r204233, vendor/libz/1.2.3/lib/libz/zutil.h vendor/libz/dist/ChangeLog - copied unchanged from r204233, vendor/libz/dist/lib/libz/ChangeLog vendor/libz/dist/FAQ - copied unchanged from r204233, vendor/libz/dist/lib/libz/FAQ vendor/libz/dist/INDEX - copied unchanged from r204233, vendor/libz/dist/lib/libz/INDEX vendor/libz/dist/Makefile - copied unchanged from r204233, vendor/libz/dist/lib/libz/Makefile vendor/libz/dist/README - copied unchanged from r204233, vendor/libz/dist/lib/libz/README vendor/libz/dist/adler32.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/adler32.c vendor/libz/dist/algorithm.txt - copied unchanged from r204233, vendor/libz/dist/lib/libz/algorithm.txt vendor/libz/dist/compress.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/compress.c vendor/libz/dist/crc32.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/crc32.c vendor/libz/dist/crc32.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/crc32.h vendor/libz/dist/deflate.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/deflate.c vendor/libz/dist/deflate.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/deflate.h vendor/libz/dist/example.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/example.c vendor/libz/dist/gzio.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/gzio.c vendor/libz/dist/infback.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/infback.c vendor/libz/dist/inffast.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/inffast.c vendor/libz/dist/inffast.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/inffast.h vendor/libz/dist/inffixed.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/inffixed.h vendor/libz/dist/inflate.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/inflate.c vendor/libz/dist/inflate.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/inflate.h vendor/libz/dist/inftrees.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/inftrees.c vendor/libz/dist/inftrees.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/inftrees.h vendor/libz/dist/minigzip.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/minigzip.c vendor/libz/dist/trees.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/trees.c vendor/libz/dist/trees.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/trees.h vendor/libz/dist/uncompr.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/uncompr.c vendor/libz/dist/zconf.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/zconf.h vendor/libz/dist/zlib.3 - copied unchanged from r204233, vendor/libz/dist/lib/libz/zlib.3 vendor/libz/dist/zlib.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/zlib.h vendor/libz/dist/zutil.c - copied unchanged from r204233, vendor/libz/dist/lib/libz/zutil.c vendor/libz/dist/zutil.h - copied unchanged from r204233, vendor/libz/dist/lib/libz/zutil.h Deleted: vendor/libz/1.1.1/lib/ vendor/libz/1.1.3/lib/ vendor/libz/1.1.4/lib/ vendor/libz/1.2.1/lib/ vendor/libz/1.2.2/lib/ vendor/libz/1.2.3/lib/libz/ChangeLog vendor/libz/1.2.3/lib/libz/FAQ vendor/libz/1.2.3/lib/libz/README vendor/libz/1.2.3/lib/libz/adler32.c vendor/libz/1.2.3/lib/libz/algorithm.txt vendor/libz/1.2.3/lib/libz/compress.c vendor/libz/1.2.3/lib/libz/crc32.c vendor/libz/1.2.3/lib/libz/crc32.h vendor/libz/1.2.3/lib/libz/deflate.c vendor/libz/1.2.3/lib/libz/deflate.h vendor/libz/1.2.3/lib/libz/example.c vendor/libz/1.2.3/lib/libz/gzio.c vendor/libz/1.2.3/lib/libz/infback.c vendor/libz/1.2.3/lib/libz/inffast.c vendor/libz/1.2.3/lib/libz/inffast.h vendor/libz/1.2.3/lib/libz/inffixed.h vendor/libz/1.2.3/lib/libz/inflate.c vendor/libz/1.2.3/lib/libz/inflate.h vendor/libz/1.2.3/lib/libz/inftrees.c vendor/libz/1.2.3/lib/libz/inftrees.h vendor/libz/1.2.3/lib/libz/minigzip.c vendor/libz/1.2.3/lib/libz/trees.c vendor/libz/1.2.3/lib/libz/trees.h vendor/libz/1.2.3/lib/libz/uncompr.c vendor/libz/1.2.3/lib/libz/zconf.h vendor/libz/1.2.3/lib/libz/zlib.3 vendor/libz/1.2.3/lib/libz/zlib.h vendor/libz/1.2.3/lib/libz/zutil.c vendor/libz/1.2.3/lib/libz/zutil.h vendor/libz/dist/lib/ Copied: vendor/libz/1.1.1/ChangeLog (from r204233, vendor/libz/1.1.1/lib/libz/ChangeLog) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/ChangeLog Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/ChangeLog) @@ -0,0 +1,404 @@ + + ChangeLog file for zlib + +Changes in 1.1.1 (27 Feb 98) +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow. +- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) + +Changes in 1.1.0 (24 Feb 98) +- do not return STREAM_END prematurely in inflate (John Bowler) +- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) +- compile with -DFASTEST to get compression code optimized for speed only +- in minigzip, try mmap'ing the input file first (Miguel Albrecht) +- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain + on Sun but significant on HP) + +- add a pointer to experimental unzip library in README (Gilles Vollant) +- initialize variable gcc in configure (Chris Herborth) + +Changes in 1.0.9 (17 Feb 1998) +- added gzputs and gzgets functions +- do not clear eof flag in gzseek (Mark Diekhans) +- fix gzseek for files in transparent mode (Mark Diekhans) +- do not assume that vsprintf returns the number of bytes written (Jens Krinke) +- replace EXPORT with ZEXPORT to avoid conflict with other programs +- added compress2 in zconf.h, zlib.def, zlib.dnt +- new asm code from Gilles Vollant in contrib/asm386 +- simplify the inflate code (Mark): + . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() + . ZALLOC the length list in inflate_trees_fixed() instead of using stack + . ZALLOC the value area for huft_build() instead of using stack + . Simplify Z_FINISH check in inflate() + +- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 +- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) +- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with + the declaration of FAR (Gilles VOllant) +- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) +- read_buf buf parameter of type Bytef* instead of charf* +- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) +- do not redeclare unlink in minigzip.c for WIN32 (John Bowler) +- fix check for presence of directories in "make install" (Ian Willis) + +Changes in 1.0.8 (27 Jan 1998) +- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) +- fix gzgetc and gzputc for big endian systems (Markus Oberhumer) +- added compress2() to allow setting the compression level +- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) +- use constant arrays for the static trees in trees.c instead of computing + them at run time (thanks to Ken Raeburn for this suggestion). To create + trees.h, compile with GEN_TREES_H and run "make test". +- check return code of example in "make test" and display result +- pass minigzip command line options to file_compress +- simplifying code of inflateSync to avoid gcc 2.8 bug + +- support CC="gcc -Wall" in configure -s (QingLong) +- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) +- fix test for shared library support to avoid compiler warnings +- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) +- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) +- do not use fdopen for Metrowerks on Mac (Brad Pettit)) +- add checks for gzputc and gzputc in example.c +- avoid warnings in gzio.c and deflate.c (Andreas Kleinert) +- use const for the CRC table (Ken Raeburn) +- fixed "make uninstall" for shared libraries +- use Tracev instead of Trace in infblock.c +- in example.c use correct compressed length for test_sync +- suppress +vnocompatwarnings in configure for HPUX (not always supported) + +Changes in 1.0.7 (20 Jan 1998) +- fix gzseek which was broken in write mode +- return error for gzseek to negative absolute position +- fix configure for Linux (Chun-Chung Chen) +- increase stack space for MSC (Tim Wegner) +- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) +- define EXPORTVA for gzprintf (Gilles Vollant) +- added man page zlib.3 (Rick Rodgers) +- for contrib/untgz, fix makedir() and improve Makefile + +- check gzseek in write mode in example.c +- allocate extra buffer for seeks only if gzseek is actually called +- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) +- add inflateSyncPoint in zconf.h +- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def + +Changes in 1.0.6 (19 Jan 1998) +- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and + gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) +- Fix a deflate bug occuring only with compression level 0 (thanks to + Andy Buckler for finding this one). +- In minigzip, pass transparently also the first byte for .Z files. +- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() +- check Z_FINISH in inflate (thanks to Marc Schluper) +- Implement deflateCopy (thanks to Adam Costello) +- make static libraries by default in configure, add --shared option. +- move MSDOS or Windows specific files to directory msdos +- suppress the notion of partial flush to simplify the interface + (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) +- suppress history buffer provided by application to simplify the interface + (this feature was not implemented anyway in 1.0.4) +- next_in and avail_in must be initialized before calling inflateInit or + inflateInit2 +- add EXPORT in all exported functions (for Windows DLL) +- added Makefile.nt (thanks to Stephen Williams) +- added the unsupported "contrib" directory: + contrib/asm386/ by Gilles Vollant + 386 asm code replacing longest_match(). + contrib/iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + contrib/iostream2/ by Tyge Løvset + Another C++ I/O streams interface + contrib/untgz/ by "Pedro A. Aranda Guti\irrez" + A very simple tar.gz file extractor using zlib + contrib/visual-basic.txt by Carlos Rios + How to use compress(), uncompress() and the gz* functions from VB. +- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression + level) in minigzip (thanks to Tom Lane) + +- use const for rommable constants in deflate +- added test for gzseek and gztell in example.c +- add undocumented function inflateSyncPoint() (hack for Paul Mackerras) +- add undocumented function zError to convert error code to string + (for Tim Smithers) +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. +- Use default memcpy for Symantec MSDOS compiler. +- Add EXPORT keyword for check_func (needed for Windows DLL) +- add current directory to LD_LIBRARY_PATH for "make test" +- create also a link for libz.so.1 +- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) +- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) +- added -soname for Linux in configure (Chun-Chung Chen, +- assign numbers to the exported functions in zlib.def (for Windows DLL) +- add advice in zlib.h for best usage of deflateSetDictionary +- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) +- allow compilation with ANSI keywords only enabled for TurboC in large model +- avoid "versionString"[0] (Borland bug) +- add NEED_DUMMY_RETURN for Borland +- use variable z_verbose for tracing in debug mode (Peter Deutsch). +- allow compilation with CC +- defined STDC for OS/2 (David Charlap) +- limit external names to 8 chars for MVS (Thomas Lund) +- in minigzip.c, use static buffers only for 16-bit systems +- fix suffix check for "minigzip -d foo.gz" +- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) +- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) +- added makelcc.bat for lcc-win32 (Tom St Denis) +- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. +- check for unistd.h in configure (for off_t) +- remove useless check parameter in inflate_blocks_free +- avoid useless assignment of s->check to itself in inflate_blocks_new +- do not flush twice in gzclose (thanks to Ken Raeburn) +- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h +- use NO_ERRNO_H instead of enumeration of operating systems with errno.h +- work around buggy fclose on pipes for HP/UX +- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) +- fix configure if CC is already equal to gcc + +Changes in 1.0.5 (3 Jan 98) +- Fix inflate to terminate gracefully when fed corrupted or invalid data +- Use const for rommable constants in inflate +- Eliminate memory leaks on error conditions in inflate +- Removed some vestigial code in inflate +- Update web address in README + +Changes in 1.0.4 (24 Jul 96) +- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF + bit, so the decompressor could decompress all the correct data but went + on to attempt decompressing extra garbage data. This affected minigzip too. +- zlibVersion and gzerror return const char* (needed for DLL) +- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) +- use z_error only for DEBUG (avoid problem with DLLs) + +Changes in 1.0.3 (2 Jul 96) +- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS + small and medium models; this makes the library incompatible with previous + versions for these models. (No effect in large model or on other systems.) +- return OK instead of BUF_ERROR if previous deflate call returned with + avail_out as zero but there is nothing to do +- added memcmp for non STDC compilers +- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) +- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) +- better check for 16-bit mode MSC (avoids problem with Symantec) + +Changes in 1.0.2 (23 May 96) +- added Windows DLL support +- added a function zlibVersion (for the DLL support) +- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) +- Bytef is define's instead of typedef'd only for Borland C +- avoid reading uninitialized memory in example.c +- mention in README that the zlib format is now RFC1950 +- updated Makefile.dj2 +- added algorithm.doc + +Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] +- fix array overlay in deflate.c which sometimes caused bad compressed data +- fix inflate bug with empty stored block +- fix MSDOS medium model which was broken in 0.99 +- fix deflateParams() which could generated bad compressed data. +- Bytef is define'd instead of typedef'ed (work around Borland bug) +- added an INDEX file +- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), + Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) +- speed up adler32 for modern machines without auto-increment +- added -ansi for IRIX in configure +- static_init_done in trees.c is an int +- define unlink as delete for VMS +- fix configure for QNX +- add configure branch for SCO and HPUX +- avoid many warnings (unused variables, dead assignments, etc...) +- no fdopen for BeOS +- fix the Watcom fix for 32 bit mode (define FAR as empty) +- removed redefinition of Byte for MKWERKS +- work around an MWKERKS bug (incorrect merge of all .h files) + +Changes in 0.99 (27 Jan 96) +- allow preset dictionary shared between compressor and decompressor +- allow compression level 0 (no compression) +- add deflateParams in zlib.h: allow dynamic change of compression level + and compression strategy. +- test large buffers and deflateParams in example.c +- add optional "configure" to build zlib as a shared library +- suppress Makefile.qnx, use configure instead +- fixed deflate for 64-bit systems (detected on Cray) +- fixed inflate_blocks for 64-bit systems (detected on Alpha) +- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) +- always return Z_BUF_ERROR when deflate() has nothing to do +- deflateInit and inflateInit are now macros to allow version checking +- prefix all global functions and types with z_ with -DZ_PREFIX +- make falloc completely reentrant (inftrees.c) +- fixed very unlikely race condition in ct_static_init +- free in reverse order of allocation to help memory manager +- use zlib-1.0/* instead of zlib/* inside the tar.gz +- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith + -Wconversion -Wstrict-prototypes -Wmissing-prototypes" +- allow gzread on concatenated .gz files +- deflateEnd now returns Z_DATA_ERROR if it was premature +- deflate is finally (?) fully deterministic (no matches beyond end of input) +- Document Z_SYNC_FLUSH +- add uninstall in Makefile +- Check for __cpluplus in zlib.h +- Better test in ct_align for partial flush +- avoid harmless warnings for Borland C++ +- initialize hash_head in deflate.c +- avoid warning on fdopen (gzio.c) for HP cc -Aa +- include stdlib.h for STDC compilers +- include errno.h for Cray +- ignore error if ranlib doesn't exist +- call ranlib twice for NeXTSTEP +- use exec_prefix instead of prefix for libz.a +- renamed ct_* as _tr_* to avoid conflict with applications +- clear z->msg in inflateInit2 before any error return +- initialize opaque in example.c, gzio.c, deflate.c and inflate.c +- fixed typo in zconf.h (_GNUC__ => __GNUC__) +- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) +- fix typo in Make_vms.com (f$trnlnm -> f$getsyi) +- in fcalloc, normalize pointer if size > 65520 bytes +- don't use special fcalloc for 32 bit Borland C++ +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... +- use Z_BINARY instead of BINARY +- document that gzclose after gzdopen will close the file +- allow "a" as mode in gzopen. +- fix error checking in gzread +- allow skipping .gz extra-field on pipes +- added reference to Perl interface in README +- put the crc table in FAR data (I dislike more and more the medium model :) +- added get_crc_table +- added a dimension to all arrays (Borland C can't count). +- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast +- guard against multiple inclusion of *.h (for precompiled header on Mac) +- Watcom C pretends to be Microsoft C small model even in 32 bit mode. +- don't use unsized arrays to avoid silly warnings by Visual C++: + warning C4746: 'inflate_mask' : unsized array treated as '__far' + (what's wrong with far data in far model?). +- define enum out of inflate_blocks_state to allow compilation with C++ + +Changes in 0.95 (16 Aug 95) +- fix MSDOS small and medium model (now easier to adapt to any compiler) +- inlined send_bits +- fix the final (:-) bug for deflate with flush (output was correct but + not completely flushed in rare occasions). +- default window size is same for compression and decompression + (it's now sufficient to set MAX_WBITS in zconf.h). +- voidp -> voidpf and voidnp -> voidp (for consistency with other + typedefs and because voidnp was not near in large model). + +Changes in 0.94 (13 Aug 95) +- support MSDOS medium model +- fix deflate with flush (could sometimes generate bad output) +- fix deflateReset (zlib header was incorrectly suppressed) +- added support for VMS +- allow a compression level in gzopen() +- gzflush now calls fflush +- For deflate with flush, flush even if no more input is provided. +- rename libgz.a as libz.a +- avoid complex expression in infcodes.c triggering Turbo C bug +- work around a problem with gcc on Alpha (in INSERT_STRING) +- don't use inline functions (problem with some gcc versions) +- allow renaming of Byte, uInt, etc... with #define. +- avoid warning about (unused) pointer before start of array in deflate.c +- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c +- avoid reserved word 'new' in trees.c + +Changes in 0.93 (25 June 95) +- temporarily disable inline functions +- make deflate deterministic +- give enough lookahead for PARTIAL_FLUSH +- Set binary mode for stdin/stdout in minigzip.c for OS/2 +- don't even use signed char in inflate (not portable enough) +- fix inflate memory leak for segmented architectures + +Changes in 0.92 (3 May 95) +- don't assume that char is signed (problem on SGI) +- Clear bit buffer when starting a stored block +- no memcpy on Pyramid +- suppressed inftest.c +- optimized fill_window, put longest_match inline for gcc +- optimized inflate on stored blocks. +- untabify all sources to simplify patches + +Changes in 0.91 (2 May 95) +- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h +- Document the memory requirements in zconf.h +- added "make install" +- fix sync search logic in inflateSync +- deflate(Z_FULL_FLUSH) now works even if output buffer too short +- after inflateSync, don't scare people with just "lo world" +- added support for DJGPP + +Changes in 0.9 (1 May 95) +- don't assume that zalloc clears the allocated memory (the TurboC bug + was Mark's bug after all :) +- let again gzread copy uncompressed data unchanged (was working in 0.71) +- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented +- added a test of inflateSync in example.c +- moved MAX_WBITS to zconf.h because users might want to change that. +- document explicitly that zalloc(64K) on MSDOS must return a normalized + pointer (zero offset) +- added Makefiles for Microsoft C, Turbo C, Borland C++ +- faster crc32() + +Changes in 0.8 (29 April 95) +- added fast inflate (inffast.c) +- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this + is incompatible with previous versions of zlib which returned Z_OK. +- work around a TurboC compiler bug (bad code for b << 0, see infutil.h) + (actually that was not a compiler bug, see 0.81 above) +- gzread no longer reads one extra byte in certain cases +- In gzio destroy(), don't reference a freed structure +- avoid many warnings for MSDOS +- avoid the ERROR symbol which is used by MS Windows + +Changes in 0.71 (14 April 95) +- Fixed more MSDOS compilation problems :( There is still a bug with + TurboC large model. + +Changes in 0.7 (14 April 95) +- Added full inflate support. +- Simplified the crc32() interface. The pre- and post-conditioning + (one's complement) is now done inside crc32(). WARNING: this is + incompatible with previous versions; see zlib.h for the new usage. + +Changes in 0.61 (12 April 95) +- workaround for a bug in TurboC. example and minigzip now work on MSDOS. + +Changes in 0.6 (11 April 95) +- added minigzip.c +- added gzdopen to reopen a file descriptor as gzFile +- added transparent reading of non-gziped files in gzread. +- fixed bug in gzread (don't read crc as data) +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). +- don't allocate big arrays in the stack (for MSDOS) +- fix some MSDOS compilation problems + +Changes in 0.5: +- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but + not yet Z_FULL_FLUSH. +- support decompression but only in a single step (forced Z_FINISH) +- added opaque object for zalloc and zfree. +- added deflateReset and inflateReset +- added a variable zlib_version for consistency checking. +- renamed the 'filter' parameter of deflateInit2 as 'strategy'. + Added Z_FILTERED and Z_HUFFMAN_ONLY constants. + +Changes in 0.4: +- avoid "zip" everywhere, use zlib instead of ziplib. +- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush + if compression method == 8. +- added adler32 and crc32 +- renamed deflateOptions as deflateInit2, call one or the other but not both +- added the method parameter for deflateInit2. +- added inflateInit2 +- simplied considerably deflateInit and inflateInit by not supporting + user-provided history buffer. This is supported only in deflateInit2 + and inflateInit2. + +Changes in 0.3: +- prefix all macro names with Z_ +- use Z_FINISH instead of deflateEnd to finish compression. +- added Z_HUFFMAN_ONLY +- added gzerror() Copied: vendor/libz/1.1.1/Makefile (from r204233, vendor/libz/1.1.1/lib/libz/Makefile) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/Makefile Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/Makefile) @@ -0,0 +1,158 @@ +# Makefile for zlib +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# ./configure; make test +# The call of configure is optional if you don't have special requirements +# If you wish to build zlib as a shared library, use: ./configure -s + +# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: +# make install +# To install in $HOME instead of /usr/local, use: +# make install prefix=$HOME + +CC=cc + +CFLAGS=-O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DDEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +LDFLAGS=-L. -lz +LDSHARED=$(CC) + +VER=1.1.1 +LIBS=libz.a +SHAREDLIB=libz.so + +AR=ar rc +RANLIB=ranlib +TAR=tar +SHELL=/bin/sh + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o + +TEST_OBJS = example.o minigzip.o + +DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ + algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ + nt/Makefile.nt nt/zlib.dnt contrib/README.contrib contrib/*.txt \ + contrib/asm386/*.asm contrib/asm386/*.c \ + contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ + contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ + contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 + +all: example minigzip + +test: all + @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + echo hello world | ./minigzip | ./minigzip -d || \ + echo ' *** minigzip test FAILED ***' ; \ + if ./example; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; \ + fi + +libz.a: $(OBJS) + $(AR) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +$(SHAREDLIB).$(VER): $(OBJS) + $(LDSHARED) -o $@ $(OBJS) + rm -f $(SHAREDLIB) $(SHAREDLIB).1 + ln -s $@ $(SHAREDLIB) + ln -s $@ $(SHAREDLIB).1 + +example: example.o $(LIBS) + $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) + +minigzip: minigzip.o $(LIBS) + $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) + +install: $(LIBS) + -@if [ ! -d $(prefix)/include ]; then mkdir $(prefix)/include; fi + -@if [ ! -d $(exec_prefix)/lib ]; then mkdir $(exec_prefix)/lib; fi + cp zlib.h zconf.h $(prefix)/include + chmod 644 $(prefix)/include/zlib.h $(prefix)/include/zconf.h + cp $(LIBS) $(exec_prefix)/lib + cd $(exec_prefix)/lib; chmod 755 $(LIBS) + -@(cd $(exec_prefix)/lib; $(RANLIB) libz.a || true) >/dev/null 2>&1 + cd $(exec_prefix)/lib; if test -f $(SHAREDLIB).$(VER); then \ + rm -f $(SHAREDLIB) $(SHAREDLIB).1; \ + ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \ + ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ + (ldconfig || true) >/dev/null 2>&1; \ + fi +# The ranlib in install is needed on NeXTSTEP which checks file times +# ldconfig is for Linux + +uninstall: + cd $(prefix)/include; \ + v=$(VER); \ + if test -f zlib.h; then \ + v=`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`; \ + rm -f zlib.h zconf.h; \ + fi; \ + cd $(exec_prefix)/lib; rm -f libz.a; \ + if test -f $(SHAREDLIB).$$v; then \ + rm -f $(SHAREDLIB).$$v $(SHAREDLIB) $(SHAREDLIB).1; \ + fi + +clean: + rm -f *.o *~ example minigzip libz.a libz.so* foo.gz + +distclean: clean + +zip: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + zip -ul9 zlib$$v $(DISTFILES) + mv Makefile~ Makefile + +dist: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + rm -f $$d.tar.gz; \ + if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \ + files=""; \ + for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ + cd ..; \ + GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ + if test ! -d $$d; then rm -f $$d; fi + mv Makefile~ Makefile + +tags: + etags *.[ch] + +depend: + makedepend -- $(CFLAGS) -- *.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h +infcodes.o: zutil.h zlib.h zconf.h +infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h +inffast.o: infblock.h infcodes.h infutil.h inffast.h +inflate.o: zutil.h zlib.h zconf.h infblock.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h Copied: vendor/libz/1.1.1/README (from r204233, vendor/libz/1.1.1/lib/libz/README) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/README Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/README) @@ -0,0 +1,127 @@ +zlib 1.1.1 is a general purpose data compression library. All the code +is thread safe. The data format used by the zlib library +is described by RFCs (Request for Comments) 1950 to 1952 in the files +ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate +format) and rfc1952.txt (gzip format). These documents are also available in +other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact jloup@gzip.org). A usage +example of the library is given in the file example.c which also tests that +the library is working correctly. Another example is given in the file +minigzip.c. The compression library itself is composed of all source files +except example.c and minigzip.c. + +To compile all files and run the test program, follow the instructions +given at the top of Makefile. In short "make test; make install" +should work for most machines. For MSDOS, use one of the special +makefiles such as Makefile.msc; for VMS, use Make_vms.com or descrip.mms. + +Questions about zlib should be sent to or, +if this fails, to the addresses given below in the Copyright section. +The zlib home page is http://www.cdrom.com/pub/infozip/zlib/ +The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/ +Mark Nelson wrote an article about zlib for the Jan. 1997 issue of +Dr. Dobb's Journal; a copy of the article is available in +http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm + +The changes made in version 1.1.1 are documented in the file ChangeLog. +The main changes since 1.1.0 are: + +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow. + + +Unsupported third party contributions are provided in directory "contrib". + +A Java implementation of zlib is available in the Java Development Kit 1.1 +http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html +See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details. + +A Perl interface to zlib written by Paul Marquess +is in the CPAN (Comprehensive Perl Archive Network) sites, such as: +ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib* + +A Python interface to zlib written by A.M. Kuchling +is available from the Python Software Association sites, such as: +ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz + +An experimental package to read files in .zip format, written on top of +zlib by Gilles Vollant , is available at +http://www.winimage.com/zLibDll/unzip.html + + +Notes for some targets: + +- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc + and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL + The zlib DLL support was initially done by Alessandro Iacopetti and is + now maintained by Gilles Vollant . Check the zlib DLL + home page at http://www.winimage.com/zLibDll + + From Visual Basic, you can call the DLL functions which do not take + a structure as argument: compress, uncompress and all gz* functions. + See contrib/visual-basic.txt for more information. + I don't know how to handle structures in Visual Basic, sorry. + +- For 64-bit Irix, deflate.c must be compiled without any optimization. + With -O, one libpng test fails. The test works in 32 bit mode (with + the -n32 compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 + it works when compiled with cc. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works + with other compilers. Use "make test" to check your compiler. + +- For shared memory multiprocessors, the decompression code assumes that + writes to pointers are atomic. Also the functions zalloc and zfree passed + to deflateInit must be multi-threaded in this case. + +- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. + +- For Turbo C the small model is supported only with reduced performance to + avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-1998 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. Copied: vendor/libz/1.1.1/adler32.c (from r204233, vendor/libz/1.1.1/lib/libz/adler32.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/adler32.c Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/adler32.c) @@ -0,0 +1,48 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-1998 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +#define BASE 65521L /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {s1 += buf[i]; s2 += s1;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int k; + + if (buf == Z_NULL) return 1L; + + while (len > 0) { + k = len < NMAX ? len : NMAX; + len -= k; + while (k >= 16) { + DO16(buf); + buf += 16; + k -= 16; + } + if (k != 0) do { + s1 += *buf++; + s2 += s1; + } while (--k); + s1 %= BASE; + s2 %= BASE; + } + return (s2 << 16) | s1; +} Copied: vendor/libz/1.1.1/algorithm.txt (from r204233, vendor/libz/1.1.1/lib/libz/algorithm.txt) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/algorithm.txt Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/algorithm.txt) @@ -0,0 +1,213 @@ +1. Compression algorithm (deflate) + +The deflation algorithm used by gzip (also zip and zlib) is a variation of +LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in +the input data. The second occurrence of a string is replaced by a +pointer to the previous string, in the form of a pair (distance, +length). Distances are limited to 32K bytes, and lengths are limited +to 258 bytes. When a string does not occur anywhere in the previous +32K bytes, it is emitted as a sequence of literal bytes. (In this +description, `string' must be taken as an arbitrary sequence of bytes, +and is not restricted to printable characters.) + +Literals or match lengths are compressed with one Huffman tree, and +match distances are compressed with another tree. The trees are stored +in a compact form at the start of each block. The blocks can have any +size (except that the compressed data for one block must fit in +available memory). A block is terminated when deflate() determines that +it would be useful to start another block with fresh trees. (This is +somewhat similar to the behavior of LZW-based _compress_.) + +Duplicated strings are found using a hash table. All input strings of +length 3 are inserted in the hash table. A hash index is computed for +the next 3 bytes. If the hash chain for this index is not empty, all +strings in the chain are compared with the current input string, and +the longest match is selected. + +The hash chains are searched starting with the most recent strings, to +favor small distances and thus take advantage of the Huffman encoding. +The hash chains are singly linked. There are no deletions from the +hash chains, the algorithm simply discards matches that are too old. + +To avoid a worst-case situation, very long hash chains are arbitrarily +truncated at a certain length, determined by a runtime option (level +parameter of deflateInit). So deflate() does not always find the longest +possible match but generally finds a match which is long enough. + +deflate() also defers the selection of matches with a lazy evaluation +mechanism. After a match of length N has been found, deflate() searches for +a longer match at the next input byte. If a longer match is found, the +previous match is truncated to a length of one (thus producing a single +literal byte) and the process of lazy evaluation begins again. Otherwise, +the original match is kept, and the next match search is attempted only N +steps later. + +The lazy match evaluation is also subject to a runtime parameter. If +the current match is long enough, deflate() reduces the search for a longer +match, thus speeding up the whole process. If compression ratio is more +important than speed, deflate() attempts a complete second search even if +the first match is already long enough. + +The lazy match evaluation is not performed for the fastest compression +modes (level parameter 1 to 3). For these fast modes, new strings +are inserted in the hash table only when no match was found, or +when the match is not too long. This degrades the compression ratio +but saves time since there are both fewer insertions and fewer searches. + + +2. Decompression algorithm (inflate) + +2.1 Introduction + +The real question is, given a Huffman tree, how to decode fast. The most +important realization is that shorter codes are much more common than +longer codes, so pay attention to decoding the short codes fast, and let +the long codes take longer to decode. + +inflate() sets up a first level table that covers some number of bits of +input less than the length of longest code. It gets that many bits from the +stream, and looks it up in the table. The table will tell if the next +code is that many bits or less and how many, and if it is, it will tell +the value, else it will point to the next level table for which inflate() +grabs more bits and tries to decode a longer code. + +How many bits to make the first lookup is a tradeoff between the time it +takes to decode and the time it takes to build the table. If building the +table took no time (and if you had infinite memory), then there would only +be a first level table to cover all the way to the longest code. However, +building the table ends up taking a lot longer for more bits since short +codes are replicated many times in such a table. What inflate() does is +simply to make the number of bits in the first table a variable, and set it +for the maximum speed. + +inflate() sends new trees relatively often, so it is possibly set for a +smaller first level table than an application that has only one tree for +all the data. For inflate, which has 286 possible codes for the +literal/length tree, the size of the first table is nine bits. Also the +distance trees have 30 possible values, and the size of the first table is +six bits. Note that for each of those cases, the table ended up one bit +longer than the ``average'' code length, i.e. the code length of an +approximately flat code which would be a little more than eight bits for +286 symbols and a little less than five bits for 30 symbols. It would be +interesting to see if optimizing the first level table for other +applications gave values within a bit or two of the flat code size. + + +2.2 More details on the inflate table lookup + +Ok, you want to know what this cleverly obfuscated inflate tree actually +looks like. You are correct that it's not a Huffman tree. It is simply a +lookup table for the first, let's say, nine bits of a Huffman symbol. The +symbol could be as short as one bit or as long as 15 bits. If a particular +symbol is shorter than nine bits, then that symbol's translation is duplicated +in all those entries that start with that symbol's bits. For example, if the +symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a +symbol is nine bits long, it appears in the table once. + +If the symbol is longer than nine bits, then that entry in the table points +to another similar table for the remaining bits. Again, there are duplicated +entries as needed. The idea is that most of the time the symbol will be short +and there will only be one table look up. (That's whole idea behind data +compression in the first place.) For the less frequent long symbols, there +will be two lookups. If you had a compression method with really long +symbols, you could have as many levels of lookups as is efficient. For +inflate, two is enough. + +So a table entry either points to another table (in which case nine bits in +the above example are gobbled), or it contains the translation for the symbol +and the number of bits to gobble. Then you start again with the next +ungobbled bit. + +You may wonder: why not just have one lookup table for how ever many bits the +longest symbol is? The reason is that if you do that, you end up spending +more time filling in duplicate symbol entries than you do actually decoding. +At least for deflate's output that generates new trees every several 10's of +kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code +would take too long if you're only decoding several thousand symbols. At the +other extreme, you could make a new table for every bit in the code. In fact, +that's essentially a Huffman tree. But then you spend two much time +traversing the tree while decoding, even for short symbols. + +So the number of bits for the first lookup table is a trade of the time to +fill out the table vs. the time spent looking at the second level and above of +the table. + +Here is an example, scaled down: + +The code being decoded, with 10 symbols, from 1 to 6 bits long: + +A: 0 +B: 10 +C: 1100 +D: 11010 +E: 11011 +F: 11100 +G: 11101 +H: 11110 +I: 111110 +J: 111111 + +Let's make the first table three bits long (eight entries): + +000: A,1 +001: A,1 +010: A,1 +011: A,1 +100: B,2 +101: B,2 +110: -> table X (gobble 3 bits) +111: -> table Y (gobble 3 bits) + +Each entry is what the bits decode to and how many bits that is, i.e. how +many bits to gobble. Or the entry points to another table, with the number of +bits to gobble implicit in the size of the table. + +Table X is two bits long since the longest code starting with 110 is five bits +long: + +00: C,1 +01: C,1 +10: D,2 +11: E,2 + +Table Y is three bits long since the longest code starting with 111 is six +bits long: + +000: F,2 +001: F,2 +010: G,2 +011: G,2 +100: H,2 +101: H,2 +110: I,3 +111: J,3 + +So what we have here are three tables with a total of 20 entries that had to +be constructed. That's compared to 64 entries for a single table. Or +compared to 16 entries for a Huffman tree (six two entry tables and one four +entry table). Assuming that the code ideally represents the probability of +the symbols, it takes on the average 1.25 lookups per symbol. That's compared +to one lookup for the single table, or 1.66 lookups per symbol for the +Huffman tree. + +There, I think that gives you a picture of what's going on. For inflate, the +meaning of a particular symbol is often more than just a letter. It can be a +byte (a "literal"), or it can be either a length or a distance which +indicates a base value and a number of bits to fetch after the code that is +added to the base value. Or it might be the special end-of-block code. The +data structures created in inftrees.c try to encode all that information +compactly in the tables. + + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + + +References: + +[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data +Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, +pp. 337-343. + +``DEFLATE Compressed Data Format Specification'' available in +ftp://ds.internic.net/rfc/rfc1951.txt Copied: vendor/libz/1.1.1/compress.c (from r204233, vendor/libz/1.1.1/lib/libz/compress.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/libz/1.1.1/compress.c Tue Feb 23 01:04:29 2010 (r204237, copy of r204233, vendor/libz/1.1.1/lib/libz/compress.c) @@ -0,0 +1,68 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-1998 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; + int level; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@FreeBSD.ORG Tue Feb 23 01:06:02 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF8FD1065670; Tue, 23 Feb 2010 01:06:02 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C0D198FC12; Tue, 23 Feb 2010 01:06:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1N162vf012167; Tue, 23 Feb 2010 01:06:02 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1N162da012166; Tue, 23 Feb 2010 01:06:02 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201002230106.o1N162da012166@svn.freebsd.org> From: Xin LI Date: Tue, 23 Feb 2010 01:06:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204238 - vendor/libz/1.2.3/lib X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Feb 2010 01:06:03 -0000 Author: delphij Date: Tue Feb 23 01:06:02 2010 New Revision: 204238 URL: http://svn.freebsd.org/changeset/base/204238 Log: Remove left-off directory. Deleted: vendor/libz/1.2.3/lib/ From owner-svn-src-vendor@FreeBSD.ORG Sat Feb 27 20:19:06 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E1CB106564A; Sat, 27 Feb 2010 20:19:06 +0000 (UTC) (envelope-from raj@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 89CFE8FC08; Sat, 27 Feb 2010 20:19:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1RKJ6wZ063038; Sat, 27 Feb 2010 20:19:06 GMT (envelope-from raj@svn.freebsd.org) Received: (from raj@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1RKJ6wa063032; Sat, 27 Feb 2010 20:19:06 GMT (envelope-from raj@svn.freebsd.org) Message-Id: <201002272019.o1RKJ6wa063032@svn.freebsd.org> From: Rafal Jaworowski Date: Sat, 27 Feb 2010 20:19:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204431 - in vendor/dtc: . dist dist/Documentation dist/libfdt dist/scripts dist/tests X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Feb 2010 20:19:06 -0000 Author: raj Date: Sat Feb 27 20:19:06 2010 New Revision: 204431 URL: http://svn.freebsd.org/changeset/base/204431 Log: Initial import of the Device Tree Compiler (DTC) package v1.2.0. Obtained from: git://git.jdl.com/software/dtc.git Added: vendor/dtc/ vendor/dtc/dist/ vendor/dtc/dist/Documentation/ vendor/dtc/dist/Documentation/dtc-paper.bib vendor/dtc/dist/Documentation/dtc-paper.tex vendor/dtc/dist/Documentation/dts-format.txt (contents, props changed) vendor/dtc/dist/Documentation/manual.txt (contents, props changed) vendor/dtc/dist/GPL vendor/dtc/dist/Makefile (contents, props changed) vendor/dtc/dist/Makefile.dtc (contents, props changed) vendor/dtc/dist/README.license vendor/dtc/dist/TODO vendor/dtc/dist/checks.c (contents, props changed) vendor/dtc/dist/convert-dtsv0-lexer.l vendor/dtc/dist/data.c (contents, props changed) vendor/dtc/dist/dtc-lexer.l vendor/dtc/dist/dtc-parser.y vendor/dtc/dist/dtc.c (contents, props changed) vendor/dtc/dist/dtc.h (contents, props changed) vendor/dtc/dist/flattree.c (contents, props changed) vendor/dtc/dist/fstree.c (contents, props changed) vendor/dtc/dist/ftdump.c (contents, props changed) vendor/dtc/dist/libfdt/ vendor/dtc/dist/libfdt/Makefile.libfdt (contents, props changed) vendor/dtc/dist/libfdt/TODO vendor/dtc/dist/libfdt/fdt.c (contents, props changed) vendor/dtc/dist/libfdt/fdt.h (contents, props changed) vendor/dtc/dist/libfdt/fdt_ro.c (contents, props changed) vendor/dtc/dist/libfdt/fdt_rw.c (contents, props changed) vendor/dtc/dist/libfdt/fdt_strerror.c (contents, props changed) vendor/dtc/dist/libfdt/fdt_sw.c (contents, props changed) vendor/dtc/dist/libfdt/fdt_wip.c (contents, props changed) vendor/dtc/dist/libfdt/libfdt.h (contents, props changed) vendor/dtc/dist/libfdt/libfdt_env.h (contents, props changed) vendor/dtc/dist/libfdt/libfdt_internal.h (contents, props changed) vendor/dtc/dist/livetree.c (contents, props changed) vendor/dtc/dist/scripts/ vendor/dtc/dist/scripts/setlocalversion (contents, props changed) vendor/dtc/dist/srcpos.c (contents, props changed) vendor/dtc/dist/srcpos.h (contents, props changed) vendor/dtc/dist/tests/ vendor/dtc/dist/tests/Makefile.tests (contents, props changed) vendor/dtc/dist/tests/add_subnode_with_nops.c (contents, props changed) vendor/dtc/dist/tests/bad-empty-ranges.dts vendor/dtc/dist/tests/bad-name-property.dts vendor/dtc/dist/tests/bad-ncells.dts vendor/dtc/dist/tests/bad-reg-ranges.dts vendor/dtc/dist/tests/bad-string-props.dts vendor/dtc/dist/tests/base01.asm vendor/dtc/dist/tests/base01.cmd vendor/dtc/dist/tests/base01.dts vendor/dtc/dist/tests/base01.stderr vendor/dtc/dist/tests/boot-cpuid.c (contents, props changed) vendor/dtc/dist/tests/comments-cmp.dts vendor/dtc/dist/tests/comments.dts vendor/dtc/dist/tests/default-addr-size.dts vendor/dtc/dist/tests/del_node.c (contents, props changed) vendor/dtc/dist/tests/del_property.c (contents, props changed) vendor/dtc/dist/tests/dtbs_equal_ordered.c (contents, props changed) vendor/dtc/dist/tests/dtc-checkfails.sh (contents, props changed) vendor/dtc/dist/tests/dtc-fatal.sh (contents, props changed) vendor/dtc/dist/tests/dumptrees.c (contents, props changed) vendor/dtc/dist/tests/dup-nodename.dts vendor/dtc/dist/tests/dup-phandle.dts vendor/dtc/dist/tests/dup-propname.dts vendor/dtc/dist/tests/empty.dts vendor/dtc/dist/tests/escapes.dts vendor/dtc/dist/tests/find_property.c (contents, props changed) vendor/dtc/dist/tests/get_mem_rsv.c (contents, props changed) vendor/dtc/dist/tests/get_name.c (contents, props changed) vendor/dtc/dist/tests/get_path.c (contents, props changed) vendor/dtc/dist/tests/get_phandle.c (contents, props changed) vendor/dtc/dist/tests/getprop.c (contents, props changed) vendor/dtc/dist/tests/incbin.bin (contents, props changed) vendor/dtc/dist/tests/incbin.c (contents, props changed) vendor/dtc/dist/tests/incbin.dts vendor/dtc/dist/tests/include0.dts vendor/dtc/dist/tests/include1.dts vendor/dtc/dist/tests/include2.dts vendor/dtc/dist/tests/include3.dts vendor/dtc/dist/tests/include4.dts vendor/dtc/dist/tests/include5.dts vendor/dtc/dist/tests/include6.dts vendor/dtc/dist/tests/include7.dts vendor/dtc/dist/tests/include8.dts vendor/dtc/dist/tests/label01.dts vendor/dtc/dist/tests/mangle-layout.c (contents, props changed) vendor/dtc/dist/tests/mangle-layout.supp vendor/dtc/dist/tests/minusone-phandle.dts vendor/dtc/dist/tests/move_and_save.c (contents, props changed) vendor/dtc/dist/tests/node_check_compatible.c (contents, props changed) vendor/dtc/dist/tests/node_offset_by_compatible.c (contents, props changed) vendor/dtc/dist/tests/node_offset_by_phandle.c (contents, props changed) vendor/dtc/dist/tests/node_offset_by_prop_value.c (contents, props changed) vendor/dtc/dist/tests/nonexist-label-ref.dts vendor/dtc/dist/tests/nonexist-node-ref.dts vendor/dtc/dist/tests/nop_node.c (contents, props changed) vendor/dtc/dist/tests/nop_property.c (contents, props changed) vendor/dtc/dist/tests/nopulate.c (contents, props changed) vendor/dtc/dist/tests/notfound.c (contents, props changed) vendor/dtc/dist/tests/obsolete-chosen-interrupt-controller.dts vendor/dtc/dist/tests/open_pack.c (contents, props changed) vendor/dtc/dist/tests/open_pack.supp vendor/dtc/dist/tests/parent_offset.c (contents, props changed) vendor/dtc/dist/tests/path-references.c (contents, props changed) vendor/dtc/dist/tests/path-references.dts vendor/dtc/dist/tests/path_offset.c (contents, props changed) vendor/dtc/dist/tests/prop-after-subnode.dts vendor/dtc/dist/tests/references.c (contents, props changed) vendor/dtc/dist/tests/references.dts vendor/dtc/dist/tests/references_dts0.dts vendor/dtc/dist/tests/reg-ranges-root.dts vendor/dtc/dist/tests/root_node.c (contents, props changed) vendor/dtc/dist/tests/run_tests.sh (contents, props changed) vendor/dtc/dist/tests/rw_tree1.c (contents, props changed) vendor/dtc/dist/tests/set_name.c (contents, props changed) vendor/dtc/dist/tests/setprop.c (contents, props changed) vendor/dtc/dist/tests/setprop_inplace.c (contents, props changed) vendor/dtc/dist/tests/string_escapes.c (contents, props changed) vendor/dtc/dist/tests/subnode_offset.c (contents, props changed) vendor/dtc/dist/tests/supernode_atdepth_offset.c (contents, props changed) vendor/dtc/dist/tests/sw_tree1.c (contents, props changed) vendor/dtc/dist/tests/test01.asm vendor/dtc/dist/tests/test01.dts vendor/dtc/dist/tests/test01.stderr vendor/dtc/dist/tests/test_kernel_dts (contents, props changed) vendor/dtc/dist/tests/test_tree1.dts vendor/dtc/dist/tests/test_tree1_dts0.dts vendor/dtc/dist/tests/testdata.h (contents, props changed) vendor/dtc/dist/tests/tests.h (contents, props changed) vendor/dtc/dist/tests/tests.sh (contents, props changed) vendor/dtc/dist/tests/testutils.c (contents, props changed) vendor/dtc/dist/tests/trees.S (contents, props changed) vendor/dtc/dist/tests/truncated_property.c (contents, props changed) vendor/dtc/dist/tests/zero-phandle.dts vendor/dtc/dist/treesource.c (contents, props changed) Added: vendor/dtc/dist/Documentation/dtc-paper.bib ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Documentation/dtc-paper.bib Sat Feb 27 20:19:06 2010 (r204431) @@ -0,0 +1,43 @@ +@STRING{pub-IEEE = "IEEE Computer Society"} +@STRING{pub-IEEE:adr = "345 E. 47th St, New York, NY 10017, USA"} + +@BOOK{IEEE1275, + key = "IEEE1275", + title = "{IEEE} {S}tandard for {B}oot ({I}nitialization {C}onfiguration) {F}irmware: {C}ore {R}equirements and {P}ractices", + publisher = pub-IEEE, + address = pub-IEEE:adr, + series = "IEEE Std 1275-1994", + year = 1994, +} + +@BOOK{IEEE1275-pci, + key = "IEEE1275-pci", + title = "{PCI} {B}us {B}inding to: {IEEE} {S}td 1275-1994 {S}tandard for {B}oot ({I}nitialization {C}onfiguration) {F}irmware", + publisher = pub-IEEE, + address = pub-IEEE:adr, + note = "Revision 2.1", + year = 1998, +} + +@MISC{noof1, + author = "Benjamin Herrenschmidt", + title = "Booting the {L}inux/ppc kernel without {O}pen {F}irmware", + month = may, + year = 2005, + note = "v0.1, \url{http://ozlabs.org/pipermail/linuxppc64-dev/2005-May/004073.html}", +} + +@MISC{noof5, + author = "Benjamin Herrenschmidt", + title = "Booting the {L}inux/ppc kernel without {O}pen {F}irmware", + month = nov, + year = 2005, + note = "v0.5, \url{http://ozlabs.org/pipermail/linuxppc64-dev/2005-December/006994.html}", +} + +@MISC{dtcgit, + author = "David Gibson et al.", + title = "\dtc{}", + howpublished = "git tree", + note = "\url{http://ozlabs.org/~dgibson/dtc/dtc.git}", +} Added: vendor/dtc/dist/Documentation/dtc-paper.tex ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Documentation/dtc-paper.tex Sat Feb 27 20:19:06 2010 (r204431) @@ -0,0 +1,597 @@ +\documentclass[a4paper,twocolumn]{article} + +\usepackage{abstract} +\usepackage{xspace} +\usepackage{amssymb} +\usepackage{latexsym} +\usepackage{tabularx} +\usepackage[T1]{fontenc} +\usepackage{calc} +\usepackage{listings} +\usepackage{color} +\usepackage{url} + +\title{Device trees everywhere} + +\author{David Gibson \texttt{<{dwg}{@}{au1.ibm.com}>}\\ + Benjamin Herrenschmidt \texttt{<{benh}{@}{kernel.crashing.org}>}\\ + \emph{OzLabs, IBM Linux Technology Center}} + +\newcommand{\R}{\textsuperscript{\textregistered}\xspace} +\newcommand{\tm}{\textsuperscript{\texttrademark}\xspace} +\newcommand{\tge}{$\geqslant$} +%\newcommand{\ditto}{\textquotedbl\xspace} + +\newcommand{\fixme}[1]{$\bigstar$\emph{\textbf{\large #1}}$\bigstar$\xspace} + +\newcommand{\ppc}{\mbox{PowerPC}\xspace} +\newcommand{\of}{Open Firmware\xspace} +\newcommand{\benh}{Ben Herrenschmidt\xspace} +\newcommand{\kexec}{\texttt{kexec()}\xspace} +\newcommand{\dtbeginnode}{\texttt{OF\_DT\_BEGIN\_NODE\xspace}} +\newcommand{\dtendnode}{\texttt{OF\_DT\_END\_NODE\xspace}} +\newcommand{\dtprop}{\texttt{OF\_DT\_PROP\xspace}} +\newcommand{\dtend}{\texttt{OF\_DT\_END\xspace}} +\newcommand{\dtc}{\texttt{dtc}\xspace} +\newcommand{\phandle}{\texttt{linux,phandle}\xspace} +\begin{document} + +\maketitle + +\begin{abstract} + We present a method for booting a \ppc{}\R Linux\R kernel on an + embedded machine. To do this, we supply the kernel with a compact + flattened-tree representation of the system's hardware based on the + device tree supplied by Open Firmware on IBM\R servers and Apple\R + Power Macintosh\R machines. + + The ``blob'' representing the device tree can be created using \dtc + --- the Device Tree Compiler --- that turns a simple text + representation of the tree into the compact representation used by + the kernel. The compiler can produce either a binary ``blob'' or an + assembler file ready to be built into a firmware or bootwrapper + image. + + This flattened-tree approach is now the only supported method of + booting a \texttt{ppc64} kernel without Open Firmware, and we plan + to make it the only supported method for all \texttt{powerpc} + kernels in the future. +\end{abstract} + +\section{Introduction} + +\subsection{OF and the device tree} + +Historically, ``everyday'' \ppc machines have booted with the help of +\of (OF), a firmware environment defined by IEEE1275 \cite{IEEE1275}. +Among other boot-time services, OF maintains a device tree that +describes all of the system's hardware devices and how they're +connected. During boot, before taking control of memory management, +the Linux kernel uses OF calls to scan the device tree and transfer it +to an internal representation that is used at run time to look up +various device information. + +The device tree consists of nodes representing devices or +buses\footnote{Well, mostly. There are a few special exceptions.}. +Each node contains \emph{properties}, name--value pairs that give +information about the device. The values are arbitrary byte strings, +and for some properties, they contain tables or other structured +information. + +\subsection{The bad old days} + +Embedded systems, by contrast, usually have a minimal firmware that +might supply a few vital system parameters (size of RAM and the like), +but nothing as detailed or complete as the OF device tree. This has +meant that the various 32-bit \ppc embedded ports have required a +variety of hacks spread across the kernel to deal with the lack of +device tree. These vary from specialised boot wrappers to parse +parameters (which are at least reasonably localised) to +CONFIG-dependent hacks in drivers to override normal probe logic with +hardcoded addresses for a particular board. As well as being ugly of +itself, such CONFIG-dependent hacks make it hard to build a single +kernel image that supports multiple embedded machines. + +Until relatively recently, the only 64-bit \ppc machines without OF +were legacy (pre-POWER5\R) iSeries\R machines. iSeries machines often +only have virtual IO devices, which makes it quite simple to work +around the lack of a device tree. Even so, the lack means the iSeries +boot sequence must be quite different from the pSeries or Macintosh, +which is not ideal. + +The device tree also presents a problem for implementing \kexec. When +the kernel boots, it takes over full control of the system from OF, +even re-using OF's memory. So, when \kexec comes to boot another +kernel, OF is no longer around for the second kernel to query. + +\section{The Flattened Tree} + +In May 2005 \benh implemented a new approach to handling the device +tree that addresses all these problems. When booting on OF systems, +the first thing the kernel runs is a small piece of code in +\texttt{prom\_init.c}, which executes in the context of OF. This code +walks the device tree using OF calls, and transcribes it into a +compact, flattened format. The resulting device tree ``blob'' is then +passed to the kernel proper, which eventually unflattens the tree into +its runtime form. This blob is the only data communicated between the +\texttt{prom\_init.c} bootstrap and the rest of the kernel. + +When OF isn't available, either because the machine doesn't have it at +all or because \kexec has been used, the kernel instead starts +directly from the entry point taking a flattened device tree. The +device tree blob must be passed in from outside, rather than generated +by part of the kernel from OF. For \kexec, the userland +\texttt{kexec} tools build the blob from the runtime device tree +before invoking the new kernel. For embedded systems the blob can +come either from the embedded bootloader, or from a specialised +version of the \texttt{zImage} wrapper for the system in question. + +\subsection{Properties of the flattened tree} + +The flattened tree format should be easy to handle, both for the +kernel that parses it and the bootloader that generates it. In +particular, the following properties are desirable: + +\begin{itemize} +\item \emph{relocatable}: the bootloader or kernel should be able to + move the blob around as a whole, without needing to parse or adjust + its internals. In practice that means we must not use pointers + within the blob. +\item \emph{insert and delete}: sometimes the bootloader might want to + make tweaks to the flattened tree, such as deleting or inserting a + node (or whole subtree). It should be possible to do this without + having to effectively regenerate the whole flattened tree. In + practice this means limiting the use of internal offsets in the blob + that need recalculation if a section is inserted or removed with + \texttt{memmove()}. +\item \emph{compact}: embedded systems are frequently short of + resources, particularly RAM and flash memory space. Thus, the tree + representation should be kept as small as conveniently possible. +\end{itemize} + +\subsection{Format of the device tree blob} +\label{sec:format} + +\begin{figure}[htb!] + \centering + \footnotesize + \begin{tabular}{r|c|l} + \multicolumn{1}{r}{\textbf{Offset}}& \multicolumn{1}{c}{\textbf{Contents}} \\\cline{2-2} + \texttt{0x00} & \texttt{0xd00dfeed} & magic number \\\cline{2-2} + \texttt{0x04} & \emph{totalsize} \\\cline{2-2} + \texttt{0x08} & \emph{off\_struct} & \\\cline{2-2} + \texttt{0x0C} & \emph{off\_strs} & \\\cline{2-2} + \texttt{0x10} & \emph{off\_rsvmap} & \\\cline{2-2} + \texttt{0x14} & \emph{version} \\\cline{2-2} + \texttt{0x18} & \emph{last\_comp\_ver} & \\\cline{2-2} + \texttt{0x1C} & \emph{boot\_cpu\_id} & \tge v2 only\\\cline{2-2} + \texttt{0x20} & \emph{size\_strs} & \tge v3 only\\\cline{2-2} + \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2} + \emph{off\_rsvmap} & \emph{address0} & memory reserve \\ + + \texttt{0x04} & ...& table \\\cline{2-2} + + \texttt{0x08} & \emph{len0} & \\ + + \texttt{0x0C} & ...& \\\cline{2-2} + \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2} + & \texttt{0x00000000}- & end marker\\ + & \texttt{00000000} & \\\cline{2-2} + & \texttt{0x00000000}- & \\ + & \texttt{00000000} & \\\cline{2-2} + \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2} + \emph{off\_strs} & \texttt{'n' 'a' 'm' 'e'} & strings block \\ + + \texttt{0x04} & \texttt{~0~ 'm' 'o' 'd'} & \\ + + \texttt{0x08} & \texttt{'e' 'l' ~0~ \makebox[\widthof{~~~}]{\textrm{...}}} & \\ + \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2} + \multicolumn{1}{r}{+ \emph{size\_strs}} \\ + \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2} + \emph{off\_struct} & \dtbeginnode & structure block \\\cline{2-2} + + \texttt{0x04} & \texttt{'/' ~0~ ~0~ ~0~} & root node\\\cline{2-2} + + \texttt{0x08} & \dtprop & \\\cline{2-2} + + \texttt{0x0C} & \texttt{0x00000005} & ``\texttt{model}''\\\cline{2-2} + + \texttt{0x10} & \texttt{0x00000008} & \\\cline{2-2} + + \texttt{0x14} & \texttt{'M' 'y' 'B' 'o'} & \\ + + \texttt{0x18} & \texttt{'a' 'r' 'd' ~0~} & \\\cline{2-2} + \vdots & \multicolumn{1}{c|}{\vdots} & \\\cline{2-2} + & \texttt{\dtendnode} \\\cline{2-2} + & \texttt{\dtend} \\\cline{2-2} + \multicolumn{1}{r}{\vdots} & \multicolumn{1}{c}{\vdots} & \\\cline{2-2} + \multicolumn{1}{r}{\emph{totalsize}} \\ + \end{tabular} + \caption{Device tree blob layout} + \label{fig:blob-layout} +\end{figure} + +The format for the blob we devised, was first described on the +\texttt{linuxppc64-dev} mailing list in \cite{noof1}. The format has +since evolved through various revisions, and the current version is +included as part of the \dtc (see \S\ref{sec:dtc}) git tree, +\cite{dtcgit}. + +Figure \ref{fig:blob-layout} shows the layout of the blob of data +containing the device tree. It has three sections of variable size: +the \emph{memory reserve table}, the \emph{structure block} and the +\emph{strings block}. A small header gives the blob's size and +version and the locations of the three sections, plus a handful of +vital parameters used during early boot. + +The memory reserve map section gives a list of regions of memory that +the kernel must not use\footnote{Usually such ranges contain some data +structure initialised by the firmware that must be preserved by the +kernel.}. The list is represented as a simple array of (address, +size) pairs of 64 bit values, terminated by a zero size entry. The +strings block is similarly simple, consisting of a number of +null-terminated strings appended together, which are referenced from +the structure block as described below. + +The structure block contains the device tree proper. Each node is +introduced with a 32-bit \dtbeginnode tag, followed by the node's name +as a null-terminated string, padded to a 32-bit boundary. Then +follows all of the properties of the node, each introduced with a +\dtprop tag, then all of the node's subnodes, each introduced with +their own \dtbeginnode tag. The node ends with an \dtendnode tag, and +after the \dtendnode for the root node is an \dtend tag, indicating +the end of the whole tree\footnote{This is redundant, but included for +ease of parsing.}. The structure block starts with the \dtbeginnode +introducing the description of the root node (named \texttt{/}). + +Each property, after the \dtprop, has a 32-bit value giving an offset +from the beginning of the strings block at which the property name is +stored. Because it's common for many nodes to have properties with +the same name, this approach can substantially reduce the total size +of the blob. The name offset is followed by the length of the +property value (as a 32-bit value) and then the data itself padded to +a 32-bit boundary. + +\subsection{Contents of the tree} +\label{sec:treecontents} + +Having seen how to represent the device tree structure as a flattened +blob, what actually goes into the tree? The short answer is ``the +same as an OF tree''. On OF systems, the flattened tree is +transcribed directly from the OF device tree, so for simplicity we +also use OF conventions for the tree on other systems. + +In many cases a flat tree can be simpler than a typical OF provided +device tree. The flattened tree need only provide those nodes and +properties that the kernel actually requires; the flattened tree +generally need not include devices that the kernel can probe itself. +For example, an OF device tree would normally include nodes for each +PCI device on the system. A flattened tree need only include nodes +for the PCI host bridges; the kernel will scan the buses thus +described to find the subsidiary devices. The device tree can include +nodes for devices where the kernel needs extra information, though: +for example, for ISA devices on a subsidiary PCI/ISA bridge, or for +devices with unusual interrupt routing. + +Where they exist, we follow the IEEE1275 bindings that specify how to +describe various buses in the device tree (for example, +\cite{IEEE1275-pci} describe how to represent PCI devices). The +standard has not been updated for a long time, however, and lacks +bindings for many modern buses and devices. In particular, embedded +specific devices such as the various System-on-Chip buses are not +covered. We intend to create new bindings for such buses, in keeping +with the general conventions of IEEE1275 (a simple such binding for a +System-on-Chip bus was included in \cite{noof5} a revision of +\cite{noof1}). + +One complication arises for representing ``phandles'' in the flattened +tree. In OF, each node in the tree has an associated phandle, a +32-bit integer that uniquely identifies the node\footnote{In practice +usually implemented as a pointer or offset within OF memory.}. This +handle is used by the various OF calls to query and traverse the tree. +Sometimes phandles are also used within the tree to refer to other +nodes in the tree. For example, devices that produce interrupts +generally have an \texttt{interrupt-parent} property giving the +phandle of the interrupt controller that handles interrupts from this +device. Parsing these and other interrupt related properties allows +the kernel to build a complete representation of the system's +interrupt tree, which can be quite different from the tree of bus +connections. + +In the flattened tree, a node's phandle is represented by a special +\phandle property. When the kernel generates a flattened tree from +OF, it adds a \phandle property to each node, containing the phandle +retrieved from OF. When the tree is generated without OF, however, +only nodes that are actually referred to by phandle need to have this +property. + +Another complication arises because nodes in an OF tree have two +names. First they have the ``unit name'', which is how the node is +referred to in an OF path. The unit name generally consists of a +device type followed by an \texttt{@} followed by a \emph{unit +address}. For example \texttt{/memory@0} is the full path of a memory +node at address 0, \texttt{/ht@0,f2000000/pci@1} is the path of a PCI +bus node, which is under a HyperTransport\tm bus node. The form of +the unit address is bus dependent, but is generally derived from the +node's \texttt{reg} property. In addition, nodes have a property, +\texttt{name}, whose value is usually equal to the first path of the +unit name. For example, the nodes in the previous example would have +\texttt{name} properties equal to \texttt{memory} and \texttt{pci}, +respectively. To save space in the blob, the current version of the +flattened tree format only requires the unit names to be present. +When the kernel unflattens the tree, it automatically generates a +\texttt{name} property from the node's path name. + +\section{The Device Tree Compiler} +\label{sec:dtc} + +\begin{figure}[htb!] + \centering + \begin{lstlisting}[frame=single,basicstyle=\footnotesize\ttfamily, + tabsize=3,numbers=left,xleftmargin=2em] +/memreserve/ 0x20000000-0x21FFFFFF; + +/ { + model = "MyBoard"; + compatible = "MyBoardFamily"; + #address-cells = <2>; + #size-cells = <2>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + PowerPC,970@0 { + device_type = "cpu"; + reg = <0>; + clock-frequency = <5f5e1000>; + timebase-frequency = <1FCA055>; + linux,boot-cpu; + i-cache-size = <10000>; + d-cache-size = <8000>; + }; + }; + + memory@0 { + device_type = "memory"; + memreg: reg = <00000000 00000000 + 00000000 20000000>; + }; + + mpic@0x3fffdd08400 { + /* Interrupt controller */ + /* ... */ + }; + + pci@40000000000000 { + /* PCI host bridge */ + /* ... */ + }; + + chosen { + bootargs = "root=/dev/sda2"; + linux,platform = <00000600>; + interrupt-controller = + < &/mpic@0x3fffdd08400 >; + }; +}; +\end{lstlisting} + \caption{Example \dtc source} + \label{fig:dts} +\end{figure} + +As we've seen, the flattened device tree format provides a convenient +way of communicating device tree information to the kernel. It's +simple for the kernel to parse, and simple for bootloaders to +manipulate. On OF systems, it's easy to generate the flattened tree +by walking the OF maintained tree. However, for embedded systems, the +flattened tree must be generated from scratch. + +Embedded bootloaders are generally built for a particular board. So, +it's usually possible to build the device tree blob at compile time +and include it in the bootloader image. For minor revisions of the +board, the bootloader can contain code to make the necessary tweaks to +the tree before passing it to the booted kernel. + +The device trees for embedded boards are usually quite simple, and +it's possible to hand construct the necessary blob by hand, but doing +so is tedious. The ``device tree compiler'', \dtc{}\footnote{\dtc can +be obtained from \cite{dtcgit}.}, is designed to make creating device +tree blobs easier by converting a text representation of the tree +into the necessary blob. + +\subsection{Input and output formats} + +As well as the normal mode of compiling a device tree blob from text +source, \dtc can convert a device tree between a number of +representations. It can take its input in one of three different +formats: +\begin{itemize} +\item source, the normal case. The device tree is described in a text + form, described in \S\ref{sec:dts}. +\item blob (\texttt{dtb}), the flattened tree format described in + \S\ref{sec:format}. This mode is useful for checking a pre-existing + device tree blob. +\item filesystem (\texttt{fs}), input is a directory tree in the + layout of \texttt{/proc/device-tree} (roughly, a directory for each + node in the device tree, a file for each property). This is useful + for building a blob for the device tree in use by the currently + running kernel. +\end{itemize} + +In addition, \dtc can output the tree in one of three different +formats: +\begin{itemize} +\item blob (\texttt{dtb}), as in \S\ref{sec:format}. The most + straightforward use of \dtc is to compile from ``source'' to + ``blob'' format. +\item source (\texttt{dts}), as in \S\ref{sec:dts}. If used with blob + input, this allows \dtc to act as a ``decompiler''. +\item assembler source (\texttt{asm}). \dtc can produce an assembler + file, which will assemble into a \texttt{.o} file containing the + device tree blob, with symbols giving the beginning of the blob and + its various subsections. This can then be linked directly into a + bootloader or firmware image. +\end{itemize} + +For maximum applicability, \dtc can both read and write any of the +existing revisions of the blob format. When reading, \dtc takes the +version from the blob header, and when writing it takes a command line +option specifying the desired version. It automatically makes any +necessary adjustments to the tree that are necessary for the specified +version. For example, formats before 0x10 require each node to have +an explicit \texttt{name} property. When \dtc creates such a blob, it +will automatically generate \texttt{name} properties from the unit +names. + +\subsection{Source format} +\label{sec:dts} + +The ``source'' format for \dtc is a text description of the device +tree in a vaguely C-like form. Figure \ref{fig:dts} shows an +example. The file starts with \texttt{/memreserve/} directives, which +gives address ranges to add to the output blob's memory reserve table, +then the device tree proper is described. + +Nodes of the tree are introduced with the node name, followed by a +\texttt{\{} ... \texttt{\};} block containing the node's properties +and subnodes. Properties are given as just {\emph{name} \texttt{=} + \emph{value}\texttt{;}}. The property values can be given in any +of three forms: +\begin{itemize} +\item \emph{string} (for example, \texttt{"MyBoard"}). The property + value is the given string, including terminating NULL. C-style + escapes (\verb+\t+, \verb+\n+, \verb+\0+ and so forth) are allowed. +\item \emph{cells} (for example, \texttt{<0 8000 f0000000>}). The + property value is made up of a list of 32-bit ``cells'', each given + as a hex value. +\item \emph{bytestring} (for example, \texttt{[1234abcdef]}). The + property value is given as a hex bytestring. +\end{itemize} + +Cell properties can also contain \emph{references}. Instead of a hex +number, the source can give an ampersand (\texttt{\&}) followed by the +full path to some node in the tree. For example, in Figure +\ref{fig:dts}, the \texttt{/chosen} node has an +\texttt{interrupt-controller} property referring to the interrupt +controller described by the node \texttt{/mpic@0x3fffdd08400}. In the +output tree, the value of the referenced node's phandle is included in +the property. If that node doesn't have an explicit phandle property, +\dtc will automatically create a unique phandle for it. This approach +makes it easy to create interrupt trees without having to explicitly +assign and remember phandles for the various interrupt controller +nodes. + +The \dtc source can also include ``labels'', which are placed on a +particular node or property. For example, Figure \ref{fig:dts} has a +label ``\texttt{memreg}'' on the \texttt{reg} property of the node +\texttt{/memory@0}. When using assembler output, corresponding labels +in the output are generated, which will assemble into symbols +addressing the part of the blob with the node or property in question. +This is useful for the common case where an embedded board has an +essentially fixed device tree with a few variable properties, such as +the size of memory. The bootloader for such a board can have a device +tree linked in, including a symbol referring to the right place in the +blob to update the parameter with the correct value determined at +runtime. + +\subsection{Tree checking} + +Between reading in the device tree and writing it out in the new +format, \dtc performs a number of checks on the tree: +\begin{itemize} +\item \emph{syntactic structure}: \dtc checks that node and property + names contain only allowed characters and meet length restrictions. + It checks that a node does not have multiple properties or subnodes + with the same name. +\item \emph{semantic structure}: In some cases, \dtc checks that + properties whose contents are defined by convention have appropriate + values. For example, it checks that \texttt{reg} properties have a + length that makes sense given the address forms specified by the + \texttt{\#address-cells} and \texttt{\#size-cells} properties. It + checks that properties such as \texttt{interrupt-parent} contain a + valid phandle. +\item \emph{Linux requirements}: \dtc checks that the device tree + contains those nodes and properties that are required by the Linux + kernel to boot correctly. +\end{itemize} + +These checks are useful to catch simple problems with the device tree, +rather than having to debug the results on an embedded kernel. With +the blob input mode, it can also be used for diagnosing problems with +an existing blob. + +\section{Future Work} + +\subsection{Board ports} + +The flattened device tree has always been the only supported way to +boot a \texttt{ppc64} kernel on an embedded system. With the merge of +\texttt{ppc32} and \texttt{ppc64} code it has also become the only +supported way to boot any merged \texttt{powerpc} kernel, 32-bit or +64-bit. In fact, the old \texttt{ppc} architecture exists mainly just +to support the old ppc32 embedded ports that have not been migrated +to the flattened device tree approach. We plan to remove the +\texttt{ppc} architecture eventually, which will mean porting all the +various embedded boards to use the flattened device tree. + +\subsection{\dtc features} + +While it is already quite usable, there are a number of extra features +that \dtc could include to make creating device trees more convenient: +\begin{itemize} +\item \emph{better tree checking}: Although \dtc already performs a + number of checks on the device tree, they are rather haphazard. In + many cases \dtc will give up after detecting a minor error early and + won't pick up more interesting errors later on. There is a + \texttt{-f} parameter that forces \dtc to generate an output tree + even if there are errors. At present, this needs to be used more + often than one might hope, because \dtc is bad at deciding which + errors should really be fatal, and which rate mere warnings. +\item \emph{binary include}: Occasionally, it is useful for the device + tree to incorporate as a property a block of binary data for some + board-specific purpose. For example, many of Apple's device trees + incorporate bytecode drivers for certain platform devices. \dtc's + source format ought to allow this by letting a property's value be + read directly from a binary file. +\item \emph{macros}: it might be useful for \dtc to implement some + sort of macros so that a tree containing a number of similar devices + (for example, multiple identical ethernet controllers or PCI buses) + can be written more quickly. At present, this can be accomplished + in part by running the source file through CPP before compiling with + \dtc. It's not clear whether ``native'' support for macros would be + more useful. +\end{itemize} + +\bibliographystyle{amsplain} +\bibliography{dtc-paper} + +\section*{About the authors} + +David Gibson has been a member of the IBM Linux Technology Center, +working from Canberra, Australia, since 2001. Recently he has worked +on Linux hugepage support and performance counter support for ppc64, +as well as the device tree compiler. In the past, he has worked on +bringup for various ppc and ppc64 embedded systems, the orinoco +wireless driver, ramfs, and a userspace checkpointing system +(\texttt{esky}). + +Benjamin Herrenschmidt was a MacOS developer for about 10 years, but +ultimately saw the light and installed Linux on his Apple PowerPC +machine. After writing a bootloader, BootX, for it in 1998, he +started contributing to the PowerPC Linux port in various areas, +mostly around the support for Apple machines. He became official +PowerMac maintainer in 2001. In 2003, he joined the IBM Linux +Technology Center in Canberra, Australia, where he ported the 64 bit +PowerPC kernel to Apple G5 machines and the Maple embedded board, +among others things. He's a member of the ppc64 development ``team'' +and one of his current goals is to make the integration of embedded +platforms smoother and more maintainable than in the 32-bit PowerPC +kernel. + +\section*{Legal Statement} + +This work represents the view of the author and does not necessarily +represent the view of IBM. + +IBM, \ppc, \ppc Architecture, POWER5, pSeries and iSeries are +trademarks or registered trademarks of International Business Machines +Corporation in the United States and/or other countries. + +Apple and Power Macintosh are a registered trademarks of Apple +Computer Inc. in the United States, other countries, or both. + +Linux is a registered trademark of Linus Torvalds. + +Other company, product, and service names may be trademarks or service +marks of others. + +\end{document} Added: vendor/dtc/dist/Documentation/dts-format.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Documentation/dts-format.txt Sat Feb 27 20:19:06 2010 (r204431) @@ -0,0 +1,110 @@ +Device Tree Source Format (version 1) +===================================== + +The Device Tree Source (DTS) format is a textual representation of a +device tree in a form that can be processed by dtc into a binary +device tree in the form expected by the kernel. The description below +is not a formal syntax definition of DTS, but describes the basic +constructs used to represent device trees. + +Node and property definitions +----------------------------- + +Device tree nodes are defined with a node name and unit address with +braces marking the start and end of the node definition. They may be +preceded by a label. + + [label:] node-name[@unit-address] { + [properties definitions] + [child nodes] + } + +Nodes may contain property definitions and/or child node +definitions. If both are present, properties must come before child +nodes. + +Property definitions are name value pairs in the form: + [label:] property-name = value; +except for properties with empty (zero length) value which have the +form: + [label:] property-name; + +Property values may be defined as an array of 32-bit integer cells, as +NUL-terminated strings, as bytestrings or a combination of these. + +* Arrays of cells are represented by angle brackets surrounding a + space separated list of C-style integers + + e.g. interrupts = <17 0xc>; + +* A 64-bit value is represented with two 32-bit cells. + + e.g. clock-frequency = <0x00000001 0x00000000>; + +* A NUL-terminated string value is represented using double quotes + (the property value is considered to include the terminating NUL + character). + + e.g. compatible = "simple-bus"; + +* A bytestring is enclosed in square brackets [] with each byte + represented by two hexadecimal digits. Spaces between each byte are + optional. + + e.g. local-mac-address = [00 00 12 34 56 78]; or equivalently + local-mac-address = [000012345678]; + +* Values may have several comma-separated components, which are + concatenated together. + e.g. compatible = "ns16550", "ns8250"; + example = <0xf00f0000 19>, "a strange property format"; + +* In a cell array a reference to another node will be expanded to that + node's phandle. References may by '&' followed by a node's label: + e.g. interrupt-parent = < &mpic >; + or they may be '&' followed by a node's full path in braces: + e.g. interrupt-parent = < &{/soc/interrupt-controller@40000} >; + +* Outside a cell array, a reference to another node will be expanded + to that node's full path. + e.g. ethernet0 = &EMAC0; + +* Labels may also appear before or after any component of a property + value, or between cells of a cell array, or between bytes of a + bytestring. + e.g. reg = reglabel: <0 sizelabel: 0x1000000>; + e.g. prop = [ab cd ef byte4: 00 ff fe]; + e.g. str = start: "string value" end: ; + + +File layout +----------- + +Version 1 DTS files have the overall layout: + /dts-v1/; + + [memory reservations] + + / { + [property definitions] + [child nodes] + }; + +* The "/dts-v1/;" must be present to identify the file as a version 1 + DTS (dts files without this tag will be treated by dtc as being in + the obsolete "version 0", which uses a different format for integers + amongst other small but incompatible changes). + +* Memory reservations define an entry for the device tree blob's + memory reservation table. They have the form: + e.g. /memreserve/
; + Where
and are 64-bit C-style integers. + +* The / { ... }; section defines the root node of the device tree. + +* C style (/* ... */) and C++ style (// ...) comments are supported. + + + + -- David Gibson + -- Yoder Stuart Added: vendor/dtc/dist/Documentation/manual.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Documentation/manual.txt Sat Feb 27 20:19:06 2010 (r204431) @@ -0,0 +1,618 @@ +Device Tree Compiler Manual +=========================== + +I - "dtc", the device tree compiler + 1) Obtaining Sources + 2) Description + 3) Command Line + 4) Source File + 4.1) Overview + 4.2) Properties + 4.3) Labels and References + +II - The DT block format + 1) Header + 2) Device tree generalities + 3) Device tree "structure" block + 4) Device tree "strings" block + + +III - libfdt + + +I - "dtc", the device tree compiler +=================================== + +1) Sources + +Source code for the Device Tree Compiler can be found at jdl.com. +The gitweb interface is: + + http://www.jdl.com/git_repos/ + +The repository is here: + + git://www.jdl.com/software/dtc.git + http://www.jdl.com/software/dtc.git + +Tarballs of the 1.0.0 and latest releases are here: + + http://www.jdl.com/software/dtc-1.0.0.tgz + http://www.jdl.com/software/dtc-latest.tgz + + +2) Description + +The Device Tree Compiler, dtc, takes as input a device-tree in +a given format and outputs a device-tree in another format. +Typically, the input format is "dts", a human readable source +format, and creates a "dtb", or binary format as output. + +The currently supported Input Formats are: + + - "dtb": "blob" format. A flattened device-tree block with + header in one binary blob. + + - "dts": "source" format. A text file containing a "source" + for a device-tree. + + - "fs" format. A representation equivalent to the output of + /proc/device-tree where nodes are directories and + properties are files. + +The currently supported Output Formats are: + + - "dtb": "blob" format + + - "dts": "source" format + + - "asm": assembly language file. A file that can be sourced + by gas to generate a device-tree "blob". That file can + then simply be added to your Makefile. Additionally, the + assembly file exports some symbols that can be used. + + +3) Command Line + +The syntax of the dtc command line is: + + dtc [options] [] + +Options: + + + The name of the input source file. If no + or "-" is given, stdin is used. + + -b + Set the physical boot cpu. + + -f + Force. Try to produce output even if the input tree has errors. + + -h + Emit a brief usage and help message. + + -I + The source input format, as listed above. + + -o + The name of the generated output file. Use "-" for stdout. + + -O + The generated output format, as listed above. + + -q + Quiet: -q suppress warnings, -qq errors, -qqq all + + -R + Make space for reserve map entries + Relevant for dtb and asm output only. + + -S + Ensure the blob at least long, adding additional + space if needed. + + -v + Print DTC version and exit. + + -V + Generate output conforming to the given . + By default the most recent version is generated. + Relevant for dtb and asm output only. + + +The defines what version of the "blob" format will be +generated. Supported versions are 1, 2, 3, 16 and 17. The default is +always the most recent version and is likely the highest number. + +Additionally, dtc performs various sanity checks on the tree. + + +4) Device Tree Source file + +4.1) Overview + +Here is a very rough overview of the layout of a DTS source file: + + + sourcefile: list_of_memreserve devicetree + + memreserve: label 'memreserve' ADDR ADDR ';' + | label 'memreserve' ADDR '-' ADDR ';' + + devicetree: '/' nodedef + + nodedef: '{' list_of_property list_of_subnode '}' ';' + + property: label PROPNAME '=' propdata ';' + + propdata: STRING + | '<' list_of_cells '>' + | '[' list_of_bytes ']' + + subnode: label nodename nodedef + +That structure forms a hierarchical layout of nodes and properties +rooted at an initial node as: + + / { + } + +Both classic C style and C++ style comments are supported. + +Source files may be directly included using the syntax: + + /include/ "filename" + + +4.2) Properties + +Properties are named, possibly labeled, values. Each value +is one of: + + - A null-teminated C-like string, + - A numeric value fitting in 32 bits, + - A list of 32-bit values + - A byte sequence + +Here are some example property definitions: + + - A property containing a 0 terminated string + + property1 = "string_value"; + + - A property containing a numerical 32-bit hexadecimal value + + property2 = <1234abcd>; + + - A property containing 3 numerical 32-bit hexadecimal values + + property3 = <12345678 12345678 deadbeef>; + + - A property whose content is an arbitrary array of bytes + + property4 = [0a 0b 0c 0d de ea ad be ef]; + + +Node may contain sub-nodes to obtain a hierarchical structure. +For example: + + - A child node named "childnode" whose unit name is + "childnode at address". It it turn has a string property + called "childprop". + + childnode@addresss { + childprop = "hello\n"; + }; + + +By default, all numeric values are hexadecimal. Alternate bases +may be specified using a prefix "d#" for decimal, "b#" for binary, +and "o#" for octal. + +Strings support common escape sequences from C: "\n", "\t", "\r", +"\(octal value)", "\x(hex value)". + + +4.3) Labels and References + +Labels may be applied to nodes or properties. Labels appear +before a node name, and are referenced using an ampersand: &label. +Absolute node path names are also allowed in node references. + +In this exmaple, a node is labled "mpic" and then referenced: + + mpic: interrupt-controller@40000 { + ... + }; + + ethernet-phy@3 { + interrupt-parent = <&mpic>; + ... + }; + +And used in properties, lables may appear before or after any value: + + randomnode { + prop: string = data: "mystring\n" data_end: ; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@FreeBSD.ORG Sat Feb 27 20:22:44 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8F4AA106566C; Sat, 27 Feb 2010 20:22:44 +0000 (UTC) (envelope-from raj@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6499F8FC08; Sat, 27 Feb 2010 20:22:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1RKMib4063887; Sat, 27 Feb 2010 20:22:44 GMT (envelope-from raj@svn.freebsd.org) Received: (from raj@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1RKMifu063886; Sat, 27 Feb 2010 20:22:44 GMT (envelope-from raj@svn.freebsd.org) Message-Id: <201002272022.o1RKMifu063886@svn.freebsd.org> From: Rafal Jaworowski Date: Sat, 27 Feb 2010 20:22:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204432 - vendor/dtc/1.2.0 X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Feb 2010 20:22:44 -0000 Author: raj Date: Sat Feb 27 20:22:44 2010 New Revision: 204432 URL: http://svn.freebsd.org/changeset/base/204432 Log: Tag DTC v1.2.0 Added: vendor/dtc/1.2.0/ - copied from r204431, vendor/dtc/dist/ From owner-svn-src-vendor@FreeBSD.ORG Sat Feb 27 20:38:42 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 22686106566C; Sat, 27 Feb 2010 20:38:42 +0000 (UTC) (envelope-from raj@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0F5018FC14; Sat, 27 Feb 2010 20:38:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1RKcgO7067452; Sat, 27 Feb 2010 20:38:42 GMT (envelope-from raj@svn.freebsd.org) Received: (from raj@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1RKcfsg067437; Sat, 27 Feb 2010 20:38:41 GMT (envelope-from raj@svn.freebsd.org) Message-Id: <201002272038.o1RKcfsg067437@svn.freebsd.org> From: Rafal Jaworowski Date: Sat, 27 Feb 2010 20:38:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204433 - in vendor/dtc/dist: . Documentation libfdt tests X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Feb 2010 20:38:42 -0000 Author: raj Date: Sat Feb 27 20:38:41 2010 New Revision: 204433 URL: http://svn.freebsd.org/changeset/base/204433 Log: Update DTC to git d75b33af676d0beac8398651a7f09037555a550b. Obtained from: git://git.jdl.com/software/dtc.git Added: vendor/dtc/dist/Makefile.convert-dtsv0 (contents, props changed) vendor/dtc/dist/Makefile.ftdump (contents, props changed) vendor/dtc/dist/libfdt/version.lds (contents, props changed) vendor/dtc/dist/tests/aliases.dts vendor/dtc/dist/tests/asm_tree_dump.c (contents, props changed) vendor/dtc/dist/tests/data.S (contents, props changed) vendor/dtc/dist/tests/extra-terminating-null.c (contents, props changed) vendor/dtc/dist/tests/extra-terminating-null.dts vendor/dtc/dist/tests/get_alias.c (contents, props changed) vendor/dtc/dist/tests/path_offset_aliases.c (contents, props changed) vendor/dtc/dist/tests/phandle_format.c (contents, props changed) vendor/dtc/dist/tests/value-labels.c (contents, props changed) vendor/dtc/dist/tests/value-labels.dts vendor/dtc/dist/util.c (contents, props changed) vendor/dtc/dist/util.h (contents, props changed) Modified: vendor/dtc/dist/Documentation/manual.txt vendor/dtc/dist/Makefile vendor/dtc/dist/Makefile.dtc vendor/dtc/dist/checks.c vendor/dtc/dist/convert-dtsv0-lexer.l vendor/dtc/dist/data.c vendor/dtc/dist/dtc-lexer.l vendor/dtc/dist/dtc-parser.y vendor/dtc/dist/dtc.c vendor/dtc/dist/dtc.h vendor/dtc/dist/flattree.c vendor/dtc/dist/fstree.c vendor/dtc/dist/ftdump.c vendor/dtc/dist/libfdt/Makefile.libfdt vendor/dtc/dist/libfdt/fdt.c vendor/dtc/dist/libfdt/fdt_ro.c vendor/dtc/dist/libfdt/fdt_rw.c vendor/dtc/dist/libfdt/fdt_sw.c vendor/dtc/dist/libfdt/fdt_wip.c vendor/dtc/dist/libfdt/libfdt.h vendor/dtc/dist/libfdt/libfdt_internal.h vendor/dtc/dist/livetree.c vendor/dtc/dist/srcpos.c vendor/dtc/dist/srcpos.h vendor/dtc/dist/tests/Makefile.tests vendor/dtc/dist/tests/base01.dts vendor/dtc/dist/tests/dtbs_equal_ordered.c vendor/dtc/dist/tests/empty.dts vendor/dtc/dist/tests/escapes.dts vendor/dtc/dist/tests/get_name.c vendor/dtc/dist/tests/get_path.c vendor/dtc/dist/tests/get_phandle.c vendor/dtc/dist/tests/incbin.c vendor/dtc/dist/tests/include1.dts vendor/dtc/dist/tests/include7.dts vendor/dtc/dist/tests/label01.dts vendor/dtc/dist/tests/mangle-layout.c vendor/dtc/dist/tests/node_check_compatible.c vendor/dtc/dist/tests/node_offset_by_compatible.c vendor/dtc/dist/tests/node_offset_by_phandle.c vendor/dtc/dist/tests/node_offset_by_prop_value.c vendor/dtc/dist/tests/nopulate.c vendor/dtc/dist/tests/notfound.c vendor/dtc/dist/tests/parent_offset.c vendor/dtc/dist/tests/path-references.c vendor/dtc/dist/tests/path_offset.c vendor/dtc/dist/tests/references.c vendor/dtc/dist/tests/references.dts vendor/dtc/dist/tests/references_dts0.dts vendor/dtc/dist/tests/run_tests.sh vendor/dtc/dist/tests/rw_tree1.c vendor/dtc/dist/tests/set_name.c vendor/dtc/dist/tests/subnode_offset.c vendor/dtc/dist/tests/supernode_atdepth_offset.c vendor/dtc/dist/tests/sw_tree1.c vendor/dtc/dist/tests/test01.dts vendor/dtc/dist/tests/test_tree1.dts vendor/dtc/dist/tests/test_tree1_dts0.dts vendor/dtc/dist/tests/tests.h vendor/dtc/dist/tests/trees.S vendor/dtc/dist/treesource.c Modified: vendor/dtc/dist/Documentation/manual.txt ============================================================================== --- vendor/dtc/dist/Documentation/manual.txt Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/Documentation/manual.txt Sat Feb 27 20:38:41 2010 (r204433) @@ -19,6 +19,10 @@ II - The DT block format III - libfdt +IV - Utility Tools + 1) convert-dtsv0 -- Conversion to Version 1 + 1) ftdump + I - "dtc", the device tree compiler =================================== @@ -28,7 +32,7 @@ I - "dtc", the device tree compiler Source code for the Device Tree Compiler can be found at jdl.com. The gitweb interface is: - http://www.jdl.com/git_repos/ + http://git.jdl.com/gitweb/ The repository is here: @@ -37,7 +41,7 @@ The repository is here: Tarballs of the 1.0.0 and latest releases are here: - http://www.jdl.com/software/dtc-1.0.0.tgz + http://www.jdl.com/software/dtc-v1.2.0.tgz http://www.jdl.com/software/dtc-latest.tgz @@ -613,6 +617,36 @@ strings block. III - libfdt +============ This library should be merged into dtc proper. This library should likely be worked into U-Boot and the kernel. + + +IV - Utility Tools +================== + +1) convert-dtsv0 -- Conversion to Version 1 + +convert-dtsv0 is a small utility program which converts (DTS) +Device Tree Source from the obsolete version 0 to version 1. + +Version 1 DTS files are marked by line "/dts-v1/;" at the top of the file. + +The syntax of the convert-dtsv0 command line is: + + convert-dtsv0 [] + +Each file passed will be converted to the new /dts-v1/ version by creating +a new file with a "v1" appended the filename. + +Comments, empty lines, etc. are preserved. + + +2) ftdump -- Flat Tree dumping utility + +The ftdump program prints a readable version of a flat device tree file. + +The syntax of the ftdump command line is: + + ftdump Modified: vendor/dtc/dist/Makefile ============================================================================== --- vendor/dtc/dist/Makefile Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/Makefile Sat Feb 27 20:38:41 2010 (r204433) @@ -16,7 +16,7 @@ LOCAL_VERSION = CONFIG_LOCALVERSION = CPPFLAGS = -I libfdt -CFLAGS = -Wall -g -Os -Wpointer-arith -Wcast-qual +CFLAGS = -Wall -g -Os -fPIC -Wpointer-arith -Wcast-qual BISON = bison LEX = flex @@ -28,6 +28,17 @@ BINDIR = $(PREFIX)/bin LIBDIR = $(PREFIX)/lib INCLUDEDIR = $(PREFIX)/include +HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \ + sed -e 's/\(cygwin\).*/cygwin/') + +ifeq ($(HOSTOS),darwin) +SHAREDLIB_EXT=dylib +SHAREDLIB_LINK_OPTIONS=-dynamiclib -Wl,-install_name -Wl, +else +SHAREDLIB_EXT=so +SHAREDLIB_LINK_OPTIONS=-shared -Wl,--version-script=$(LIBFDT_version) -Wl,-soname, +endif + # # Overall rules # @@ -46,17 +57,6 @@ else DEPTARGETS = $(filter-out $(NODEPTARGETS),$(MAKECMDGOALS)) endif -all: dtc ftdump convert-dtsv0 libfdt - -install: all - @$(VECHO) INSTALL - $(INSTALL) -d $(DESTDIR)$(BINDIR) - $(INSTALL) -m 755 dtc $(DESTDIR)$(BINDIR) - $(INSTALL) -d $(DESTDIR)$(LIBDIR) - $(INSTALL) -m 644 $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) - $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) - $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) - # # Rules for versioning # @@ -100,63 +100,82 @@ define filechk fi; endef -$(VERSION_FILE): Makefile FORCE - $(call filechk,version) -# -# Rules for dtc proper -# +include Makefile.convert-dtsv0 include Makefile.dtc +include Makefile.ftdump +BIN += convert-dtsv0 BIN += dtc +BIN += ftdump -# This stops make from generating the lex and bison output during -# auto-dependency computation, but throwing them away as an -# intermediate target and building them again "for real" -.SECONDARY: $(DTC_GEN_SRCS) -dtc: $(DTC_OBJS) +all: $(BIN) libfdt + ifneq ($(DEPTARGETS),) -include $(DTC_OBJS:%.o=%.d) +-include $(CONVERT_OBJS:%.o=%.d) +-include $(FTDUMP_OBJS:%.o=%.d) endif -# -# Rules for ftdump & convert-dtsv0 -# -BIN += ftdump convert-dtsv0 -ftdump: ftdump.o -convert-dtsv0: convert-dtsv0-lexer.lex.o srcpos.o - @$(VECHO) LD $@ - $(LINK.c) -o $@ $^ -ifneq ($(DEPTARGETS),) --include ftdump.d -endif # # Rules for libfdt # LIBFDT_objdir = libfdt LIBFDT_srcdir = libfdt -LIBFDT_lib = $(LIBFDT_objdir)/libfdt.a +LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a +LIBFDT_lib = $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT) LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) +LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) include $(LIBFDT_srcdir)/Makefile.libfdt .PHONY: libfdt -libfdt: $(LIBFDT_lib) +libfdt: $(LIBFDT_archive) $(LIBFDT_lib) +$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) $(LIBFDT_lib): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) libfdt_clean: @$(VECHO) CLEAN "(libfdt)" rm -f $(addprefix $(LIBFDT_objdir)/,$(STD_CLEANFILES)) + rm -f $(LIBFDT_objdir)/*.so ifneq ($(DEPTARGETS),) -include $(LIBFDT_OBJS:%.o=$(LIBFDT_objdir)/%.d) endif +# This stops make from generating the lex and bison output during +# auto-dependency computation, but throwing them away as an +# intermediate target and building them again "for real" +.SECONDARY: $(DTC_GEN_SRCS) $(CONVERT_GEN_SRCS) + +install: all + @$(VECHO) INSTALL + $(INSTALL) -d $(DESTDIR)$(BINDIR) + $(INSTALL) $(BIN) $(DESTDIR)$(BINDIR) + $(INSTALL) -d $(DESTDIR)$(LIBDIR) + $(INSTALL) $(LIBFDT_lib) $(DESTDIR)$(LIBDIR) + $(INSTALL) -m 644 $(LIBFDT_archive) $(DESTDIR)$(LIBDIR) + $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) + $(INSTALL) -m 644 $(LIBFDT_include) $(DESTDIR)$(INCLUDEDIR) + +$(VERSION_FILE): Makefile FORCE + $(call filechk,version) + + +dtc: $(DTC_OBJS) + +convert-dtsv0: $(CONVERT_OBJS) + @$(VECHO) LD $@ + $(LINK.c) -o $@ $^ + +ftdump: $(FTDUMP_OBJS) + + # # Testsuite rules # @@ -166,7 +185,7 @@ include tests/Makefile.tests # # Clean rules # -STD_CLEANFILES = *~ *.o *.d *.a *.i *.s core a.out vgcore.* \ +STD_CLEANFILES = *~ *.o *.so *.d *.a *.i *.s core a.out vgcore.* \ *.tab.[ch] *.lex.c *.output clean: libfdt_clean tests_clean @@ -210,6 +229,11 @@ clean: libfdt_clean tests_clean @$(VECHO) AR $@ $(AR) $(ARFLAGS) $@ $^ +$(LIBFDT_lib): + @$(VECHO) LD $@ + $(CC) $(LDFLAGS) -fPIC $(SHAREDLIB_LINK_OPTIONS)$(notdir $@) -o $(LIBFDT_objdir)/libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $^ + ln -sf libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT) $(LIBFDT_objdir)/libfdt.$(SHAREDLIB_EXT) + %.lex.c: %.l @$(VECHO) LEX $@ $(LEX) -o$@ $< Added: vendor/dtc/dist/Makefile.convert-dtsv0 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Makefile.convert-dtsv0 Sat Feb 27 20:38:41 2010 (r204433) @@ -0,0 +1,13 @@ +# +# This is not a complete Makefile of itself. +# Instead, it is designed to be easily embeddable +# into other systems of Makefiles. +# + +CONVERT_SRCS = \ + srcpos.c \ + util.c + +CONVERT_GEN_SRCS = convert-dtsv0-lexer.lex.c + +CONVERT_OBJS = $(CONVERT_SRCS:%.c=%.o) $(CONVERT_GEN_SRCS:%.c=%.o) Modified: vendor/dtc/dist/Makefile.dtc ============================================================================== --- vendor/dtc/dist/Makefile.dtc Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/Makefile.dtc Sat Feb 27 20:38:41 2010 (r204433) @@ -3,7 +3,16 @@ # This is not a complete Makefile of itself. Instead, it is designed to # be easily embeddable into other systems of Makefiles. # -DTC_SRCS = dtc.c flattree.c fstree.c data.c livetree.c treesource.c srcpos.c \ - checks.c +DTC_SRCS = \ + checks.c \ + data.c \ + dtc.c \ + flattree.c \ + fstree.c \ + livetree.c \ + srcpos.c \ + treesource.c \ + util.c + DTC_GEN_SRCS = dtc-lexer.lex.c dtc-parser.tab.c DTC_OBJS = $(DTC_SRCS:%.c=%.o) $(DTC_GEN_SRCS:%.c=%.o) Added: vendor/dtc/dist/Makefile.ftdump ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/dtc/dist/Makefile.ftdump Sat Feb 27 20:38:41 2010 (r204433) @@ -0,0 +1,12 @@ +# +# This is not a complete Makefile of itself. +# Instead, it is designed to be easily embeddable +# into other systems of Makefiles. +# + +FTDUMP_SRCS = \ + ftdump.c + +FTDUMP_GEN_SRCS = + +FTDUMP_OBJS = $(FTDUMP_SRCS:%.c=%.o) $(FTDUMP_GEN_SRCS:%.c=%.o) Modified: vendor/dtc/dist/checks.c ============================================================================== --- vendor/dtc/dist/checks.c Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/checks.c Sat Feb 27 20:38:41 2010 (r204433) @@ -279,31 +279,55 @@ static void check_property_name_chars(st PROP_CHECK(property_name_chars, PROPNODECHARS, ERROR); static void check_explicit_phandles(struct check *c, struct node *root, - struct node *node) + struct node *node, struct property *prop) { - struct property *prop; + struct marker *m; struct node *other; cell_t phandle; - prop = get_property(node, "linux,phandle"); - if (! prop) - return; /* No phandle, that's fine */ + if (!streq(prop->name, "phandle") + && !streq(prop->name, "linux,phandle")) + return; if (prop->val.len != sizeof(cell_t)) { - FAIL(c, "%s has bad length (%d) linux,phandle property", - node->fullpath, prop->val.len); + FAIL(c, "%s has bad length (%d) %s property", + node->fullpath, prop->val.len, prop->name); + return; + } + + m = prop->val.markers; + for_each_marker_of_type(m, REF_PHANDLE) { + assert(m->offset == 0); + if (node != get_node_by_ref(root, m->ref)) + /* "Set this node's phandle equal to some + * other node's phandle". That's nonsensical + * by construction. */ { + FAIL(c, "%s in %s is a reference to another node", + prop->name, node->fullpath); + return; + } + /* But setting this node's phandle equal to its own + * phandle is allowed - that means allocate a unique + * phandle for this node, even if it's not otherwise + * referenced. The value will be filled in later, so + * no further checking for now. */ return; } phandle = propval_cell(prop); + if ((phandle == 0) || (phandle == -1)) { - FAIL(c, "%s has invalid linux,phandle value 0x%x", - node->fullpath, phandle); + FAIL(c, "%s has bad value (0x%x) in %s property", + node->fullpath, phandle, prop->name); return; } + if (node->phandle && (node->phandle != phandle)) + FAIL(c, "%s has %s property which replaces existing phandle information", + node->fullpath, prop->name); + other = get_node_by_phandle(root, phandle); - if (other) { + if (other && (other != node)) { FAIL(c, "%s has duplicated phandle 0x%x (seen before at %s)", node->fullpath, phandle, other->fullpath); return; @@ -311,7 +335,7 @@ static void check_explicit_phandles(stru node->phandle = phandle; } -NODE_CHECK(explicit_phandles, NULL, ERROR); +PROP_CHECK(explicit_phandles, NULL, ERROR); static void check_name_properties(struct check *c, struct node *root, struct node *node) Modified: vendor/dtc/dist/convert-dtsv0-lexer.l ============================================================================== --- vendor/dtc/dist/convert-dtsv0-lexer.l Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/convert-dtsv0-lexer.l Sat Feb 27 20:38:41 2010 (r204433) @@ -17,7 +17,7 @@ * USA */ -%option noyywrap nounput +%option noyywrap nounput noinput %x INCLUDE %x BYTESTRING @@ -42,6 +42,7 @@ GAP ({WS}|{COMMENT}|{LINECOMMENT})* #include #include "srcpos.h" +#include "util.h" static int v1_tagged; /* = 0 */ static int cbase = 16; @@ -51,26 +52,6 @@ static char *last_name; /* = NULL */ #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -static inline void __attribute__((noreturn)) die(char * str, ...) -{ - va_list ap; - - va_start(ap, str); - fprintf(stderr, "FATAL ERROR: "); - vfprintf(stderr, str, ap); - exit(1); -} - -static inline void *xmalloc(size_t len) -{ - void *new = malloc(len); - - if (! new) - die("malloc() failed\n"); - - return new; -} - const struct { const char *pattern; int obase, width; @@ -185,7 +166,7 @@ const struct { {PROPNODECHAR}+ { ECHO; - last_name = strdup(yytext); + last_name = xstrdup(yytext); BEGIN(INITIAL); } Modified: vendor/dtc/dist/data.c ============================================================================== --- vendor/dtc/dist/data.c Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/data.c Sat Feb 27 20:38:41 2010 (r204433) @@ -217,7 +217,7 @@ struct data data_insert_at_marker(struct return d; } -struct data data_append_markers(struct data d, struct marker *m) +static struct data data_append_markers(struct data d, struct marker *m) { struct marker **mp = &d.markers; Modified: vendor/dtc/dist/dtc-lexer.l ============================================================================== --- vendor/dtc/dist/dtc-lexer.l Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/dtc-lexer.l Sat Feb 27 20:38:41 2010 (r204433) @@ -18,7 +18,7 @@ * USA */ -%option noyywrap nounput yylineno +%option noyywrap nounput noinput yylineno %x INCLUDE %x BYTESTRING @@ -38,6 +38,11 @@ LINECOMMENT "//".*\n #include "srcpos.h" #include "dtc-parser.tab.h" +#define YY_USER_ACTION \ + { \ + yylloc.file = srcpos_file; \ + yylloc.first_line = yylineno; \ + } /*#define LEXDEBUG 1*/ @@ -47,15 +52,10 @@ LINECOMMENT "//".*\n #define DPRINT(fmt, ...) do { } while (0) #endif -static int dts_version; /* = 0 */ +static int dts_version = 1; -#define BEGIN_DEFAULT() if (dts_version == 0) { \ - DPRINT("\n"); \ - BEGIN(INITIAL); \ - } else { \ - DPRINT("\n"); \ +#define BEGIN_DEFAULT() DPRINT("\n"); \ BEGIN(V1); \ - } static void push_input_file(const char *filename); static int pop_input_file(void); @@ -75,18 +75,13 @@ static int pop_input_file(void); } <*>{STRING} { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("String: %s\n", yytext); yylval.data = data_copy_escape_string(yytext+1, yyleng-2); - yylloc.first_line = yylineno; return DT_STRING; } <*>"/dts-v1/" { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Keyword: /dts-v1/\n"); dts_version = 1; BEGIN_DEFAULT(); @@ -94,106 +89,57 @@ static int pop_input_file(void); } <*>"/memreserve/" { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Keyword: /memreserve/\n"); BEGIN_DEFAULT(); return DT_MEMRESERVE; } <*>{LABEL}: { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Label: %s\n", yytext); - yylval.labelref = strdup(yytext); + yylval.labelref = xstrdup(yytext); yylval.labelref[yyleng-1] = '\0'; return DT_LABEL; } -[bodh]# { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; - if (*yytext == 'b') - yylval.cbase = 2; - else if (*yytext == 'o') - yylval.cbase = 8; - else if (*yytext == 'd') - yylval.cbase = 10; - else - yylval.cbase = 16; - DPRINT("Base: %d\n", yylval.cbase); - return DT_BASE; - } - -[0-9a-fA-F]+ { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; - yylval.literal = strdup(yytext); - DPRINT("Literal: '%s'\n", yylval.literal); - return DT_LEGACYLITERAL; - } - [0-9]+|0[xX][0-9a-fA-F]+ { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; - yylval.literal = strdup(yytext); + yylval.literal = xstrdup(yytext); DPRINT("Literal: '%s'\n", yylval.literal); return DT_LITERAL; } \&{LABEL} { /* label reference */ - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Ref: %s\n", yytext+1); - yylval.labelref = strdup(yytext+1); + yylval.labelref = xstrdup(yytext+1); return DT_REF; } "&{/"{PATHCHAR}+\} { /* new-style path reference */ - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; yytext[yyleng-1] = '\0'; DPRINT("Ref: %s\n", yytext+2); - yylval.labelref = strdup(yytext+2); - return DT_REF; - } - -"&/"{PATHCHAR}+ { /* old-style path reference */ - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; - DPRINT("Ref: %s\n", yytext+1); - yylval.labelref = strdup(yytext+1); + yylval.labelref = xstrdup(yytext+2); return DT_REF; } [0-9a-fA-F]{2} { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; yylval.byte = strtol(yytext, NULL, 16); DPRINT("Byte: %02x\n", (int)yylval.byte); return DT_BYTE; } "]" { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("/BYTESTRING\n"); BEGIN_DEFAULT(); return ']'; } {PROPNODECHAR}+ { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("PropNodeName: %s\n", yytext); - yylval.propnodename = strdup(yytext); + yylval.propnodename = xstrdup(yytext); BEGIN_DEFAULT(); return DT_PROPNODENAME; } "/incbin/" { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Binary Include\n"); return DT_INCBIN; } @@ -203,8 +149,6 @@ static int pop_input_file(void); <*>{LINECOMMENT}+ /* eat C++-style comments */ <*>. { - yylloc.file = srcpos_file; - yylloc.first_line = yylineno; DPRINT("Char: %c (\\x%02x)\n", yytext[0], (unsigned)yytext[0]); if (yytext[0] == '[') { Modified: vendor/dtc/dist/dtc-parser.y ============================================================================== --- vendor/dtc/dist/dtc-parser.y Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/dtc-parser.y Sat Feb 27 20:38:41 2010 (r204433) @@ -27,6 +27,7 @@ #include "srcpos.h" extern int yylex(void); +extern void yyerror(char const *s); extern struct boot_info *the_boot_info; extern int treesource_error; @@ -55,7 +56,6 @@ static unsigned long long eval_literal(c %token DT_MEMRESERVE %token DT_PROPNODENAME %token DT_LITERAL -%token DT_LEGACYLITERAL %token DT_BASE %token DT_BYTE %token DT_STRING @@ -67,11 +67,8 @@ static unsigned long long eval_literal(c %type propdataprefix %type memreserve %type memreserves -%type v0_memreserve -%type v0_memreserves %type addr %type celllist -%type cellbase %type cellval %type bytestring %type propdef @@ -90,10 +87,6 @@ sourcefile: { the_boot_info = build_boot_info($3, $4, 0); } - | v0_memreserves devicetree - { - the_boot_info = build_boot_info($1, $2, 0); - } ; memreserves: @@ -114,37 +107,11 @@ memreserve: } ; -v0_memreserves: - /* empty */ - { - $$ = NULL; - } - | v0_memreserve v0_memreserves - { - $$ = chain_reserve_entry($1, $2); - }; - ; - -v0_memreserve: - memreserve - { - $$ = $1; - } - | label DT_MEMRESERVE addr '-' addr ';' - { - $$ = build_reserve_entry($3, $5 - $3 + 1, $1); - } - ; - addr: DT_LITERAL { $$ = eval_literal($1, 0, 64); } - | DT_LEGACYLITERAL - { - $$ = eval_literal($1, 16, 64); - } ; devicetree: @@ -208,9 +175,11 @@ propdata: if ($6 != 0) if (fseek(file->file, $6, SEEK_SET) != 0) - yyerrorf("Couldn't seek to offset %llu in \"%s\": %s", - (unsigned long long)$6, - $4.val, strerror(errno)); + srcpos_error(&yylloc, + "Couldn't seek to offset %llu in \"%s\": %s", + (unsigned long long)$6, + $4.val, + strerror(errno)); d = data_copy_file(file->file, $8); @@ -269,23 +238,11 @@ celllist: } ; -cellbase: - /* empty */ - { - $$ = 16; - } - | DT_BASE - ; - cellval: DT_LITERAL { $$ = eval_literal($1, 0, 32); } - | cellbase DT_LEGACYLITERAL - { - $$ = eval_literal($2, $1, 32); - } ; bytestring: @@ -339,26 +296,10 @@ label: %% -void yyerrorf(char const *s, ...) +void yyerror(char const *s) { - const char *fname = srcpos_file ? srcpos_file->name : ""; - va_list va; - va_start(va, s); - - if (strcmp(fname, "-") == 0) - fname = "stdin"; - - fprintf(stderr, "%s:%d ", fname, yylloc.first_line); - vfprintf(stderr, s, va); - fprintf(stderr, "\n"); - + srcpos_error(&yylloc, "%s", s); treesource_error = 1; - va_end(va); -} - -void yyerror (char const *s) -{ - yyerrorf("%s", s); } static unsigned long long eval_literal(const char *s, int base, int bits) Modified: vendor/dtc/dist/dtc.c ============================================================================== --- vendor/dtc/dist/dtc.c Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/dtc.c Sat Feb 27 20:38:41 2010 (r204433) @@ -30,6 +30,7 @@ int quiet; /* Level of quietness */ int reservenum; /* Number of memory reservation slots */ int minsize; /* Minimum blob size */ int padsize; /* Additional padding to blob */ +int phandle_format = PHANDLE_BOTH; /* Use linux,phandle or phandle properties */ char *join_path(const char *path, const char *name) { @@ -106,6 +107,11 @@ static void __attribute__ ((noreturn)) fprintf(stderr, "\t\tForce - try to produce output even if the input tree has errors\n"); fprintf(stderr, "\t-v\n"); fprintf(stderr, "\t\tPrint DTC version and exit\n"); + fprintf(stderr, "\t-H \n"); + fprintf(stderr, "\t\tphandle formats are:\n"); + fprintf(stderr, "\t\t\tlegacy - \"linux,phandle\" properties only\n"); + fprintf(stderr, "\t\t\tepapr - \"phandle\" properties only\n"); + fprintf(stderr, "\t\t\tboth - Both \"linux,phandle\" and \"phandle\" properties\n"); exit(3); } @@ -127,7 +133,7 @@ int main(int argc, char *argv[]) minsize = 0; padsize = 0; - while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fcqb:v")) != EOF) { + while ((opt = getopt(argc, argv, "hI:O:o:V:R:S:p:fcqb:vH:")) != EOF) { switch (opt) { case 'I': inform = optarg; @@ -165,6 +171,18 @@ int main(int argc, char *argv[]) case 'v': printf("Version: %s\n", DTC_VERSION); exit(0); + case 'H': + if (streq(optarg, "legacy")) + phandle_format = PHANDLE_LEGACY; + else if (streq(optarg, "epapr")) + phandle_format = PHANDLE_EPAPR; + else if (streq(optarg, "both")) + phandle_format = PHANDLE_BOTH; + else + die("Invalid argument \"%s\" to -H option\n", + optarg); + break; + case 'h': default: usage(); @@ -182,6 +200,9 @@ int main(int argc, char *argv[]) if (minsize && padsize) die("Can't set both -p and -S\n"); + if (minsize) + fprintf(stderr, "DTC: Use of \"-S\" is deprecated; it will be removed soon, use \"-p\" instead\n"); + fprintf(stderr, "DTC: %s->%s on file \"%s\"\n", inform, outform, arg); Modified: vendor/dtc/dist/dtc.h ============================================================================== --- vendor/dtc/dist/dtc.h Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/dtc.h Sat Feb 27 20:38:41 2010 (r204433) @@ -34,7 +34,17 @@ #include #include +#include "util.h" + +#ifdef DEBUG +#define debug(fmt,args...) printf(fmt, ##args) +#else +#define debug(fmt,args...) +#endif + + #define DEFAULT_FDT_VERSION 17 + /* * Command line options */ @@ -42,36 +52,11 @@ extern int quiet; /* Level of quietness extern int reservenum; /* Number of memory reservation slots */ extern int minsize; /* Minimum blob size */ extern int padsize; /* Additional padding to blob */ +extern int phandle_format; /* Use linux,phandle or phandle properties */ -static inline void __attribute__((noreturn)) die(char * str, ...) -{ - va_list ap; - - va_start(ap, str); - fprintf(stderr, "FATAL ERROR: "); - vfprintf(stderr, str, ap); - exit(1); -} - -static inline void *xmalloc(size_t len) -{ - void *new = malloc(len); - - if (! new) - die("malloc() failed\n"); - - return new; -} - -static inline void *xrealloc(void *p, size_t len) -{ - void *new = realloc(p, len); - - if (! new) - die("realloc() failed (len=%d)\n", len); - - return new; -} +#define PHANDLE_LEGACY 0x1 +#define PHANDLE_EPAPR 0x2 +#define PHANDLE_BOTH 0x3 typedef uint32_t cell_t; Modified: vendor/dtc/dist/flattree.c ============================================================================== --- vendor/dtc/dist/flattree.c Sat Feb 27 20:22:44 2010 (r204432) +++ vendor/dtc/dist/flattree.c Sat Feb 27 20:38:41 2010 (r204433) @@ -127,11 +127,21 @@ static void emit_offset_label(FILE *f, c fprintf(f, "%s\t= . + %d\n", label, offset); } +#define ASM_EMIT_BELONG(f, fmt, ...) \ + { \ + fprintf((f), "\t.byte\t((" fmt ") >> 24) & 0xff\n", __VA_ARGS__); \ + fprintf((f), "\t.byte\t((" fmt ") >> 16) & 0xff\n", __VA_ARGS__); \ + fprintf((f), "\t.byte\t((" fmt ") >> 8) & 0xff\n", __VA_ARGS__); \ + fprintf((f), "\t.byte\t(" fmt ") & 0xff\n", __VA_ARGS__); \ + } + static void asm_emit_cell(void *e, cell_t val) { FILE *f = e; - fprintf(f, "\t.long\t0x%x\n", val); + fprintf(f, "\t.byte 0x%02x; .byte 0x%02x; .byte 0x%02x; .byte 0x%02x\n", + (val >> 24) & 0xff, (val >> 16) & 0xff, + (val >> 8) & 0xff, val & 0xff); } static void asm_emit_string(void *e, char *str, int len) @@ -156,7 +166,7 @@ static void asm_emit_align(void *e, int { FILE *f = e; - fprintf(f, "\t.balign\t%d\n", a); + fprintf(f, "\t.balign\t%d, 0\n", a); } static void asm_emit_data(void *e, struct data d) @@ -169,8 +179,7 @@ static void asm_emit_data(void *e, struc emit_offset_label(f, m->ref, m->offset); while ((d.len - off) >= sizeof(uint32_t)) { - fprintf(f, "\t.long\t0x%x\n", - fdt32_to_cpu(*((uint32_t *)(d.val+off)))); + asm_emit_cell(e, fdt32_to_cpu(*((uint32_t *)(d.val+off)))); off += sizeof(uint32_t); } @@ -190,14 +199,16 @@ static void asm_emit_beginnode(void *e, fprintf(f, "\t.globl\t%s\n", label); fprintf(f, "%s:\n", label); } - fprintf(f, "\t.long\tFDT_BEGIN_NODE\n"); + fprintf(f, "\t/* FDT_BEGIN_NODE */\n"); + asm_emit_cell(e, FDT_BEGIN_NODE); } static void asm_emit_endnode(void *e, const char *label) { FILE *f = e; - fprintf(f, "\t.long\tFDT_END_NODE\n"); + fprintf(f, "\t/* FDT_END_NODE */\n"); + asm_emit_cell(e, FDT_END_NODE); if (label) { fprintf(f, "\t.globl\t%s_end\n", label); fprintf(f, "%s_end:\n", label); @@ -212,7 +223,8 @@ static void asm_emit_property(void *e, c fprintf(f, "\t.globl\t%s\n", label); fprintf(f, "%s:\n", label); } - fprintf(f, "\t.long\tFDT_PROP\n"); + fprintf(f, "\t/* FDT_PROP */\n"); + asm_emit_cell(e, FDT_PROP); } static struct emitter asm_emitter = { @@ -413,10 +425,13 @@ void dt_to_blob(FILE *f, struct boot_inf if (padlen > 0) blob = data_append_zeroes(blob, padlen); - fwrite(blob.val, blob.len, 1, f); - - if (ferror(f)) - die("Error writing device tree blob: %s\n", strerror(errno)); + if (fwrite(blob.val, blob.len, 1, f) != 1) { + if (ferror(f)) + die("Error writing device tree blob: %s\n", + strerror(errno)); + else + die("Short write on device tree blob\n"); + } /* * data_merge() frees the right-hand element so only the blob @@ -455,39 +470,44 @@ void dt_to_asm(FILE *f, struct boot_info die("Unknown device tree blob version %d\n", version); fprintf(f, "/* autogenerated by dtc, do not edit */\n\n"); - fprintf(f, "#define FDT_MAGIC 0x%x\n", FDT_MAGIC); - fprintf(f, "#define FDT_BEGIN_NODE 0x%x\n", FDT_BEGIN_NODE); - fprintf(f, "#define FDT_END_NODE 0x%x\n", FDT_END_NODE); - fprintf(f, "#define FDT_PROP 0x%x\n", FDT_PROP); - fprintf(f, "#define FDT_END 0x%x\n", FDT_END); - fprintf(f, "\n"); emit_label(f, symprefix, "blob_start"); emit_label(f, symprefix, "header"); - fprintf(f, "\t.long\tFDT_MAGIC\t\t\t\t/* magic */\n"); - fprintf(f, "\t.long\t_%s_blob_abs_end - _%s_blob_start\t/* totalsize */\n", - symprefix, symprefix); - fprintf(f, "\t.long\t_%s_struct_start - _%s_blob_start\t/* off_dt_struct */\n", + fprintf(f, "\t/* magic */\n"); + asm_emit_cell(f, FDT_MAGIC); + fprintf(f, "\t/* totalsize */\n"); + ASM_EMIT_BELONG(f, "_%s_blob_abs_end - _%s_blob_start", + symprefix, symprefix); + fprintf(f, "\t/* off_dt_struct */\n"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-vendor@FreeBSD.ORG Sat Feb 27 20:41:18 2010 Return-Path: Delivered-To: svn-src-vendor@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E080B106566C; Sat, 27 Feb 2010 20:41:18 +0000 (UTC) (envelope-from raj@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B59538FC08; Sat, 27 Feb 2010 20:41:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o1RKfIQL068076; Sat, 27 Feb 2010 20:41:18 GMT (envelope-from raj@svn.freebsd.org) Received: (from raj@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1RKfIu9068075; Sat, 27 Feb 2010 20:41:18 GMT (envelope-from raj@svn.freebsd.org) Message-Id: <201002272041.o1RKfIu9068075@svn.freebsd.org> From: Rafal Jaworowski Date: Sat, 27 Feb 2010 20:41:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204434 - vendor/dtc/dtc-d75b33af X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Feb 2010 20:41:19 -0000 Author: raj Date: Sat Feb 27 20:41:18 2010 New Revision: 204434 URL: http://svn.freebsd.org/changeset/base/204434 Log: Tag DTC git d75b33af. Added: vendor/dtc/dtc-d75b33af/ - copied from r204433, vendor/dtc/dist/