		========= Binutils Maintainers =========

This is the list of individuals responsible for maintenance and update
of the GNU Binary Utilities project.  This includes the linker (ld),
the assembler (gas), the profiler (gprof), a whole suite of other
programs (binutils) and the libraries that they use (bfd and
opcodes).  This project shares a common set of header files with the
GCC and GDB projects (include), so maintainership of those files is
shared amoungst the projects.

The home page for binutils is:

  http://www.gnu.org/software/binutils/binutils.html

and patches should be sent to:

  binutils@sourceware.org

with "[Patch]" as part of the subject line.  Note - patches to the
top level config.guess and config.sub scripts should be sent to:

  config-patches@gnu.org

and not to the binutils lists.  Patches to the other top level
configure files (configure, configure.in, config-ml.in) should
be sent to the binutils lists, and copied to the gcc and gdb
lists as well (gcc-patches@gcc.gnu.org and
gdb-patches@sourceware.org).

		--------- Blanket Write Privs ---------

The following people have permission to check patches into the
repository without obtaining approval first:

  Nick Clifton <nickc@redhat.com> (head maintainer)
  Ian Lance Taylor <ian@airs.com>
  Jeff Law <law@redhat.com>
  Jim Wilson <wilson@tuliptree.org>
  DJ Delorie <dj@redhat.com>
  Alan Modra <amodra@gmail.com>
  Michael Meissner <gnu@the-meissners.org>
  Daniel Jacobowitz <drow@false.org>
  Richard Sandiford <rdsandiford@googlemail.com>

      --------- Maintainers ---------

