2005-07-07  Release Manager

	* GCC 4.0.1 released.

2005-04-20  Release Manager

	* GCC 4.0.0 released.

2005-03-03  David Ayers  <d.ayers@inode.at>

	* objc/hash.h (OBJC_IGNORE_DEPRECATED_API): Update deprecated
	version reference.  Correct typo.

2005-03-02  David Ayers  <d.ayers@inode.at>

	PR libobjc/19024
	* Makefile.in (OBJS): Add hash_compat.lo.
	(OBJS_GC): Add hash_compat_gc.lo.
	(hash_compat_gc.lo): New target and rule.
	* objc/hash.h (hash_new, hash_delete, hash_add, hash_remove)
	(hash_next, hash_value_for_key, hash_is_key_in_hash)
	(hash_ptr, hash_string, compare_ptrs, compare_strings): Prefix
	with objc_.  Add deprecated non prefixed inlined versions.
	(OBJC_IGNORE_DEPRECATED_API): New macro to hide deprecated
	declarations.
	* hash.c (hash_new, hash_delete, hash_add, hash_remove, hash_next)
	(hash_value_for_key, hash_is_key_in_hash): Prefix with objc_ and
	update callers.
	* hash_compat.c: New file.
	* archive.c: Update callers.
	* init.c: Likewise.
	* selector.c: Likewise.
	* libobjc.def: Add objc_ versions of hash functions.

2004-12-20  Andrew Pinski  <pinskia@physics.uc.edu>

	PR libobjc/12035
	* gc.c: Remove definition of LOGWL, modWORDSZ, and divWORDSZ since
	they are not used.
	Include limits.h and stdlib.h.
	Define BITS_PER_WORD.

2004-12-12  Alexander Malmberg  <alexander@malmberg.org>

	* selector.c (__objc_init_selector_tables): Add missing void to
	definition.

2004-12-02  Richard Sandiford  <rsandifo@redhat.com>

	* configure.ac: Use TL_AC_GCC_VERSION to set gcc_version.
	* configure, aclocal.m4: Regenerate.

2004-11-29  Kelley Cook  <kcook@gcc.gnu.org>

	* configure: Regenerate for libtool change.

2004-11-25  Kelley Cook  <kcook@gcc.gnu.org>

	* configure: Regenerate for libtool reversion.

2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>

	* configure: Regenerate for libtool change.

2004-11-24  Kelley Cook  <kcook@gcc.gnu.org>

	* aclocal.m4, config.h.in: Regenerate.

2004-10-08  Mike Stump  <mrs@apple.com>
            Andrew Pinski  <pinskia@physics.uc.edu>

	* aclocal.m4: Rename to ...
	* acinclude.m4: here and also use m4_include instead of sinclude.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* configure.ac: Add AM_MAINTAINER_MODE and AM_PROG_CC_C_O.
	* Makefile.in (configure): Add @MAINT@ infront of configure.ac

2004-10-08  Andrew Pinski  <pinskia@physics.uc.edu>

	* archive.c: Fix all the warnings about passing unsigned char*
	to char* and the other way too.

2004-09-16  Andrew Pinski  <pinskia@physics.uc.edu>

	PR libobjc/16448
	* exception.c: Include config.h
	(objc_exception_throw): Change _GLIBCXX_SJLJ_EXCEPTIONS to
	SJLJ_EXCEPTIONS.
	* configure.ac: Find out what exception handling code we use.
	* configure: Regenerate.
	* config.h.in: New file, regenerate.

2004-09-16  Andrew Pinski  <apinski@apple.com>

	* encoding.c (ALTIVEC_VECTOR_MODE): Define a bogus macro.

2004-08-28  Nathanael Nerode  <neroden@gcc.gnu.org>

	* configure.ac: Switch from _GCC_TOPLEV_NONCANONICAL_TARGET to
	ACX_NONCANONICAL_TARGET.
	* configure: Regenerate.

2004-08-13  Ziemowit Laski  <zlaski@apple.com>

	* objc/sarray.h: Hoist include of assert.h near the top of file,
	and mark the remainder of the file 'extern "C"'.

2004-08-13  Andrew Pinski  <pinskia@physics.uc.edu>

	* objc/Object.h: Move includes out of extern "C" blocks.
	* objc/encoding.h: Likewise.
	* objc/hash.h: Likewise.
	* objc/objc-api.h: Likewise.
	* objc/runtime.h: Likewise.
	* objc/sarray.h: Likewise.
	* objc/typedstream.h: Likewise.

