From e7861234ef8484e765fa1915473a6a385016a851 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 01 2019 14:53:23 +0000 Subject: import libffi-3.1-20.el8 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..203c8ad --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libffi-3.1.tar.gz diff --git a/.libffi.metadata b/.libffi.metadata new file mode 100644 index 0000000..6d7e282 --- /dev/null +++ b/.libffi.metadata @@ -0,0 +1 @@ +cb373ef2115ec7c57913b84ca72eee14b10ccdc3 SOURCES/libffi-3.1.tar.gz diff --git a/SOURCES/ffi-multilib.h b/SOURCES/ffi-multilib.h new file mode 100644 index 0000000..50a6226 --- /dev/null +++ b/SOURCES/ffi-multilib.h @@ -0,0 +1,23 @@ +/* This file is here to prevent a file conflict on multiarch systems. */ +#ifdef ffi_wrapper_h +#error "Do not define ffi_wrapper_h!" +#endif +#define ffi_wrapper_h + +#if defined(__i386__) +#include "ffi-i386.h" +#elif defined(__powerpc64__) +#include "ffi-ppc64.h" +#elif defined(__powerpc__) +#include "ffi-ppc.h" +#elif defined(__s390x__) +#include "ffi-s390x.h" +#elif defined(__s390__) +#include "ffi-s390.h" +#elif defined(__x86_64__) +#include "ffi-x86_64.h" +#else +#error "The libffi-devel package is not usable with the architecture." +#endif + +#undef ffi_wrapper_h diff --git a/SOURCES/ffitarget-multilib.h b/SOURCES/ffitarget-multilib.h new file mode 100644 index 0000000..b2ed545 --- /dev/null +++ b/SOURCES/ffitarget-multilib.h @@ -0,0 +1,23 @@ +/* This file is here to prevent a file conflict on multiarch systems. */ +#ifdef ffitarget_wrapper_h +#error "Do not define ffitarget_wrapper_h!" +#endif +#define ffitarget_wrapper_h + +#if defined(__i386__) +#include "ffitarget-i386.h" +#elif defined(__powerpc64__) +#include "ffitarget-ppc64.h" +#elif defined(__powerpc__) +#include "ffitarget-ppc.h" +#elif defined(__s390x__) +#include "ffitarget-s390x.h" +#elif defined(__s390__) +#include "ffitarget-s390.h" +#elif defined(__x86_64__) +#include "ffitarget-x86_64.h" +#else +#error "The libffi-devel package is not usable with the architecture." +#endif + +#undef ffitarget_wrapper_h diff --git a/SOURCES/libffi-3.1-aarch64-fix-exec-stack.patch b/SOURCES/libffi-3.1-aarch64-fix-exec-stack.patch new file mode 100644 index 0000000..e20c920 --- /dev/null +++ b/SOURCES/libffi-3.1-aarch64-fix-exec-stack.patch @@ -0,0 +1,11 @@ +--- a/src/aarch64/sysv.S ++++ b/src/aarch64/sysv.S +@@ -396,3 +396,8 @@ + #ifdef __ELF__ + .size CNAME(ffi_closure_SYSV), .-CNAME(ffi_closure_SYSV) + #endif ++ ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",%progbits ++#endif ++ diff --git a/SOURCES/libffi-3.1-closures-Create-temporary-file-with-O_TMPFILE-and-O_.patch b/SOURCES/libffi-3.1-closures-Create-temporary-file-with-O_TMPFILE-and-O_.patch new file mode 100644 index 0000000..16430dc --- /dev/null +++ b/SOURCES/libffi-3.1-closures-Create-temporary-file-with-O_TMPFILE-and-O_.patch @@ -0,0 +1,79 @@ +From 8daeed9570af72eb135c8ded460d2888f05b2e68 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= +Date: Sun, 11 May 2014 22:54:58 +0200 +Subject: [PATCH 626/627] closures: Create temporary file with O_TMPFILE and + O_CLOEXEC when available + +The open_temp_exec_file_dir function can create a temporary file without +file system accessible link. If the O_TMPFILE flag is not defined (old +Linux kernel or libc) the behavior is unchanged. + +The open_temp_exec_file_name function now need a new argument "flags" +(like O_CLOEXEC) used for temporary file creation. + +The O_TMPFILE flag allow temporary file creation without race condition. +This feature/fix prevent another process to access the (future) +executable file from the file system. + +The O_CLOEXEC flag automatically close the temporary file for any +execve. This avoid transmitting (executable) file descriptor to a child +process. +--- + src/closures.c | 29 ++++++++++++++++++++++++----- + 1 file changed, 24 insertions(+), 5 deletions(-) + +diff -rup a/src/closures.c b/src/closures.c +--- a/src/closures.c 2019-06-14 14:24:01.510844835 -0400 ++++ b/src/closures.c 2019-06-14 14:26:48.248924350 -0400 +@@ -265,9 +265,9 @@ static size_t execsize = 0; + + /* Open a temporary file name, and immediately unlink it. */ + static int +-open_temp_exec_file_name (char *name) ++open_temp_exec_file_name (char *name, int flags) + { +- int fd = mkstemp (name); ++ int fd = mkostemp (name, flags); + + if (fd != -1) + unlink (name); +@@ -280,8 +280,28 @@ static int + open_temp_exec_file_dir (const char *dir) + { + static const char suffix[] = "/ffiXXXXXX"; +- size_t lendir = strlen (dir); +- char *tempname = __builtin_alloca (lendir + sizeof (suffix)); ++ size_t lendir; ++ int flags, fd; ++ char *tempname; ++ ++#ifdef O_CLOEXEC ++ flags = O_CLOEXEC; ++#else ++ flags = 0; ++#endif ++ ++#ifdef O_TMPFILE ++ fd = open (dir, flags | O_RDWR | O_EXCL | O_TMPFILE, 0700); ++ /* If the running system does not support the O_TMPFILE flag then retry without it. */ ++ if (fd != -1 || (errno != EINVAL && errno != EISDIR && errno != EOPNOTSUPP)) { ++ return fd; ++ } else { ++ errno = 0; ++ } ++#endif ++ ++ lendir = strlen (dir); ++ tempname = __builtin_alloca (lendir + sizeof (suffix)); + + if (!tempname) + return -1; +@@ -289,7 +309,7 @@ open_temp_exec_file_dir (const char *dir + memcpy (tempname, dir, lendir); + memcpy (tempname + lendir, suffix, sizeof (suffix)); + +- return open_temp_exec_file_name (tempname); ++ return open_temp_exec_file_name (tempname, flags); + } + + /* Open a temporary file in the directory in the named environment diff --git a/SOURCES/libffi-3.1-fix-exec-stack.patch b/SOURCES/libffi-3.1-fix-exec-stack.patch new file mode 100644 index 0000000..4c2a59f --- /dev/null +++ b/SOURCES/libffi-3.1-fix-exec-stack.patch @@ -0,0 +1,31 @@ +From 978c9540154d320525488db1b7049277122f736d Mon Sep 17 00:00:00 2001 +From: Samuli Suominen +Date: Sat, 31 May 2014 08:53:10 -0400 +Subject: [PATCH] Add missing GNU stack markings in win32.S + +--- + src/x86/win32.S | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/x86/win32.S b/src/x86/win32.S +index daf0e79..e42baf2 100644 +--- a/src/x86/win32.S ++++ b/src/x86/win32.S +@@ -1,5 +1,6 @@ + /* ----------------------------------------------------------------------- +- win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. ++ win32.S - Copyright (c) 2014 Anthony Green ++ Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. + Copyright (c) 2001 John Beniton + Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2009 Daniel Witte +@@ -1304,3 +1305,6 @@ L_ffi_closure_SYSV_inner$stub: + + #endif /* !_MSC_VER */ + ++#if defined __ELF__ && defined __linux__ ++ .section .note.GNU-stack,"",@progbits ++#endif +-- +1.9.3 + diff --git a/SOURCES/libffi-3.1-fix-include-path.patch b/SOURCES/libffi-3.1-fix-include-path.patch new file mode 100644 index 0000000..5a3b7a5 --- /dev/null +++ b/SOURCES/libffi-3.1-fix-include-path.patch @@ -0,0 +1,17 @@ +diff -up libffi-3.1/libffi.pc.in.fixpath libffi-3.1/libffi.pc.in +--- libffi-3.1/libffi.pc.in.fixpath 2014-04-25 19:45:13.000000000 +0200 ++++ libffi-3.1/libffi.pc.in 2014-06-12 12:06:06.000000000 +0200 +@@ -1,11 +1,10 @@ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + libdir=@libdir@ +-toolexeclibdir=@toolexeclibdir@ +-includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include ++includedir=@includedir@ + + Name: @PACKAGE_NAME@ + Description: Library supporting Foreign Function Interfaces + Version: @PACKAGE_VERSION@ +-Libs: -L${toolexeclibdir} -lffi ++Libs: -L${libdir} -lffi + Cflags: -I${includedir} diff --git a/SOURCES/libffi-aarch64-rhbz1174037.patch b/SOURCES/libffi-aarch64-rhbz1174037.patch new file mode 100644 index 0000000..dbf6308 --- /dev/null +++ b/SOURCES/libffi-aarch64-rhbz1174037.patch @@ -0,0 +1,11 @@ +--- libffi-3.1/src/aarch64/ffi.c.orig 2014-04-25 18:45:13.000000000 +0100 ++++ libffi-3.1/src/aarch64/ffi.c 2015-01-15 02:36:56.314906455 +0000 +@@ -728,7 +728,7 @@ + state.ngrn = N_X_ARG_REG; + + memcpy (allocate_to_stack (&state, stack, ty->alignment, +- ty->size), ecif->avalue + i, ty->size); ++ ty->size), ecif->avalue[i], ty->size); + } + break; + diff --git a/SOURCES/libffi-rh1652930.patch b/SOURCES/libffi-rh1652930.patch new file mode 100644 index 0000000..53c522c --- /dev/null +++ b/SOURCES/libffi-rh1652930.patch @@ -0,0 +1,63 @@ +Also flush the code alias mapping when creating a closure. It seems +that this is necessary on some aarch64 implementations. The existing +code only flashes the writable mapping. + +diff -rup a/include/ffi_common.h b/include/ffi_common.h +--- a/include/ffi_common.h 2014-04-25 13:45:13.000000000 -0400 ++++ b/include/ffi_common.h 2019-06-14 14:12:04.387499160 -0400 +@@ -82,6 +82,10 @@ ffi_status ffi_prep_cif_machdep(ffi_cif + ffi_status ffi_prep_cif_machdep_var(ffi_cif *cif, + unsigned int nfixedargs, unsigned int ntotalargs); + ++/* Translate a data pointer to a code pointer. Needed for closures on ++ some targets. */ ++void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN; ++ + /* Extended cif, used in callback from assembly routine */ + typedef struct + { +Only in b/include: ffi_common.h.orig +diff -rup a/src/aarch64/ffi.c b/src/aarch64/ffi.c +--- a/src/aarch64/ffi.c 2019-06-14 14:11:03.485469505 -0400 ++++ b/src/aarch64/ffi.c 2019-06-14 14:12:04.392499162 -0400 +@@ -926,6 +926,10 @@ ffi_prep_closure_loc (ffi_closure* closu + FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_SYSV, codeloc, + cif->aarch64_flags); + ++ /* Also clear the cache on the executable alias mapping. */ ++ unsigned char *code = ffi_data_to_code_pointer (&closure->tramp[0]); ++ ffi_clear_cache (code, code + FFI_TRAMPOLINE_SIZE); ++ + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; +Only in b/src/aarch64: ffi.c.orig +diff -rup a/src/closures.c b/src/closures.c +--- a/src/closures.c 2014-05-11 09:54:19.000000000 -0400 ++++ b/src/closures.c 2019-06-14 14:12:04.396499164 -0400 +@@ -597,6 +597,13 @@ ffi_closure_alloc (size_t size, void **c + return ptr; + } + ++void * ++ffi_data_to_code_pointer (void *data) ++{ ++ msegmentptr seg = segment_holding (gm, data); ++ return add_segment_exec_offset (data, seg); ++} ++ + /* Release a chunk of memory allocated with ffi_closure_alloc. If + FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the + writable or the executable address given. Otherwise, only the +@@ -656,5 +663,11 @@ ffi_closure_free (void *ptr) + free (ptr); + } + ++void * ++ffi_data_to_code_pointer (void *data) ++{ ++ return data; ++} ++ + # endif /* ! FFI_MMAP_EXEC_WRIT */ + #endif /* FFI_CLOSURES */ diff --git a/SPECS/libffi.spec b/SPECS/libffi.spec new file mode 100644 index 0000000..81cea60 --- /dev/null +++ b/SPECS/libffi.spec @@ -0,0 +1,276 @@ +%global multilib_arches %{ix86} ppc ppc64 ppc64p7 s390 s390x x86_64 + +Name: libffi +Version: 3.1 +Release: 20%{?dist} +Summary: A portable foreign function interface library + +Group: System Environment/Libraries +License: MIT +URL: http://sourceware.org/libffi +Source0: ftp://sourceware.org/pub/libffi/libffi-%{version}.tar.gz +Source1: ffi-multilib.h +Source2: ffitarget-multilib.h +Patch0: libffi-3.1-fix-include-path.patch +Patch1: libffi-3.1-fix-exec-stack.patch +Patch2: libffi-aarch64-rhbz1174037.patch +Patch3: libffi-3.1-aarch64-fix-exec-stack.patch +Patch4: libffi-rh1652930.patch +Patch5: libffi-3.1-closures-Create-temporary-file-with-O_TMPFILE-and-O_.patch + +%description +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling convention". +The calling convention is a set of assumptions made by the compiler +about where function arguments will be found on entry to a function. A +calling convention also specifies where the return value for a function +is found. + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call a +given function. `Libffi' can be used in such programs to provide a +bridge from the interpreter program to compiled code. + +The `libffi' library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run time. + +FFI stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +`libffi' library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above `libffi' that handles type conversions for values passed +between the two languages. + + +%package devel +Summary: Development files for %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + + +%prep +%setup -q +%patch0 -p1 -b .fixpath +%patch1 -p1 -b .execstack +%patch2 -p1 -b .aarch64 +%patch3 -p1 -b .aarch64execstack +%patch4 -p1 +%patch5 -p1 + + +%build +export CFLAGS="%{build_cflags} -Wa,--generate-missing-build-notes=yes" +%configure --disable-static +make %{?_smp_mflags} + + +%install +make install DESTDIR=$RPM_BUILD_ROOT +find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';' +rm -f $RPM_BUILD_ROOT%{_infodir}/dir + +# Determine generic arch target name for multilib wrapper +basearch=%{_arch} +%ifarch %{ix86} +basearch=i386 +%endif + +mkdir -p $RPM_BUILD_ROOT%{_includedir} +%ifarch %{multilib_arches} +# Do header file switcheroo to avoid file conflicts on systems where you +# can have both a 32- and 64-bit version of the library, and they each need +# their own correct-but-different versions of the headers to be usable. +for i in ffi ffitarget; do + mv $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}/include/$i.h $RPM_BUILD_ROOT%{_includedir}/$i-${basearch}.h +done +install -m644 %{SOURCE1} $RPM_BUILD_ROOT%{_includedir}/ffi.h +install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_includedir}/ffitarget.h +%else +mv $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}/include/{ffi,ffitarget}.h $RPM_BUILD_ROOT%{_includedir} +%endif +rm -rf $RPM_BUILD_ROOT%{_libdir}/libffi-%{version} + + +%ldconfig_scriptlets + +%post devel +/sbin/install-info --info-dir=%{_infodir} %{_infodir}/libffi.info.gz || : + +%preun devel +if [ $1 = 0 ] ;then + /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/libffi.info.gz || : +fi + + +%files +%{!?_licensedir:%global license %%doc} +%license LICENSE +%doc README +%{_libdir}/*.so.* + +%files devel +%{_libdir}/pkgconfig/*.pc +%{_includedir}/ffi*.h +%{_libdir}/*.so +%{_mandir}/man3/*.gz +%{_infodir}/libffi.info.gz + +%changelog +* Fri Jun 14 2019 DJ Delorie - 3.1-20 +- closures: Create temporary file with O_TMPFILE and O_CLOEXEC (#1720600) + +* Fri Jun 14 2019 Florian Weimer - 3.1-19 +- aarch64: Flush code alias mapping after creating closure (#1652930) + +* Tue Nov 27 2018 Severin Gehwolf - 3.1-18 +- Compile with -Wa,--generate-missing-build-notes=yes + +* Fri Aug 10 2018 Severin Gehwolf - 3.1-17 +- Fix declared license: BSD => MIT. + +* Wed Feb 07 2018 Fedora Release Engineering - 3.1-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 3.1-15 +- Switch to %%ldconfig_scriptlets + +* Thu Aug 03 2017 Fedora Release Engineering - 3.1-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 3.1-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 5 2017 Jens Petersen - 3.1-12 +- protect install-info in the rpm scriptlets + https://fedoraproject.org/wiki/Packaging:Scriptlets#Texinfo + +* Tue Jun 20 2017 Anthony Green - 3.1-11 +- fix exec stack problem on aarch64 build + +* Fri Feb 10 2017 Fedora Release Engineering - 3.1-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 3.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 3.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Jan 15 2015 Peter Robinson 3.1-7 +- Add patch to fix issues on aarch64 (rhbz 1174037) + +* Sun Aug 17 2014 Fedora Release Engineering - 3.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jul 17 2014 Tom Callaway - 3.1-5 +- fix license handling + +* Sun Jun 29 2014 Anthony Green - 3.1-4 +- fix exec stack problem on 32-bit build + +* Thu Jun 12 2014 Dan Horák - 3.1-3 +- fix header path in pkgconfig file + +* Sat Jun 07 2014 Fedora Release Engineering - 3.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon May 19 2014 Anthony Green - 3.1-1 +- fix non-multiarch builds (arm). + +* Mon May 19 2014 Anthony Green - 3.1-0 +- update to 3.1. + +* Sat Aug 03 2013 Fedora Release Engineering - 3.0.13-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue May 28 2013 Tom Callaway - 3.0.13-4 +- fix typos in wrapper headers + +* Mon May 27 2013 Tom Callaway - 3.0.13-3 +- make header files multilib safe + +* Sat May 25 2013 Tom Callaway - 3.0.13-2 +- fix incorrect header pathing (and .pc file) + +* Wed Mar 20 2013 Anthony Green - 3.0.13-1 +- update to 3.0.13 + +* Thu Feb 14 2013 Fedora Release Engineering - 3.0.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Jan 14 2013 Dennis Gilmore - 3.0.11-1 +- update to 3.0.11 + +* Fri Nov 02 2012 Deepak Bhole - 3.0.10-4 +- Fixed source location + +* Fri Aug 10 2012 Dennis Gilmore - 3.0.10-3 +- drop back to 3.0.10, 3.0.11 was never pushed anywhere as the soname bump broke buildroots +- as 3.0.11 never went out no epoch needed. + +* Thu Jul 19 2012 Fedora Release Engineering - 3.0.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Apr 13 2012 Anthony Green - 3.0.11-1 +- Upgrade to 3.0.11. + +* Fri Jan 13 2012 Fedora Release Engineering - 3.0.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Aug 23 2011 Anthony Green - 3.0.10-1 +- Upgrade to 3.0.10. + +* Fri Mar 18 2011 Dan Horák - 3.0.9-3 +- added patch for being careful when defining relatively generic symbols + +* Mon Feb 07 2011 Fedora Release Engineering - 3.0.9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Dec 29 2009 Anthony Green - 3.0.9-1 +- Upgrade + +* Fri Jul 24 2009 Fedora Release Engineering - 3.0.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Feb 25 2009 Fedora Release Engineering - 3.0.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Tue Jul 08 2008 Anthony Green 3.0.5-1 +- Upgrade to 3.0.5 + +* Fri Feb 15 2008 Anthony Green 3.0.1-1 +- Upgrade to 3.0.1 + +* Fri Feb 15 2008 Anthony Green 2.99.9-1 +- Upgrade to 2.99.9 +- Require pkgconfig for the devel package. +- Update summary. + +* Fri Feb 15 2008 Anthony Green 2.99.8-1 +- Upgrade to 2.99.8 + +* Thu Feb 14 2008 Anthony Green 2.99.7-1 +- Upgrade to 2.99.7 + +* Thu Feb 14 2008 Anthony Green 2.99.6-1 +- Upgrade to 2.99.6 + +* Thu Feb 14 2008 Anthony Green 2.99.4-1 +- Upgrade to 2.99.4 + +* Thu Feb 14 2008 Anthony Green 2.99.3-1 +- Upgrade to 2.99.3 + +* Thu Feb 14 2008 Anthony Green 2.99.2-1 +- Created.