		GDB Maintainers
		===============


		   Overview
		   --------

This file describes different groups of people who are, together, the
maintainers and developers of the GDB project.  Don't worry - it sounds
more complicated than it really is.

There are four groups of GDB developers, covering the patch development and
review process:

  - The Global Maintainers.

    These are the developers in charge of most daily development.  They
    have wide authority to apply and reject patches, but defer to the
    Responsible Maintainers (see below) within their spheres of
    responsibility.

  - The Responsible Maintainers.

    These are developers who have expertise and interest in a particular
    area of GDB, who are generally available to review patches, and who
    prefer to enforce a single vision within their areas.

  - The Authorized Committers.

    These are developers who are trusted to make changes within a specific
    area of GDB without additional oversight.

  - The Write After Approval Maintainers.

    These are developers who have write access to the GDB source tree.  They
    can check in their own changes once a developer with the appropriate
    authority has approved the changes; they can also apply the Obvious
    Fix Rule (below).

All maintainers are encouraged to post major patches to the gdb-patches
mailing list for comments, even if they have the authority to commit the
patch without review from another maintainer.  This especially includes
patches which change internal interfaces (e.g. global functions, data
structures) or external interfaces (e.g. user, remote, MI, et cetera).

The term "review" is used in this file to describe several kinds of feedback
from a maintainer: approval, rejection, and requests for changes or
clarification with the intention of approving a revised version.  Review is
a privilege and/or responsibility of various positions among the GDB
Maintainers.  Of course, anyone - whether they hold a position but not the
relevant one for a particular patch, or are just following along on the
mailing lists for fun, or anything in between - may suggest changes or
ask questions about a patch!

There's also a couple of other people who play special roles in the GDB
community, separately from the patch process:

  - The Official FSF-appointed GDB Maintainers.

    These maintainers are the ones who take the overall responsibility
    for GDB, as a package of the GNU project.  Other GDB contributors
    work under the official maintainers' supervision.  They have final
    and overriding authority for all GDB-related decisions, including
    anything described in this file.  As individuals, they may or not
    be generally involved in day-to-day development.

  - The Release Manager.

    This developer is in charge of making new releases of GDB.

  - The Patch Champions.

    These volunteers make sure that no contribution is overlooked or
    forgotten.

Most changes to the list of maintainers in this file are handled by
consensus among the global maintainers and any other involved parties.
In cases where consensus can not be reached, the global maintainers may
ask the official FSF-appointed GDB maintainers for a final decision.


			The Obvious Fix Rule
			--------------------

All maintainers listed in this file, including the Write After Approval
developers, are allowed to check in obvious fixes.

An "obvious fix" means that there is no possibility that anyone will
disagree with the change.

A good mental test is "will the person who hates my work the most be
able to find fault with the change" - if so, then it's not obvious and
needs to be posted first. :-)

Something like changing or bypassing an interface is _not_ an obvious
fix, since such a change without discussion will result in
instantaneous and loud complaints.

For documentation changes, about the only kind of fix that is obvious
is correction of a typo or bad English usage.


	     The Official FSF-appointed GDB Maintainers
	     ------------------------------------------

These maintainers as a group have final authority for all GDB-related
topics; they may make whatever changes that they deem necessary, or
that the FSF requests.

The current official FSF-appointed GDB maintainers are listed below,
in alphabetical order.  Their affiliations are provided for reference
only - their maintainership status is individual and not through their
affiliation, and they act on behalf of the GNU project.

       Pedro Alves (Red Hat)
       Joel Brobecker (AdaCore)
       Doug Evans (Google)
       Eli Zaretskii

		  Global Maintainers
		  ------------------

The global maintainers may review and commit any change to GDB, except in
areas with a Responsible Maintainer available.  For major changes, or
changes to areas with other active developers, global maintainers are
strongly encouraged to post their own patches for feedback before
committing.

The global maintainers are responsible for reviewing patches to any area
for which no Responsible Maintainer is listed.

Global maintainers also have the authority to revert patches which should
not have been applied, e.g. patches which were not approved, controversial
patches committed under the Obvious Fix Rule, patches with important bugs
that can't be immediately fixed, or patches which go against an accepted and
documented roadmap for GDB development.  Any global maintainer may request
the reversion of a patch.  If no global maintainer, or responsible
maintainer in the affected areas, supports the patch (except for the
maintainer who originally committed it), then after 48 hours the maintainer
who called for the reversion may revert the patch.