2004-08-12  Ziemowit Laski  <zlaski@apple.com>

	* objc/NXConstStr.h: Update copyright date; bracket with
	'extern "C"' for C++ use; make include syntax consistent
	by using <...> instead of "..."; hoist <objc/...> includes
	above the 'extern "C"' block.
	* objc/Object.h: Likewise.
	* objc/Protocol.h: Likewise.
	* objc/encoding.h: Likewise.
	* objc/hash.h: Likewise.
	* objc/runtime.h: Likewise.
	* objc/sarray.h: Likewise.
	* objc/thr.h: Likewise.
	* objc/typedstream.h: Likewise.
	* objc/objc-api.h: Add 'extern "C"' block for C++ use.
	(objc_static_instances): For C++ case, do away with
	zero-sized array.
	(objc_method): Hoist definition to file scope.
	(_objc_load_callback, _objc_object_alloc, class_get_class_method,
	class_get_instance_method, class_create_instance, 
	class_get_class_name, class_get_instance_size,
	class_get_meta_class, class_get_super_class, class_get_version,
	class_is_class, class_is_meta_class, class_set_version,
	class_get_gc_object_type, class_ivar_set_gcinvisible,
	get_imp): Rename 'class' parameter to '_class'.
	* objc/objc-list.h: Add 'extern "C"' block for C++ use.
	* objc/objc.h: Update copyright date.
	(arglist_t): Provide a union tag.

2004-07-22  Andrew Pinski  <pinskia@physics.uc.edu>

	* thr.c (__objc_thread_detach_function): Do not mark as volatile
	but instead use the attribute noreturn.

2004-06-28  Zack Weinberg  <zack@codesourcery.com>

	* encoding.c: Rename target_flags with a #define to avoid
	conflict with a prior declaration.

2004-06-24  Andrew Pinski  <apinski@apple.com>

	* objc/encoding.h: Wrap the functions with extern "C" for C++
	mode.
	* objc/hash.h: Likewise.
	* objc/objc-api.h: Likewise.
	* objc/objc-list.h: Likewise.
	* objc/runtime.h: Likewise.
	* objc/sarray.h: Likewise.
	* objc/thr.h: Likewise.
	* objc/typedstream.h: Likewise.


2004-06-21  Nick Clifton  <nickc@redhat.com>

	* encoding.c (BITS_PER_UNIT): Define if a definition is not
	provided.

2004-06-20  Alexander Malmberg  <alexander@malmberg.org>

	* Makefile.in (exception.lo): Remove $(OBJC_GCFLAGS).
	(exception_gc.lo): New.
	(OBJS_GC): Add exception_gc.lo.

2004-06-17  Richard Henderson  <rth@redhat.com>

	* exception.c: New file.
	* Makefile.in (exception.lo): New.
	(OBJS): Add it.

2004-06-14  Andrew Pinski  <pinskia@physics.uc.edu>

	* linking.m (_objcInit): New empty function
	for Darwin only.

2004-06-11  Andrew Pinski  <pinskia@physics.uc.edu>

	* configure.ac: Support --enable-shared=libobjc.
	* configure: Regenerate.

	PR libobjc/15901
	* configure.ac: Do not disable shared by default.
	* configure: Regenerate.

2004-06-03  Nicola Pero  <n.pero@mi.flashnet.it>

	* Protocol.m ([-isEqual:]): Small optimizations returning
	immediately if the argument is equal to self, and accessing
	the argument's name directly if it's a protocol.

2004-06-03  David Ayers  <d.ayers@inode.at>

	* Protocol.m ([-isEqual:]): Test the class of the argument.

2004-05-25  Andrew Pinski  <pinskia@physics.uc.edu>

	* configure.ac (includedir): Rename to ...
	(includedirname).
	* Makefile.in: s/includedir/includedirname/.

	PR target/11572
	* configure.ac (includedir): Set to "include"
	except for Darwin.
	(libext) Set to empty except for Darwin.
	* configure: Regenerate
	* Makefile.in: s/libobjc.la/libobjc$(libext).la/g.
	s/include/$(includedir)/g.

2004-05-25  Daniel Jacobowitz  <drow@false.org>

	* Makefile.in: Add .NOEXPORT.

2004-05-25  Andrew Pinski  <pinskia@physics.uc.edu>

	Merge from the libobjc-branch
	2004-02-09  Andrew Pinski  <pinskia@physics.uc.edu>

		* Makefile.in (OBJC_H): Change objc-deps.h to objc-decls.h.

	2004-02-03  Andrew Pinski  <pinskia@physics.uc.edu>

		* Makefile.in (OBJC_H): Add objc-deps.h.

	2004-01-27  Nicola Pero  <n.pero@mi.flashnet.it>

		* Protocol.m ([-conformsTo:]): If the argument is nil, return NO.
		([-hash], [-isEqual:]): New methods.

	2004-01-27  Richard Frith-Macdonald <rfm@gnu.org>

		* sarray.c (sarray_free): Add a better comment.

	2004-01-27  Adam Fedor  <fedor@gnu.org>

		* hash.c (hash_add): Cast cachep to int.
		* selector.c (__sel_register_typed_name): Cast
		soffset_decode to int.

	2004-01-27  Alexander Malmberg  <alexander@malmberg.org>

		* selector.c: Rename register_selectors_from_list to
		__objc_register_selectors_from_list. Update caller.
		(__objc_register_selectors_from_list): Lock __objc_runtime_mutex
		while registering selectors. Use __sel_register_typed_name instead
		of sel_register_typed_name. Check for NULL method_name:s.
		(pool_alloc_selector): New function.
		(__sel_register_typed_name): Use pool_alloc_selector to allocate
		selector structures.
		* sendmsg.c (class_add_method_list): Use
		__objc_register_selectors_from_list.
		* objc/runtime.h: Add __objc_register_selectors_from_list.

	2004-01-25  Adam Fedor  <fedor@gnu.org>
		    Nicola Pero  <n.pero@mi.flashnet.it>
		    Andrew Pinski  <pinskia@physics.uc.edu>

		* objc/objc-decls.h: New file.
		* objc/objc-api.h (_objc_lookup_class): Mark as export.
		(_objc_load_callback): Likewise.
		(_objc_object_alloc): Likewise.
		(_objc_object_copy): Likewise.
		(_objc_object_dispose): Likewise.

	2004-01-25  Andrew Pinski  <pinskia@physics.uc.edu>

		* archive.c: s/__inline__/inline
		* sendmsg.c: Likewise.

		* encoding.c: Remove FIXME about the warning
		about unused variable.
		* sendmsg.c: Add a FIXME comment saying that
		this should be using libffi.

		* Makefile.in (LIBTOOL): Use @LIBTOOL@ now as it works.


