public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Nick Alcock <nick.alcock@oracle.com>
To: binutils@sourceware.org
Subject: [PATCH 02/59] libctf: restructure error handling to reduce relocations
Date: Wed,  1 Jul 2020 00:30:49 +0100	[thread overview]
Message-ID: <20200630233146.338613-3-nick.alcock@oracle.com> (raw)
In-Reply-To: <20200630233146.338613-1-nick.alcock@oracle.com>

Jose Marchesi noted that the traditional-Unix error array in ctf-error.c
introduces one reloc per error to initialize the array: 58 so far.  We
can reduce this to zero using an array of carefully-sized individual
members which is used to construct a string table, that is then
referenced by the lookup functions: but doing this automatically is a
pain.

Bruno Haible wrote suitable code years ago: I got permission to reuse it
(Bruno says "... which I hereby put in the public domain"); I modified
it a tiny bit (similarly to what Ulrich Drepper did in the dsohowto
text, but I redid it from scratch), commented it up a bit, and shifted
the error table into that form, migrating it into the new file
ctf-error.h.

This has the advantage that it spotted both typos in the text of the
errors in the comments in ctf-api.h and typos in the error defines in
the comments in ctf-error.c, and places where the two were simply not
in sync.  All are now fixed.

One new constant exists in ctf-api.h: CTF_NERR, since the old method of
working out the number of errors in ctf-error.c was no longer usable,
and it seems that the number of CTF errors is something users might
reasonably want as well.  It should be pretty easy to keep up to date as
new errors are introduced.

include/
	* ctf-api.h (ECTF_*): Improve comments.
	(ECTF_NERR): New.

libctf/
	* ctf-error.c: Include <stddef.h>, for offsetof.
	(_ctf_errlist): Migrate to...
	(_ctf_errlist_t): ... this.
	(_ctf_erridx): New, indexes into _ctf_errlist_t.
	(_ctf_nerr): Remove.
	(ctf_errmsg): Adjust accordingly.
	* Makefile.am (BUILT_SOURCES): Note...
	(ctf-error.h): ... this new rule.
	* Makefile.in: Regenerate.
	* mkerrors.sed: New, process ctf-api.h to generate ctf-error.h.
	* .gitignore: New, ignore ctf-error.h.
---
 include/ctf-api.h   | 106 ++++++++++++++++++++++----------------------
 libctf/.gitignore   |   1 +
 libctf/Makefile.am  |   5 +++
 libctf/Makefile.in  |  15 +++++--
 libctf/ctf-error.c  |  99 +++++++++++++++++------------------------
 libctf/mkerrors.sed |  28 ++++++++++++
 6 files changed, 140 insertions(+), 114 deletions(-)
 create mode 100644 libctf/.gitignore
 create mode 100644 libctf/mkerrors.sed