No one may reapply a reverted patch without the agreement of the maintainer
who reverted it, or bringing the issue to the official FSF-appointed
GDB maintainers for discussion.

At the moment there are no documented roadmaps for GDB development; in the
future, if there are, a reference to the list will be included here.

The current global maintainers are (in alphabetical order):

Pedro Alves                     palves@redhat.com
Joel Brobecker			brobecker@adacore.com
Kevin Buettner			kevinb@redhat.com
Andrew Cagney			cagney@gnu.org
Doug Evans			dje@google.com
Daniel Jacobowitz		drow@false.org
Mark Kettenis           	kettenis@gnu.org
Yao Qi				yao.qi@arm.com
Stan Shebs			stanshebs@google.com
Ulrich Weigand			Ulrich.Weigand@de.ibm.com
Elena Zannoni			elena.zannoni@oracle.com
Eli Zaretskii			eliz@gnu.org


			Release Manager
			---------------

The current release manager is: Joel Brobecker  <brobecker@adacore.com>

His responsibilities are:

    * organizing, scheduling, and managing releases of GDB.

    * deciding the approval and commit policies for release branches,
      and can change them as needed.



			Patch Champions
			---------------

These volunteers track all patches submitted to the gdb-patches list.  They
endeavor to prevent any posted patch from being overlooked; work with
contributors to meet GDB's coding style and general requirements, along with
FSF copyright assignments; remind (ping) responsible maintainers to review
patches; and ensure that contributors are given credit.

Current patch champions (in alphabetical order):

	Randolph Chung     <tausq@debian.org>



			Responsible Maintainers
			-----------------------

These developers have agreed to review patches in specific areas of GDB, in
which they have knowledge and experience.  These areas are generally broad;
the role of a responsible maintainer is to provide coherent and cohesive
structure within their area of GDB, to assure that patches from many
different contributors all work together for the best results.

Global maintainers will defer to responsible maintainers within their areas,
as long as the responsible maintainer is active.  Active means that
responsible maintainers agree to review submitted patches in their area
promptly; patches and followups should generally be answered within a week.
If a responsible maintainer is interested in reviewing a patch but will not
have time within a week of posting, the maintainer should send an
acknowledgement of the patch to the gdb-patches mailing list, and
plan to follow up with a review within a month.  These deadlines are for
initial responses to a patch - if the maintainer has suggestions
or questions, it may take an extended discussion before the patch
is ready to commit.  There are no written requirements for discussion,
but maintainers are asked to be responsive.

If a responsible maintainer misses these deadlines occasionally (e.g.
vacation or unexpected workload), it's not a disaster - any global
maintainer may step in to review the patch.  But sometimes life intervenes
more permanently, and a maintainer may no longer have time for these duties.
When this happens, he or she should step down (either into the Authorized
Committers section if still interested in the area, or simply removed from
the list of Responsible Maintainers if not).

If a responsible maintainer is unresponsive for an extended period of time
without stepping down, please contact the Global Maintainers; they will try
to contact the maintainer directly and fix the problem - potentially by
removing that maintainer from their listed position.

If there are several maintainers for a given domain then any one of them
may review a submitted patch.

Target Instruction Set Architectures:

The *-tdep.c files.  ISA (Instruction Set Architecture) and OS-ABI
(Operating System / Application Binary Interface) issues including CPU
variants.