2004-05-13  Andrew Pinski  <pinskia@physics.uc.edu>

	* archive.c (objc_read_class): Initialize class_name.
	(objc_read_selector): Initialize selector_name.

2004-05-09  Richard Sandiford  <rsandifo@redhat.com>

	* Makefile.in (toolexecdir): Remove trailing space.

2004-04-15  Nathanael Nerode  <neroden@gcc.gnu.org>

	PR libobjc/14948
	* configure.ac: De-precious CC so multilibs work.
	* configure: Regenerate.

2004-04-14  Nathanael Nerode  <neroden@gcc.gnu.org>

	* configure.ac: Restore toolexecdir.
	* Makefile.in: Restore toolexecdir.
	* configure: Regenerate.

2004-04-09  Nathanael Nerode  <neroden@gcc.gnu.org>

	* configure.ac: Remove (unused) glibcpp_prefixdir.
	* configure: Regenerate.

	* configure.in: Rename to configure.ac.
	* Makefile.in: Update to match.

	* Makefile.in: Remove toolexecdir, glibcpp_toolexecdir (unused).
	Replace glibcpp_toolexeclibdir with toolexeclibdir.
	* configure.in: Remove glibcpp_toolexecdir (unused).
	Replace glibcpp_toolexeclibdir with toolexeclibdir.  Don't generate
	config.h or stamp-h (unused).  Move one comment to the right place.
	* configure: Regenerate.
	* config.h.in: Remove (unused).

	* config.h.in: Regenerate with autoheader.

	* Makefile.in: Remove (unused) gcc_version_trigger.
	* configure.in: Remove (unused) glibcpp_builddir.  Don't AC_SUBST
	gcc_version_trigger.
	* configure: Regenerate.

	* configure.in: Switch to modern style for AC_INIT, AC_OUTPUT.
	Sort file into sections.  Remove dnl where appropriate.  Fix
	other style issues.
	* configure: Regenerate.

	* configure.in: Replace old AC_PROG_CC hack with new one.
	Define toplevel_srcdir in terms of srcdir, not top_srcdir (there
	are no subdirectory output files, so this is fine).  Change prereq
	to autoconf 2.59.
	* aclocal.m4: Include ../config/no-executables.m4.
	* configure: Regenerate with autoconf 2.59.

	* configure.in: Improve comments on gthread_cflags.  Improve m4
	quotation, and replace 'if test' with 'case', for --enable-objc-gc.
	* configure: Regenerate.

	* configure.in: Move PACKAGE and VERSION settings up top.  Remove
	unused call to AC_PROG_LN_S.  Default RANLIB to ':'.  Remove
	redundant checks for values of RANLIB, AR, INSTALL.
	* configure: Regenerate.

	* configure.in: Clean up handling of
	--enable-version-specific-runtime-libs and related variables;
	replace 'if test' with 'case' where reasonable.  Fix comments.
	Remove useless libstdcxx_interface.
	* configure: Regenerate.

	* configure.in: Use _GCC_TOPLEV_NONCANONICAL_TARGET.
	Replace uses of target_alias with target_noncanonical.
	* aclocal.m4: Include ../config/acx.m4.
	* configure: Regenerate.
	* Makefile.in: Replace uses of target_alias with target_noncanonical.
	Fix copyright statement.

	* configure.in: Hand-inline bulky, confusing macros from
	aclocal.m4.  Replace references to "GNU Objective C" with "GCC".
	Update copyright notice.  Remove stuff for automake, which isn't
	used in this directory.  Remove emacs local variables.
	* aclocal.m4: Remove hand-inlined macros.  Update copyright notice.
	* configure: Regenerate.

2004-03-16  Manfred Hollstein  <mh@suse.com>

	* Makefile.in, configure.in, configure: Update copyright years.

2004-03-15  Manfred Hollstein  <mh@suse.com>

	* Makefile.in (LIBOBJC_VERSION, LIBOBJC_GC_VERSION): Use
	definition from configure.in.
	* configure.in (PACKAGE): Add definition.
	(VERSION): Add definition; substitute it in output files.
	* configure: Re-generate.

