From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thiemo Seufer To: binutils@sources.redhat.com Cc: ica2_ts@csv.ica.uni-stuttgart.de Subject: Re: [PATCH] Include alloca.h for bfd Date: Tue, 21 Aug 2001 14:46:00 -0000 Message-id: <20010821234604.J30301@rembrandt.csv.ica.uni-stuttgart.de> References: <20010821210909.E30301@rembrandt.csv.ica.uni-stuttgart.de> X-SW-Source: 2001-08/msg00492.html Ian Lance Taylor wrote: > Thiemo Seufer writes: > > > this checks for inclusion of alloca.h, which is required on IRIX6.5 > > to compile e.g. linker.c. > > This patch is incorrect. Any declaration of alloca or inclusions of > alloca.h must be done as in gas/as.h. Uh, that's a really ugly piece of code. > In the past I did not permit alloca to be used in BFD, because on > systems which do not have alloca the version in libiberty would call > xmalloc, which might cause the program to crash when it ran out of > memory. I believe that BFD should never crash because it runs out of > memory; instead, it should return the appropriate error to the caller. > (That's why I wrote the objalloc interface when obstacks were changed > to no longer support a failure to allocate memory.) However, I do not > know what the current thinking is on alloca in BFD. Well, alloca() is called in BFD: bfd/elfxx-ia64.c: char *once_name = alloca (len2 + strlen (sname) - len + 1); bfd/elfxx-ia64.c: addr_name = alloca (len); bfd/som.c: unsigned char *tmp_space = alloca (tmp_space_size); bfd/som.c: tmp_space = alloca (tmp_space_size); bfd/som.c: unsigned char *tmp_space = alloca (tmp_space_size); bfd/som.c: tmp_space = alloca (tmp_space_size); bfd/som.c: tmp_space = alloca (tmp_space_size); bfd/elf64-hppa.c: new_name = alloca (strlen (h->root.root.string) + 2); bfd/elf64-hppa.c: new_name = alloca (strlen (h->root.root.string) + 2); bfd/vms-hdr.c: fname = (char *) alloca (strlen (fptr) + 1); bfd/linker.c: char *buf = alloca (strlen (h->root.string) + 10); The last one causes the build with native tools on IRIX6.5 to fail. This patch lets it compile. Thiemo 2001-08-21 Thiemo Seufer /bfd/ChangeLog * sysdep.h (HAVE_ALLOCA): Check for inclusion of alloca.h, needed on irix6. diff -BurpNX /bigdisk/src/binutils-exclude src-orig/bfd/sysdep.h src/bfd/sysdep.h --- src-orig/bfd/sysdep.h Tue Aug 21 19:13:51 2001 +++ src/bfd/sysdep.h Tue Aug 21 22:54:13 2001 @@ -26,6 +26,35 @@ Foundation, Inc., 59 Temple Place - Suit #include "config.h" +/* This is the code recommended in the autoconf documentation, almost + verbatim. If it doesn't work for you, let me know, and notify + djm@gnu.ai.mit.edu as well. */ +/* Added void* version for STDC case. This is to be compatible with + the declaration in bison.simple, used for m68k operand parsing. + --KR 1995.08.08 */ +/* Force void* decl for hpux. This is what Bison uses. --KR 1995.08.16 */ + +#ifndef __GNUC__ +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +/* Indented so that pre-ansi C compilers will ignore it, rather than + choke on it. Some versions of AIX require this to be the first + thing in the file. */ + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +# if !defined (__STDC__) && !defined (__hpux) +extern char *alloca (); +# else +extern void *alloca (); +# endif /* __STDC__, __hpux */ +# endif /* alloca */ +# endif /* _AIX */ +# endif /* HAVE_ALLOCA_H */ +#endif /* __GNUC__ */ + #ifdef HAVE_STDDEF_H #include #endif