diff --git a/include/ctf-api.h b/include/ctf-api.h
index bb1cf0f50eb..2e3e28b840c 100644
--- a/include/ctf-api.h
+++ b/include/ctf-api.h
@@ -153,60 +153,62 @@ typedef struct ctf_snapshot_id
 
 enum
   {
-   ECTF_FMT = ECTF_BASE,	/* File is not in CTF or ELF format.  */
-   ECTF_BFDERR,			/* BFD error.  */
-   ECTF_CTFVERS,		/* CTF version is more recent than libctf.  */
-   ECTF_BFD_AMBIGUOUS,		/* Ambiguous BFD target.  */
-   ECTF_SYMTAB,			/* Symbol table uses invalid entry size.  */
-   ECTF_SYMBAD,			/* Symbol table data buffer invalid.  */
-   ECTF_STRBAD,			/* String table data buffer invalid.  */
-   ECTF_CORRUPT,		/* File data corruption detected.  */
-   ECTF_NOCTFDATA,		/* ELF file does not contain CTF data.  */
-   ECTF_NOCTFBUF,		/* Buffer does not contain CTF data.  */
-   ECTF_NOSYMTAB,		/* Symbol table data is not available.  */
-   ECTF_NOPARENT,		/* Parent CTF container is not available.  */
-   ECTF_DMODEL,			/* Data model mismatch.  */
-   ECTF_LINKADDEDLATE,		/* File added to link too late.  */
-   ECTF_ZALLOC,			/* Failed to allocate (de)compression buffer.  */
-   ECTF_DECOMPRESS,		/* Failed to decompress CTF data.  */
-   ECTF_STRTAB,			/* String table for this string is missing.  */
-   ECTF_BADNAME,		/* String offset is corrupt w.r.t. strtab.  */
-   ECTF_BADID,			/* Invalid type ID number.  */
-   ECTF_NOTSOU,			/* Type is not a struct or union.  */
-   ECTF_NOTENUM,		/* Type is not an enum.  */
-   ECTF_NOTSUE,			/* Type is not a struct, union, or enum.  */
-   ECTF_NOTINTFP,		/* Type is not an integer, float, or enum.  */
-   ECTF_NOTARRAY,		/* Type is not an array.  */
-   ECTF_NOTREF,			/* Type does not reference another type.  */
-   ECTF_NAMELEN,		/* Buffer is too small to hold type name.  */
-   ECTF_NOTYPE,			/* No type found corresponding to name.  */
-   ECTF_SYNTAX,			/* Syntax error in type name.  */
-   ECTF_NOTFUNC,		/* Symbol entry or type is not a function.  */
-   ECTF_NOFUNCDAT,		/* No func info available for function.  */
-   ECTF_NOTDATA,		/* Symtab entry does not refer to a data obj.  */
-   ECTF_NOTYPEDAT,		/* No type info available for object.  */
-   ECTF_NOLABEL,		/* No label found corresponding to name.  */
-   ECTF_NOLABELDATA,		/* File does not contain any labels.  */
-   ECTF_NOTSUP,			/* Feature not supported.  */
-   ECTF_NOENUMNAM,		/* Enum element name not found.  */
-   ECTF_NOMEMBNAM,		/* Member name not found.  */
-   ECTF_RDONLY,			/* CTF container is read-only.  */
-   ECTF_DTFULL,			/* CTF type is full (no more members allowed).  */
-   ECTF_FULL,			/* CTF container is full.  */
-   ECTF_DUPLICATE,		/* Duplicate member or variable name.  */
-   ECTF_CONFLICT,		/* Conflicting type definition present.  */
-   ECTF_OVERROLLBACK,		/* Attempt to roll back past a ctf_update.  */
-   ECTF_COMPRESS,		/* Failed to compress CTF data.  */
-   ECTF_ARCREATE,		/* Error creating CTF archive.  */
-   ECTF_ARNNAME,		/* Name not found in CTF archive.  */
-   ECTF_SLICEOVERFLOW,		/* Overflow of type bitness or offset in slice.  */
-   ECTF_DUMPSECTUNKNOWN,	/* Unknown section number in dump.  */
-   ECTF_DUMPSECTCHANGED,	/* Section changed in middle of dump.  */
-   ECTF_NOTYET,			/* Feature not yet implemented.  */
-   ECTF_INTERNAL,		/* Internal error in link.  */
-   ECTF_NONREPRESENTABLE	/* Type not representable in CTF.  */
+   ECTF_FMT = ECTF_BASE, /* File is not in CTF or ELF format.  */
+   ECTF_BFDERR,		/* BFD error.  */
+   ECTF_CTFVERS,	/* CTF dict version is too new for libctf.  */
+   ECTF_BFD_AMBIGUOUS,	/* Ambiguous BFD target.  */
+   ECTF_SYMTAB,		/* Symbol table uses invalid entry size.  */
+   ECTF_SYMBAD,		/* Symbol table data buffer is not valid.  */
+   ECTF_STRBAD,		/* String table data buffer is not valid.  */
+   ECTF_CORRUPT,	/* File data structure corruption detected.  */
+   ECTF_NOCTFDATA,	/* File does not contain CTF data.  */
+   ECTF_NOCTFBUF,	/* Buffer does not contain CTF data.  */
+   ECTF_NOSYMTAB,	/* Symbol table information is not available.  */
+   ECTF_NOPARENT,	/* The parent CTF dictionary is unavailable.  */
+   ECTF_DMODEL,		/* Data model mismatch.  */
+   ECTF_LINKADDEDLATE,	/* File added to link too late.  */
+   ECTF_ZALLOC,		/* Failed to allocate (de)compression buffer.  */
+   ECTF_DECOMPRESS,	/* Failed to decompress CTF data.  */
+   ECTF_STRTAB,		/* External string table is not available.  */
+   ECTF_BADNAME,	/* String name offset is corrupt.  */
+   ECTF_BADID,		/* Invalid type identifier.  */
+   ECTF_NOTSOU,		/* Type is not a struct or union.  */
+   ECTF_NOTENUM,	/* Type is not an enum.  */
+   ECTF_NOTSUE,		/* Type is not a struct, union, or enum.  */
+   ECTF_NOTINTFP,	/* Type is not an integer, float, or enum.  */
+   ECTF_NOTARRAY,	/* Type is not an array.  */
+   ECTF_NOTREF,		/* Type does not reference another type.  */
+   ECTF_NAMELEN,	/* Buffer is too small to hold type name.  */
+   ECTF_NOTYPE,		/* No type found corresponding to name.  */
+   ECTF_SYNTAX,		/* Syntax error in type name.  */
+   ECTF_NOTFUNC,	/* Symbol table entry or type is not a function.  */
+   ECTF_NOFUNCDAT,	/* No function information available for function.  */
+   ECTF_NOTDATA,	/* Symbol table entry does not refer to a data object.  */
+   ECTF_NOTYPEDAT,	/* No type information available for symbol.  */
+   ECTF_NOLABEL,	/* No label found corresponding to name.  */
+   ECTF_NOLABELDATA,	/* File does not contain any labels.  */
+   ECTF_NOTSUP,		/* Feature not supported.  */
+   ECTF_NOENUMNAM,	/* Enum element name not found.  */
+   ECTF_NOMEMBNAM,	/* Member name not found.  */
+   ECTF_RDONLY,		/* CTF container is read-only.  */
+   ECTF_DTFULL,		/* CTF type is full (no more members allowed).  */
+   ECTF_FULL,		/* CTF container is full.  */
+   ECTF_DUPLICATE,	/* Duplicate member or variable name.  */
+   ECTF_CONFLICT,	/* Conflicting type is already defined.  */
+   ECTF_OVERROLLBACK,	/* Attempt to roll back past a ctf_update.  */
+   ECTF_COMPRESS,	/* Failed to compress CTF data.  */
+   ECTF_ARCREATE,	/* Error creating CTF archive.  */
+   ECTF_ARNNAME,	/* Name not found in CTF archive.  */
+   ECTF_SLICEOVERFLOW,	/* Overflow of type bitness or offset in slice.  */
+   ECTF_DUMPSECTUNKNOWN, /* Unknown section number in dump.  */
+   ECTF_DUMPSECTCHANGED, /* Section changed in middle of dump.  */
+   ECTF_NOTYET,		/* Feature not yet implemented.  */
+   ECTF_INTERNAL,	/* Internal error in link.  */
+   ECTF_NONREPRESENTABLE /* Type not representable in CTF.  */
   };
 
+#define ECTF_NERR (ECTF_NONREPRESENTABLE - ECTF_BASE + 1)	/* Count of CTF errors.  */
+
 /* The CTF data model is inferred to be the caller's data model or the data
    model of the given object, unless ctf_setmodel() is explicitly called.  */
 #define	CTF_MODEL_ILP32 1	/* Object data model is ILP32.  */
diff --git a/libctf/.gitignore b/libctf/.gitignore
new file mode 100644
index 00000000000..b95386e97d3
--- /dev/null
+++ b/libctf/.gitignore
@@ -0,0 +1 @@
+ctf-error.h
diff --git a/libctf/Makefile.am b/libctf/Makefile.am
index c672d07e142..cdd3a5c55d6 100644
--- a/libctf/Makefile.am
+++ b/libctf/Makefile.am
@@ -52,3 +52,8 @@ libctf_la_LIBADD = @BFD_LIBADD@ $(libctf_nobfd_la_LIBADD)
 libctf_la_DEPENDENCIES = @BFD_DEPENDENCIES@
 libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS)
 libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c
+
+BUILT_SOURCES = ctf-error.h
+
+ctf-error.h: $(srcdir)/mkerrors.sed $(srcdir)/../include/ctf-api.h
+	sed -nf $(srcdir)/mkerrors.sed < $(srcdir)/../include/ctf-api.h > $@
diff --git a/libctf/Makefile.in b/libctf/Makefile.in
index 9e6f2551a56..a26fa31da49 100644
--- a/libctf/Makefile.in
+++ b/libctf/Makefile.in
@@ -452,7 +452,8 @@ libctf_la_LIBADD = @BFD_LIBADD@ $(libctf_nobfd_la_LIBADD)
 libctf_la_DEPENDENCIES = @BFD_DEPENDENCIES@
 libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS)
 libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c