2004-03-05  Ziemowit Laski  <zlaski@apple.com>

	* objc/hash.h (hash_string, compare_strings):
	Add type-casts to make Objective-C++ happy.
	* objc/typedstream.h (objc_get_stream_class_version):
	Rename parameter from 'class' to 'class_name' to make
	Objective-C++ happy.

2004-03-01  Michael Matz  <matz@suse.de>

	* Makefile.in (ALL_CFLAGS): Add -fno-strict-aliasing.

2004-02-06  Ziemowit Laski  <zlaski@apple.com>

	* objc/objc-api.h (objc_super): The 'class' field shall
	be named 'super_class' #ifdef __cplusplus.

2004-01-17  Andrew Pinski  <pinskia@physics.uc.edu>

	PR target/10781
	* encoding.c (rs6000_special_round_type_align): Define.

2004-01-14  Adam Fedor  <fedor@gnu.org>

	PR libobjc/12155
	* selector.c (__objc_register_instance_methods_to_class): Free
	new_list if not used.

2004-01-09  Andrew Ruder  <aeruder@ksu.edu>

	PR libobjc/11904
	* sarray.c (sarray_free): Free array->is_copy_of latter.

2003-12-01  Zack Weinberg  <zack@codesourcery.com>

	PR 11433
	* Protocol.m (descriptionForInstanceMethod): Don't dereference
	instance_methods if it's NULL.
	(descriptionForClassMethod): Likewise for class_methods.

2003-10-24  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* Makefile.in (runtime-info.h): Remove -Wp.

2003-10-21  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* Makefile.in (CC1OBJ): Remove.
	(runtime-info.h): Invoke $(CC) so all MULTIFLAGS are handled
	correctly.
	Use .m extension for temporary file.
	Remove assembler temp file.

2003-10-20  Joseph S. Myers  <jsm@polyomino.org.uk>

	* objc/hash.h (hash_string): Don't use a cast as an lvalue.

2003-10-17  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* Makefile.in (runtime-info.h): Use MULTIFLAGS.

2003-09-09  Alan Modra  <amodra@bigpond.net.au>

	* configure: Regenerate.

2003-08-27  Alexander Malmberg  <alexander@malmberg.org>

	* Makefile.in, aclocal.m4: Update to $(libdir)/gcc/ instead of
	(libdir)/gcc-lib/ when installing.
	* configure: Regenerate.

Thu Jul 10 10:27:43 2003  Nicola Pero  <n.pero@mi.flashnet.it>

	libobjc/9969
	* sendmsg.c (get_imp): Fixed rare threading problem.
	(__objc_responds_to): Similar fixes.
	(objc_msg_lookup): Similar fixes.
	(__objc_init_install_dtable): Lock the runtime before checking if the
	table is installed.

2003-05-23  Nathanael Nerode  <neroden@gcc.gnu.org>

	* hash.c, init.c, libobjc.def, libobjc_entry.c, linking.m,
	makefile.dos, misc.c, nil_method.c, objects.c, sarray.c,
	selector.c, sendmsg.c, thr-dce.c, thr-decosf1.c, thr-irix.c,
	thr-mach.c, thr-objc.c, thr-os2.c, thr-posix.c, thr-pthreads.c,
	thr-rtems.c, thr-single.c, thr-solaris.c, thr-vxworks.c,
	thr-win32.c, thr.c: Replace "GNU CC" with "GCC".
	* Makefile.in, NXConstStr.m, Object.m, Protocol.m, archive.c,
	class.c, encoding.c, gc.c, objc/NXConstStr.h, objc/Object.h,
	objc/Protocol.h, objc/encoding.h, objc/hash.h, objc/objc-api.h,
	objc/objc-list.h, objc/objc.h, ocjc/runtime.h, objc/sarray.h,
	objc/thr.h, objc/typedstream.h: Replace "GNU CC" with "GCC".

Tue May 13 14:56:03 2003  Richard Frith-Macdonald <rfm@gnu.org>
			  Nicola Pero  <n.pero@mi.flashnet.it>

	libobjc/10742
	* init.c (class_superclass_of_class): New function.
	(create_tree_of_subclasses_inherited_from): Use it.
	(__objc_tree_insert_class): Likewise.
	(class_is_subclass_of_class): Likewise.

2003-04-11  David Chad  <davidc@freebsd.org>
	    Loren J. Rittle  <ljrittle@acm.org>

	libobjc/8562
	* objc/hash.h (hash_string): Constify correctly.
	(compare_ptrs): Use direct compare.
	* objc/objc-list.h (list_nth): Rename index to indx to avoid shadow.
	* objc/sarray.h: Global rename index to indx to avoid shadow.

2003-03-12  Andreas Schwab  <schwab@suse.de>

	* aclocal.m4 (GLIBCPP_EXPORT_INSTALL_INFO): Avoid trailing /. in
	glibcpp_toolexeclibdir.
	* configure: Rebuilt.

2003-02-20  Alexandre Oliva  <aoliva@redhat.com>

	* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
	config.status.
	* configure: Rebuilt.