The Target/Architecture maintainer works with the host maintainer when
resolving build issues.  The Target/Architecture maintainer works with
the native maintainer when resolving ABI issues.

	alpha		--target=alpha-elf ,-Werror

	arm		--target=arm-elf ,-Werror

	avr		--target=avr ,-Werror

	cris		--target=cris-elf ,-Werror ,
			(sim does not build with -Werror)

	frv		--target=frv-elf ,-Werror

	h8300		--target=h8300-elf ,-Werror

	i386		--target=i386-elf ,-Werror
			Mark Kettenis           kettenis@gnu.org

	ia64		--target=ia64-linux-gnu ,-Werror
			(--target=ia64-elf broken)

	lm32		--target=lm32-elf ,-Werror

	m32c		--target=m32c-elf ,-Werror

	m32r		--target=m32r-elf ,-Werror

	m68hc11		--target=m68hc11-elf ,-Werror ,
			Stephane Carrez		Stephane.Carrez@gmail.com

	m68k		--target=m68k-elf ,-Werror

	m88k		--target=m88k-openbsd ,-Werror
			Mark Kettenis		kettenis@gnu.org

	mcore		Deleted

	mep		--target=mep-elf ,-Werror
			Kevin Buettner		kevinb@redhat.com

	microblaze	--target=microblaze-xilinx-elf ,-Werror
			--target=microblaze-linux-gnu ,-Werror
			Michael Eager		eager@eagercon.com

	mips		--target=mips-elf ,-Werror
			Maciej W. Rozycki	macro@codesourcery.com

	mn10300		--target=mn10300-elf broken
			(sim/ dies with make -j)

	moxie		--target=moxie-elf ,-Werror
			Anthony Green		green@moxielogic.com

	ms1		--target=ms1-elf ,-Werror
			Kevin Buettner		kevinb@redhat.com

	nios2		--target=nios2-elf ,-Werror
			--target=nios2-linux-gnu ,-Werror
			Yao Qi			yao@codesourcery.com

	ns32k		Deleted

	pa		--target=hppa-elf ,-Werror

	powerpc		--target=powerpc-eabi ,-Werror

	rl78		--target=rl78-elf ,-Werror

	rx		--target=rx-elf ,-Werror

	s390		--target=s390-linux-gnu ,-Werror

	score	--target=score-elf
			Qinwei		qinwei@sunnorth.com.cn

	sh		--target=sh-elf ,-Werror
			--target=sh64-elf ,-Werror

	sparc		--target=sparc64-solaris2.10 ,-Werror
			(--target=sparc-elf broken)

	spu		--target=spu-elf ,-Werror
			Ulrich Weigand		uweigand@de.ibm.com

	tic6x		--target=tic6x-elf ,-Werror
			Yao Qi			yao@codesourcery.com

	v850		--target=v850-elf ,-Werror

	vax		--target=vax-netbsd ,-Werror

	x86-64		--target=x86_64-linux-gnu ,-Werror

	xstormy16	--target=xstormy16-elf
			Corinna Vinschen	vinschen@redhat.com

	xtensa		--target=xtensa-elf
			Maxim Grigoriev		maxim2405@gmail.com

All developers recognized by this file can make arbitrary changes to
OBSOLETE targets.

The Bourne shell script gdb_mbuild.sh can be used to rebuild all the
above targets.


Host/Native:

The Native maintainer is responsible for target specific native
support - typically shared libraries and quirks to procfs/ptrace/...
The Native maintainer works with the Arch and Core maintainers when
resolving more generic problems.

The host maintainer ensures that gdb can be built as a cross debugger on
their platform.

AIX			Joel Brobecker		brobecker@adacore.com
Darwin			Tristan Gingold		gingold@adacore.com
djgpp native		Eli Zaretskii		eliz@gnu.org
GNU Hurd		Alfred M. Szmidt	ams@gnu.org
GNU/Linux/x86 native & host
			Mark Kettenis		kettenis@gnu.org
GNU/Linux MIPS native & host
			Daniel Jacobowitz	drow@false.org
GNU/Linux m68k		Andreas Schwab		schwab@linux-m68k.org
FreeBSD native & host	Mark Kettenis		kettenis@gnu.org



Core: Generic components used by all of GDB

threads			Mark Kettenis		kettenis@gnu.org

language support
  Ada			Joel Brobecker		brobecker@adacore.com
			Paul Hilfinger		hilfinger@gnat.com
  C++			Daniel Jacobowitz	drow@false.org
  Objective C support   Adam Fedor		fedor@gnu.org
shared libs		Kevin Buettner		kevinb@redhat.com
MI interface		Vladimir Prus		vladimir@codesourcery.com

documentation		Eli Zaretskii		eliz@gnu.org
  (including NEWS)
testsuite
  gdbtk (gdb.gdbtk)     Keith Seitz             keiths@redhat.com

