From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1062) id ACD963857023; Fri, 13 May 2022 09:44:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ACD963857023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Alan Modra To: bfd-cvs@sourceware.org, gdb-cvs@sourceware.org Subject: [binutils-gdb] Import libiberty from gcc X-Act-Checkin: binutils-gdb X-Git-Author: Alan Modra X-Git-Refname: refs/heads/master X-Git-Oldrev: 845cbaa9ffbfd6a1f7976a6c7f3e4461e4d41993 X-Git-Newrev: 31b15688c414c7caf957be63d2914faafa1b9dda Message-Id: <20220513094422.ACD963857023@sourceware.org> Date: Fri, 13 May 2022 09:44:22 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 May 2022 09:44:22 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D31b15688c414= c7caf957be63d2914faafa1b9dda commit 31b15688c414c7caf957be63d2914faafa1b9dda Author: Alan Modra Date: Fri May 13 16:43:15 2022 +0930 Import libiberty from gcc Diff: --- include/ansidecl.h | 28 +-------- include/floatformat.h | 2 +- include/md5.h | 6 ++ libiberty/alloca.c | 6 +- libiberty/calloc.c | 8 +-- libiberty/hashtab.c | 94 +++++++++++++++-----------= ---- libiberty/memchr.c | 6 +- libiberty/memcmp.c | 2 +- libiberty/memcpy.c | 4 +- libiberty/memmove.c | 4 +- libiberty/mempcpy.c | 6 +- libiberty/memset.c | 4 +- libiberty/objalloc.c | 22 +++---- libiberty/random.c | 14 ++--- libiberty/rust-demangle.c | 21 ++++++- libiberty/simple-object-elf.c | 10 +--- libiberty/spaces.c | 4 +- libiberty/stpcpy.c | 2 +- libiberty/strdup.c | 4 +- libiberty/strerror.c | 4 +- libiberty/strndup.c | 4 +- libiberty/strsignal.c | 4 +- libiberty/testsuite/rust-demangle-expected | 26 +++++++++ libiberty/vasprintf.c | 2 +- libiberty/vprintf-support.c | 2 +- libiberty/xatexit.c | 2 +- libiberty/xmalloc.c | 14 ++--- libiberty/xmemdup.c | 8 +-- 28 files changed, 165 insertions(+), 148 deletions(-) diff --git a/include/ansidecl.h b/include/ansidecl.h index efee5b6904b..46fe3ffabd9 100644 --- a/include/ansidecl.h +++ b/include/ansidecl.h @@ -1,4 +1,4 @@ -/* ANSI and traditional C compatability macros +/* Compiler compatibility macros Copyright (C) 1991-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. =20 @@ -16,18 +16,7 @@ You should have received a copy of the GNU General Publi= c License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,= USA. */ =20 -/* ANSI and traditional C compatibility macros - - ANSI C is assumed if __STDC__ is #defined. - - Macro ANSI C definition Traditional C definition - ----- ---- - ---------- ----------- - ---------- - PTR `void *' `char *' - const not defined `' - volatile not defined `' - signed not defined `' - - For ease of writing code which uses GCC extensions but needs to be +/* For ease of writing code which uses GCC extensions but needs to be portable to other compilers, we provide the GCC_VERSION macro that simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various wrappers around __attribute__. Also, __extension__ will be #defined @@ -62,19 +51,6 @@ So instead we use the macro below and test it against sp= ecific values. */ #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #endif /* GCC_VERSION */ =20 -/* All known AIX compilers implement these things (but don't always - define __STDC__). The RISC/OS MIPS compiler defines these things - in SVR4 mode, but does not define __STDC__. */ -/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other - C++ compilers, does not define __STDC__, though it acts as if this - was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */ - -#define PTR void * - -#undef const -#undef volatile -#undef signed - /* inline requires special treatment; it's in C99, and GCC >=3D2.7 supports it too, but it's not in C89. */ #undef inline diff --git a/include/floatformat.h b/include/floatformat.h index ffb02f9e149..291acd4368c 100644 --- a/include/floatformat.h +++ b/include/floatformat.h @@ -91,7 +91,7 @@ struct floatformat =20 /* Is the format actually the sum of two smaller floating point formats (IBM long double, as described in - gcc/config/rs6000/darwin-ldouble-format)? If so, this is the + libgcc/config/rs6000/ibm-ldouble-format)? If so, this is the smaller format in question, and the fields sign_start through intbit describe the first half. If not, this is NULL. */ const struct floatformat *split_half; diff --git a/include/md5.h b/include/md5.h index d91016c6f42..68136d95d65 100644 --- a/include/md5.h +++ b/include/md5.h @@ -21,6 +21,10 @@ #ifndef _MD5_H #define _MD5_H 1 =20 +#ifdef USE_SYSTEM_MD5 +#include_next +#else + #include =20 #if defined HAVE_LIMITS_H || _LIBC @@ -151,4 +155,6 @@ extern void *md5_buffer (const char *buffer, size_t len= , void *resblock); } #endif =20 +#endif // USE_SYSTEM_MD5 + #endif diff --git a/libiberty/alloca.c b/libiberty/alloca.c index 9b2e9cb12b6..b75f7560f94 100644 --- a/libiberty/alloca.c +++ b/libiberty/alloca.c @@ -158,7 +158,7 @@ static header *last_alloca_header =3D NULL; /* -> last = alloca header. */ =20 /* @undocumented C_alloca */ =20 -PTR +void * C_alloca (size_t size) { auto char probe; /* Probes stack depth: */ @@ -181,7 +181,7 @@ C_alloca (size_t size) { register header *np =3D hp->h.next; =20 - free ((PTR) hp); /* Collect garbage. */ + free ((void *) hp); /* Collect garbage. */ =20 hp =3D np; /* -> next header. */ } @@ -210,7 +210,7 @@ C_alloca (size_t size) =20 /* User storage begins just after header. */ =20 - return (PTR) ((char *) new_storage + sizeof (header)); + return (void *) ((char *) new_storage + sizeof (header)); } } =20 diff --git a/libiberty/calloc.c b/libiberty/calloc.c index f4bd27b1cd2..c7d97a6e362 100644 --- a/libiberty/calloc.c +++ b/libiberty/calloc.c @@ -16,13 +16,13 @@ Uses @code{malloc} to allocate storage for @var{nelem} = objects of #include =20 /* For systems with larger pointers than ints, this must be declared. */ -PTR malloc (size_t); -void bzero (PTR, size_t); +void *malloc (size_t); +void bzero (void *, size_t); =20 -PTR +void * calloc (size_t nelem, size_t elsize) { - register PTR ptr; =20 + register void *ptr; =20 if (nelem =3D=3D 0 || elsize =3D=3D 0) nelem =3D elsize =3D 1; diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c index d3cc86b75d6..470d3e66c32 100644 --- a/libiberty/hashtab.c +++ b/libiberty/hashtab.c @@ -73,7 +73,7 @@ static hashval_t htab_mod_m2 (hashval_t, htab_t); static hashval_t hash_pointer (const void *); static int eq_pointer (const void *, const void *); static int htab_expand (htab_t); -static PTR *find_empty_slot_for_expand (htab_t, hashval_t); +static void **find_empty_slot_for_expand (htab_t, hashval_t); =20 /* At some point, we could make these be NULL, and modify the hash-table routines to handle NULL specially; that would avoid @@ -196,7 +196,7 @@ higher_prime_index (unsigned long n) /* Returns non-zero if P1 and P2 are equal. */ =20 static int -eq_pointer (const PTR p1, const PTR p2) +eq_pointer (const void *p1, const void *p2) { return p1 =3D=3D p2; } @@ -304,7 +304,7 @@ htab_create_alloc_ex (size_t size, htab_hash hash_f, ht= ab_eq eq_f, result =3D (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab)); if (result =3D=3D NULL) return NULL; - result->entries =3D (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR)); + result->entries =3D (void **) (*alloc_f) (alloc_arg, size, sizeof (void = *)); if (result->entries =3D=3D NULL) { if (free_f !=3D NULL) @@ -357,7 +357,7 @@ htab_create_typed_alloc (size_t size, htab_hash hash_f,= htab_eq eq_f, result =3D (htab_t) (*alloc_tab_f) (1, sizeof (struct htab)); if (result =3D=3D NULL) return NULL; - result->entries =3D (PTR *) (*alloc_f) (size, sizeof (PTR)); + result->entries =3D (void **) (*alloc_f) (size, sizeof (void *)); if (result->entries =3D=3D NULL) { if (free_f !=3D NULL) @@ -379,7 +379,7 @@ htab_create_typed_alloc (size_t size, htab_hash hash_f,= htab_eq eq_f, =20 void htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f, - htab_del del_f, PTR alloc_arg, + htab_del del_f, void *alloc_arg, htab_alloc_with_arg alloc_f, htab_free_with_arg fre= e_f) { htab->hash_f =3D hash_f; @@ -412,7 +412,7 @@ void htab_delete (htab_t htab) { size_t size =3D htab_size (htab); - PTR *entries =3D htab->entries; + void **entries =3D htab->entries; int i; =20 if (htab->del_f) @@ -438,7 +438,7 @@ void htab_empty (htab_t htab) { size_t size =3D htab_size (htab); - PTR *entries =3D htab->entries; + void **entries =3D htab->entries; int i; =20 if (htab->del_f) @@ -447,9 +447,9 @@ htab_empty (htab_t htab) (*htab->del_f) (entries[i]); =20 /* Instead of clearing megabyte, downsize the table. */ - if (size > 1024*1024 / sizeof (PTR)) + if (size > 1024*1024 / sizeof (void *)) { - int nindex =3D higher_prime_index (1024 / sizeof (PTR)); + int nindex =3D higher_prime_index (1024 / sizeof (void *)); int nsize =3D prime_tab[nindex].prime; =20 if (htab->free_f !=3D NULL) @@ -457,15 +457,15 @@ htab_empty (htab_t htab) else if (htab->free_with_arg_f !=3D NULL) (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries); if (htab->alloc_with_arg_f !=3D NULL) - htab->entries =3D (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsi= ze, - sizeof (PTR *)); + htab->entries =3D (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, n= size, + sizeof (void *)); else - htab->entries =3D (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); + htab->entries =3D (void **) (*htab->alloc_f) (nsize, sizeof (void *)); htab->size =3D nsize; htab->size_prime_index =3D nindex; } else - memset (entries, 0, size * sizeof (PTR)); + memset (entries, 0, size * sizeof (void *)); htab->n_deleted =3D 0; htab->n_elements =3D 0; } @@ -477,12 +477,12 @@ htab_empty (htab_t htab) This function also assumes there are no deleted entries in the table. HASH is the hash value for the element to be inserted. */ =20 -static PTR * +static void ** find_empty_slot_for_expand (htab_t htab, hashval_t hash) { hashval_t index =3D htab_mod (hash, htab); size_t size =3D htab_size (htab); - PTR *slot =3D htab->entries + index; + void **slot =3D htab->entries + index; hashval_t hash2; =20 if (*slot =3D=3D HTAB_EMPTY_ENTRY) @@ -516,10 +516,10 @@ find_empty_slot_for_expand (htab_t htab, hashval_t ha= sh) static int htab_expand (htab_t htab) { - PTR *oentries; - PTR *olimit; - PTR *p; - PTR *nentries; + void **oentries; + void **olimit; + void **p; + void **nentries; size_t nsize, osize, elts; unsigned int oindex, nindex; =20 @@ -543,10 +543,10 @@ htab_expand (htab_t htab) } =20 if (htab->alloc_with_arg_f !=3D NULL) - nentries =3D (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, - sizeof (PTR *)); + nentries =3D (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsi= ze, + sizeof (void *)); else - nentries =3D (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); + nentries =3D (void **) (*htab->alloc_f) (nsize, sizeof (void *)); if (nentries =3D=3D NULL) return 0; htab->entries =3D nentries; @@ -558,11 +558,11 @@ htab_expand (htab_t htab) p =3D oentries; do { - PTR x =3D *p; + void *x =3D *p; =20 if (x !=3D HTAB_EMPTY_ENTRY && x !=3D HTAB_DELETED_ENTRY) { - PTR *q =3D find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); + void **q =3D find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); =20 *q =3D x; } @@ -581,12 +581,12 @@ htab_expand (htab_t htab) /* This function searches for a hash table entry equal to the given element. It cannot be used to insert or delete an element. */ =20 -PTR -htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash) +void * +htab_find_with_hash (htab_t htab, const void *element, hashval_t hash) { hashval_t index, hash2; size_t size; - PTR entry; + void *entry; =20 htab->searches++; size =3D htab_size (htab); @@ -615,8 +615,8 @@ htab_find_with_hash (htab_t htab, const PTR element, ha= shval_t hash) /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ =20 -PTR -htab_find (htab_t htab, const PTR element) +void * +htab_find (htab_t htab, const void *element) { return htab_find_with_hash (htab, element, (*htab->hash_f) (element)); } @@ -629,14 +629,14 @@ htab_find (htab_t htab, const PTR element) slot. When inserting an entry, NULL may be returned if memory allocation fails. */ =20 -PTR * -htab_find_slot_with_hash (htab_t htab, const PTR element, +void ** +htab_find_slot_with_hash (htab_t htab, const void *element, hashval_t hash, enum insert_option insert) { - PTR *first_deleted_slot; + void **first_deleted_slot; hashval_t index, hash2; size_t size; - PTR entry; + void *entry; =20 size =3D htab_size (htab); if (insert =3D=3D INSERT && size * 3 <=3D htab->n_elements * 4) @@ -697,8 +697,8 @@ htab_find_slot_with_hash (htab_t htab, const PTR elemen= t, /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ =20 -PTR * -htab_find_slot (htab_t htab, const PTR element, enum insert_option insert) +void ** +htab_find_slot (htab_t htab, const void *element, enum insert_option inser= t) { return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element= ), insert); @@ -709,7 +709,7 @@ htab_find_slot (htab_t htab, const PTR element, enum in= sert_option insert) element in the hash table, this function does nothing. */ =20 void -htab_remove_elt (htab_t htab, const PTR element) +htab_remove_elt (htab_t htab, const void *element) { htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element)); } @@ -720,9 +720,9 @@ htab_remove_elt (htab_t htab, const PTR element) function does nothing. */ =20 void -htab_remove_elt_with_hash (htab_t htab, const PTR element, hashval_t hash) +htab_remove_elt_with_hash (htab_t htab, const void *element, hashval_t has= h) { - PTR *slot; + void **slot; =20 slot =3D htab_find_slot_with_hash (htab, element, hash, NO_INSERT); if (slot =3D=3D NULL) @@ -740,7 +740,7 @@ htab_remove_elt_with_hash (htab_t htab, const PTR eleme= nt, hashval_t hash) again. */ =20 void -htab_clear_slot (htab_t htab, PTR *slot) +htab_clear_slot (htab_t htab, void **slot) { if (slot < htab->entries || slot >=3D htab->entries + htab_size (htab) || *slot =3D=3D HTAB_EMPTY_ENTRY || *slot =3D=3D HTAB_DELETED_ENTRY) @@ -759,17 +759,17 @@ htab_clear_slot (htab_t htab, PTR *slot) argument. */ =20 void -htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info) +htab_traverse_noresize (htab_t htab, htab_trav callback, void *info) { - PTR *slot; - PTR *limit; + void **slot; + void **limit; =20 slot =3D htab->entries; limit =3D slot + htab_size (htab); =20 do { - PTR x =3D *slot; + void *x =3D *slot; =20 if (x !=3D HTAB_EMPTY_ENTRY && x !=3D HTAB_DELETED_ENTRY) if (!(*callback) (slot, info)) @@ -782,7 +782,7 @@ htab_traverse_noresize (htab_t htab, htab_trav callback= , PTR info) too empty to improve effectivity of subsequent calls. */ =20 void -htab_traverse (htab_t htab, htab_trav callback, PTR info) +htab_traverse (htab_t htab, htab_trav callback, void *info) { size_t size =3D htab_size (htab); if (htab_elements (htab) * 8 < size && size > 32) @@ -829,7 +829,7 @@ htab_collisions (htab_t htab) function they just started using for Perl's hashes. */ =20 hashval_t -htab_hash_string (const PTR p) +htab_hash_string (const void *p) { const unsigned char *str =3D (const unsigned char *) p; hashval_t r =3D 0; @@ -926,7 +926,7 @@ acceptable. Do NOT use for cryptographic purposes. */ =20 hashval_t -iterative_hash (const PTR k_in /* the key */, +iterative_hash (const void *k_in /* the key */, register size_t length /* the length of the key */, register hashval_t initval /* the previous hash, or an arbitrary value */) @@ -990,7 +990,7 @@ iterative_hash (const PTR k_in /* the key */, /* Returns a hash code for pointer P. Simplified version of evahash */ =20 static hashval_t -hash_pointer (const PTR p) +hash_pointer (const void *p) { intptr_t v =3D (intptr_t) p; unsigned a, b, c; diff --git a/libiberty/memchr.c b/libiberty/memchr.c index 7448ab9e71c..7551b140b59 100644 --- a/libiberty/memchr.c +++ b/libiberty/memchr.c @@ -18,15 +18,15 @@ returned. #include #include =20 -PTR -memchr (register const PTR src_void, int c, size_t length) +void * +memchr (register const void *src_void, int c, size_t length) { const unsigned char *src =3D (const unsigned char *)src_void; =20 while (length-- > 0) { if (*src =3D=3D c) - return (PTR)src; + return (void *)src; src++; } return NULL; diff --git a/libiberty/memcmp.c b/libiberty/memcmp.c index 37db60f3826..5b1af020e6c 100644 --- a/libiberty/memcmp.c +++ b/libiberty/memcmp.c @@ -20,7 +20,7 @@ as if comparing unsigned char arrays. #include =20 int -memcmp (const PTR str1, const PTR str2, size_t count) +memcmp (const void *str1, const void *str2, size_t count) { register const unsigned char *s1 =3D (const unsigned char*)str1; register const unsigned char *s2 =3D (const unsigned char*)str2; diff --git a/libiberty/memcpy.c b/libiberty/memcpy.c index 7f67d0bd1f2..c627fa4ee9e 100644 --- a/libiberty/memcpy.c +++ b/libiberty/memcpy.c @@ -18,8 +18,8 @@ Copies @var{length} bytes from memory region @var{in} to = region =20 void bcopy (const void*, void*, size_t); =20 -PTR -memcpy (PTR out, const PTR in, size_t length) +void * +memcpy (void *out, const void *in, size_t length) { bcopy(in, out, length); return out; diff --git a/libiberty/memmove.c b/libiberty/memmove.c index ebda7cbb41c..8c92d6b9c21 100644 --- a/libiberty/memmove.c +++ b/libiberty/memmove.c @@ -18,8 +18,8 @@ Copies @var{count} bytes from memory area @var{from} to m= emory area =20 void bcopy (const void*, void*, size_t); =20 -PTR -memmove (PTR s1, const PTR s2, size_t n) +void * +memmove (void *s1, const void *s2, size_t n) { bcopy (s2, s1, n); return s1; diff --git a/libiberty/mempcpy.c b/libiberty/mempcpy.c index 34d9b2f4297..94f0872d8d0 100644 --- a/libiberty/mempcpy.c +++ b/libiberty/mempcpy.c @@ -33,10 +33,10 @@ Copies @var{length} bytes from memory region @var{in} t= o region #include #include =20 -extern PTR memcpy (PTR, const PTR, size_t); +extern void *memcpy (void *, const void *, size_t); =20 -PTR -mempcpy (PTR dst, const PTR src, size_t len) +void * +mempcpy (void *dst, const void *src, size_t len) { return (char *) memcpy (dst, src, len) + len; } diff --git a/libiberty/memset.c b/libiberty/memset.c index 47666896127..084e5dc0158 100644 --- a/libiberty/memset.c +++ b/libiberty/memset.c @@ -16,8 +16,8 @@ Sets the first @var{count} bytes of @var{s} to the consta= nt byte #include #include =20 -PTR -memset (PTR dest, register int val, register size_t len) +void * +memset (void *dest, register int val, register size_t len) { register unsigned char *ptr =3D (unsigned char*)dest; while (len-- > 0) diff --git a/libiberty/objalloc.c b/libiberty/objalloc.c index cf5de1fcb2d..3f8c5f7ab27 100644 --- a/libiberty/objalloc.c +++ b/libiberty/objalloc.c @@ -37,8 +37,8 @@ Boston, MA 02110-1301, USA. */ #include #else /* For systems with larger pointers than ints, this must be declared. */ -extern PTR malloc (size_t); -extern void free (PTR); +extern void *malloc (size_t); +extern void free (void *); #endif =20 #endif @@ -92,7 +92,7 @@ objalloc_create (void) if (ret =3D=3D NULL) return NULL; =20 - ret->chunks =3D (PTR) malloc (CHUNK_SIZE); + ret->chunks =3D (void *) malloc (CHUNK_SIZE); if (ret->chunks =3D=3D NULL) { free (ret); @@ -111,7 +111,7 @@ objalloc_create (void) =20 /* Allocate space from an objalloc structure. */ =20 -PTR +void * _objalloc_alloc (struct objalloc *o, unsigned long original_len) { unsigned long len =3D original_len; @@ -132,7 +132,7 @@ _objalloc_alloc (struct objalloc *o, unsigned long orig= inal_len) { o->current_ptr +=3D len; o->current_space -=3D len; - return (PTR) (o->current_ptr - len); + return (void *) (o->current_ptr - len); } =20 if (len >=3D BIG_REQUEST) @@ -148,9 +148,9 @@ _objalloc_alloc (struct objalloc *o, unsigned long orig= inal_len) chunk->next =3D (struct objalloc_chunk *) o->chunks; chunk->current_ptr =3D o->current_ptr; =20 - o->chunks =3D (PTR) chunk; + o->chunks =3D (void *) chunk; =20 - return (PTR) (ret + CHUNK_HEADER_SIZE); + return (void *) (ret + CHUNK_HEADER_SIZE); } else { @@ -165,7 +165,7 @@ _objalloc_alloc (struct objalloc *o, unsigned long orig= inal_len) o->current_ptr =3D (char *) chunk + CHUNK_HEADER_SIZE; o->current_space =3D CHUNK_SIZE - CHUNK_HEADER_SIZE; =20 - o->chunks =3D (PTR) chunk; + o->chunks =3D (void *) chunk; =20 return objalloc_alloc (o, len); } @@ -195,7 +195,7 @@ objalloc_free (struct objalloc *o) recently allocated blocks. */ =20 void -objalloc_free_block (struct objalloc *o, PTR block) +objalloc_free_block (struct objalloc *o, void *block) { struct objalloc_chunk *p, *small; char *b =3D (char *) block; @@ -257,7 +257,7 @@ objalloc_free_block (struct objalloc *o, PTR block) =20 if (first =3D=3D NULL) first =3D p; - o->chunks =3D (PTR) first; + o->chunks =3D (void *) first; =20 /* Now start allocating from this small block again. */ o->current_ptr =3D b; @@ -287,7 +287,7 @@ objalloc_free_block (struct objalloc *o, PTR block) q =3D next; } =20 - o->chunks =3D (PTR) p; + o->chunks =3D (void *) p; =20 while (p->current_ptr !=3D NULL) p =3D p->next; diff --git a/libiberty/random.c b/libiberty/random.c index b1d3c6c6ae4..cd0b7399e73 100644 --- a/libiberty/random.c +++ b/libiberty/random.c @@ -68,12 +68,10 @@ control over the state of the random number generator. #define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits*/ =20 #ifdef __STDC__ -# define PTR void * # ifndef NULL # define NULL (void *) 0 # endif #else -# define PTR char * # ifndef NULL # define NULL (void *) 0 # endif @@ -254,10 +252,10 @@ srandom (unsigned int x) Note: The first thing we do is save the current state, if any, just like setstate so that it doesn't matter when initstate is called. Returns a pointer to the old state. */ -PTR -initstate (unsigned int seed, PTR arg_state, unsigned long n) +void * +initstate (unsigned int seed, void *arg_state, unsigned long n) { - PTR ostate =3D (PTR) &state[-1]; + void *ostate =3D (void *) &state[-1]; =20 if (rand_type =3D=3D TYPE_0) state[-1] =3D rand_type; @@ -320,13 +318,13 @@ initstate (unsigned int seed, PTR arg_state, unsigned= long n) same state as the current state Returns a pointer to the old state information. */ =20 -PTR -setstate (PTR arg_state) +void * +setstate (void *arg_state) { register long int *new_state =3D (long int *) arg_state; register int type =3D new_state[0] % MAX_TYPES; register int rear =3D new_state[0] / MAX_TYPES; - PTR ostate =3D (PTR) &state[-1]; + void *ostate =3D (void *) &state[-1]; =20 if (rand_type =3D=3D TYPE_0) state[-1] =3D rand_type; diff --git a/libiberty/rust-demangle.c b/libiberty/rust-demangle.c index 3b24d63892a..bb58d900e27 100644 --- a/libiberty/rust-demangle.c +++ b/libiberty/rust-demangle.c @@ -1375,13 +1375,19 @@ rust_demangle_callback (const char *mangled, int op= tions, /* Rust symbols (v0) use only [_0-9a-zA-Z] characters. */ for (p =3D rdm.sym; *p; p++) { + /* Rust v0 symbols can have '.' suffixes, ignore those. */ + if (rdm.version =3D=3D 0 && *p =3D=3D '.') + break; + rdm.sym_len++; =20 if (*p =3D=3D '_' || ISALNUM (*p)) continue; =20 - /* Legacy Rust symbols can also contain [.:$] characters. */ - if (rdm.version =3D=3D -1 && (*p =3D=3D '$' || *p =3D=3D '.' || *p = =3D=3D ':')) + /* Legacy Rust symbols can also contain [.:$] characters. + Or @ in the .suffix (which will be skipped, see below). */ + if (rdm.version =3D=3D -1 && (*p =3D=3D '$' || *p =3D=3D '.' || *p = =3D=3D ':' + || *p =3D=3D '@')) continue; =20 return 0; @@ -1390,7 +1396,16 @@ rust_demangle_callback (const char *mangled, int opt= ions, /* Legacy Rust symbols need to be handled separately. */ if (rdm.version =3D=3D -1) { - /* Legacy Rust symbols always end with E. */ + /* Legacy Rust symbols always end with E. But can be followed by a + .suffix (which we want to ignore). */ + int dot_suffix =3D 1; + while (rdm.sym_len > 0 && + !(dot_suffix && rdm.sym[rdm.sym_len - 1] =3D=3D 'E')) + { + dot_suffix =3D rdm.sym[rdm.sym_len - 1] =3D=3D '.'; + rdm.sym_len--; + } + if (!(rdm.sym_len > 0 && rdm.sym[rdm.sym_len - 1] =3D=3D 'E')) return 0; rdm.sym_len--; diff --git a/libiberty/simple-object-elf.c b/libiberty/simple-object-elf.c index f9259891277..677a18a7776 100644 --- a/libiberty/simple-object-elf.c +++ b/libiberty/simple-object-elf.c @@ -528,7 +528,7 @@ simple_object_elf_match (unsigned char header[SIMPLE_OB= JECT_MATCH_HEADER_LEN], not handle objects with more than SHN_LORESERVE sections correctly. All large section indexes were offset by 0x100. There is more information at - http://sourceware.org/bugzilla/show_bug.cgi?id-5900 . + https://sourceware.org/PR5900 . Fortunately these object files are easy to detect, as the GNU binutils always put the section header string table near the end of the list of sections. Thus if the @@ -1559,17 +1559,13 @@ simple_object_elf_copy_lto_debug_sections (simple_o= bject_read *sobj, { sh_info =3D ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_info, Elf_Word); - if (sh_info < SHN_LORESERVE - || sh_info > SHN_HIRESERVE) - sh_info =3D sh_map[sh_info]; + sh_info =3D sh_map[sh_info]; ELF_SET_FIELD (type_functions, ei_class, Shdr, shdr, sh_info, Elf_Word, sh_info); } sh_link =3D ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word); - if (sh_link < SHN_LORESERVE - || sh_link > SHN_HIRESERVE) - sh_link =3D sh_map[sh_link]; + sh_link =3D sh_map[sh_link]; ELF_SET_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word, sh_link); } diff --git a/libiberty/spaces.c b/libiberty/spaces.c index 50d15882ee6..2b6971c4b93 100644 --- a/libiberty/spaces.c +++ b/libiberty/spaces.c @@ -40,8 +40,8 @@ valid until at least the next call. #include #else /* For systems with larger pointers than ints, these must be declared. */ -extern PTR malloc (size_t); -extern void free (PTR); +extern void *malloc (size_t); +extern void free (void *); #endif =20 const char * diff --git a/libiberty/stpcpy.c b/libiberty/stpcpy.c index 880e4fca7c7..2d3eb4c71cd 100644 --- a/libiberty/stpcpy.c +++ b/libiberty/stpcpy.c @@ -33,7 +33,7 @@ Copies the string @var{src} into @var{dst}. Returns a po= inter to #include =20 extern size_t strlen (const char *); -extern PTR memcpy (PTR, const PTR, size_t); +extern void *memcpy (void *, const void *, size_t); =20 char * stpcpy (char *dst, const char *src) diff --git a/libiberty/strdup.c b/libiberty/strdup.c index 78c2093b61a..8a4188eadfb 100644 --- a/libiberty/strdup.c +++ b/libiberty/strdup.c @@ -13,8 +13,8 @@ Returns a pointer to a copy of @var{s} in memory obtained= from #include =20 extern size_t strlen (const char*); -extern PTR malloc (size_t); -extern PTR memcpy (PTR, const PTR, size_t); +extern void *malloc (size_t); +extern void *memcpy (void *, const void *, size_t); =20 char * strdup(const char *s) diff --git a/libiberty/strerror.c b/libiberty/strerror.c index cc7692c1d69..07db71698d9 100644 --- a/libiberty/strerror.c +++ b/libiberty/strerror.c @@ -30,13 +30,13 @@ #ifdef HAVE_STDLIB_H #include #else -extern PTR malloc (); +extern void *malloc (); #endif =20 #ifdef HAVE_STRING_H #include #else -extern PTR memset (); +extern void *memset (); #endif =20 #ifndef MAX diff --git a/libiberty/strndup.c b/libiberty/strndup.c index 5992ee9cfa1..cfbb381ad0d 100644 --- a/libiberty/strndup.c +++ b/libiberty/strndup.c @@ -34,8 +34,8 @@ memory was available. The result is always NUL terminate= d. #include =20 extern size_t strnlen (const char *s, size_t maxlen); -extern PTR malloc (size_t); -extern PTR memcpy (PTR, const PTR, size_t); +extern void *malloc (size_t); +extern void *memcpy (void *, const void *, size_t); =20 char * strndup (const char *s, size_t n) diff --git a/libiberty/strsignal.c b/libiberty/strsignal.c index 666b1b4f15e..36b41f17e12 100644 --- a/libiberty/strsignal.c +++ b/libiberty/strsignal.c @@ -26,13 +26,13 @@ #ifdef HAVE_STDLIB_H #include #else -extern PTR malloc (); +extern void *malloc (); #endif =20 #ifdef HAVE_STRING_H #include #else -extern PTR memset (); +extern void *memset (); #endif =20 /* Undefine the macro we used to hide the definition of sys_siglist diff --git a/libiberty/testsuite/rust-demangle-expected b/libiberty/testsui= te/rust-demangle-expected index 7dca315d005..b565084cfef 100644 --- a/libiberty/testsuite/rust-demangle-expected +++ b/libiberty/testsuite/rust-demangle-expected @@ -295,3 +295,29 @@ _RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E --format=3Dauto _RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO >::foo::FOO +# +# Suffixes +# +--format=3Drust +_RNvMs0_NtCs5l0EXMQXRMU_21rustc_data_structures17obligation_forestINtB5_16= ObligationForestNtNtNtCsdozMG8X9FIu_21rustc_trait_selection6traits7fulfill2= 6PendingPredicateObligationE22register_obligation_atB1v_.llvm.8517020237817= 239694 +>::register_obligation= _at +--format=3Drust +_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$= u7b$closure$u7d$$u7d$$GT$17h27f14859c664490dE.llvm.8091179795805947855 +core::ptr::drop_in_place::{{closure}}> +# old style rustc llvm thinlto +--format=3Drust +_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9 +backtrace::foo +--format=3Drust +_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9@@16 +backtrace::foo +# new style rustc llvm thinlto +--format=3Drust +_RC3foo.llvm.9D1C9369 +foo +--format=3Drust +_RC3foo.llvm.9D1C9369@@16 +foo +--format=3Drust +_RNvC9backtrace3foo.llvm.A5310EB9 +backtrace::foo diff --git a/libiberty/vasprintf.c b/libiberty/vasprintf.c index e2717d83f37..c8c0152865b 100644 --- a/libiberty/vasprintf.c +++ b/libiberty/vasprintf.c @@ -33,7 +33,7 @@ Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_STDLIB_H #include #else -extern PTR malloc (); +extern void *malloc (); #endif #include "libiberty.h" #include "vprintf-support.h" diff --git a/libiberty/vprintf-support.c b/libiberty/vprintf-support.c index 231e584bbc1..92aedce1edd 100644 --- a/libiberty/vprintf-support.c +++ b/libiberty/vprintf-support.c @@ -49,7 +49,7 @@ libiberty_vprintf_buffer_size (const char *format, va_lis= t args) #ifdef va_copy va_copy (ap, args); #else - memcpy ((PTR) &ap, (PTR) &args, sizeof (va_list)); + memcpy ((void *) &ap, (void *) &args, sizeof (va_list)); #endif =20 while (*p !=3D '\0') diff --git a/libiberty/xatexit.c b/libiberty/xatexit.c index 6fdad9ed806..8a985cab4bc 100644 --- a/libiberty/xatexit.c +++ b/libiberty/xatexit.c @@ -37,7 +37,7 @@ failure. If you use @code{xatexit} to register functions= , you must use #include #else /* For systems with larger pointers than ints, this must be declared. */ -PTR malloc (size_t); +void *malloc (size_t); #endif =20 static void xatexit_cleanup (void); diff --git a/libiberty/xmalloc.c b/libiberty/xmalloc.c index e7d52683d35..3cc4cea37c3 100644 --- a/libiberty/xmalloc.c +++ b/libiberty/xmalloc.c @@ -139,10 +139,10 @@ xmalloc_failed (size_t size) xexit (1); } =20 =20 -PTR +void * xmalloc (size_t size) { - PTR newmem; + void *newmem; =20 if (size =3D=3D 0) size =3D 1; @@ -153,10 +153,10 @@ xmalloc (size_t size) return (newmem); } =20 -PTR +void * xcalloc (size_t nelem, size_t elsize) { - PTR newmem; + void *newmem; =20 if (nelem =3D=3D 0 || elsize =3D=3D 0) nelem =3D elsize =3D 1; @@ -168,10 +168,10 @@ xcalloc (size_t nelem, size_t elsize) return (newmem); } =20 -PTR -xrealloc (PTR oldmem, size_t size) +void * +xrealloc (void *oldmem, size_t size) { - PTR newmem; + void *newmem; =20 if (size =3D=3D 0) size =3D 1; diff --git a/libiberty/xmemdup.c b/libiberty/xmemdup.c index 4602afd7d9f..f2ed41f9b4d 100644 --- a/libiberty/xmemdup.c +++ b/libiberty/xmemdup.c @@ -31,11 +31,11 @@ allocated, the remaining memory is zeroed. # endif #endif =20 -PTR -xmemdup (const PTR input, size_t copy_size, size_t alloc_size) +void * +xmemdup (const void *input, size_t copy_size, size_t alloc_size) { - PTR output =3D xmalloc (alloc_size); + void *output =3D xmalloc (alloc_size); if (alloc_size > copy_size) memset ((char *) output + copy_size, 0, alloc_size - copy_size); - return (PTR) memcpy (output, input, copy_size); + return (void *) memcpy (output, input, copy_size); }