2003-01-27  Alexandre Oliva  <aoliva@redhat.com>

	* aclocal.m4 (glibcpp_toolexeclibdir): Instead of
	$(MULTISUBDIR), use `$CC -print-multi-os-directory`, unless
	version_specific_libs is enabled.
	* configure: Rebuilt.

2003-01-09  Christian Cornelssen  <ccorn@cs.tu-berlin.de>

	* Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR.
	(install-libs, install-headers): Prepend $(DESTDIR) to
	destination paths in all (un)installation commands.

2002-12-02  Zack Weinberg  <zack@codesourcery.com>

	* thr-objc.c: Include coretypes.h and tm.h.

2002-12-01  Zack Weinberg  <zack@codesourcery.com>

	* encoding.c, sendmsg.c: Include coretypes.h and tm.h.

2002-11-26  Nathanael Nerode  <neroden@gcc.gnu.org>

	* configure.in: Remove skip-this-dir support.
	* configure: Regenerate.

2002-09-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (all): Fix multilib parallel build.

Thu Sep 12 12:44:37 2002  Nicola Pero  <n.pero@mi.flashnet.it>

	* sendmsg.c (nil_method): Declare not to take a variable number of
	args.
	(objc_msg_lookup): Cast nil_method to IMP before returning it.
	(objc_msg_lookup_super): The same.

2002-09-10  Jan Hubicka  <jh@suse.cz>

	* nil_method.c (nil_method): No longer defined with variable
	arguments.

2002-07-02  Rodney Brown  <rbrown64@csc.com.au>

	* objc/encoding.h: Fix formatting.
	* objc/hash.h: Likewise.
	* objc/objc-api.h: Likewise.
	* objc/runtime.h: Likewise.
	* objc/thr.h: Likewise.
	* archive.c: Likewise.
	* class.c: Likewise.
	* encoding.c: Likewise.
	* gc.c: Likewise.
	* hash.c: Likewise.
	* init.c: Likewise.
	* misc.c: Likewise.
	* nil_method.c: Likewise.
	* objects.c: Likewise.
	* sarray.c: Likewise.
	* selector.c: Likewise.
	* sendmsg.c: Likewise.
	* thr-mach.c: Likewise.
	* thr.c: Likewise.

2002-06-25  DJ Delorie  <dj@redhat.com>

	* aclocal.m4 (GLIBCPP_CONFIGURE): Split out
	GLIBCPP_TOPREL_CONFIGURE.
	* configure.in: Call it before AC_CANONICAL_SYSTEM.
	* configure: Regenerate.

2002-06-21  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Object.m (forward, read, write): Fix unused parameter warnings.
	* encoding.c: Include <stdlib.h>.
	(target_flags): Mark with attribute unused.
	(atoi): Delete.
	* runtime.h (__objc_selector_max_index): Change to unsigned int.
	(__objc_generate_gc_type_description): Prototype.
	* selector.c (__objc_selector_max_index): Change to unsigned int.

Mon Jun 17 18:37:42 2002  Nicola Pero  <n.pero@mi.flashnet.it>

	* sendmsg.c (__objc_get_forward_imp): Fix warning by making sure
	we always have a return value: if __objc_msg_forward does not
	supply a forwarding implementation, return the default
	__builtin_apply based one.

2002-06-15  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Object.m: Fix signed/unsigned warning.
	* Protocol.m: Likewise.
	* archive.c: Always include stdlib.h.
	(objc_read_short, objc_read_unsigned_short, objc_read_int,
	objc_read_long, __objc_read_nbyte_uint, __objc_read_nbyte_ulong):
	Fix signed/unsigned warning.
	(objc_write_type, objc_read_type, objc_write_types,
	objc_read_types): Ensure ctype 8-bit safety.
	(__objc_no_write, __objc_no_read): Mark unused parameters.
	* class.c (class_table_setup): Specify void arg.
	* encoding.c (atoi, objc_sizeof_type, objc_alignof_type,
	objc_skip_typespec, objc_skip_offset,
	objc_layout_structure_next_member): Ensure ctype 8-bit safety.
	(objc_layout_structure_next_member): Ensure variables are
	initialized.
	* gc.c (__objc_generate_gc_type_description,
	class_ivar_set_gcinvisible): Mark unused parameters.
	* init.c (__objc_send_load, __objc_destroy_class_tree_node): Mark
	unused parameters.
	(__objc_init_protocols) Fix signed/unsigned warning.
	* nil_method.c (nil_method): Mark unused parameters.
	* thr.h (objc_thread_callback): Specify void arg.
	* sarray.c (sarray_new, sarray_realloc, sarray_free): Fix
	signed/unsigned warning.
	(sarray_free): Fix formatting.
	* selector.c (sel_types_match): Ensure ctype 8-bit safety.
	* sendmsg.c (__objc_init_install_dtable) Mark unused parameters.

2002-06-09  Andreas Jaeger  <aj@suse.de>

	* encoding.c (objc_layout_structure_next_member): Remove unused
	variable.

2002-05-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (SHELL): Set to @SHELL@.
	(WARN_CFLAGS): New.
	(ALL_CFLAGS): Add $(WARN_CFLAGS).

2002-05-16  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* aclocal.m4: Allow for PWDCMD to override hardcoded pwd.
	* configure: Regenerate.