Maintainers are individuals who are responsible for, and have
permission to check in changes in, certain subsets of the code.  Note
that maintainers still 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 (above).  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.

  ALPHA            Richard Henderson <rth@twiddle.net>
  AARCH64	   Richard Earnshaw <rearnsha@arm.com>
  AARCH64	   Marcus Shawcroft <marcus.shawcroft@arm.com>
  ARM		   Nick Clifton <nickc@redhat.com>
  ARM		   Richard Earnshaw <rearnsha@arm.com>
  ARM		   Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
  AVR		   Denis Chertykov <chertykov@gmail.com>
  AVR		   Marek Michalkiewicz <marekm@amelek.gda.pl>
  BFIN		   Jie Zhang <jzhang918@gmail.com>
  BFIN		   Mike Frysinger <vapier@gentoo.org>
  BUILD SYSTEM	   Daniel Jacobowitz <drow@false.org>
  CR16		   M R Swami Reddy <MR.Swami.Reddy@nsc.com>
  CRIS		   Hans-Peter Nilsson <hp@axis.com>
  CRX		   M R Swami Reddy <MR.Swami.Reddy@nsc.com>
  DLX              Nikolaos Kavvadias <nkavv@physics.auth.gr>
  DWARF2	   Jason Merrill <jason@redhat.com>
  DWARF2	   Jakub Jelinek <jakub@redhat.com>
  dwarf-mode.el    Tom Tromey <tom@tromey.com>
  EPIPHANY	   Joern Rennecke <joern.rennecke@embecosm.com>
  FR30		   Dave Brolley <brolley@redhat.com>
  FRV		   Dave Brolley <brolley@redhat.com>
  FRV		   Alexandre Oliva <aoliva@redhat.com>
  GOLD		   Ian Lance Taylor <iant@google.com>
  GOLD		   Cary Coutant <ccoutant@gmail.com>
  H8300		   Prafulla Thakare <prafulla.thakare@kpitcummins.com>
  HPPA		   Dave Anglin <dave.anglin@nrc.ca>
  HPPA elf32	   Alan Modra <amodra@gmail.com>
  HPPA elf64	   Jeff Law <law@redhat.com> [Basic maintainance only]
  IA-64		   Jim Wilson <wilson@tuliptree.org>
  IQ2000	   Stan Cox <scox@redhat.com>
  i860		   Jason Eckhardt <jle@rice.edu>
  ix86		   H.J. Lu <hjl.tools@gmail.com>
  ix86 PE	   Christopher Faylor <me+binutils@cgf.cx>
  ix86 COFF	   DJ Delorie <dj@redhat.com>
  ix86 PE/COFF	   Dave Korn <dave.korn.cygwin@gmail.com>
  ix86 INTEL MODE  Jan Beulich <jbeulich@novell.com>
  LM32             Jon Beniston <jon@beniston.com>
  M32R             Doug Evans <dje@sebabeach.org>
  M68HC11 M68HC12  Stephane Carrez <Stephane.Carrez@gmail.com>
  M68HC11 M68HC12  Sean Keys <skeys@ipdatasys.com>
  M88k		   Mark Kettenis <kettenis@gnu.org>
  MACH-O           Tristan Gingold <tgingold@free.fr>
  MAXQ		   Inderpreet Singh <inderpreetb@noida.hcltech.com>
  MEP		   Dave Brolley <brolley@redhat.com>
  METAG            Markos Chandras <markos.chandras@imgtec.com>
  MICROBLAZE	   Michael Eager <eager@eagercon.com>
  MIPS		   Maciej W. Rozycki <macro@imgtec.com>
  MMIX		   Hans-Peter Nilsson <hp@bitrange.com>
  MN10300	   Alexandre Oliva <aoliva@redhat.com>
  Moxie		   Anthony Green <green@moxielogic.com>
  MSP430	   Dmitry Diky <diwil@spec.ru>
  NDS32		   Kuan-Lin Chen <kuanlinchentw@gmail.com>
  NDS32		   Wei-Cheng Wang <cole945@gmail.com>
  NetBSD support   Matt Thomas <matt@netbsd.org>
  Nios II	   Sandra Loosemore <sandra@codesourcery.com>
  Nios II	   Andrew Jenner <andrew@codesourcery.com>
  OR1K		   Christian Svensson <blue@cmd.nu>
  OR1K		   Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
  PPC		   Geoff Keating <geoffk@geoffk.org>
  PPC		   Alan Modra <amodra@gmail.com>
  PPC		   Peter Bergner <bergner@vnet.ibm.com>
  PPC vector ext   Aldy Hernandez <aldyh@redhat.com>
  RISC-V	   Palmer Dabbelt <palmer@sifive.com>
  RISC-V	   Andrew Waterman <andrew@sifive.com>
  RISC-V	   Jim Wilson <jimw@sifive.com>
  RL78             DJ Delorie <dj@redhat.com>
  RX               DJ Delorie <dj@redhat.com>
  RX               Nick Clifton <nickc@redhat.com>
  s390, s390x	   Martin Schwidefsky <schwidefsky@de.ibm.com>
  s390, s390x	   Andreas Krebbel <krebbel@linux.vnet.ibm.com>
  SH		   Alexandre Oliva <aoliva@redhat.com>
  SPARC		   David S. Miller <davem@davemloft.net>
  SPARC		   Jose E. Marchesi <jose.marchesi@oracle.com>
  SPU		   Alan Modra <amodra@gmail.com>
  TIC54X           Timothy Wall <twall@alum.mit.edu>
  TIC6X            Joseph Myers <joseph@codesourcery.com>
  TILE-Gx          Walter Lee <walt@tilera.com>
  TILEPro          Walter Lee <walt@tilera.com>
  VAX		   Matt Thomas <matt@netbsd.org>
  VAX		   Jan-Benedict Glaw <jbglaw@lug-owl.de>
  Visium	   Eric Botcazou <ebotcazou@libertysurf.fr>
  VMS		   Tristan Gingold <tgingold@free.fr>
  x86_64	   Jan Hubicka <jh@suse.cz>
  x86_64	   Andreas Jaeger <aj@suse.de>
  x86_64	   H.J. Lu <hjl.tools@gmail.com>
  XCOFF 	   Richard Sandiford <r.sandiford@uk.ibm.com>
  XGATE            Sean Keys <skeys@ipdatasys.com>
  Xtensa	   Sterling Augustine <augustine.sterling@gmail.com>
  z80		   Arnold Metselaar <arnold.metselaar@planet.nl>
  z8k		   Christian Groessler <chris@groessler.org>

      --------- Past Maintainers -------------

These folks have acted as maintainers in the past, but have now
moved on to other things.  Our thanks for all their hard work
goes with them.

  Paul Brook
  Eric Christopher
  Mei Ligang
  Mark Mitchell
  Bernd Schmidt
  Svein Seldal

      --------- CGEN Maintainers -------------

