This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Modify obstack.[hc] to avoid having to include other gnulib files


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e9f40d7d68ecc03c8c32ec0acd07c35359fdb4a3

commit e9f40d7d68ecc03c8c32ec0acd07c35359fdb4a3
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Nov 9 15:13:51 2015 +1030

    Modify obstack.[hc] to avoid having to include other gnulib files
    
    Using the standard gnulib obstack source requires importing quite a
    lot of other files from gnulib, and requires build changes.
    
    include/
    	PR gdb/17133
    	* obstack.h (__attribute_pure__): Expand _GL_ATTRIBUTE_PURE.
    libiberty/
    	PR gdb/17133
    	* obstack.c (__alignof__): Expand alignof_type from alignof.h.
    	(obstack_exit_failure): Don't use exitfail.h.
    	(_): Include libintl.h when HAVE_LIBINTL_H and nls enabled.
    	Provide default.  Don't include gettext.h.
    	(_Noreturn): Define.
    	* obstacks.texi: Adjust node references to external libc info files.

Diff:
---
 include/ChangeLog       |  5 +++++
 include/obstack.h       |  6 +++++-
 libiberty/ChangeLog     | 10 ++++++++++
 libiberty/obstack.c     | 40 +++++++++++++++++++++++++++++++---------
 libiberty/obstacks.texi |  8 ++++----
 5 files changed, 55 insertions(+), 14 deletions(-)

diff --git a/include/ChangeLog b/include/ChangeLog
index e8b5a6e..01a25de 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,6 +1,11 @@
 2015-11-09  Alan Modra  <amodra@gmail.com>
 
 	PR gdb/17133
+	* obstack.h (__attribute_pure__): Expand _GL_ATTRIBUTE_PURE.
+
+2015-11-09  Alan Modra  <amodra@gmail.com>
+
+	PR gdb/17133
 	* obstack.h: Import current gnulib file.
 
 2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
diff --git a/include/obstack.h b/include/obstack.h
index 0ff3309..0d13c72 100644
--- a/include/obstack.h
+++ b/include/obstack.h
@@ -142,7 +142,11 @@
                 P, A)
 
 #ifndef __attribute_pure__
-# define __attribute_pure__ _GL_ATTRIBUTE_PURE
+# if defined __GNUC_MINOR__ && __GNUC__ * 1000 + __GNUC_MINOR__ >= 2096
+#  define __attribute_pure__ __attribute__ ((__pure__))
+# else
+#  define __attribute_pure__
+# endif
 #endif
 
 #ifdef __cplusplus
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index f241135..05b60d8 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,6 +1,16 @@
 2015-11-09  Alan Modra  <amodra@gmail.com>
 
 	PR gdb/17133
+	* obstack.c (__alignof__): Expand alignof_type from alignof.h.
+	(obstack_exit_failure): Don't use exitfail.h.
+	(_): Include libintl.h when HAVE_LIBINTL_H and nls enabled.
+	Provide default.  Don't include gettext.h.
+	(_Noreturn): Define.
+	* obstacks.texi: Adjust node references to external libc info files.
+
+2015-11-09  Alan Modra  <amodra@gmail.com>
+
+	PR gdb/17133
 	* obstack.c: Import current gnulib file.
 	* obstacks.texi: Updated doc, from glibc's manual/memory.texi.
 
diff --git a/libiberty/obstack.c b/libiberty/obstack.c
index 3b99dfa..9f34da1 100644
--- a/libiberty/obstack.c
+++ b/libiberty/obstack.c
@@ -51,9 +51,14 @@
 /* If GCC, or if an oddball (testing?) host that #defines __alignof__,
    use the already-supplied __alignof__.  Otherwise, this must be Gnulib
    (as glibc assumes GCC); defer to Gnulib's alignof_type.  */
-# if !defined __GNUC__ && !defined __alignof__
-#  include <alignof.h>
-#  define __alignof__(type) alignof_type (type)
+# if !defined __GNUC__ && !defined __IBM__ALIGNOF__ && !defined __alignof__
+#  if defined __cplusplus
+template <class type> struct alignof_helper { char __slot1; type __slot2; };
+#   define __alignof__(type) offsetof (alignof_helper<type>, __slot2)
+#  else
+#   define __alignof__(type)						      \
+  offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#  endif
 # endif
 # include <stdlib.h>
 # include <stdint.h>
@@ -309,17 +314,34 @@ _obstack_memory_used (struct obstack *h)
 #  ifdef _LIBC
 int obstack_exit_failure = EXIT_FAILURE;
 #  else
-#   include "exitfail.h"
-#   define obstack_exit_failure exit_failure
+#   ifndef EXIT_FAILURE
+#    define EXIT_FAILURE 1
+#   endif
+#   define obstack_exit_failure EXIT_FAILURE
 #  endif
 
-#  ifdef _LIBC
+#  if defined _LIBC || (HAVE_LIBINTL_H && ENABLE_NLS)
 #   include <libintl.h>
+#   ifndef _
+#    define _(msgid) gettext (msgid)
+#   endif
 #  else
-#   include "gettext.h"
+#   ifndef _
+#    define _(msgid) (msgid)
+#   endif
 #  endif
-#  ifndef _
-#   define _(msgid) gettext (msgid)
+
+#  if !(defined _Noreturn						      \
+        || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112))
+#   if ((defined __GNUC__						      \
+	 && (__GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)))	      \
+	|| (defined __SUNPRO_C && __SUNPRO_C >= 0x5110))
+#    define _Noreturn __attribute__ ((__noreturn__))
+#   elif defined _MSC_VER && _MSC_VER >= 1200
+#    define _Noreturn __declspec (noreturn)
+#   else
+#    define _Noreturn
+#   endif
 #  endif
 
 #  ifdef _LIBC
diff --git a/libiberty/obstacks.texi b/libiberty/obstacks.texi
index 1bfc878..b2d2403 100644
--- a/libiberty/obstacks.texi
+++ b/libiberty/obstacks.texi
@@ -93,7 +93,7 @@ them are freed.  These macros should appear before any use of obstacks
 in the source file.
 
 Usually these are defined to use @code{malloc} via the intermediary
-@code{xmalloc} (@pxref{Unconstrained Allocation}).  This is done with
+@code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}).  This is done with
 the following pair of macro definitions:
 
 @smallexample
@@ -172,8 +172,8 @@ The value of this variable is a pointer to a function that
 @code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate
 memory.  The default action is to print a message and abort.
 You should supply a function that either calls @code{exit}
-(@pxref{Program Termination}) or @code{longjmp} (@pxref{Non-Local
-Exits}) and doesn't return.
+(@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local
+Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return.
 
 @smallexample
 void my_obstack_alloc_failed (void)
@@ -253,7 +253,7 @@ obstack_savestring (char *addr, size_t size)
 
 @noindent
 Contrast this with the previous example of @code{savestring} using
-@code{malloc} (@pxref{Basic Allocation}).
+@code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}).
 
 @node Freeing Obstack Objects
 @subsubsection Freeing Objects in an Obstack


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]