From: Alan Modra Date: Fri, 13 May 2022 07:13:15 +0000 (+0930) Subject: Import libiberty from gcc X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=31b15688c414c7caf957be63d2914faafa1b9dda;p=binutils-gdb.git Import libiberty from gcc --- 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. @@ -16,18 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* 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 specific values. */ #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #endif /* GCC_VERSION */ -/* 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 >=2.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 /* 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 +#ifdef USE_SYSTEM_MD5 +#include_next +#else + #include #if defined HAVE_LIMITS_H || _LIBC @@ -151,4 +155,6 @@ extern void *md5_buffer (const char *buffer, size_t len, void *resblock); } #endif +#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 = NULL; /* -> last alloca header. */ /* @undocumented C_alloca */ -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 = hp->h.next; - free ((PTR) hp); /* Collect garbage. */ + free ((void *) hp); /* Collect garbage. */ hp = np; /* -> next header. */ } @@ -210,7 +210,7 @@ C_alloca (size_t size) /* User storage begins just after header. */ - return (PTR) ((char *) new_storage + sizeof (header)); + return (void *) ((char *) new_storage + sizeof (header)); } } 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 /* 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); -PTR +void * calloc (size_t nelem, size_t elsize) { - register PTR ptr; + register void *ptr; if (nelem == 0 || elsize == 0) nelem = elsize = 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); /* 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. */ static int -eq_pointer (const PTR p1, const PTR p2) +eq_pointer (const void *p1, const void *p2) { return p1 == p2; } @@ -304,7 +304,7 @@ htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f, result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab)); if (result == NULL) return NULL; - result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR)); + result->entries = (void **) (*alloc_f) (alloc_arg, size, sizeof (void *)); if (result->entries == NULL) { if (free_f != NULL) @@ -357,7 +357,7 @@ htab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, result = (htab_t) (*alloc_tab_f) (1, sizeof (struct htab)); if (result == NULL) return NULL; - result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR)); + result->entries = (void **) (*alloc_f) (size, sizeof (void *)); if (result->entries == NULL) { if (free_f != NULL) @@ -379,7 +379,7 @@ htab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, 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 free_f) { htab->hash_f = hash_f; @@ -412,7 +412,7 @@ void htab_delete (htab_t htab) { size_t size = htab_size (htab); - PTR *entries = htab->entries; + void **entries = htab->entries; int i; if (htab->del_f) @@ -438,7 +438,7 @@ void htab_empty (htab_t htab) { size_t size = htab_size (htab); - PTR *entries = htab->entries; + void **entries = htab->entries; int i; if (htab->del_f) @@ -447,9 +447,9 @@ htab_empty (htab_t htab) (*htab->del_f) (entries[i]); /* Instead of clearing megabyte, downsize the table. */ - if (size > 1024*1024 / sizeof (PTR)) + if (size > 1024*1024 / sizeof (void *)) { - int nindex = higher_prime_index (1024 / sizeof (PTR)); + int nindex = higher_prime_index (1024 / sizeof (void *)); int nsize = prime_tab[nindex].prime; if (htab->free_f != NULL) @@ -457,15 +457,15 @@ htab_empty (htab_t htab) else if (htab->free_with_arg_f != NULL) (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries); if (htab->alloc_with_arg_f != NULL) - htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, - sizeof (PTR *)); + htab->entries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, + sizeof (void *)); else - htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); + htab->entries = (void **) (*htab->alloc_f) (nsize, sizeof (void *)); htab->size = nsize; htab->size_prime_index = nindex; } else - memset (entries, 0, size * sizeof (PTR)); + memset (entries, 0, size * sizeof (void *)); htab->n_deleted = 0; htab->n_elements = 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. */ -static PTR * +static void ** find_empty_slot_for_expand (htab_t htab, hashval_t hash) { hashval_t index = htab_mod (hash, htab); size_t size = htab_size (htab); - PTR *slot = htab->entries + index; + void **slot = htab->entries + index; hashval_t hash2; if (*slot == HTAB_EMPTY_ENTRY) @@ -516,10 +516,10 @@ find_empty_slot_for_expand (htab_t htab, hashval_t hash) 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; @@ -543,10 +543,10 @@ htab_expand (htab_t htab) } if (htab->alloc_with_arg_f != NULL) - nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, - sizeof (PTR *)); + nentries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, + sizeof (void *)); else - nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); + nentries = (void **) (*htab->alloc_f) (nsize, sizeof (void *)); if (nentries == NULL) return 0; htab->entries = nentries; @@ -558,11 +558,11 @@ htab_expand (htab_t htab) p = oentries; do { - PTR x = *p; + void *x = *p; if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) { - PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); + void **q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); *q = 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. */ -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; htab->searches++; size = htab_size (htab); @@ -615,8 +615,8 @@ htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash) /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ -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. */ -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; size = htab_size (htab); if (insert == INSERT && size * 3 <= htab->n_elements * 4) @@ -697,8 +697,8 @@ htab_find_slot_with_hash (htab_t htab, const PTR element, /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ -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 insert) { 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 insert_option insert) element in the hash table, this function does nothing. */ 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. */ 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 hash) { - PTR *slot; + void **slot; slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT); if (slot == NULL) @@ -740,7 +740,7 @@ htab_remove_elt_with_hash (htab_t htab, const PTR element, hashval_t hash) again. */ void -htab_clear_slot (htab_t htab, PTR *slot) +htab_clear_slot (htab_t htab, void **slot) { if (slot < htab->entries || slot >= htab->entries + htab_size (htab) || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY) @@ -759,17 +759,17 @@ htab_clear_slot (htab_t htab, PTR *slot) argument. */ 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; slot = htab->entries; limit = slot + htab_size (htab); do { - PTR x = *slot; + void *x = *slot; if (x != HTAB_EMPTY_ENTRY && x != 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. */ void -htab_traverse (htab_t htab, htab_trav callback, PTR info) +htab_traverse (htab_t htab, htab_trav callback, void *info) { size_t size = 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. */ hashval_t -htab_hash_string (const PTR p) +htab_hash_string (const void *p) { const unsigned char *str = (const unsigned char *) p; hashval_t r = 0; @@ -926,7 +926,7 @@ acceptable. Do NOT use for cryptographic purposes. */ 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 */ static hashval_t -hash_pointer (const PTR p) +hash_pointer (const void *p) { intptr_t v = (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 -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 = (const unsigned char *)src_void; while (length-- > 0) { if (*src == 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 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 = (const unsigned char*)str1; register const unsigned char *s2 = (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 void bcopy (const void*, void*, size_t); -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 memory area void bcopy (const void*, void*, size_t); -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} to region #include #include -extern PTR memcpy (PTR, const PTR, size_t); +extern void *memcpy (void *, const void *, size_t); -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 constant byte #include #include -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 = (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 #endif @@ -92,7 +92,7 @@ objalloc_create (void) if (ret == NULL) return NULL; - ret->chunks = (PTR) malloc (CHUNK_SIZE); + ret->chunks = (void *) malloc (CHUNK_SIZE); if (ret->chunks == NULL) { free (ret); @@ -111,7 +111,7 @@ objalloc_create (void) /* Allocate space from an objalloc structure. */ -PTR +void * _objalloc_alloc (struct objalloc *o, unsigned long original_len) { unsigned long len = original_len; @@ -132,7 +132,7 @@ _objalloc_alloc (struct objalloc *o, unsigned long original_len) { o->current_ptr += len; o->current_space -= len; - return (PTR) (o->current_ptr - len); + return (void *) (o->current_ptr - len); } if (len >= BIG_REQUEST) @@ -148,9 +148,9 @@ _objalloc_alloc (struct objalloc *o, unsigned long original_len) chunk->next = (struct objalloc_chunk *) o->chunks; chunk->current_ptr = o->current_ptr; - o->chunks = (PTR) chunk; + o->chunks = (void *) chunk; - return (PTR) (ret + CHUNK_HEADER_SIZE); + return (void *) (ret + CHUNK_HEADER_SIZE); } else { @@ -165,7 +165,7 @@ _objalloc_alloc (struct objalloc *o, unsigned long original_len) o->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE; o->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE; - o->chunks = (PTR) chunk; + o->chunks = (void *) chunk; return objalloc_alloc (o, len); } @@ -195,7 +195,7 @@ objalloc_free (struct objalloc *o) recently allocated blocks. */ void -objalloc_free_block (struct objalloc *o, PTR block) +objalloc_free_block (struct objalloc *o, void *block) { struct objalloc_chunk *p, *small; char *b = (char *) block; @@ -257,7 +257,7 @@ objalloc_free_block (struct objalloc *o, PTR block) if (first == NULL) first = p; - o->chunks = (PTR) first; + o->chunks = (void *) first; /* Now start allocating from this small block again. */ o->current_ptr = b; @@ -287,7 +287,7 @@ objalloc_free_block (struct objalloc *o, PTR block) q = next; } - o->chunks = (PTR) p; + o->chunks = (void *) p; while (p->current_ptr != NULL) p = 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*/ #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 = (PTR) &state[-1]; + void *ostate = (void *) &state[-1]; if (rand_type == TYPE_0) state[-1] = 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. */ -PTR -setstate (PTR arg_state) +void * +setstate (void *arg_state) { register long int *new_state = (long int *) arg_state; register int type = new_state[0] % MAX_TYPES; register int rear = new_state[0] / MAX_TYPES; - PTR ostate = (PTR) &state[-1]; + void *ostate = (void *) &state[-1]; if (rand_type == TYPE_0) state[-1] = 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 options, /* Rust symbols (v0) use only [_0-9a-zA-Z] characters. */ for (p = rdm.sym; *p; p++) { + /* Rust v0 symbols can have '.' suffixes, ignore those. */ + if (rdm.version == 0 && *p == '.') + break; + rdm.sym_len++; if (*p == '_' || ISALNUM (*p)) continue; - /* Legacy Rust symbols can also contain [.:$] characters. */ - if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':')) + /* Legacy Rust symbols can also contain [.:$] characters. + Or @ in the .suffix (which will be skipped, see below). */ + if (rdm.version == -1 && (*p == '$' || *p == '.' || *p == ':' + || *p == '@')) continue; return 0; @@ -1390,7 +1396,16 @@ rust_demangle_callback (const char *mangled, int options, /* Legacy Rust symbols need to be handled separately. */ if (rdm.version == -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 = 1; + while (rdm.sym_len > 0 && + !(dot_suffix && rdm.sym[rdm.sym_len - 1] == 'E')) + { + dot_suffix = rdm.sym[rdm.sym_len - 1] == '.'; + rdm.sym_len--; + } + if (!(rdm.sym_len > 0 && rdm.sym[rdm.sym_len - 1] == '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_OBJECT_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_object_read *sobj, { sh_info = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_info, Elf_Word); - if (sh_info < SHN_LORESERVE - || sh_info > SHN_HIRESERVE) - sh_info = sh_map[sh_info]; + sh_info = sh_map[sh_info]; ELF_SET_FIELD (type_functions, ei_class, Shdr, shdr, sh_info, Elf_Word, sh_info); } sh_link = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word); - if (sh_link < SHN_LORESERVE - || sh_link > SHN_HIRESERVE) - sh_link = sh_map[sh_link]; + sh_link = 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 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 pointer to #include extern size_t strlen (const char *); -extern PTR memcpy (PTR, const PTR, size_t); +extern void *memcpy (void *, const void *, size_t); 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 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); 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 #ifdef HAVE_STRING_H #include #else -extern PTR memset (); +extern void *memset (); #endif #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 terminated. #include 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); 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 #ifdef HAVE_STRING_H #include #else -extern PTR memset (); +extern void *memset (); #endif /* Undefine the macro we used to hide the definition of sys_siglist diff --git a/libiberty/testsuite/rust-demangle-expected b/libiberty/testsuite/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=auto _RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO >::foo::FOO +# +# Suffixes +# +--format=rust +_RNvMs0_NtCs5l0EXMQXRMU_21rustc_data_structures17obligation_forestINtB5_16ObligationForestNtNtNtCsdozMG8X9FIu_21rustc_trait_selection6traits7fulfill26PendingPredicateObligationE22register_obligation_atB1v_.llvm.8517020237817239694 +>::register_obligation_at +--format=rust +_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=rust +_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9 +backtrace::foo +--format=rust +_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9@@16 +backtrace::foo +# new style rustc llvm thinlto +--format=rust +_RC3foo.llvm.9D1C9369 +foo +--format=rust +_RC3foo.llvm.9D1C9369@@16 +foo +--format=rust +_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_list 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 while (*p != '\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 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); } -PTR +void * xmalloc (size_t size) { - PTR newmem; + void *newmem; if (size == 0) size = 1; @@ -153,10 +153,10 @@ xmalloc (size_t size) return (newmem); } -PTR +void * xcalloc (size_t nelem, size_t elsize) { - PTR newmem; + void *newmem; if (nelem == 0 || elsize == 0) nelem = elsize = 1; @@ -168,10 +168,10 @@ xcalloc (size_t nelem, size_t elsize) return (newmem); } -PTR -xrealloc (PTR oldmem, size_t size) +void * +xrealloc (void *oldmem, size_t size) { - PTR newmem; + void *newmem; if (size == 0) size = 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 -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 = xmalloc (alloc_size); + void *output = 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); }