			GDB Maintainers


			Blanket Write Privs
			   (alphabetic)

Jim Blandy			jimb@redhat.com
Kevin Buettner			kevinb@redhat.com
Andrew Cagney			ac131313@redhat.com
J.T. Conklin			jtc@redback.com
Fred Fish			fnf@ninemoons.com
Mark Kettenis           	kettenis@gnu.org
Peter Schauer			Peter.Schauer@regent.e-technik.tu-muenchen.de
Stan Shebs			shebs@apple.com
Michael Snyder			msnyder@redhat.com
Elena Zannoni			ezannoni@redhat.com
Eli Zaretskii			eliz@gnu.org


			Various Maintainers

Note individuals who maintain parts of the debugger need approval to
check in changes outside of the immediate domain that they maintain.

If there is no maintainer for a given domain then the responsibility
falls to the head maintainer.

If there are several maintainers for a given domain then
responsibility falls to the first maintainer.  The first maintainer is
free to devolve that responsibility among the other maintainers.


                        The Obvious Fix Rule

All maintainers listed in this file 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.


Target Instruction Set Architectures:

Generic ISA (Instruction Set Architecture) issues, API variants, CPU
variants.  *-tdep.c. The Target/Architecture maintainer works with the
host maintainer when resolving build issues.  The Target/Architecture
maintainer works with the native maintainer when resolving API issues.

	a29k		Deleted.

	alpha		--target=alpha-elf -Werror
			Maintenance only

	arc		(--target=arc-elf OBSOLETE)

	arm		--target=arm-elf ,
			Fernando Nasser		fnasser@redhat.com
			Scott Bambrough		scottb@netwinder.org
			Richard Earnshaw	rearnsha@arm.com
			Not multi-arch

	avr		--target=avr ,-Werror
			Theodore A. Roth	troth@verinet.com

	cris		--target=cris-elf ,-Werror
			Orjan Friberg		orjanf@axis.com

	d10v		--target=d10v-elf ,-Werror
			Maintenance only

	d30v		(--target=d30v-elf OBSOLETE)

	fr30		(--target=fr30-elf OBSOLETE)

	h8300		--target=h8300hms -Werror
			Maintenance only

	h8500		--target=h8500hms -Werror
			Maintenance only
			Not multi-arch, work in progress

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

	i960		(--target=i960-coff OBSOLETE)

	ia64		--target=ia64-linux-gnu ,-Werror
			(--target=ia64-elf broken)
			Kevin Buettner		kevinb@redhat.com

	m32r		(--target=m32r-elf broken)
			Michael Snyder		msnyder@redhat.com
			OBSOLETE candidate, not multi-arch

	m68hc11		--target=m68hc11-elf ,-Werror ,
			Stephane Carrez		stcarrez@nerim.fr

	m68k		--target=m68k-elf ,-Werror
			Maintenance only

	m88k		(--target=m88k OBSOLETE)

	mcore		--target=mcore-elf ,-Werror
			Maintenance only

	mips		--target=mips-elf ,-Werror
			Andrew Cagney		cagney@redhat.com

	mn10200		--target=mn10200-elf ,-Werror
			Maintenance only
			OBSOLETE candidate, not multi-arch

	mn10300		--target=mn10300-elf ,-Werror
			Maintenance only

	ns32k		--target=ns32k-netbsd ,-Werror
			Maintenance only

	pa		(--target=hppa-elf broken)
			Maintenance only
			OBSOLETE candidate, not multi-arch

	powerpc		--target=powerpc-eabi ,-Werror
			Kevin Buettner		kevinb@redhat.com

	s390		--target=s390-linux-gnu ,-Werror
			(contact DJ Barrow	djbarrow@de.ibm.com)

	sh		--target=sh-elf ,-Werror
			Elena Zannoni		ezannoni@redhat.com

	sparc		--target=sparc-elf ,-Werror
			Maintenance only

	tic80		Deleted.

	v850		--target=v850-elf ,-Werror
			Maintenance only

	vax		--target=vax-netbsd ,-Werror
			Maintenance only

	w65		Deleted.

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

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

	z8k		--target=z8k-coff ,-Werror
			Known problem in 5.1
			Maintenance only
			OBSOLETE candidate, not multi-arch

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