SystemTap		Sergio Durigan Junior	sergiodj@redhat.com


UI: External (user) interfaces.

gdbtk (c & tcl)		Fernando Nasser         fnasser@redhat.com
			Keith Seitz		keiths@redhat.com
libgui (w/foundry, sn)	Keith Seitz		keiths@redhat.com


Misc:

gdb/gdbserver		Daniel Jacobowitz	drow@false.org

Makefile.in, configure*	ALL

mmalloc/		ALL Host maintainers

sim/			See sim/MAINTAINERS

readline/		Master version: ftp://ftp.cwru.edu/pub/bash/
			ALL
			Host maintainers (host dependant parts)
			(but get your changes into the master version)

tcl/ tk/ itcl/		ALL

contrib/ari		Pierre Muller		muller@sourceware.org


		Authorized Committers
		---------------------

These are developers working on particular areas of GDB, who are trusted to
commit their own (or other developers') patches in those areas without
further review from a Global Maintainer or Responsible Maintainer.  They are
under no obligation to review posted patches - but, of course, are invited
to do so!

PowerPC			Andrew Cagney		cagney@gnu.org
ARM			Richard Earnshaw	rearnsha@arm.com
Blackfin		Mike Frysinger		vapier@gentoo.org
CRIS			Hans-Peter Nilsson	hp@axis.com
IA64			Jeff Johnston		jjohnstn@redhat.com
MIPS			Joel Brobecker		brobecker@adacore.com
m32r			Kei Sakamoto		sakamoto.kei@renesas.com
PowerPC			Kevin Buettner		kevinb@redhat.com
CRIS			Orjan Friberg		orjanf@axis.com
HPPA			Randolph Chung		tausq@debian.org
S390			Ulrich Weigand		uweigand@de.ibm.com
djgpp			DJ Delorie		dj@delorie.com
			[Please use this address to contact DJ about DJGPP]
tui			Stephane Carrez		Stephane.Carrez@gmail.com
ia64			Kevin Buettner		kevinb@redhat.com
AIX			Kevin Buettner		kevinb@redhat.com
GNU/Linux PPC native	Kevin Buettner		kevinb@redhat.com
gdb.java tests		Anthony Green		green@redhat.com
FreeBSD native & host	David O'Brien		obrien@freebsd.org
event loop		Elena Zannoni		elena.zannoni@oracle.com
generic symtabs		Elena Zannoni		elena.zannoni@oracle.com
dwarf readers		Elena Zannoni		elena.zannoni@oracle.com
elf reader		Elena Zannoni		elena.zannoni@oracle.com
stabs reader		Elena Zannoni		elena.zannoni@oracle.com
readline/		Elena Zannoni		elena.zannoni@oracle.com
NetBSD native & host	Jason Thorpe		thorpej@netbsd.org
Pascal support		Pierre Muller		muller@sourceware.org
avr			Theodore A. Roth	troth@openavr.org
Modula-2 support	Gaius Mulley		gaius@glam.ac.uk


			Write After Approval
			   (alphabetic)

To get recommended for the Write After Approval list you need a valid
FSF assignment and have submitted one good patch.

Pedro Alves					pedro_alves@portugalmail.pt
David Anderson					davea@sgi.com
John David Anglin				dave.anglin@nrc-cnrc.gc.ca
Shrinivas Atre					shrinivasa@kpitcummins.com
Sterling Augustine				saugustine@google.com
John Baldwin					jhb@freebsd.org
Scott Bambrough					scottb@netwinder.org
Thiago Jung Bauermann				bauerman@br.ibm.com
Jon Beniston					jon@beniston.com
Gary Benson					gbenson@redhat.com
Gabriel Krisman Bertazi				gabriel@krisman.be
Jan Beulich					jbeulich@novell.com
Anton Blanchard					anton@samba.org
Jim Blandy					jimb@codesourcery.com
David Blaikie					dblaikie@gmail.com
Philip Blundell					philb@gnu.org
Eric Botcazou					ebotcazou@libertysurf.fr
Per Bothner					per@bothner.com
Don Breazeal					donb@codesourcery.com
Joel Brobecker					brobecker@adacore.com
Dave Brolley					brolley@redhat.com
Samuel Bronson                                  naesten@gmail.com
Paul Brook					paul@codesourcery.com
Julian Brown					julian@codesourcery.com
Iain Buclaw					ibuclaw@gdcproject.org
Kevin Buettner					kevinb@redhat.com
Andrew Burgess					andrew.burgess@embecosm.com
Andrew Cagney					cagney@gnu.org
David Carlton					carlton@bactrian.org
Stephane Carrez					Stephane.Carrez@gmail.com
Michael Chastain				mec.gnu@mindspring.com
Renquan Cheng					crq@gcc.gnu.org
Eric Christopher				echristo@apple.com
Randolph Chung					tausq@debian.org
Nick Clifton					nickc@redhat.com
J.T. Conklin					jtc@acorntoolworks.com
Brendan Conoboy					blc@redhat.com
Ludovic Courtès					ludo@gnu.org
Tiago Stürmer Daitx				tdaitx@linux.vnet.ibm.com
Sanjoy Das					sanjoy@playingwithpointers.com
Jean-Charles Delay				delay@adacore.com
DJ Delorie					dj@redhat.com
Chris Demetriou					cgd@google.com
Philippe De Muyter				phdm@macqel.be
Dhananjay Deshpande				dhananjayd@kpitcummins.com
Markus Deuling					deuling@de.ibm.com
Klee Dienes					kdienes@apple.com
Gabriel Dos Reis                                gdr@integrable-solutions.net
Sergio Durigan Junior				sergiodj@redhat.com
Michael Eager					eager@eagercon.com
Richard Earnshaw				rearnsha@arm.com
Steve Ellcey					sje@cup.hp.com
Frank Ch. Eigler				fche@redhat.com
Ben Elliston					bje@gnu.org
Doug Evans					dje@google.com
Adam Fedor					fedor@gnu.org
Max Filippov					jcmvbkbc@gmail.com
Brian Ford					ford@vss.fsi.com
Orjan Friberg					orjanf@axis.com
Andreas From					andreas.from@ericsson.com
Nathan Froyd					froydnj@codesourcery.com
Mike Frysinger					vapier@gentoo.org
Gary Funck					gary@intrepid.com
Martin Galvan					martin.galvan@tallertechnologies.com
Chen Gang					gang.chen.5i5j@gmail.com
Mircea Gherzan					mircea.gherzan@intel.com
Paul Gilliam					pgilliam@us.ibm.com
Tristan Gingold					gingold@adacore.com
Anton Gorenkov					xgsa@yandex.ru
Raoul Gough					RaoulGough@yahoo.co.uk
Anthony Green			 		green@redhat.com
Matthew Green					mrg@eterna.com.au
Matthew Gretton-Dann				matthew.gretton-dann@arm.com
Maxim Grigoriev					maxim2405@gmail.com
Jerome Guitton					guitton@act-europe.fr
Ben Harris					bjh21@netbsd.org
Richard Henderson				rth@redhat.com
Aldy Hernandez					aldyh@redhat.com
Paul Hilfinger					hilfinger@gnat.com
Matt Hiller					hiller@redhat.com
Kazu Hirata					kazu@cs.umass.edu
James Hogan					james.hogan@imgtec.com
Jeff Holcomb					jeffh@redhat.com
Don Howard					dhoward@redhat.com
Nick Hudson					nick.hudson@dsl.pipex.com
Martin Hunt					hunt@redhat.com
Meador Inge					meadori@codesourcery.com
Jim Ingham					jingham@apple.com
Baurzhan Ismagulov				ibr@radix50.net
Manoj Iyer					manjo@austin.ibm.com
Daniel Jacobowitz				drow@false.org
Andreas Jaeger					aj@suse.de
Janis Johnson					janisjo@codesourcery.com
Jeff Johnston					jjohnstn@redhat.com
Geoff Keating					geoffk@redhat.com
Mark Kettenis					kettenis@gnu.org
Marc Khouzam					marc.khouzam@ericsson.com
Jim Kingdon					kingdon@panix.com
Paul Koning					paul_koning@dell.com
Jan Kratochvil					jan.kratochvil@redhat.com
Maxim Kuvyrkov					maxim@kugelworks.com
Pierre Langlois 				pierre.langlois@arm.com
Jonathan Larmour				jifl@ecoscentric.com
Jeff Law					law@redhat.com
Justin Lebar					justin.lebar@gmail.com
David Lecomber					david@streamline-computing.com
Don Lee						don.lee@sunplusct.com
Robert Lipe					rjl@sco.com
Lei Liu						lei.liu2@windriver.com
Sandra Loosemore				sandra@codesourcery.com
H.J. Lu						hjl.tools@gmail.com
Michal Ludvig                                   mludvig@suse.cz
Edjunior B. Machado				emachado@linux.vnet.ibm.com
Luis Machado					lgustavo@codesourcery.com
Jose E. Marchesi                                jose.marchesi@oracle.com
Simon Marchi					simon.marchi@ericsson.com
Glen McCready					gkm@redhat.com
Greg McGary					greg@mcgary.org
Roland McGrath					roland@hack.frob.com
Bryce McKinlay					mckinlay@redhat.com
Jason Merrill					jason@redhat.com
David S. Miller					davem@redhat.com
Mark Mitchell					mark@codesourcery.com
Marko Mlinar                                    markom@opencores.org
Alan Modra					amodra@gmail.com
Fawzi Mohamed					fawzi.mohamed@nokia.com
Jason Molenda					jmolenda@apple.com
Chris Moller					cmoller@redhat.com
Phil Muldoon					pmuldoon@redhat.com
Pierre Muller					muller@sourceware.org
Gaius Mulley                                    gaius@glam.ac.uk
Masaki Muranaka					monaka@monami-software.com
Joseph Myers					joseph@codesourcery.com
Fernando Nasser					fnasser@redhat.com
Adam Nemet					anemet@caviumnetworks.com
Will Newton					will.newton@linaro.org
Nathanael Nerode				neroden@gcc.gnu.org
Hans-Peter Nilsson				hp@bitrange.com
David O'Brien					obrien@freebsd.org
Alexandre Oliva					aoliva@redhat.com
Karen Osmond					karen.osmond@gmail.com
Pawandeep Oza					oza.pawandeep@gmail.com
Patrick Palka					patrick@parcs.ath.cx
Denis Pilat					denis.pilat@st.com
Andrew Pinski					apinski@cavium.com
Kevin Pouget					kevin.pouget@st.com
Paul Pluzhnikov					ppluzhnikov@google.com
Marek Polacek					mpolacek@redhat.com
Siddhesh Poyarekar				siddhesh@redhat.com
Vladimir Prus                                   vladimir@codesourcery.com
Yao Qi						yao@codesourcery.com
Qinwei						qinwei@sunnorth.com.cn
Ramana Radhakrishnan				ramana.radhakrishnan@arm.com
Siva Chandra Reddy				sivachandra@google.com
Matt Rice					ratmice@gmail.com
Frederic Riss					frederic.riss@st.com
Aleksandar Ristovski				aristovski@qnx.com
Tom Rix						trix@redhat.com
Nick Roberts					nickrob@snap.net.nz
Pierre-Marie de Rodat				derodat@adacore.com
Bob Rossi 					bob_rossi@cox.net
Theodore A. Roth				troth@openavr.org
Ian Roxborough					irox@redhat.com
Maciej W. Rozycki				macro@linux-mips.org
Grace Sainsbury					graces@redhat.com
Kei Sakamoto					sakamoto.kei@renesas.com
Mark Salter					msalter@redhat.com
Richard Sandiford				richard@codesourcery.com
Iain Sandoe					iain@codesourcery.com
Peter Schauer					Peter.Schauer@mytum.de
Andreas Schwab					schwab@linux-m68k.org
Thomas Schwinge					tschwinge@gnu.org
Keith Seitz					keiths@redhat.com
Carlos Eduardo Seo				cseo@linux.vnet.ibm.com
Ozkan Sezer					sezeroz@gmail.com
Marcus Shawcroft				marcus.shawcroft@arm.com
Stan Shebs					stanshebs@google.com
Joel Sherrill					joel.sherrill@oarcorp.com
Mark Shinwell					shinwell@codesourcery.com
Craig Silverstein				csilvers@google.com
Aidan Skinner					aidan@velvet.net
Jiri Smid					smid@suse.cz
Andrey Smirnov					andrew.smirnov@gmail.com
David Smith					dsmith@redhat.com
Stephen P. Smith				ischis2@cox.net
Jackie Smith Cashion				jsmith@redhat.com
Petr Sorfa					petrs@caldera.com
Andrew Stubbs					ams@codesourcery.com
Emi Suzuki					emi-suzuki@tjsys.co.jp
Ian Lance Taylor				ian@airs.com
Walfred Tedeschi				walfred.tedeschi@intel.com
Gary Thomas					gthomas@redhat.com
Jason Thorpe					thorpej@netbsd.org
Caroline Tice					ctice@apple.com
Kai Tietz					ktietz@redhat.com
Andreas Tobler					andreast@fgznet.ch
Antoine Tremblay				antoine.tremblay@ericsson.com
Jon Turney					jon.turney@dronecode.org.uk
David Ung					davidu@mips.com
D Venkatasubramanian				dvenkat@noida.hcltech.com
Corinna Vinschen				vinschen@redhat.com
Sami Wagiaalla					swagiaal@redhat.com
Keith Walker					keith.walker@arm.com
Ricard Wanderlof				ricardw@axis.com
Jiong Wang					jiong.wang@arm.com
Wei-cheng Wang					cole945@gmail.com
Kris Warkentin					kewarken@qnx.com
Philippe Waroquiers				philippe.waroquiers@skynet.be
Ulrich Weigand					uweigand@de.ibm.com
Ken Werner					ken.werner@de.ibm.com
Mark Wielaard					mjw@redhat.com
Nathan Williams					nathanw@wasabisystems.com
Bob Wilson					bob.wilson@acm.org
Jim Wilson					wilson@tuliptree.org
Andy Wingo					wingo@igalia.com
Mike Wrighton					wrighton@codesourcery.com
Kwok Cheung Yeung				kcy@codesourcery.com
Elena Zannoni					elena.zannoni@oracle.com
Eli Zaretskii					eliz@gnu.org
Jie Zhang					jzhang918@gmail.com
Wu Zhou						woodzltc@cn.ibm.com
Yoshinori Sato					ysato@users.sourceforge.jp
Hui Zhu						teawater@gmail.com
Khoo Yit Phang					khooyp@cs.umd.edu

			Past Maintainers

Whenever removing yourself, or someone else, from this file, consider
listing their areas of development here for posterity.

Jimmy Guo (gdb.hp, tui)				guo at cup dot hp dot com
Jeff Law (hppa)					law at cygnus dot com
Daniel Berlin (C++ support)			dan at cgsoftware dot com
Nick Duffek (powerpc, SCO, Sol/x86)		nick at duffek dot com
David Taylor (d10v, sparc, utils, defs,
  expression evaluator, language support)	taylor at candd dot org
J.T. Conklin (dcache, NetBSD, remote, global)	jtc at acorntoolworks dot com
Frank Ch. Eigler (sim)				fche at redhat dot com
Per Bothner (Java)				per at bothner dot com
Anthony Green (Java)				green at redhat dot com
Fernando Nasser (testsuite/, mi, cli, KOD)      fnasser at redhat dot com
Mark Salter (testsuite/lib+config)		msalter at redhat dot com
Jim Kingdon (web pages)				kingdon at panix dot com
Jim Ingham (gdbtk, libgui)			jingham at apple dot com
Mark Kettenis (hurd native)			kettenis at gnu dot org
Ian Roxborough (in-tree tcl, tk, itcl)		irox at redhat dot com
Robert Lipe (SCO/Unixware)			rjl at sco dot com
Peter Schauer (global, AIX, xcoffsolib,
  Solaris/x86)					Peter.Schauer at mytum dot de
Scott Bambrough (ARM)				scottb at netwinder dot org
Philippe De Muyter (coff)			phdm at macqel dot be
Michael Chastain (testsuite)			mec.gnu at mindspring dot com
Fred Fish (global)
Jim Blandy (global)				jimb@red-bean.com
Michael Snyder (global)
Christopher Faylor (MS Windows, host & native)


Folks that have been caught up in a paper trail:

David Carlton					carlton@bactrian.org

;; Local Variables:
;; coding: utf-8
;; End:
