Index: gcc/gcc/c-common.c
diff -u gcc/gcc/c-common.c:1.1.1.1 gcc/gcc/c-common.c:1.2
--- gcc/gcc/c-common.c:1.1.1.1 Fri Oct 5 11:30:20 2001
+++ gcc/gcc/c-common.c Mon May 13 18:04:45 2002
@@ -3417,9 +3417,13 @@
built_in_decls[BUILT_IN_PUTS] =
builtin_function ("__builtin_puts", puts_ftype,
BUILT_IN_PUTS, BUILT_IN_NORMAL, "puts");
+ /* XXX
[email protected] - the kernel printf conflicts
+ with this. it's easiest to just turn this off for now. */
+#if 0
builtin_function_2 ("__builtin_printf", "printf",
printf_ftype, printf_ftype,
BUILT_IN_PRINTF, BUILT_IN_FRONTEND, 1, 0, 0);
+#endif
builtin_function_2 ("__builtin_fprintf", "fprintf",
fprintf_ftype, fprintf_ftype,
BUILT_IN_FPRINTF, BUILT_IN_FRONTEND, 1, 0, 0);
Index: gcc/gcc/c-decl.c
diff -u gcc/gcc/c-decl.c:1.1.1.1 gcc/gcc/c-decl.c:1.2
--- gcc/gcc/c-decl.c:1.1.1.1 Fri Oct 5 11:30:20 2001
+++ gcc/gcc/c-decl.c Mon May 13 18:05:32 2002
@@ -2459,7 +2459,13 @@
else if (oldlocal != 0)
warning ("declaration of `%s' shadows previous local", id);
else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
- && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
+ && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node
+ /* No shadow warnings for built-in functions that
+ haven't otherwise been declared yet. */
+ && ! (TREE_CODE (IDENTIFIER_GLOBAL_VALUE (name))
+ == FUNCTION_DECL
+ && DECL_BUILT_IN (IDENTIFIER_GLOBAL_VALUE (name))
+ && C_DECL_ANTICIPATED (IDENTIFIER_GLOBAL_VALUE (name))))
warning ("declaration of `%s' shadows global declaration", id);
}
Index: gcc/gcc/c-format.c
diff -u gcc/gcc/c-format.c:1.1.1.1 gcc/gcc/c-format.c:1.2
--- gcc/gcc/c-format.c:1.1.1.1 Fri Oct 5 11:30:20 2001
+++ gcc/gcc/c-format.c Mon May 13 18:06:09 2002
@@ -1473,9 +1473,11 @@
if (res.number_dollar_extra_args > 0 && res.number_non_literal == 0
&& res.number_other == 0 && warn_format_extra_args)
status_warning (status, "unused arguments in $-style format");
+#if 0 /* XXX - fredette */
if (res.number_empty > 0 && res.number_non_literal == 0
&& res.number_other == 0)
status_warning (status, "zero-length format string");
+#endif
if (res.number_wide > 0)
status_warning (status, "format is a wide character string");
@@ -1569,7 +1571,9 @@
specially if info == NULL and add a res->number_null entry for
that case, or maybe add a function pointer to be called at
the end instead of hardcoding check_format_info_main. */
+#if 0 /* XXX - fredette */
status_warning (status, "null format string");
+#endif
/* Skip to first argument to check, so we can see if this format
has any arguments (it shouldn't). */
Index: gcc/gcc/config.gcc
diff -u gcc/gcc/config.gcc:1.1.1.1 gcc/gcc/config.gcc:1.3
--- gcc/gcc/config.gcc:1.1.1.1 Fri Oct 5 11:30:20 2001
+++ gcc/gcc/config.gcc Tue Jun 18 12:41:14 2002
@@ -718,6 +718,20 @@
thread_file='posix'
fi
;;
+hppa*-*-netbsd*)
+ # in the NetBSD tree, this will be done in common code:
+ tm_file=pa/netbsd-elf.h
+ tmake_file="t-libc-ok t-netbsd"
+ xm_file="${xm_file} xm-netbsd.h"
+ xmake_file=none
+ # target-specific. note that we may override some common-code
+ # things above; if so the above can get cleaned up.
+ target_cpu_default="MASK_PA_11"
+ tm_file="${tm_file} pa/pa32-regs.h"
+ tmake_file=pa/t-netbsd
+ xm_file=pa/xm-pa.h
+ gas=yes gnu_ld=yes
+ ;;
hppa*-*-openbsd*)
target_cpu_default="MASK_PA_11"
tmake_file=pa/t-openbsd
Index: gcc/gcc/cppmacro.c
diff -u gcc/gcc/cppmacro.c:1.1.1.1 gcc/gcc/cppmacro.c:1.2
--- gcc/gcc/cppmacro.c:1.1.1.1 Fri Oct 5 11:30:20 2001
+++ gcc/gcc/cppmacro.c Mon May 13 18:08:56 2002
@@ -1180,9 +1180,6 @@
if (node->flags & NODE_WARN)
return 1;
- if (! CPP_PEDANTIC (pfile))
- return 0;
-
/* Redefinition of a macro is allowed if and only if the old and new
definitions are the same. (6.10.3 paragraph 2). */
macro1 = node->value.macro;
Index: gcc/gcc/config/pa/milli32.S
diff -u gcc/gcc/config/pa/milli32.S:1.1.1.1 gcc/gcc/config/pa/milli32.S:1.2
--- gcc/gcc/config/pa/milli32.S:1.1.1.1 Fri Oct 5 11:30:25 2001
+++ gcc/gcc/config/pa/milli32.S Tue Jun 18 12:48:29 2002
@@ -64,7 +64,7 @@
ldw 4(%r22),%r19 ; load new LTP value
ldw 0(%r22),%r22 ; load address of target
LSYM(1)
-#ifdef LINUX
+#if defined(LINUX) || defined(NETBSD)
bv %r0(%r22) ; branch to the real target
#else
ldsid (%sr0,%r22),%r1 ; get the "space ident" selected by r22
Index: gcc/gcc/config/pa/netbsd-elf.h
diff -u /dev/null gcc/gcc/config/pa/netbsd-elf.h:1.2
--- /dev/null Thu Nov 14 11:54:27 2002
+++ gcc/gcc/config/pa/netbsd-elf.h Tue Jun 18 12:49:17 2002
@@ -0,0 +1,371 @@
+/* Definitions for NetBSD PA_RISC with ELF format
+ Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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, or (at your option)
+any later version.
+
+GNU CC 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 GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* XXX fredette - placement of this might need to be tuned: */
+#include <pa/pa.h>
+
+/* XXX fredette - placement of this might need to be tuned: */
+#define OBJECT_FORMAT_ELF
+#define NETBSD_ELF
+#include <netbsd.h>
+
+/* Biggest alignment supported by the object file format of this
+ machine. Use this macro to limit the alignment which can be
+ specified using the `__attribute__ ((aligned (N)))' construct. If
+ not defined, the default value is `BIGGEST_ALIGNMENT'. */
+#define MAX_OFILE_ALIGNMENT (32768 * 8)
+
+#define bsd4_4
+#undef HAS_INIT_SECTION
+
+/* Switch into a generic section.
+ This is currently only used to support section attributes.
+
+ We make the section read-only and executable for a function decl,
+ read-only for a const data decl, and writable for a non-const data decl. */
+#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
+ fprintf (FILE, "\t.section\t\"%s\",\"%s\",@progbits\n", NAME, \
+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
+ (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "aw")
+
+/* XXX fredette - all of this used to be enabled before I
+ added LABELS_WITHOUT_COLONS to gas' config/tc-hppa.h: */
+#if 0
+/* This is how to store into the string LABEL
+ the symbol_ref name of an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class.
+ This is suitable for output with `assemble_name'. */
+
+#undef ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
+ sprintf ((LABEL), "*.L%s%ld", (PREFIX), (long)(NUM))
+
+/* This is how to output an internal numbered label where
+ PREFIX is the class of label and NUM is the number within the class. */
+
+#undef ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
+ fprintf (FILE, ".L%s%d:\n", PREFIX, NUM)
+
+/* This is how to output the definition of a user-level label named NAME,
+ such as the label on a static function or variable NAME. */
+
+#undef ASM_OUTPUT_LABEL
+#define ASM_OUTPUT_LABEL(FILE,NAME) \
+ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+
+/* This says how to output an assembler line to define a global common symbol
+ with size SIZE (in bytes) and alignment ALIGN (in bits). */
+
+#undef ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGNED) \
+{ bss_section (); \
+ assemble_name ((FILE), (NAME)); \
+ fputs (":\t.comm ", (FILE)); \
+ fprintf ((FILE), "%d\n", MAX ((SIZE), ((ALIGNED) / BITS_PER_UNIT)));}
+
+/* This says how to output an assembler line to define a local common symbol
+ with size SIZE (in bytes) and alignment ALIGN (in bits). */
+
+#undef ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGNED) \
+{ bss_section (); \
+ fprintf ((FILE), "\t.align %d\n", ((ALIGNED) / BITS_PER_UNIT)); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), ":\n\t.block %d\n", (SIZE));}
+#endif /* 0 */
+
+#if 0 /* eventually... */
+/* Use DWARF2 debugging info and unwind. */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+#endif
+#define DWARF2_ASM_LINE_DEBUG_INFO 1
+#define DWARF2_UNWIND_INFO 1
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__hppa__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ -Asystem(unix) -Asystem(NetBSD) -Acpu(hppa) -Amachine(hppa) -Amachine(bigendian)"
+
+#undef CC1_SPEC
+#define CC1_SPEC "%{pg:} %{p:} %{!mspace-regs:-mno-space-regs}"
+
+#undef LIB_SPEC
+#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
+
+#undef ASM_SPEC
+#define ASM_SPEC \
+ "%{v:-V} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
+
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "-m hppanbsd \
+ %{assert*} %{R*} \
+ %{shared:-shared} \
+ %{!shared: \
+ -dy -dc -dp \
+ %{!nostdlib:%{!r*:%{!e*:-e _start}}} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
+ %{static:-static}}"
+
+#undef FUNCTION_OK_FOR_SIBCALL
+#define FUNCTION_OK_FOR_SIBCALL(DECL) 1
+
+#if 0 /* XXX - fredette */
+/* glibc's profiling functions don't need gcc to allocate counters. */
+#define NO_PROFILE_COUNTERS 1
+#endif
+
+/* Put plabels into the data section so we can relocate them. */
+#undef SELECT_RTX_SECTION
+#define SELECT_RTX_SECTION(MODE,RTX) \
+ if (flag_pic && function_label_operand (RTX, MODE)) \
+ data_section (); \
+ else \
+ readonly_data_section ();
+
+/* A C expression whose value is RTL representing the location of the
+ incoming return address at the beginning of any function, before the
+ prologue. */
+#define INCOMING_RETURN_ADDR_RTX (gen_rtx_REG (word_mode, 2))
+#define DWARF_FRAME_RETURN_COLUMN (DWARF_FRAME_REGNUM (2))
+
+/* Define the strings used for the special svr4 .type and .size directives.
+ These strings generally do not vary from one system running svr4 to
+ another, but if a given system (e.g. m88k running svr) needs to use
+ different pseudo-op names for these, they may be overridden in the
+ file which includes this one. */
+
+#undef STRING_ASM_OP
+#define STRING_ASM_OP ".stringz"
+
+/* Section output setup. */
+
+#define USE_CONST_SECTION 1
+
+#define TEXT_SECTION_ASM_OP "\t.text"
+#define DATA_SECTION_ASM_OP "\t.data"
+#define BSS_SECTION_ASM_OP "\t.section\t.bss"
+#define CONST_SECTION_ASM_OP "\t.section\t.rodata"
+#define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\""
+#define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\""
+#define INIT_SECTION_ASM_OP "\t.section\t.init"
+#define FINI_SECTION_ASM_OP "\t.section\t.fini"
+
+#undef EXTRA_SECTIONS
+#define EXTRA_SECTIONS in_const, in_ctors, in_dtors
+
+#undef EXTRA_SECTION_FUNCTIONS
+#define EXTRA_SECTION_FUNCTIONS \
+ CONST_SECTION_FUNCTION \
+ CTORS_SECTION_FUNCTION \
+ DTORS_SECTION_FUNCTION
+
+#undef READONLY_DATA_SECTION
+#define READONLY_DATA_SECTION() const_section ()
+
+extern void text_section ();
+
+#define CONST_SECTION_FUNCTION \
+void \
+const_section () \
+{ \
+ if (!USE_CONST_SECTION) \
+ text_section(); \
+ else if (in_section != in_const) \
+ { \
+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
+ in_section = in_const; \
+ } \
+}
+
+#define CTORS_SECTION_FUNCTION \
+void \
+ctors_section () \
+{ \
+ if (in_section != in_ctors) \
+ { \
+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
+ in_section = in_ctors; \
+ } \
+}
+
+#define DTORS_SECTION_FUNCTION \
+void \
+dtors_section () \
+{ \
+ if (in_section != in_dtors) \
+ { \
+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
+ in_section = in_dtors; \
+ } \
+}
+
+/* A C statement (sans semicolon) to output an element in the table of
+ global constructors. */
+#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
+ do { \
+ ctors_section (); \
+ fprintf (FILE, "\t.word\tP%%"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } while (0)
+
+/* A C statement (sans semicolon) to output an element in the table of
+ global destructors. */
+#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
+ do { \
+ dtors_section (); \
+ fprintf (FILE, "\t.word\tP%%"); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } while (0)
+
+/* Output at beginning of assembler file. We override the definition
+ from <linux.h> so that we can get the proper .LEVEL directive. */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) \
+ do \
+ { \
+ if (write_symbols != NO_DEBUG) \
+ { \
+ output_file_directive (FILE, main_input_filename); \
+ fputs ("\t.version\t\"01.01\"\n", FILE); \
+ } \
+ if (TARGET_64BIT) \
+ fputs("\t.LEVEL 2.0w\n", FILE); \
+ else if (TARGET_PA_20) \
+ fputs("\t.LEVEL 2.0\n", FILE); \
+ else if (TARGET_PA_11) \
+ fputs("\t.LEVEL 1.1\n", FILE); \
+ else \
+ fputs("\t.LEVEL 1.0\n", FILE); \
+ if (profile_flag) \
+ fputs ("\t.IMPORT _mcount, CODE\n", FILE); \
+ } \
+ while (0)
+
+/* Output a definition */
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
+ do \
+ { \
+ fprintf ((FILE), "\t%s\t", SET_ASM_OP); \
+ assemble_name (FILE, LABEL1); \
+ fprintf (FILE, ","); \
+ assemble_name (FILE, LABEL2); \
+ fprintf (FILE, "\n"); \
+ } \
+ while (0)
+
+/* XXX fredette - these two used to be enabled before they blew up on me: */
+#if 0
+/* Define these to generate the Linux/ELF/SysV style of internal
+ labels all the time - i.e. to be compatible with
+ ASM_GENERATE_INTERNAL_LABEL in <elfos.h>. Compare these with the
+ ones in pa.h and note the lack of dollar signs in these. FIXME:
+ shouldn't we fix pa.h to use ASM_GENERATE_INTERNAL_LABEL instead? */
+
+#undef ASM_OUTPUT_ADDR_VEC_ELT
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+ if (TARGET_BIG_SWITCH) \
+ fprintf (FILE, "\tstw %%r1,-16(%%r30)\n\tldil LR'.L%d,%%r1\n\tbe RR'.L%d(%%sr4,%%r1)\n\tldw -16(%%r30),%%r1\n", VALUE, VALUE); \
+ else \
+ fprintf (FILE, "\tb .L%d\n\tnop\n", VALUE)
+
+#undef ASM_OUTPUT_ADDR_DIFF_ELT
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
+ if (TARGET_BIG_SWITCH) \
+ fprintf (FILE, "\tstw %%r1,-16(%%r30)\n\tldw T'.L%d(%%r19),%%r1\n\tbv %%r0(%%r1)\n\tldw -16(%%r30),%%r1\n", VALUE); \
+ else \
+ fprintf (FILE, "\tb .L%d\n\tnop\n", VALUE)
+#endif /* 0 */
+
+/* XXX fredette - all of this used to be enabled before I
+ added LABELS_WITHOUT_COLONS to gas' config/tc-hppa.h: */
+#if 0
+/* This is how to output the definition of a user-level label named NAME,
+ such as the label on a static function or variable NAME. */
+
+#undef ASM_OUTPUT_LABEL
+#define ASM_OUTPUT_LABEL(FILE, NAME) \
+ do \
+ { \
+ assemble_name (FILE, NAME); \
+ fputs (":\n", FILE); \
+ } \
+ while (0)
+#endif /* 0 */
+
+/* NOTE: ASM_OUTPUT_INTERNAL_LABEL() is defined for us by elfos.h, and
+ does what we want (i.e. uses colons). It must be compatible with
+ ASM_GENERATE_INTERNAL_LABEL(), so do not define it here. */
+
+#undef ASM_GLOBALIZE_LABEL
+#define ASM_GLOBALIZE_LABEL(FILE, NAME) \
+ (fputs ("\t.globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE))
+
+/* FIXME: Hacked from the <elfos.h> one so that we avoid multiple
+ labels in a function declaration (since pa.c seems determined to do
+ it differently) */
+
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+ do \
+ { \
+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
+ putc ('\n', FILE); \
+ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
+ } \
+ while (0)
+
+/* NetBSD always uses gas. */
+#undef TARGET_GAS
+#define TARGET_GAS 1
+
+/* Definitions for PA_RISC with ELF-32 format
+ Copyright (C) 2000 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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, or (at your option)
+any later version.
+
+GNU CC 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 GNU CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* Turn off various SOM crap we don't want. */
+#undef TARGET_ELF32
+#define TARGET_ELF32 1
+
+#undef CPP_SPEC
+#define CPP_SPEC "%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{mhppa:-D__hppa__} %{posix:-D_POSIX_SOURCE} -D_PA_RISC1_1"
Index: gcc/gcc/config/pa/t-netbsd
diff -u /dev/null gcc/gcc/config/pa/t-netbsd:1.2
--- /dev/null Thu Nov 14 11:54:27 2002
+++ gcc/gcc/config/pa/t-netbsd Tue Jun 18 12:48:06 2002
@@ -0,0 +1,32 @@
+LIBGCC1=libgcc1-asm.a
+CROSS_LIBGCC1=libgcc1-asm.a
+
+#Plug millicode routines into libgcc.a We want these on both native and
+#cross compiles.
+
+LIB1ASMFUNCS = _divI _divU _remI _remU _multiply \
+ _divI_15 _divI_14 _divI_12 _divI_10 _divI_9 \
+ _divI_7 _divI_6 _divI_5 _divI_3 \
+ _divU_15 _divU_14 _divU_12 _divU_10 _divU_9 \
+ _divU_7 _divU_6 _divU_5 _divU_3 _dyncall
+
+LIB1ASMSRC = pa/milli32.S
+
+# Don't build a shared libgcc_s.so. Our libgcc contains millicode, and
+# the ABI (linker and dynamic linker really) does not allow millicode
+# to be exported from shared libraries. Consequently, to successfully
+# link against libgcc_s.so it is necessary to link against _both_
+# libgcc_s.so and libgcc.a. This is a pain. It's easier just to disable
+# the shared libgcc.
+SHLIB_LINK =
+
+### Compile crtbeginS.o and crtendS.o as PIC.
+### XXX fredette - we're afraid of the optimizer:
+CRTSTUFF_T_CFLAGS_S = -fPIC -O0
+
+### Compile libgcc2.a as PIC.
+### This is also used when compiling libgcc1 if libgcc1 is the asm variety.
+### XXX fredette - we're afraid of the optimizer:
+TARGET_LIBGCC2_CFLAGS = -fPIC -O0 -DELF=1 -DNETBSD
+
+ADA_CFLAGS=-mdisable-indexing
Index: gcc/include/libiberty.h
diff -u gcc/include/libiberty.h:1.1.1.1 gcc/include/libiberty.h:1.2
--- gcc/include/libiberty.h:1.1.1.1 Fri Oct 5 17:35:34 2001
+++ gcc/include/libiberty.h Mon May 13 18:09:58 2002
@@ -205,8 +205,10 @@
/* Like vsprintf but provides a pointer to malloc'd storage, which
must be freed by the caller. */
+#ifndef __NetBSD__
extern int vasprintf PARAMS ((char **, const char *, va_list))
ATTRIBUTE_PRINTF(2,0);
+#endif
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))