All maintainers can test and thence approve non-trivial changes to
``maintenance only'' targets submitted by recognized developers.

All recognized developers can make mechanical changes (by virtue of
the obvious fix rule) to ``maintenance only'' targets.  The change
shall be sanity checked by compiling with one of the listed targets.

The Bourne shell script:

cat MAINTAINERS | tr -s '[\t]' '[ ]' | sed -n '
/^[ ]*[-a-z0-9\.]*[ ]*[(]*--target=.*/ !d
s/^.*--target=//
s/).*$//
h
:loop
  g
  /^[^ ]*,/ !b end
  s/,[^ ]*//
  p
  g
  s/^[^,]*,//
  h
b loop
:end
p
'

can be used to generate a list of buildable targets.  The list
containing values for the configure options --target=,
--enable-gdb-build-warnings= and optionally
--enable-sim-build-warnings vis:

	arc-elf ,-Werror
	...
	m68hc11-elf ,-Werror ,
	...
	hppa1.1-hp-proelf broken
	...

While the ``broken'' targets are included in the listing, the are not
expected to build.


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 (including mmalloc) can be built
as a cross debugger on their platform.

AIX			Peter Schauer		Peter.Schauer@regent.e-technik.tu-muenchen.de
			Kevin Buettner		kevinb@redhat.com

djgpp native		Eli Zaretskii		eliz@gnu.org
			DJ Delorie		dj@redhat.com
