		========= 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.ac, 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).

Patches to the libiberty sources should be sent to
gcc-patches@gcc.gnu.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>
  ARC		   Claudiu Zissulescu <claziss@synopsys.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>
  BPF		   Jose E. Marchesi <jose.marchesi@oracle.com>
  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>
  CTF		   Nick Alcock <nick.alcock@oracle.com>
  C-SKY		   Lifang Xia <lifang_xia@c-sky.com>
  C-SKY		   Yunhai Shang <yunhai_shang@c-sky.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		   Nick Clifton <nickc@redhat.com>
  FRV		   Nick Clifton <nickc@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@bell.net>
  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>
  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>
  MACH-O           Tristan Gingold <tgingold@free.fr>
  MAXQ		   Inderpreet Singh <inderpreetb@noida.hcltech.com>
  MEP		   Nick Clifton <nickc@redhat.com>
  METAG            Markos Chandras <markos.chandras@imgtec.com>
  MICROBLAZE	   Michael Eager <eager@eagercon.com>
  MIPS		   Chenghua Xu <paul.hua.gm@gmail.com>
  MIPS I-IV	   Maciej W. Rozycki <macro@linux-mips.org>
  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>
  RX               Nick Clifton <nickc@redhat.com>
  S12Z		   John Darrington <john@darrington.wattle.id.au>
  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>
  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
  Jason Eckhardt
  Mark Kettenis
  Mei Ligang
  Arnold Metselaar
  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-2019 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.