CGEN is a tool for building, amongst other things, assemblers,
disassemblers and simulators from a single description of a CPU.
It creates files in several of the binutils directories, but it
is mentioned here since there is a single group that maintains
CGEN and the files that it creates.

If you have CGEN related problems you can send email to;

   cgen@sourceware.org

The current CGEN maintainers are:

  Doug Evans, Frank Eigler

     --------- Write After Approval ---------

Individuals with "write after approval" have the ability to check in
changes, but they must get approval for each change from someone in
one of the above lists (blanket write or maintainers).

[It's a huge list, folks.  You know who you are.  If you have the
 *ability* to do binutils checkins, you're in this group.  Just
 remember to get approval before checking anything in.]

     -------------  Obvious Fixes -------------

Fixes for obvious mistakes do not need approval, and can be checked in
right away, but the patch should still be sent to the binutils list.
The definition of obvious is a bit hazy, and if you are not sure, then
you should seek approval first.  Obvious fixes include fixes for
spelling mistakes, blatantly incorrect code (where the correct code is
also blatantly obvious), and so on.  Obvious fixes should always be
small, the larger they are, the more likely it is that they contain
some un-obvious side effect or consequence.

    --------- Branch Checkins ---------

If a patch is approved for check in to the mainline sources, it can
also be checked into the current release branch.  Normally however
only bug fixes should be applied to the branch.  New features, new
ports, etc, should be restricted to the mainline.  (Otherwise the
burden of maintaining the branch in sync with the mainline becomes too
great).  If you are uncertain as to whether a patch is appropriate for
the branch, ask the branch maintainer.  This is:

   (cf global maintainers)

    -------- Testsuites ---------------

In general patches to any of the binutils testsuites should be
considered generic and sent to the binutils mailing list for
approval.  Patches to target specific tests are the responsibility the
relevant port maintainer(s), and can be approved/checked in by them.
Other testsuite patches need the approval of a blanket-write-priveleges
person.

    -------- Configure patches ----------

Patches to the top level configure files (config.sub & config.guess)
are not the domain of the binutils project and they cannot be approved
by the binutils group.  Instead they should be submitted to the config
maintainer at:

	config-patches@gnu.org

    --------- Creating Branches ---------

Anyone with at least write-after-approval access may create a branch
to use for their own development purposes.  In keeping with FSF
policies, all patches applied to such a branch must come from people
with appropriate copyright assignments on file.  All legal
requirements that would apply to any other contribution apply equally
to contributions on a branch.

Before creating the branch, you should select a name for the branch of
the form:

  binutils-<org>-<name>

where "org" is the initials of your organization, or your own initials
if you are acting as an individual.  For example, for a branch created
by The GNUDist Company, "tgc" would be an appropriate choice for
"org".  It's up to each organization to select an appropriate choice
for "name"; some organizations may use more structure than others, so
"name" may contain additional hyphens.

Suppose that The GNUDist Company was creating a branch to develop a
port of Binutils to the FullMonty processor.  Then, an appropriate
choice of branch name would be:

  binutils-tgc-fm

A date stamp is not required as part of the name field, but some
organizations like to have one.  If you do include the date, you
should follow these rules:

1. The date should be the date that the branch was created.

2. The date should be numerical and in the form YYYYMMDD.

For example:

  binutils-tgc-fm_20050101

would be appropriate if the branch was created on January 1st, 2005.

Having selected the branch name, create the branch as follows:

1. Check out binutils, so that you have a git checkout corresponding
   to the initial state of your branch.

2. Create a tag:

     git tag binutils-<org>-<name>-branchpoint

   That tag will allow you, and others, to easily determine what's
   changed on the branch relative to the initial state.

3. Create and push the branch:

     git checkout -b binutils-<org>-<name>-branch
     git push origin HEAD

4. Document the branch:

     Add a description of the branch to binutils/BRANCHES, and check
     that file in.  All branch descriptions should be added to the
     HEAD revision of the file; it doesn't help to modify
     binutils/BRANCHES on a branch!

Please do not commit any patches to a branch you did not create
without the explicit permission of the person who created the branch.

Copyright (C) 2012-2017 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