MS Windows (NT, '00, 9x, Me, XP) host & native
			Chris Faylor		cgf@redhat.com
GNU/Linux/x86 native & host
			Mark Kettenis		kettenis@gnu.org
			Jim Blandy		jimb@redhat.com
GNU/Linux PPC native	Kevin Buettner		kevinb@redhat.com
GNU/Linux MIPS native & host
			Daniel Jacobowitz	dan@debian.org
GNU/Linux m68k		Andreas Schwab		schwab@suse.de
FreeBSD native & host	Mark Kettenis		kettenis@gnu.org
			David O'Brien		obrien@freebsd.org
hurd native		Mark Kettenis		kettenis@gnu.org
NetBSD native & host	Jason Thorpe		thorpej@wasabisystems.com
SCO/Unixware		Robert Lipe		rjl@sco.com
GNU/Linux ARM native	Scott Bambrough		scottb@netwinder.org
Solaris/x86 native & host (devolved)
			Peter Schauer		Peter.Schauer@regent.e-technik.tu-muenchen.de
Solaris/SPARC native & host (devolved)
                        Michael Snyder          msnyder@redhat.com



Core: Generic components used by all of GDB

generic arch support	Andrew Cagney		cagney@redhat.com
			Any host/target maintainer can add to
			gdbarch.{c,h,sh}.  Send tricky ones to cagney.
target vector		Andrew Cagney		cagney@redhat.com
main (main.c, top.c)	Elena Zannoni		ezannoni@redhat.com
event loop		Elena Zannoni           ezannoni@redhat.com

generic symtabs		Jim Blandy		jimb@redhat.com
			Elena Zannoni		ezannoni@redhat.com
  dwarf readers		Jim Blandy		jimb@redhat.com
			Elena Zannoni		ezannoni@redhat.com
  elf reader		Jim Blandy		jimb@redhat.com
			Elena Zannoni		ezannoni@redhat.com
  stabs reader		Jim Blandy		jimb@redhat.com
			Elena Zannoni		ezannoni@redhat.com
  coff reader		Philippe De Muyter	phdm@macqel.be
  xcoff reader		Any maintainer can modify this; please send tricky
			ones to Kevin Buettner <kevinb@redhat.com>
  linespec		Jim Blandy		jimb@redhat.com
			Elena Zannoni		ezannoni@redhat.com
			Fernando Nasser		fnasser@redhat.com
  HP/UX readers		Any [past] maintainer can modify this.
			Please send tricky ones to the symtabs maintainers.

tracing bytecode stuff  Jim Blandy              jimb@redhat.com
tracing			Michael Snyder		msnyder@redhat.com
threads			Michael Snyder		msnyder@redhat.com
			Mark Kettenis		kettenis@gnu.org
breakpoints		Michael Snyder		msnyder@redhat.com
			Jim Blandy		jimb@redhat.com
language support	(Blanket Write Privs Maintainers)
  C++			Daniel Jacobowitz	dan@debian.org
  Java support (devolved)
			Per Bothner		per@bothner.com
			Anthony Green 		green@redhat.com
  Pascal support	Pierre Muller		muller@sources.redhat.com
  Scheme support	Jim Blandy		jimb@redhat.com

shared libs (devolved)	Jim Blandy		jimb@redhat.com
			Kevin Buettner		kevinb@redhat.com
  xcoffsolib		Peter Schauer		Peter.Schauer@regent.e-technik.tu-muenchen.de

remote.c		Andrew Cagney		cagney@redhat.com
include/remote-sim.h, remote-sim.c
			Andrew Cagney		cagney@redhat.com
sds protocol		Fernando Nasser		fnasser@redhat.com
rdi/adp protocol	Fernando Nasser		fnasser@redhat.com
documentation		Eli Zaretskii		eliz@gnu.org
testsuite		Fernando Nasser		fnasser@redhat.com
  config                Mark Salter             msalter@redhat.com
  lib                   Mark Salter             msalter@redhat.com
  gdbtk (gdb.gdbtk)     Keith Seitz             keiths@redhat.com
  c++ (gdb.c++)		Michael Chastain	mec@shout.net
  mi tests (gdb.mi)     Elena Zannoni           ezannoni@redhat.com
                        Andrew Cagney           cagney@redhat.com
  stabs (gdb.stabs)     Elena Zannoni           ezannoni@redhat.com
  threads (gdb.threads) Michael Snyder          msnyder@redhat.com
  trace (gdb.trace)     Michael Snyder          msnyder@redhat.com
  hp tests (gdb.hp)	(vacant)
  Java tests (gdb.java)	Anthony Green 		green@redhat.com
Kernel Object Display	Fernando Nasser		fnasser@redhat.com


UI: External (user) interfaces.

command interpreter	Fernando Nasser		fnasser@redhat.com
gdbtk (c & tcl)		Jim Ingham		jingham@apple.com
			Fernando Nasser         fnasser@redhat.com
			Keith Seitz		keiths@redhat.com
libgui (w/foundry, sn)	Jim Ingham              jingham@apple.com
			Keith Seitz		keiths@redhat.com
mi (gdb/mi)		Andrew Cagney		cagney@redhat.com
			Elena Zannoni           ezannoni@redhat.com
			Fernando Nasser		fnasser@redhat.com
tui			(vacant)
			Technical Contact Point	wdb@cup.hp.com


Misc:

gdb/gdbserver		Daniel Jacobowitz	dan@debian.org

Web pages.		Jim Kingdon		jkingdon@engr.sgi.com  ++
			(anyone can edit; kingdon is just lead maintainer)

Makefile.in, configure*	ALL

mmalloc/		ALL Host maintainers

NEWS			ALL

sim/			See sim/MAINTAINERS

readline/		Master version: ftp://ftp.cwru.edu/pub/bash/
			Elena Zannoni		ezannoni@redhat.com
			Host maintainers (host dependant parts)
			(but get your changes into the master version)

tcl/ tk/ itcl/		Ian Roxborough		irox@redhat.com

			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.

David Anderson					davea@sgi.com
Scott Bambrough					scottb@netwinder.org
Jim Blandy					jimb@redhat.com
Philip Blundell					philb@gnu.org
Per Bothner					per@bothner.com
Joel Brobecker					brobecker@act-europe.fr
Dave Brolley					brolley@redhat.com
Kevin Buettner					kevinb@redhat.com
Andrew Cagney					ac131313@redhat.com
David Carlton					carlton@math.stanford.edu
Stephane Carrez					stcarrez@nerim.fr
Michael Chastain				mec@shout.net
Eric Christopher				echristo@redhat.com
Nick Clifton					nickc@redhat.com
DJ Delorie					dj@redhat.com
Chris G. Demetriou				cgd@broadcom.com
Philippe De Muyter				phdm@macqel.be
Klee Dienes					kdienes@apple.com
Richard Earnshaw				rearnsha@arm.com
Frank Ch. Eigler				fche@redhat.com
Ben Elliston					bje@redhat.com
Anthony Green			 		green@redhat.com
Matthew Green					mrg@eterna.com.au
Chris Faylor					cgf@redhat.com
Adam Fedor					fedor@gnu.org
Fred Fish					fnf@ninemoons.com
Orjan Friberg					orjanf@axis.com
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@hxi.com
Jeff Holcomb					jeffh@redhat.com
Don Howard					dhoward@redhat.com
Martin Hunt					hunt@redhat.com
Jim Ingham					jingham@apple.com
Daniel Jacobowitz				dan@debian.org
Andreas Jaeger					aj@suse.de
Geoff Keating					geoffk@redhat.com
Mark Kettenis					kettenis@gnu.org
Jim Kingdon					jkingdon@engr.sgi.com  ++
Jonathan Larmour				jlarmour@redhat.co.uk
Jeff Law					law@redhat.com
Robert Lipe					rjl@sco.com
H.J. Lu						hjl@lucon.org
Michal Ludvig                                   mludvig@suse.cz
Glen McCready					gkm@redhat.com
Greg McGary					greg@mcgary.org
Jason Merrill					jason@redhat.com
David S. Miller					davem@redhat.com
Alan Modra					amodra@bigpond.net.au
Jason Molenda					jmolenda@apple.com
Pierre Muller					muller@sources.redhat.com
Fernando Nasser					fnasser@redhat.com
Hans-Peter Nilsson				hp@bitrange.com
David O'Brien					obrien@freebsd.org
Alexandre Oliva					aoliva@redhat.com
Tom Rix						trix@redhat.com
Theodore A. Roth				troth@verinet.com
Ian Roxborough					irox@redhat.com
Grace Sainsbury					graces@redhat.com
Mark Salter					msalter@redhat.com
Peter Schauer					Peter.Schauer@regent
Andreas Schwab					schwab@suse.de
Keith Seitz					keiths@redhat.com
Stan Shebs					shebs@apple.com
Aidan Skinner					aidan@velvet.net
Jiri Smid					smid@suse.cz
David Smith					dsmith@redhat.com
Stephen P. Smith				ischis2@home.com
Jackie Smith Cashion				jsmith@redhat.com
Michael Snyder					msnyder@redhat.com
Petr Sorfa					petrs@caldera.com
Gary Thomas					gthomas@redhat.com
Jason Thorpe					thorpej@wasabisystems.com
Tom Tromey					tromey@redhat.com
Corinna Vinschen				vinschen@redhat.com
Keith Walker					keith.walker@arm.com
Jim Wilson					wilson@redhat.com
Elena Zannoni					ezannoni@redhat.com
Eli Zaretskii					eliz@gnu.org



			Past Maintainers

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)		jtc at redback dot com
Frank Ch. Eigler (sim)				fche at redhat dot com



Folks that have been caught up in a paper trail:

Jim Kingdon					jkingdon@engr.sgi.com

--

(*) Indicates folks that don't have a Kerberos/SSH account in the GDB
group.