-all: config.h
+BUILT_SOURCES = ctf-error.h
+all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
@@ -855,13 +856,15 @@ distcleancheck: distclean
 	       $(distcleancheck_listfiles) ; \
 	       exit 1; } >&2
 check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h
 installdirs:
 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -891,6 +894,7 @@ distclean-generic:
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
@@ -965,7 +969,7 @@ ps-am:
 
 uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
 
-.MAKE: all install-am install-strip
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
 	clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \
@@ -989,6 +993,9 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES
 .PRECIOUS: Makefile
 
 
+ctf-error.h: $(srcdir)/mkerrors.sed $(srcdir)/../include/ctf-api.h
+	sed -nf $(srcdir)/mkerrors.sed < $(srcdir)/../include/ctf-api.h > $@
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/libctf/ctf-error.c b/libctf/ctf-error.c
index c457aa0a29f..1e69672007a 100644
--- a/libctf/ctf-error.c
+++ b/libctf/ctf-error.c
@@ -18,71 +18,54 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <ctf-impl.h>
+#include <stddef.h>
 
-static const char *const _ctf_errlist[] = {
-  "File is not in CTF or ELF format",		     /* ECTF_FMT */
-  "BFD error",					     /* ECTF_BFDERR */
-  "File uses more recent CTF version than libctf",   /* ECTF_CTFVERS */
-  "Ambiguous BFD target",			     /* ECTF_BFD_AMBIGUOUS */
-  "Symbol table uses invalid entry size",	     /* ECTF_SYMTAB */
-  "Symbol table data buffer is not valid",	     /* ECTF_SYMBAD */
-  "String table data buffer is not valid",	     /* ECTF_STRBAD */
-  "File data structure corruption detected",	     /* ECTF_CORRUPT */
-  "File does not contain CTF data",		     /* ECTF_NOCTFDATA */
-  "Buffer does not contain CTF data",		     /* ECTF_NOCTFBUF */
-  "Symbol table information is not available",	     /* ECTF_NOSYMTAB */
-  "Type information is in parent and unavailable",   /* ECTF_NOPARENT */
-  "Cannot import types with different data model",   /* ECTF_DMODEL */
-  "File added to link too late",		     /* ECTF_LINKADDEDLATE */
-  "Failed to allocate (de)compression buffer",	     /* ECTF_ZALLOC */
-  "Failed to decompress CTF data",		     /* ECTF_DECOMPRESS */
-  "External string table is not available",	     /* ECTF_STRTAB */
-  "String name offset is corrupt",		     /* ECTF_BADNAME */
-  "Invalid type identifier",			     /* ECTF_BADID */
-  "Type is not a struct or union",		     /* ECTF_NOTSOU */
-  "Type is not an enum",			     /* ECTF_NOTENUM */
-  "Type is not a struct, union, or enum",	     /* ECTF_NOTSUE */
-  "Type is not an integer, float, or enum",	     /* ECTF_NOTINTFP */
-  "Type is not an array",			     /* ECTF_NOTARRAY */
-  "Type does not reference another type",	     /* ECTF_NOTREF */
-  "Input buffer is too small for type name",	     /* ECTF_NAMELEN */
-  "No type information available for that name",     /* ECTF_NOTYPE */
-  "Syntax error in type name",			     /* ECTF_SYNTAX */
-  "Symbol table entry or type is not a function",    /* ECTF_NOTFUNC */
-  "No function information available for symbol",    /* ECTF_NOFUNCDAT */
-  "Symbol table entry is not a data object",	     /* ECTF_NOTDATA */
-  "No type information available for symbol",	     /* ECTF_NOTYPEDAT */
-  "No label information available for that name",    /* ECTF_NOLABEL */
-  "File does not contain any labels",		     /* ECTF_NOLABELDATA */
-  "Feature not supported",			     /* ECTF_NOTSUP */
-  "Invalid enum element name",			     /* ECTF_NOENUMNAM */
-  "Invalid member name",			     /* ECTF_NOMEMBNAM */
-  "CTF container is read-only",			     /* ECTF_RDONLY */
-  "Limit on number of dynamic type members reached", /* ECTF_DTFULL */
-  "Limit on number of dynamic types reached",	     /* ECTF_FULL */
-  "Duplicate member or variable name",		     /* ECTF_DUPLICATE */
-  "Conflicting type is already defined",	     /* ECTF_CONFLICT */
-  "Attempt to roll back past a ctf_update",	     /* ECTF_OVERROLLBACK */
-  "Failed to compress CTF data",		     /* ECTF_COMPRESS */
-  "Failed to create CTF archive",		     /* ECTF_ARCREATE */
-  "Name not found in CTF archive",		     /* ECTF_ARNNAME */
-  "Overflow of type bitness or offset in slice",     /* ECTF_SLICEOVERFLOW */
-  "Unknown section number in dump",		     /* ECTF_DUMPSECTUNKNOWN */
-  "Section changed in middle of dump",		     /* ECTF_DUMPSECTCHANGED */
-  "Feature not yet implemented",		     /* ECTF_NOTYET */
-  "Internal error in link",			     /* ECTF_INTERNAL */
-  "Type not representable in CTF"		     /* ECTF_NONREPRESENTABLE */
-};
-
-static const int _ctf_nerr = sizeof (_ctf_errlist) / sizeof (_ctf_errlist[0]);
+/* This construct is due to Bruno Haible: much thanks.  */
+
+/* Give each structure member a unique name.  The name does not matter, so we
+   use the line number in ctf-error.h to uniquify them.  */
+
+#define ERRSTRFIELD(line) ERRSTRFIELD1 (line)
+#define ERRSTRFIELD1(line) ctf_errstr##line
+
+/* The error message strings, each in a unique structure member precisely big
+   enough for that error, plus a str member to access them all as a string
+   table.  */
+
+static const union _ctf_errlist_t
+{
+  __extension__ struct
+  {
+#define _S(n, s) char ERRSTRFIELD (__LINE__) [sizeof (s)];
+#include "ctf-error.h"
+#undef _S
+  };
+  char str[1];
+} _ctf_errlist =
+  {
+   {
+#define _S(n, s) s,
+#include "ctf-error.h"
+#undef _S
+   }
+  };
+
+/* Offsets to each member in the string table, computed using offsetof.  */
+
+static const unsigned int _ctf_erridx[] =
+  {
+#define _S(n, s) [n - ECTF_BASE] = offsetof (union _ctf_errlist_t, ERRSTRFIELD (__LINE__)),
+#include "ctf-error.h"
+#undef _S
+  };
 
 const char *
 ctf_errmsg (int error)
 {
   const char *str;
 
-  if (error >= ECTF_BASE && (error - ECTF_BASE) < _ctf_nerr)
-    str = _ctf_errlist[error - ECTF_BASE];
+  if (error >= ECTF_BASE && (error - ECTF_BASE) < ECTF_NERR)
+    str = _ctf_errlist.str + _ctf_erridx[error - ECTF_BASE];
   else
     str = ctf_strerror (error);
 
diff --git a/libctf/mkerrors.sed b/libctf/mkerrors.sed
new file mode 100644
index 00000000000..146fd4abc1d
--- /dev/null
+++ b/libctf/mkerrors.sed
@@ -0,0 +1,28 @@
+#
+#   Copyright (C) 2020 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+
+# Only process lines in the error-define block
+/= ECTF_BASE/,/ECTF_NERR/ {
+    # Do not process non-errors (braces, ECTF_NERR, etc).
+    /^ *ECTF_/!n;
+    # Strip out the base initializer.
+    s, = ECTF_BASE,,;
+    # Transform errors into _S(...).
+    s@^ *\(ECTF_[^[:blank:],]*\),\{0,1\}[[:blank:]]*/\* \(.*\).  \*/$@_S (\1, "\2")@;
+    p;
+  }
-- 
2.27.0.247.g3dff7de930


  parent reply	other threads:[~2020-06-30 23:31 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-30 23:30 [PATCH 00/59] Deduplicating CTF linker Nick Alcock
2020-06-30 23:30 ` [PATCH 01/59] include, libctf: typo fixes Nick Alcock
2020-06-30 23:30 ` Nick Alcock [this message]
2020-07-22  9:31   ` [PATCH 02/59] fixup! libctf: restructure error handling to reduce relocations Nick Alcock
2020-06-30 23:30 ` [PATCH 03/59] libctf, create: support addition of references to the unimplemented type Nick Alcock
2020-06-30 23:30 ` [PATCH 04/59] libctf, create: do not corrupt function types' arglists at insertion time Nick Alcock
2020-06-30 23:30 ` [PATCH 05/59] libctf, create: add explicit casts for variables' and slices' types Nick Alcock
2020-06-30 23:30 ` [PATCH 06/59] libctf, types: allow ctf_type_reference of dynamic slices Nick Alcock
2020-06-30 23:30 ` [PATCH 07/59] libctf, open: drop unnecessary historical wart around forwards Nick Alcock
2020-06-30 23:30 ` [PATCH 08/59] libctf, create: member names of "" and NULL should be the same Nick Alcock
2020-06-30 23:30 ` [PATCH 09/59] libctf, create: fix addition of anonymous struct/union members Nick Alcock
2020-06-30 23:30 ` [PATCH 10/59] libctf, create: empty dicts are dirty to start with Nick Alcock
2020-06-30 23:30 ` [PATCH 11/59] libctf, types: support slices of anything terminating in an int Nick Alcock
2020-06-30 23:30 ` [PATCH 12/59] libctf, types: ints, floats and typedefs with no name are invalid Nick Alcock
2020-06-30 23:31 ` [PATCH 13/59] libctf, archive: stop ctf_arc_bufopen triggering crazy unmaps Nick Alcock
2020-06-30 23:31 ` [PATCH 14/59] libctf: having debugging enabled is unlikely Nick Alcock
2020-06-30 23:31 ` [PATCH 15/59] libctf: add ctf_type_name_raw Nick Alcock
2020-06-30 23:31 ` [PATCH 16/59] libctf: add ctf_type_kind_forwarded Nick Alcock
2020-06-30 23:31 ` [PATCH 17/59] libctf: add ctf_member_count Nick Alcock
2020-06-30 23:31 ` [PATCH 18/59] libctf: add ctf_archive_count Nick Alcock
2020-06-30 23:31 ` [PATCH 19/59] libctf: fix __extension__ with non-GNU C compilers Nick Alcock
2020-06-30 23:31 ` [PATCH 20/59] libctf: add new dynhash functions Nick Alcock
2020-06-30 23:31 ` [PATCH 21/59] libctf, hash: improve insertion of existing keys into dynhashes Nick Alcock
2020-06-30 23:31 ` [PATCH 22/59] libctf, hash: save per-item space when no key/item freeing function Nick Alcock
2020-06-30 23:31 ` [PATCH 23/59] libctf, hash: introduce the ctf_dynset Nick Alcock
2020-06-30 23:31 ` [PATCH 24/59] libctf: move existing inlines into ctf-inlines.h Nick Alcock
2020-06-30 23:31 ` [PATCH 25/59] libctf: add ctf_forwardable_kind Nick Alcock
2020-06-30 23:31 ` [PATCH 26/59] libctf: add ctf_ref Nick Alcock
2020-06-30 23:31 ` [PATCH 27/59] libctf, next: introduce new class of easier-to-use iterators Nick Alcock
2020-07-22  9:29   ` [PATCH 27/59] fixup! " Nick Alcock
2020-06-30 23:31 ` [PATCH 28/59] libctf, next, hash: add dynhash and dynset _next iteration Nick Alcock
2020-06-30 23:31 ` [PATCH 29/59] libctf: pass the thunk down properly when wrapping qsort_r Nick Alcock
2020-06-30 23:31 ` [PATCH 30/59] libctf: error out on corrupt CTF with invalid header flags Nick Alcock
2020-06-30 23:31 ` [PATCH 31/59] libctf, types: ensure the emission of ECTF_NOPARENT Nick Alcock
2020-06-30 23:31 ` [PATCH 32/59] libctf, ld, binutils: add textual error/warning reporting for libctf Nick Alcock
2020-06-30 23:31 ` [PATCH 33/59] libctf, types: enhance ctf_type_aname to print function arg types Nick Alcock
2020-06-30 23:31 ` [PATCH 34/59] libctf, decl: avoid leaks of the formatted string on error Nick Alcock
2020-06-30 23:31 ` [PATCH 35/59] libctf, dump: migrate towards dumping errors rather than truncation Nick Alcock
2020-06-30 23:31 ` [PATCH 36/59] libctf, dump: fix slice dumping Nick Alcock
2020-06-30 23:31 ` [PATCH 37/59] libctf, open: fix opening CTF in binaries with no symtab Nick Alcock
2020-06-30 23:31 ` [PATCH 38/59] libctf, archive: fix bad error message Nick Alcock
2020-06-30 23:31 ` [PATCH 39/59] libctf: check for vasprintf Nick Alcock
2020-06-30 23:31 ` [PATCH 40/59] libctf: rename the type_mapping_key to type_key Nick Alcock
2020-07-22  9:35   ` [PATCH 40/59] fixup! " Nick Alcock
2020-06-30 23:31 ` [PATCH 41/59] libctf: sort out potential refcount loops Nick Alcock
2020-06-30 23:31 ` [PATCH 42/59] libctf: drop error-prone ctf_strerror Nick Alcock
2020-06-30 23:31 ` [PATCH 43/59] libctf, link: add lazy linking: clean up input members: err/warn cleanup Nick Alcock
2020-06-30 23:31 ` [PATCH 44/59] libctf, link: fix ctf_link_write fd leak Nick Alcock
2020-06-30 23:31 ` [PATCH 45/59] libctf, link: redo cu-mapping handling Nick Alcock
2020-06-30 23:31 ` [PATCH 46/59] ctf, link: fix spurious conflicts of variables in the variable section Nick Alcock
2020-07-01 10:40   ` Nick Alcock
2020-06-30 23:31 ` [PATCH 47/59] libctf, link: add the ability to filter out variables from the link Nick Alcock
2020-06-30 23:31 ` [PATCH 48/59] libctf: add SHA-1 support for libctf Nick Alcock
2020-06-30 23:31 ` [PATCH 49/59] libctf, dedup: add new configure option --enable-libctf-hash-debugging Nick Alcock
2020-07-22  9:30   ` [PATCH 49/59] fixup! " Nick Alcock
2020-06-30 23:31 ` [PATCH 50/59] libctf, dedup: add deduplicator Nick Alcock
2020-07-22  9:33   ` [PATCH 50/59] squash! " Nick Alcock
2020-07-22  9:33   ` [PATCH 50/59] fixup! " Nick Alcock
2020-07-22  9:34   ` Nick Alcock
2020-06-30 23:31 ` [PATCH 51/59] libctf, link: add CTF_LINK_OMIT_VARIABLES_SECTION Nick Alcock
2020-06-30 23:31 ` [PATCH 52/59] libctf, link: tie in the deduplicating linker Nick Alcock
2020-07-22  9:36   ` [PATCH 52/59] fixup! " Nick Alcock
2020-06-30 23:31 ` [PATCH 53/59] binutils: objdump: ctf: drop incorrect linefeeds Nick Alcock
2020-06-30 23:31 ` [PATCH 54/59] ld: Reformat CTF errors into warnings Nick Alcock
2020-06-30 23:31 ` [PATCH 55/59] ld: new options --ctf-variables and --ctf-share-types Nick Alcock
2020-06-30 23:31 ` [PATCH 56/59] binutils, testsuite: allow compilation before doing run_dump_test Nick Alcock
2020-06-30 23:31 ` [PATCH 57/59] ld: new CTF testsuite Nick Alcock
2020-06-30 23:31 ` [PATCH 58/59] ld, testsuite: only run CTF tests when ld and GCC support CTF Nick Alcock
2020-07-22  9:32   ` [PATCH 58/59] fixup! " Nick Alcock
2020-06-30 23:31 ` [PATCH 59/59] ld: do not produce one empty output .ctf section for every input .ctf Nick Alcock
2020-07-14 21:31 ` [PATCH 00/59] Deduplicating CTF linker Nick Alcock
2020-07-20  5:49   ` Alan Modra
2020-07-20 21:06     ` Nick Alcock
2020-07-22  9:39 ` [PATCH 0/4] fallout of various portability testing Nick Alcock
2020-07-22  9:39   ` [PATCH 1/4] ld, testsuite: do not run CTF tests at all on non-ELF for now Nick Alcock
2020-07-22  9:39   ` [PATCH 2/4] libctf, binutils: fix big-endian libctf archive opening Nick Alcock
2020-07-22  9:39   ` [PATCH 3/4] libctf: fix isspace casts Nick Alcock
2020-07-22  9:39   ` [PATCH 4/4] libctf: fixes for systems on which sizeof (void *) > sizeof (long) Nick Alcock
2020-07-22 14:06   ` [PATCH 0/4] fallout of various portability testing Nick Alcock
2020-07-22 17:08 ` [PATCH 00/59] Deduplicating CTF linker Nick Alcock

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200630233146.338613-3-nick.alcock@oracle.com \
    --to=nick.alcock@oracle.com \
    --cc=binutils@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).