From: Andrew Burgess Date: Thu, 14 May 2026 09:22:42 +0000 (+0000) Subject: libiberty: sync with gcc commit df3510f80e7c02d9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;ds=inline;p=thirdparty%2Fbinutils-gdb.git libiberty: sync with gcc commit df3510f80e7c02d9 Sync the libiberty/ directory with gcc commit df3510f80e7c02d9c19d7cb33759cd925880f53a. This pulls in the following gcc commits and the associated updates to 'libiberty/ChangeLog': * 06fb00cb66d libiberty: Fix typos in various files * fbf903e5b9f Re-flow lines made longer than 80 characters by typo fixes * cfb945957ee Regenerate some autoconf configure scripts after recent spelling fixes. * bc4d9b6aeb3 libiberty: avoid exponential back reference issue in D demangler I have retained the changes that are in the following binutils-gdb commit, which are not in gcc: commit 219822fd5db6305592b45677a3b38c02b523360e Date: Tue Apr 9 06:39:21 2024 -0700 mmap: Avoid the sanitizer configure check failure --- diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 7de0bb4d254..e60b5951ea4 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,62 @@ +2026-06-07 Andrew Burgess + + * d-demangle.c (struct dlang_info::options): New field, + carries options passed to the demangler. + (struct dlang_info::num_backrefs): Count total number of back + referenced types that have been processed. + (struct dlang_info::backref_depth): Count the depth of + recursive back references. + (dlang_type_backref): Track recursive back reference depth, + and the total number of back references encountered. Bail out + early if the total number gets too high. + (dlang_demangle_init_info): Initialise new 'struct dlang_info' + fields. + (dlang_demangle): Pass demangler options to + dlang_demangle_init_info. + * testsuite/d-demangle-expected: Add new test. + +2026-06-01 Jakub Jelinek + + * configure: Regenerate. + +2026-05-30 Dhruv Chawla + + * simple-object-mach-o.c (simple_object_mach_o_write_segment): Reflow + long line. + +2026-05-30 Dhruv Chawla + + * bcopy.c: Fix typos. + * bsearch.c: Likewise. + * bsearch_r.c: Likewise. + * configure.ac: Likewise. + * cp-demangle.c (d_print_comp_inner): Likewise. + (d_print_comp): Likewise. + * d-demangle.c (dlang_identifier): Likewise. + * dyn-string.c: Likewise. + * ldirname.c: Likewise. + * make-relative-prefix.c (make_relative_prefix_1): Likewise. + * obstacks.texi: Likewise. + * pex-win32.c (argv_to_cmdline): Likewise. + (spawn_script): Likewise. + * random.c (random): Likewise. + (setstate): Likewise. + * regex.c (WIDE_CHAR_SUPPORT): Likewise. + (convert_mbs_to_wcs): Likewise. + (PREFIX): Likewise. + (wcs_compile_range): Likewise. + (count_mbs_length): Likewise. + (wcs_re_match_2_internal): Likewise. + (byte_re_match_2_internal): Likewise. + * sigsetmask.c: Likewise. + * simple-object-elf.c (SHT_SYMTAB_SHNDX): Likewise. + (STV_HIDDEN): Likewise. + (simple_object_elf_copy_lto_debug_sections): Likewise. + * simple-object-mach-o.c (struct mach_o_header_32): Likewise. + (struct mach_o_header_64): Likewise. + (simple_object_mach_o_write_segment): Likewise. + * strsignal.c (defined): Likewise. + 2026-03-05 Jakub Jelinek PR target/124365 diff --git a/libiberty/bcopy.c b/libiberty/bcopy.c index f9b7a8acd5c..914b698d225 100644 --- a/libiberty/bcopy.c +++ b/libiberty/bcopy.c @@ -1,4 +1,4 @@ -/* bcopy -- copy memory regions of arbitary length +/* bcopy -- copy memory regions of arbitrary length @deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) diff --git a/libiberty/bsearch.c b/libiberty/bsearch.c index 18158b9591b..eb7e1778b4b 100644 --- a/libiberty/bsearch.c +++ b/libiberty/bsearch.c @@ -60,7 +60,7 @@ is respectively less than, matching, or greater than the array member. * is odd, moving left simply involves halving lim: e.g., when lim * is 5 we look at item 2, so we change lim to 2 so that we will * look at items 0 & 1. If lim is even, the same applies. If lim - * is odd, moving right again involes halving lim, this time moving + * is odd, moving right again involves halving lim, this time moving * the base up one item past p: e.g., when lim is 5 we change base * to item 3 and make lim 2 so that we will look at items 3 and 4. * If lim is even, however, we have to shrink it by one before diff --git a/libiberty/bsearch_r.c b/libiberty/bsearch_r.c index 2a2ca6f5e23..42c9e45c1aa 100644 --- a/libiberty/bsearch_r.c +++ b/libiberty/bsearch_r.c @@ -61,7 +61,7 @@ is respectively less than, matching, or greater than the array member. * is odd, moving left simply involves halving lim: e.g., when lim * is 5 we look at item 2, so we change lim to 2 so that we will * look at items 0 & 1. If lim is even, the same applies. If lim - * is odd, moving right again involes halving lim, this time moving + * is odd, moving right again involves halving lim, this time moving * the base up one item past p: e.g., when lim is 5 we change base * to item 3 and make lim 2 so that we will look at items 3 and 4. * If lim is even, however, we have to shrink it by one before diff --git a/libiberty/configure b/libiberty/configure index 4c72b5a9283..379a3cfa9c3 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -6234,7 +6234,7 @@ _ACEOF -# Check for presense of long long +# Check for presence of long long ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" if test "x$ac_cv_type_long_long" = xyes; then : diff --git a/libiberty/configure.ac b/libiberty/configure.ac index 199fa192fe4..03b835ce828 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -321,7 +321,7 @@ AC_CHECK_SIZEOF([int]) AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([size_t]) -# Check for presense of long long +# Check for presence of long long AC_CHECK_TYPE([long long], [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have the `long long' type.]) AC_CHECK_SIZEOF([long long])], []) diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 5e6571d419b..5f08ef8946a 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -82,7 +82,7 @@ IN_GLIBCPP_V3 If defined, this file defines only __cxa_demangle() and - __gcclibcxx_demangle_callback(), and no other publically visible + __gcclibcxx_demangle_callback(), and no other publicly visible functions or variables. STANDALONE_DEMANGLER @@ -5590,7 +5590,7 @@ d_print_comp_inner (struct d_print_info *dpi, int options, const struct d_component_stack *dcse; int found_self_or_parent = 0; - /* This traversal is reentering SUB as a substition. + /* This traversal is reentering SUB as a substitution. If we are not beneath SUB or DC in the tree then we need to restore SUB's template stack temporarily. */ for (dcse = dpi->component_stack; dcse != NULL; @@ -6390,7 +6390,7 @@ d_print_comp (struct d_print_info *dpi, int options, dpi->recursion--; } -/* Print a Java dentifier. For Java we try to handle encoded extended +/* Print a Java identifier. For Java we try to handle encoded extended Unicode characters. The C++ ABI doesn't mention Unicode encoding, so we don't it for C++. Characters are encoded as __U+_. */ diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index f059f5690bb..9d55a1f2ccc 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -175,8 +175,33 @@ struct dlang_info { /* The string we are demangling. */ const char *s; + + /* The options passed to the demangler. */ + int options; + /* The index of the last back reference. */ int last_backref; + + /* The total number of back referenced types, including nested back + referenced types. This is reset to zero each time a back + reference is processed at the "top level" (i.e. not a nested back + reference). + + Cases have been encountered where a back reference type includes + references to other back reference types, which include further + back references. This was observed to a depth of 57. If each + layer only references the layer before twice then the innermost + string will be duplicated 2^57 times! + + We count the number of nested back references and compare this to + the recursion limit, even though this isn't strictly recursion. */ + int num_backrefs; + + /* Track the depth of back references. Depth 0 is considered the + top level. When we encounter a back reference at this depth the + NUM_BACKREFS field is reset to 0. At greater depths, + NUM_BACKREFS will be incremented. */ + int backref_depth; }; /* Pass as the LEN to dlang_parse_template if symbol length is not known. */ @@ -411,6 +436,24 @@ dlang_type_backref (string *decl, const char *mangled, struct dlang_info *info, if (mangled - info->s >= info->last_backref) return NULL; + /* A back reference might point to a type that itself contains back + references, which might themselves contain back references. + There might not be recursion going on, but we can run into + problems of exponential growth caused by the inner type appearing + to be referenced 10s of millions of times. */ + if (info->backref_depth > 0) + { + if ((info->options & DMGL_NO_RECURSE_LIMIT) == 0 + && info->num_backrefs > DEMANGLE_RECURSION_LIMIT) + return NULL; + + info->num_backrefs++; + } + else + info->num_backrefs = 0; + + info->backref_depth++; + int save_refpos = info->last_backref; info->last_backref = mangled - info->s; @@ -424,6 +467,7 @@ dlang_type_backref (string *decl, const char *mangled, struct dlang_info *info, backref = dlang_type (decl, backref, info); info->last_backref = save_refpos; + info->backref_depth--; if (backref == NULL) return NULL; @@ -1067,7 +1111,7 @@ dlang_identifier (string *decl, const char *mangled, struct dlang_info *info) } /* Extract the plain identifier from MANGLED and prepend/append it to DECL - with special treatment for some magic compiler generted symbols. + with special treatment for some magic compiler generated symbols. Return the remaining string on success or NULL on failure. */ static const char * dlang_lname (string *decl, const char *mangled, unsigned long len) @@ -1931,17 +1975,20 @@ dlang_parse_template (string *decl, const char *mangled, /* Initialize the information structure we use to pass around information. */ static void dlang_demangle_init_info (const char *mangled, int last_backref, - struct dlang_info *info) + int options, struct dlang_info *info) { info->s = mangled; + info->options = options; info->last_backref = last_backref; + info->num_backrefs = 0; + info->backref_depth = 0; } /* Extract and demangle the symbol in MANGLED. Returns the demangled signature on success or NULL on failure. */ char * -dlang_demangle (const char *mangled, int option ATTRIBUTE_UNUSED) +dlang_demangle (const char *mangled, int options) { string decl; char *demangled = NULL; @@ -1962,7 +2009,7 @@ dlang_demangle (const char *mangled, int option ATTRIBUTE_UNUSED) { struct dlang_info info; - dlang_demangle_init_info (mangled, strlen (mangled), &info); + dlang_demangle_init_info (mangled, strlen (mangled), options, &info); mangled = dlang_parse_mangle (&decl, mangled, &info); /* Check that the entire symbol was successfully demangled. */ diff --git a/libiberty/dyn-string.c b/libiberty/dyn-string.c index 8f0a566ed23..6dfb3646847 100644 --- a/libiberty/dyn-string.c +++ b/libiberty/dyn-string.c @@ -49,8 +49,8 @@ Boston, MA 02110-1301, USA. */ function can be used with a dyn_string struct on the stack or embedded in another object. The contents of the string itself are still dynamically allocated. The string initially is capable - of holding at least SPACE characeters, including the terminating - NUL. If SPACE is 0, it will silently be increated to 1. + of holding at least SPACE characters, including the terminating + NUL. If SPACE is 0, it will silently be increased to 1. If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation fails, returns 0. Otherwise returns 1. */ diff --git a/libiberty/ldirname.c b/libiberty/ldirname.c index c5e17a80ca4..2b9985c16cd 100644 --- a/libiberty/ldirname.c +++ b/libiberty/ldirname.c @@ -26,7 +26,7 @@ Given a pointer to a string containing a typical pathname (@samp{/usr/src/cmd/ls/ls.c} for example), returns a string containing the passed string up to, but not including, the final directory separator. -If the given pathname doesn't contain a directory separator then this funtion +If the given pathname doesn't contain a directory separator then this function returns the empty string; this includes an empty given pathname. @code{NULL} is returned on memory allocation error. diff --git a/libiberty/make-relative-prefix.c b/libiberty/make-relative-prefix.c index 58cab574151..05b52c2f2a1 100644 --- a/libiberty/make-relative-prefix.c +++ b/libiberty/make-relative-prefix.c @@ -410,7 +410,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix, /* Do the full job, including symlink resolution. This path will find files installed in the same place as the program even when a soft link has been made to the program - from somwhere else. */ + from somewhere else. */ char * make_relative_prefix (const char *progname, const char *bin_prefix, diff --git a/libiberty/obstacks.texi b/libiberty/obstacks.texi index 37d26c90f1b..9bea973bee2 100644 --- a/libiberty/obstacks.texi +++ b/libiberty/obstacks.texi @@ -695,7 +695,7 @@ Initialize use of an obstack, with an initial chunk of @var{chunk_size} bytes. @item int obstack_specify_allocation (struct obstack *@var{obstack-ptr}, size_t chunk_size, size_t alignment, void *(*chunkfun) (size_t), void (*freefun) (void *)) -Initialize use of an obstack, specifying intial chunk size, chunk +Initialize use of an obstack, specifying initial chunk size, chunk alignment, and memory allocation functions. @item int obstack_specify_allocation_with_arg (struct obstack *@var{obstack-ptr}, size_t chunk_size, size_t alignment, void *(*chunkfun) (void *, size_t), void (*freefun) (void *, void *), void *arg) diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 2ba9b69b830..8ea4e7f822a 100644 --- a/libiberty/pex-win32.c +++ b/libiberty/pex-win32.c @@ -350,7 +350,7 @@ argv_to_cmdline (char *const *argv) /* We only quote arguments that contain spaces, \t or " characters to prevent wasting 2 chars per argument of the CreateProcess 32k char limit. We need only escape embedded double-quotes and immediately - preceeding backslash characters. A sequence of backslach characters + preceding backslash characters. A sequence of backslach characters that is not followed by a double quote character will not be escaped. */ needs_quotes = 0; @@ -363,7 +363,7 @@ argv_to_cmdline (char *const *argv) if (argv[i][j] == '"') { - /* Escape preceeding backslashes. */ + /* Escape preceding backslashes. */ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) cmdline_len++; /* Escape the quote character. */ @@ -695,7 +695,7 @@ spawn_script (struct pex_obj *obj, int fd = _open (executable, _O_RDONLY); /* Try to open script, check header format, extract interpreter path, - and spawn script using that interpretter. */ + and spawn script using that interpreter. */ if (fd >= 0) { char buf[MAX_PATH + 5]; diff --git a/libiberty/random.c b/libiberty/random.c index cd0b7399e73..38c4317c5d1 100644 --- a/libiberty/random.c +++ b/libiberty/random.c @@ -88,7 +88,7 @@ long int random (void); then initialized to contain information for random number generation with that much state information. Good sizes for the amount of state information are 32, 64, 128, and 256 bytes. The state can be switched by - calling the setstate() function with the same array as was initiallized + calling the setstate() function with the same array as was initialized with initstate(). By default, the package runs with 128 bytes of state information and generates far better random numbers than a linear congruential generator. If the amount of state information is less than @@ -362,7 +362,7 @@ setstate (void *arg_state) /* If we are using the trivial TYPE_0 R.N.G., just do the old linear congruential bit. Otherwise, we do our fancy trinomial stuff, which is the - same in all ther other cases due to all the global variables that have been + same in all the other cases due to all the global variables that have been set up. The basic operation is to add the number at the rear pointer into the one at the front pointer. Then both pointers are advanced to the next location cyclically in the table. The value returned is the sum generated, diff --git a/libiberty/regex.c b/libiberty/regex.c index 459911eaa14..2379fe9eda7 100644 --- a/libiberty/regex.c +++ b/libiberty/regex.c @@ -58,7 +58,7 @@ # define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) -/* For platform which support the ISO C amendement 1 functionality we +/* For platform which support the ISO C amendment 1 functionality we support user defined character classes. */ # if defined _LIBC || WIDE_CHAR_SUPPORT /* Solaris 2.5 has a bug: must be included before . */ @@ -1235,7 +1235,7 @@ printchar (int c) # ifdef WCHAR /* This convert a multibyte string to a wide character string. - And write their correspondances to offset_buffer(see below) + And write their correspondences to offset_buffer(see below) and write whether each wchar_t is binary data to is_binary. This assume invalid multibyte sequences as binary data. We assume offset_buffer and is_binary is already allocated @@ -1247,7 +1247,7 @@ static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src, static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len, int *offset_buffer, char *is_binary) - /* It hold correspondances between src(char string) and + /* It hold correspondences between src(char string) and dest(wchar_t string) for optimization. e.g. src = "xxxyzz" dest = {'X', 'Y', 'Z'} @@ -1281,7 +1281,7 @@ convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len, if (consumed <= 0) /* failed to convert. maybe src contains binary data. - So we consume 1 byte manualy. */ + So we consume 1 byte manually. */ { *pdest = *psrc; consumed = 1; @@ -2174,7 +2174,7 @@ typedef struct # ifndef DEFINED_ONCE # if defined _LIBC || WIDE_CHAR_SUPPORT /* The GNU C library provides support for user-defined character classes - and the functions from ISO C amendement 1. */ + and the functions from ISO C amendment 1. */ # ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX # else @@ -3416,7 +3416,7 @@ PREFIX(regex_compile) (const char *ARG_PREFIX(pattern), int32_t idx2 = table[ch]; size_t len = weights[idx2]; - /* Test whether the lenghts match. */ + /* Test whether the lengths match. */ if (weights[idx] == len) { /* They do. New compare the bytes of @@ -4389,7 +4389,7 @@ wcs_compile_range (CHAR_T range_start_char, const CHAR_T **p_ptr, { /* range_start is a collating symbol. */ int32_t *wextra; - /* Retreive the index and get collation sequence value. */ + /* Retrieve the index and get collation sequence value. */ wextra = (int32_t*)(extra + char_set[-range_start_char]); start_val = wextra[1 + *wextra]; } @@ -5502,7 +5502,7 @@ count_mbs_length(int *offset_buffer, int length) return 0; /* If there are no multibyte character, offset_buffer[i] == i. - Optmize for this case. */ + Optimize for this case. */ if (offset_buffer[length] == length) return length; @@ -5538,7 +5538,7 @@ wcs_re_match_2_internal (struct re_pattern_buffer *bufp, struct re_registers *regs, int stop, /* string1 == string2 == NULL means string1/2, size1/2 and - mbs_offset1/2 need seting up in this function. */ + mbs_offset1/2 need setting up in this function. */ /* We need wchar_t* buffers correspond to cstring1, cstring2. */ wchar_t *string1, int size1, wchar_t *string2, int size2, @@ -5739,7 +5739,7 @@ byte_re_match_2_internal (struct re_pattern_buffer *bufp, fill them with converted string. */ if (string1 == NULL && string2 == NULL) { - /* We need seting up buffers here. */ + /* We need setting up buffers here. */ /* We must free wcs buffers in this function. */ cant_free_wcs_buf = 0; diff --git a/libiberty/sigsetmask.c b/libiberty/sigsetmask.c index f7a24246d1f..d4f27cf6c42 100644 --- a/libiberty/sigsetmask.c +++ b/libiberty/sigsetmask.c @@ -1,7 +1,7 @@ /* Version of sigsetmask.c Written by Steve Chamberlain (sac@cygnus.com). Contributed by Cygnus Support. - This file is in the public doamin. */ + This file is in the public domain. */ /* diff --git a/libiberty/simple-object-elf.c b/libiberty/simple-object-elf.c index ef6ec8619c1..bde62304954 100644 --- a/libiberty/simple-object-elf.c +++ b/libiberty/simple-object-elf.c @@ -198,7 +198,7 @@ typedef struct { #define SHT_RELA 4 /* Relocation entries with addends */ #define SHT_REL 9 /* Relocation entries, no addends */ #define SHT_GROUP 17 /* Section contains a section group */ -#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ +#define SHT_SYMTAB_SHNDX 18 /* Extended section indices */ /* Values for sh_flags field. */ @@ -246,7 +246,7 @@ typedef struct #define STB_WEAK 2 /* Weak global */ #define STV_DEFAULT 0 /* Visibility is specified by binding type */ -#define STV_HIDDEN 2 /* Can only be seen inside currect component */ +#define STV_HIDDEN 2 /* Can only be seen inside current component */ /* Functions to fetch and store different ELF types, depending on the endianness and size. */ @@ -1512,7 +1512,7 @@ simple_object_elf_copy_lto_debug_sections (simple_object_read *sobj, of __gnu_lto_slim symbol. */ if (st_shndx == SHN_COMMON) discard = 1; - /* We also need to remove symbols refering to sections + /* We also need to remove symbols referring to sections we'll eventually remove as with fat LTO objects we otherwise get duplicate symbols at final link (with GNU ld, gold is fine and ignores symbols in diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c index 0897a3edf7d..c6dfe697497 100644 --- a/libiberty/simple-object-mach-o.c +++ b/libiberty/simple-object-mach-o.c @@ -53,7 +53,7 @@ struct mach_o_header_32 unsigned char filetype[4]; /* Type of file. */ unsigned char ncmds[4]; /* Number of load commands. */ unsigned char sizeofcmds[4]; /* Total size of load commands. */ - unsigned char flags[4]; /* Flags for special featues. */ + unsigned char flags[4]; /* Flags for special features. */ }; /* Mach-O header (64-bit version). */ @@ -66,7 +66,7 @@ struct mach_o_header_64 unsigned char filetype[4]; /* Type of file. */ unsigned char ncmds[4]; /* Number of load commands. */ unsigned char sizeofcmds[4]; /* Total size of load commands. */ - unsigned char flags[4]; /* Flags for special featues. */ + unsigned char flags[4]; /* Flags for special features. */ unsigned char reserved[4]; /* Reserved. Duh. */ }; @@ -1194,8 +1194,8 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor, unsigned int i; /* Write the section header for the wrapper. */ - /* Account for any initial aligment - which becomes the alignment for this - created section. */ + /* Account for any initial alignment - which becomes the alignment for + this created section. */ secsize = (offset - index[0]); if (!simple_object_mach_o_write_section_header (sobj, descriptor, @@ -1208,7 +1208,7 @@ simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor, errmsg, err)) return 0; - /* Subtract the wrapper section start from the begining of each sub + /* Subtract the wrapper section start from the beginning of each sub section. */ for (i = 1; i < nsects_in; ++i) diff --git a/libiberty/strsignal.c b/libiberty/strsignal.c index 36b41f17e12..33254ca8a23 100644 --- a/libiberty/strsignal.c +++ b/libiberty/strsignal.c @@ -152,7 +152,7 @@ static const struct signal_info signal_table[] = #endif #if defined (SIGIO) /* "I/O pending" has also been suggested, but is misleading since the - signal only happens when the process has asked for it, not everytime + signal only happens when the process has asked for it, not every time I/O is pending. */ ENTRY(SIGIO, "SIGIO", "I/O possible"), #endif @@ -208,7 +208,7 @@ static const struct signal_info signal_table[] = ENTRY(SIGGRANT, "SIGGRANT", "Monitor mode granted"), #endif #if defined (SIGRETRACT) - ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinguish monitor mode"), + ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinquish monitor mode"), #endif #if defined (SIGMSG) ENTRY(SIGMSG, "SIGMSG", "Monitor mode data available"), diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index cfbdf2a52cb..8c671b62316 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -1475,3 +1475,15 @@ demangle.anonymous.foo --format=auto _D8demangle9anonymous03fooZ demangle.anonymous.foo +# +# This symbol was seen in the wild. It has a pattern of back +# references that result in exponential growth, with the innermost +# type being referenced 10s of millions of times. We use the +# demangler's recursion limit to place a hard cap on back reference +# usage, which causes the demangler to safely bail out before +# consuming an excessive amount of memory. Trying to demangle this +# without the recursion limit in place will eventually cause the OOM +# killer to kick in. +--format=dlang +_D3std6format5write__T14formattedWriteTDFAxaZvTaTS2ae5utils4text7functor__T13stringifiableTSQBqQBqQBi10primitives__TQCaSQCsQCsQCk11composition__T3seqTSQDxQDxQDpQCh__TQDySQEqQEqQEnQEl__T17formattingFunctorVAyaa2_2573Vii250TQrZ15__lambda_L40_C3TQBmZ7FunctorTSQHzQHzQHrQGj__TQIaSQIsQIsQIpQIn__TQEcVQDma2_2573Vii250TSQKdQKdQKaQJy__TQJtTSQKxQKxQKpQJh__TQKyS4btdu2ui6curses6Curses4Wand__T8withAttrTSQNfQNfQNcQNa__TQMvTSQNzQNzQNrQMj__TQOaSQOsQOsQOkQMa__T6selectTSQPqQPqQPiQOa__TQPrSQQjQQjQQbQOt__T12valueFunctorTbZQrFbZ17__lambda_L143_C57TbZQLbTSQSvQSvQSnQRf__TQSwSQToQToQTlQTj__T5fmtIfVQOlnTbTPFNaNbNiNfZQPdTSQVhQVhQUzQTr__TQViSQKkQKi7browser7Browser6updateMFZ__T17__lambda_L1185_C4TQSeTSQYiQYiQYfQYd__TQXyTSQZcQZcQYuQXm__TQZdSQZvQZvQZnQXd__TQLdTQKzTSQBAtQBAuQBAnQZg__TQBAxSQBBqQBBrQBBpQBBo__TQIgVQWonTbTSQBCvQBCwQBCpQBBi__TQBDaSQBDtQBDuQBDnQBCg__TQNoTSQBErQBEsQBEqQBEp__TQBElTSQBFqQBFrQBFkQBEd__TQBFvSQBGoQBGpQBGiQBDz__TQBDqTSQBHnQBHoQBHhQBGa__TQBHsSQBIlQBImQBIkQBIj__TQBDzVQBDka2_2573Vii250TSQBKcQBKdQBKbQBKa__TQBJwTSQBLbQBLcQBKvQBJo__TQBLgSQBAjQBAiQBAjQBAgQBAd__TQBAcTQBHcTSQBNhQBNiQBNgQBNf__TQBNbTSQBOgQBOhQBOaQBMt__TQBOlSQBDoQBDnQBDoQBDlQBDi__TQBDhTQBKhZQBDrMFEQBFcQBFbQBFcQBEzQBEw9AttributebKQBLzZ19__lambda_L503_C20_1TPSQBHlQBHkQBHlQBHiQBHfTQDfTbTSQBUdQBUeQBUcQBUb__TQBTxTSQBVcQBVdQBUwQBTp__TQBVhSQBWaQBWbQBVuQBTl__TQBTcTQBTcZ3funTQBTmZQBPyZQBWtFQCwZ13StringifiableZQBRcZQBXxFQKwZQBeTQBTkZQBMuMFQJdbQBTzQMwQBUgZ17__lambda_L503_C20TQIfTQKrTbTSQCBpQCBqQCBoQCBn__TQCBjTSQCCoQCCpQCCiQCBb__TQCCtSQCDmQCDnQCDgQCAx__TQCAoTQCAoTSQCEqQCErQCEkQCDd__TQCEvSQCFoQCFpQCFnQCFm__TQCBcVQCAna2_2573Vii250TQTyZ17__lambda_L40_C3_1TQUwZQCArTQCEpZQLnTQCEyTQEkTQCFhZQCBtZQCIoFQHfZQLvZQCClZQCJgFQZkZQMnZ17__lambda_L40_C3_3TQBBlZQCEcTQCIaTQBEpZQPdTQBEyTQCItTQBFiZQCFkZQCMfFQBHuZQPnZQBWuFQBJhZ19__lambda_L143_C57_1TQBKiZQCHoTSQCPjQCPkQCPdQCNw__TQCPoSQCQhQCQiQCQbQCOu__TQCAcTQBHeZQCAmFQBHoZ19__lambda_L143_C57_2TQBIpZQCLgZQBYxFNibQBQoQEeZQWnTQBRaZQCMkTSQCUfQCUgQCTzQCSs__TQCUkSQCVdQCVeQCVcQCVb__TQCBtVQCQcnTbTQBTpTQHgZQCCpFNibQBUgQHwZQBAfTQIfZQCQcZQBAtTQCImTQBXoTQEhZQCRaZQCXvFQBZyZQBBdZQCCaMFQCTqQCBmbSQCOjQCOiQCEbQCDx13ScrollContextPSQCPq5paths11BrowserPathZ20__lambda_L1195_C76_1TQBxZQCVqZQCJhFNibQCJbQCIqZQBGyTQCJpZQCWwTSQDErQDEsQDElQDDe__TQDEwSQDFpQDFqQDFoQDFn__TQCMfVQDAonTbTQCMeTQCLuZQCNcFNibQCMwQCMlZQBKtTQCMvZQDArZQBLiTQCTbTQCQbTQEkZQDBpZQDIkFQCVqZQBLsZQCXeMFQBTnbQCXfZ19__lambda_L503_C20_2TQBSlTQBUyTbTSQDLxQDLyQDLwQDLv__TQDLrTSQDMwQDMxQDMqQDLj__TQDNbSQDNuQDNvQDNoQDLf__TQDKwTSQDOtQDOuQDOnQDNg__TQDOySQDPrQDPsQDPqQDPp__TQDLfVQDKqa2_2573Vii250TQDEdZ17__lambda_L40_C3_7TQDFcZQDKwZQBVnTQEdZQDLkZQDSfFQGoZQBVmZQDMdZQDSyFQDJgZQBWgZ17__lambda_L40_C3_8TQDLeZQDNwZQBYnTQDRzTQDOcZQDOqZQDVlFQDVaZQBYtZQDYbFKQDXqMxAaQDXoZk +_D3std6format5write__T14formattedWriteTDFAxaZvTaTS2ae5utils4text7functor__T13stringifiableTSQBqQBqQBi10primitives__TQCaSQCsQCsQCk11composition__T3seqTSQDxQDxQDpQCh__TQDySQEqQEqQEnQEl__T17formattingFunctorVAyaa2_2573Vii250TQrZ15__lambda_L40_C3TQBmZ7FunctorTSQHzQHzQHrQGj__TQIaSQIsQIsQIpQIn__TQEcVQDma2_2573Vii250TSQKdQKdQKaQJy__TQJtTSQKxQKxQKpQJh__TQKyS4btdu2ui6curses6Curses4Wand__T8withAttrTSQNfQNfQNcQNa__TQMvTSQNzQNzQNrQMj__TQOaSQOsQOsQOkQMa__T6selectTSQPqQPqQPiQOa__TQPrSQQjQQjQQbQOt__T12valueFunctorTbZQrFbZ17__lambda_L143_C57TbZQLbTSQSvQSvQSnQRf__TQSwSQToQToQTlQTj__T5fmtIfVQOlnTbTPFNaNbNiNfZQPdTSQVhQVhQUzQTr__TQViSQKkQKi7browser7Browser6updateMFZ__T17__lambda_L1185_C4TQSeTSQYiQYiQYfQYd__TQXyTSQZcQZcQYuQXm__TQZdSQZvQZvQZnQXd__TQLdTQKzTSQBAtQBAuQBAnQZg__TQBAxSQBBqQBBrQBBpQBBo__TQIgVQWonTbTSQBCvQBCwQBCpQBBi__TQBDaSQBDtQBDuQBDnQBCg__TQNoTSQBErQBEsQBEqQBEp__TQBElTSQBFqQBFrQBFkQBEd__TQBFvSQBGoQBGpQBGiQBDz__TQBDqTSQBHnQBHoQBHhQBGa__TQBHsSQBIlQBImQBIkQBIj__TQBDzVQBDka2_2573Vii250TSQBKcQBKdQBKbQBKa__TQBJwTSQBLbQBLcQBKvQBJo__TQBLgSQBAjQBAiQBAjQBAgQBAd__TQBAcTQBHcTSQBNhQBNiQBNgQBNf__TQBNbTSQBOgQBOhQBOaQBMt__TQBOlSQBDoQBDnQBDoQBDlQBDi__TQBDhTQBKhZQBDrMFEQBFcQBFbQBFcQBEzQBEw9AttributebKQBLzZ19__lambda_L503_C20_1TPSQBHlQBHkQBHlQBHiQBHfTQDfTbTSQBUdQBUeQBUcQBUb__TQBTxTSQBVcQBVdQBUwQBTp__TQBVhSQBWaQBWbQBVuQBTl__TQBTcTQBTcZ3funTQBTmZQBPyZQBWtFQCwZ13StringifiableZQBRcZQBXxFQKwZQBeTQBTkZQBMuMFQJdbQBTzQMwQBUgZ17__lambda_L503_C20TQIfTQKrTbTSQCBpQCBqQCBoQCBn__TQCBjTSQCCoQCCpQCCiQCBb__TQCCtSQCDmQCDnQCDgQCAx__TQCAoTQCAoTSQCEqQCErQCEkQCDd__TQCEvSQCFoQCFpQCFnQCFm__TQCBcVQCAna2_2573Vii250TQTyZ17__lambda_L40_C3_1TQUwZQCArTQCEpZQLnTQCEyTQEkTQCFhZQCBtZQCIoFQHfZQLvZQCClZQCJgFQZkZQMnZ17__lambda_L40_C3_3TQBBlZQCEcTQCIaTQBEpZQPdTQBEyTQCItTQBFiZQCFkZQCMfFQBHuZQPnZQBWuFQBJhZ19__lambda_L143_C57_1TQBKiZQCHoTSQCPjQCPkQCPdQCNw__TQCPoSQCQhQCQiQCQbQCOu__TQCAcTQBHeZQCAmFQBHoZ19__lambda_L143_C57_2TQBIpZQCLgZQBYxFNibQBQoQEeZQWnTQBRaZQCMkTSQCUfQCUgQCTzQCSs__TQCUkSQCVdQCVeQCVcQCVb__TQCBtVQCQcnTbTQBTpTQHgZQCCpFNibQBUgQHwZQBAfTQIfZQCQcZQBAtTQCImTQBXoTQEhZQCRaZQCXvFQBZyZQBBdZQCCaMFQCTqQCBmbSQCOjQCOiQCEbQCDx13ScrollContextPSQCPq5paths11BrowserPathZ20__lambda_L1195_C76_1TQBxZQCVqZQCJhFNibQCJbQCIqZQBGyTQCJpZQCWwTSQDErQDEsQDElQDDe__TQDEwSQDFpQDFqQDFoQDFn__TQCMfVQDAonTbTQCMeTQCLuZQCNcFNibQCMwQCMlZQBKtTQCMvZQDArZQBLiTQCTbTQCQbTQEkZQDBpZQDIkFQCVqZQBLsZQCXeMFQBTnbQCXfZ19__lambda_L503_C20_2TQBSlTQBUyTbTSQDLxQDLyQDLwQDLv__TQDLrTSQDMwQDMxQDMqQDLj__TQDNbSQDNuQDNvQDNoQDLf__TQDKwTSQDOtQDOuQDOnQDNg__TQDOySQDPrQDPsQDPqQDPp__TQDLfVQDKqa2_2573Vii250TQDEdZ17__lambda_L40_C3_7TQDFcZQDKwZQBVnTQEdZQDLkZQDSfFQGoZQBVmZQDMdZQDSyFQDJgZQBWgZ17__lambda_L40_C3_8TQDLeZQDNwZQBYnTQDRzTQDOcZQDOqZQDVlFQDVaZQBYtZQDYbFKQDXqMxAaQDXoZk