2002-05-08  Alexandre Oliva  <aoliva@redhat.com>

	* configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
	script entry, and set LD to it when configuring multilibs.
	* configure: Rebuilt.

2002-04-19  David O'Brien  <obrien@FreeBSD.org>

	* encoding.c (MAX, MIN, ROUNDING): #undef before defining.

2002-04-09  Hans-Peter Nilsson  <hp@bitrange.com>

	PR objc/6107
	* objc/objc-api.h (struct objc_protocol_list): Change type of
	member count from int to size_t.

2002-02-11  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	PR libobjc/4039
	* aclocal.m4: Replace with version copied from libstdc++-v3.
	* configure.in: Update for changes to aclocal and Makefile.
	* configure: Regenerate.
	* Makefile.in: Correct install of multilibs and shared libs, use
	INSTALL_DATA for include files.

Mon Dec 17 17:02:12 2001  Nicola Pero  <nicola@brainstorm.co.uk>

	* init.c (__objc_exec_class): Fixed bug in the loop on unclaimed
	categories - when an unclaimed category was found, the loop was
	doing two steps forward instead of one, so that in certain cases
	it was failing to properly load all the categories.  (Reported
	with fix by Alexander Malmberg <alexander@malmberg.org>).

2001-11-14  Aldy Hernandez  <aldyh@redhat.com>

	* encoding.c: Add target_flags.

2001-11-07  Aldy Hernandez  <aldyh@redhat.com>

	 * objc/objc-api.h (_C_VECTOR): New.

	 * encoding.c (VECTOR_TYPE): New.

Mon Oct 29 21:29:21 2001  Nicola Pero  <n.pero@mi.flashnet.it>

	* class.c: Rewritten the class table to use optimized, lock-free
	lookup.  This more than doubles the speed of class method
	invocations.  (class_table_setup), (class_table_insert),
	(class_table_replace), (class_table_get_safe),
	(class_table_next), (class_table_print),
	(class_table_print_histogram): New functions.
	(__objc_init_class_tables): Use class_table_setup.
	(__objc_add_class_to_hash): Use class_table_get_safe and
	class_table_insert.  (objc_lookup_class), (objc_get_class): Do not
	assert the existence of the table; do not lock the runtime; use
	class_table_get_safe.  (objc_next_class): Use class_table_next.
	(__objc_resolve_class_links): Use class_table_next.
	(class_pose_as): Use class_table_replace.

2001-09-10  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* gc.c: Removed the DEBUG declaration.

Wed Jul 18 12:48:56 2001  Nicola Pero  <n.pero@mi.flashnet.it>

	* thr.c (objc_mutex_lock): Invoke __objc_thread_id directly,
	rather than through objc_thread_id, to save a function call.
	(objc_mutex_trylock, objc_mutex_unlock, objc_condition_wait):
	Ditto.

Mon Jul 16 12:15:00 2001  Nicola Pero  <n.pero@mi.flashnet.it>

	* objc/objc-api.h (object_is_class): Fixed - buggy code was trying
	to cast an id to a Class, which can not be done.  Make the check
	by using CLS_ISMETA on the class pointer instead.
	(object_is_meta_class): Similar fix.

2001-06-09  Alexandre Oliva  <aoliva@redhat.com>, Stephen L Moshier  <moshier@mediaone.net>

	* configure.in (AC_EXEEXT): Work around in case it expands to
	nothing, as in autoconf 2.50.
	* acinclude.m4: Likewise.
	* configure: Rebuilt.

2001-06-08  Nicola Pero  <n.pero@mi.flashnet.it>

	* THREADS: Explain that when we compile libobjc inside GCC, we
	always use thr-objc.c as a backend, which uses GCC's thread code.

2001-06-06  Richard Frith-Macdonald  <rrfm@gnu.org>

	* init.c (__objc_send_message_in_list): When setting a new entry
	in __objc_load_methods use the method IMP as key, but check to see
	if the method is in the hashtable by looking at the IMP also.
	Also ... call the method after adding it to the hashtable rather
	than before ... thus preventing an obscure possibility of infinite
	recursion if a +load method itself loads a subclass.

2001-05-25  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* init.c (__objc_send_message_in_list): When setting a new entry
	in __objc_load_methods use the method name as key, not the method
	IMP (reported by Richard Frith-Macdonald <richard@brainstorm.co.uk>).

2001-05-09  Joseph S. Myers  <jsm28@cam.ac.uk>

	* objc-features.texi: Move to ../gcc/objc.texi.
	* fdl.texi: Remove.
	* Makefile.in: Don't generate documentation from
	objc-features.texi.

2001-05-01  Mark Mitchell  <mark@codesourcery.com>

	* fdl.texi: New file.
	* objc-features.texi: Simplify.
	* Makefile.in: Adjust accordingly.

2001-04-30  Mark Mitchell  <mark@codesourcery.com>

	* objc-features.texi: Use the GFDL.

Wed Mar 21 04:44:58 EST 2001  John Wehle  (john@feith.com)

	* encoding.c (REAL_TYPE): Define.

2001-03-19  David Edelsohn  <edelsohn@gnu.org>

	* encoding.c (TYPE_MODE): Define.

