*** obstack.h.orig	2014-04-07 15:57:16.908837962 +0900
--- obstack.h	2014-04-07 15:58:22.208411479 +0900
***************
*** 221,230 ****
     more memory.  This can be set to a user defined function which
     should either abort gracefully or use longjump - but shouldn't
     return.  The default action is to print a message and abort.  */
! extern __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void);
  
  /* Exit value used when 'print_and_abort' is used.  */
! extern int obstack_exit_failure;
  
  /* Pointer to beginning of object being allocated or to be allocated next.
     Note that this might not be the final address of the object
--- 221,230 ----
     more memory.  This can be set to a user defined function which
     should either abort gracefully or use longjump - but shouldn't
     return.  The default action is to print a message and abort.  */
! extern DLL_VARIABLE __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void);
  
  /* Exit value used when 'print_and_abort' is used.  */
! extern DLL_VARIABLE int obstack_exit_failure;
  
  /* Pointer to beginning of object being allocated or to be allocated next.
     Note that this might not be the final address of the object