2001-03-14  Nicola Pero  <n.pero@mi.flashnet.it>

	* thr.c (objc_thread_add): New function.
	(objc_thread_remove): Ditto.
	* objc/thr.h: Declare them.
	* libobjc.def: Mention them.

2001-02-28  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* objc-features.texi: Document the @compatibility_alias compiler
	directive (description from Nicola Pero <n.pero@mi.flashnet.it>).

Fri Feb 23 18:12:00 2001  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* sendmsg.c (__objc_forward): Delete strlen() declaration.

2001-02-08  Geoffrey Keating  <geoffk@redhat.com>

	* configure.in: Don't run AC_PROG_CC_WORKS or AC_EXEEXT, because
	we're not interested in the result and they might fail.
	* configure: Regenerated.

2001-01-12  Joseph S. Myers  <jsm28@cam.ac.uk>

	* objc-features.texi: Use @email.

2001-01-12  Joseph S. Myers  <jsm28@cam.ac.uk>

	* sendmsg.c (__objc_print_dtable_stats): Don't use #ifdef inside
	printf.

2000-01-11  Richard Earnshaw  <rearnsha@arm.com>

	* encoding.c (STRUCTURE_SIZE_BOUNDARY): Redefine in a way that
	determines the value dynamically.

Wed Jan  3 00:49:10 2001  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* sendmsg.c: Added __objc_msg_forward, a hook that allows external
	libraries to provide a function that returns the real forwarding
	function. This can alleviate problems __builtin_apply() and
	friends have on various platforms. (Solution suggested by Helge
	Hess.)

	* objc/objc-api.h: Define __objc_msg_forward.

	* sendmsg.c: Define gen_rtx_REG.

2000-12-06      Ralf Corsepius <corsepiu@faw.uni-ulm.de>

	* thr-rtems.c: New file. Stub to compile.

2000-09-06  Alexandre Oliva  <aoliva@redhat.com>

	* configure: Rebuilt with new libtool.m4.

Tue Aug 15 00:38:56 2000  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* configure.in: Create a config.h file. Check for <sched.h>.
	* configure: Regenerate.

	* config.h.in: Check for <sched.h>.

2000-08-14  Zack Weinberg  <zack@wolery.cumb.org>

	* configure: Regenerate after change to ../libtool.m4.

2000-08-14  Andreas Schwab  <schwab@suse.de>

	* objc-features.texi (Top): Move @menu at end of node.

2000-08-11  Manfred Hollstein  <manfredh@redhat.com>

	* objc-features.texi: Move @node Top before @menu.

Sun Aug  6 23:27:49 2000  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* objc-features.texi: Documented the new -fconstant-string-class
	option.

Sun Aug  6 22:51:16 2000  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* thr-posix.c: Integrated Chris Ball's <cball@fmco.com> changes to
	improve the Posix thread support for Objective-C.

2000-08-04  Zack Weinberg  <zack@wolery.cumb.org>

	* aclocal.m4: Replace copy of ../libtool.m4 with
	sinclude(../libtool.m4).

Fri Jul 28 08:58:02 2000  Nicola Pero  <nicola@brainstorm.co.uk>

	* configure.in: Added libtool support; build shared libraries
	if --enable-shared was passed on command line.
	* Makefile.in: Modified most compilation commands to use libtool.
	* aclocal.m4: New symbolic link to the ../libtool.m4, from the
	libtool distribution.

Sat Jul 29 00:10:21 2000  Ovidiu Predescu  <ovidiu@cup.hp.com>

	* sarray.c, Object.m: Removed the explicit prototypes for strlen
	and memcpy on 64-bit platforms (Suggested by Rodney Brown
	<rdb@cup.hp.com>).

2000-05-12  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (GTHREAD_FLAGS): New.
	(ALL_CFLAGS): Add $(GTHREAD_FLAGS).
	(OBJC_THREAD_FILE): Changed to thr-objc.

	* configure.in (GTHREAD_FLAGS): New, check and replace it for
	Makefile.
	(OBJC_THREAD_FILE): Removed.

	* thr-objc.c: New.

2000-07-13  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* objc/hash.h: Include string.h.

2000-04-15  David Edelsohn  <edelsohn@gnu.org>

	* Object.m (strlen): 64-bit PowerPC is a 64bit platform as well.

2000-04-12  Jakub Jelinek  <jakub@redhat.com>

	* Object.m (strlen): Provide prototype on all 64bit platforms,
	not only alpha.
	* sarray.c (memcpy): Likewise.
	* encoding.c (objc_layout_finish_structure): Don't use
	ROUND_TYPE_ALIGN on sparc.

	* encoding.c (objc_layout_structure_next_member): Do the whole
	procedure even for the first member, so that we get correct
	alignment.

2000-03-29  Zack Weinberg  <zack@wolery.cumb.org>

	* objc/Protocol.h, objc/objc-list.h: Change #endif labels to
	comments.

2000-02-23  Zack Weinberg  <zack@wolery.cumb.org>

	* Makefile.in: Add -DIN_TARGET_LIBS to ALL_CFLAGS.

Thu Sep 23 07:19:12 1999   Chris Ball <cball@fmco.com>

	* thr-posix.c (__objc_mutex_deallocate): made deallocate work.

Tue Sep 21 07:47:10 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (gc.o, gc_gc.o): Do not pass -fgnu-runtime to
	the compiler when building C code.

Fri Aug  6 23:32:29 1999  Daniel Jacobowitz <drow@drow.them.org>

	* Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix,
	libdir, libsubdir and tooldir.

Mon Jun 21 05:40:15 1999  John David Anglin <dave@hiauly1>

	* init.c (__objc_force_linking): Make global.

Thu May 20 03:20:59 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (AC_EXEEXT): Remove call.
	(compiler_name): Explicitly check with no extension and .exe
	extension.
	* configure: Regenerate.

Sun Apr 25 01:15:34 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* Makefile.in (CC1OBJ): Define in terms of CC.
	(runtime-info.h): Use.

Fri April 8 08:21:07 1999 Ovidiu Predescu <ovidiu@cup.hp.com>

	* objc-features.texi: Updated the URL to Boehm's GC page.

Fri Mar 26 23:41:07 1999 Ovidiu Predescu <ovidiu@cup.hp.com>

	* archive.c (__objc_code_char, __objc_write_char): Explicitly specify
	the char as being signed (patch from Daniel Jacobowitz
	<drow@false.org>).

Wed Mar 24 22:41:28 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* configure.in (AC_PREREQ): Update to 2.13.
	(AC_EXEEXT): Call to find possible file extension.
	(compiler_name): Use.
	* configure: Regenerate.

Wed Jan 27 02:31:01 1999  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (ALL_CFLAGS): Add -DIN_GCC.

Tue Jan  5 01:38:53 1999  Jeffrey A Law  (law@cygnus.com)

	* configure.in (thread_file): Correct and simplify code to find
	the thread file.
	* configure: Rebuilt.

1998-11-26  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (compiler_name): Add check to detect if this
	language's compiler has been built.
	* configure: Regenerate.

Mon Nov 23 16:50:28 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	*  configure.in: Use AC_PREREQ(2.12.1).

Thu Nov 19 20:33:37 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (runtime-info.h): Avoid GNU make extensions.

Sun Nov  8 17:46:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (INCLUDES): Add -I$(srcdir)/$(MULTISRCTOP)../include.

Thu Oct 22 14:34:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in: Use AC_CONFIG_AUX_DIR($topsrcdir).

Sat Oct 17 05:21:31 1998  Ovidiu Predescu  <ovidiu@slip.net>

	* objc-features.texi (Top): Changed the email address.
	* objc-features.texi (Garbage Collection): Use @uref instead of @url.

Mon Oct 11 21:25:27 1998  Ovidiu Predescu  <ovidiu@slip.net>

	* encoding.c: Redefine get_inner_array_type to get the first entry
	in the structure.

Thu Oct  8 12:21:14 1998  Richard Frith-Macdonald <richard@brainstorm.co.uk>

	* encoding.c (objc_skip_type_qualifiers): Handle _C_BYREF.
	(objc_get_type_qualifiers): Similarly.
	* objc/encoding.h (_C_BYREF): Define.
	(_F_BYREF): Define.

1998-10-07  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* objc/sarray.h: Make boffset be an unsigned long when sparc so it
	works out on 64-bit systems.

Tue Oct  6 20:32:06 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (INCLUDES): Make it multilib-friendly.

Fri Oct  2 07:12:14 1998  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (INCLUDES): Add -I$(srcdir)/../gcc.

Thu Oct  1 22:33:03 1998 Robert Lipe  <robertl@dgii.com>
			 Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (INCLUDES): Reference gcc via $MULTIBUILDTOP.
	(FLAGS_TO_PASS): Added.
	(runtime-info.h): Reference cc1ibj via $MULTIBUILDTOP.

	* archive.c: Change config.h to tconfig.h.

	* configure.in: Find gcc's object directory even for multilibs.

Wed Sep 30 18:17:17 1998  Robert Lipe  <robertl@dgii.com>

	* configure.in: Escape ^ in grep string.
	* configure: Rebuilt.

Wed Sep 30 09:14:52 1998  Jeffrey A Law  (law@cygnus.com)

	* All .h files pushed down into the objc/ subdirectory.
	* Makefile.in (copy_headers): Corresponding changes.
	* configure.in (AC_INIT): Corresponding changes.
	* configure: Rebuilt.

1998-09-30  Ben Elliston  <bje@cygnus.com>
	    Jeff Law	  <law@cygnus.com>

	* Makefile.in: Rewrite.

	* configure.in: Likewise.

	* configure: Regenerate.

	* All .c files.  Remove "objc" prefix when including objc header
	files.  Include tconfig.h, not ../tconfig.h.

Mon Sep 21 23:27:10 1998  Ovidiu Predescu <ovidiu@slip.net>

	* encoding.c (TREE_TYPE, ARRAY_TYPE): Define.
	(get_inner_array_type): Define.

1998-09-21  Ben Elliston  <bje@cygnus.com>

	* New directory.  Moved files from ../gcc/objc.
