[PATCH] libiberty: sync with gcc

Sam James sam@gentoo.org
Fri Jul 12 07:55:21 GMT 2024


Sam James <sam@gentoo.org> writes:

> This imports the following commits from GCC as of r15-1722-g7682d115402743:
> 	ca2f7c84927f libiberty: Invoke D demangler when --format=auto
> 	94792057ad4a Fix up duplicated words mostly in comments, part 1
> 	20e57660e64e libiberty: Fix error return value in pex_unix_exec_child [PR113957].
> 	52ac4c6be866 [libiberty] remove TBAA violation in iterative_hash, improve code-gen
> 	53bb7145135c libiberty: Fix up libiberty_vprintf_buffer_size
> 	65388b28656d c++, demangle: Implement https://github.com/itanium-cxx-abi/cxx-abi/issues/148 non-proposal
> ---

ping. It might be nice for this to get in for binutils-2.43 branching
given the UB fix for hashing.

>  libiberty/ChangeLog                     | 45 +++++++++++++++++
>  libiberty/cplus-dem.c                   |  2 +-
>  libiberty/dyn-string.c                  |  2 +-
>  libiberty/functions.texi                | 14 +++---
>  libiberty/hashtab.c                     | 23 ++++-----
>  libiberty/pex-unix.c                    |  2 +
>  libiberty/regex.c                       |  2 +-
>  libiberty/testsuite/d-demangle-expected |  5 ++
>  libiberty/vprintf-support.c             | 65 ++++++++++++++++++++++---
>  9 files changed, 131 insertions(+), 29 deletions(-)
>
> diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
> index 884c8b70f87..cdcd4b3ced8 100644
> --- a/libiberty/ChangeLog
> +++ b/libiberty/ChangeLog
> @@ -1,3 +1,48 @@
> +2024-04-02  Tom Tromey  <tom@tromey.com>
> +
> +	* cplus-dem.c (cplus_demangle): Try the D demangler with
> +	"auto" format.
> +	* testsuite/d-demangle-expected: Add --format=auto test.
> +
> +2024-04-02  Jakub Jelinek  <jakub@redhat.com>
> +
> +	* regex.c (byte_re_match_2_internal): Fix duplicated words in comment;
> +	next next -> next.
> +	* dyn-string.c (dyn_string_init): Fix duplicated words in comment;
> +	of of -> of.
> +
> +2024-02-19  Iain Sandoe  <iain@sandoe.co.uk>
> +
> +	PR other/113957
> +	* pex-unix.c (pex_unix_exec_child): Set pid = -1 in the error
> +	paths, since that is used to signal an erroneous outcome for
> +	the routine.
> +
> +2024-02-15  Richard Biener  <rguenther@suse.de>
> +
> +	* hashtab.c (iterative_hash): Remove TBAA violating handling
> +	of aligned little-endian case in favor of just keeping the
> +	aligned case special-cased.  Use | for composing a larger word.
> +
> +2024-02-12  Jakub Jelinek  <jakub@redhat.com>
> +
> +	* vprintf-support.c (libiberty_vprintf_buffer_size): Handle
> +	properly l, ll, z, t or on _WIN32 I64 modifiers for diouxX
> +	and L modifier for fFgGeE.
> +
> +2024-01-13  Jakub Jelinek  <jakub@redhat.com>
> +
> +	* cp-demangle.c (FNQUAL_COMPONENT_CASE): Add case for
> +	DEMANGLE_COMPONENT_XOBJ_MEMBER_FUNCTION.
> +	(d_dump): Handle DEMANGLE_COMPONENT_XOBJ_MEMBER_FUNCTION.
> +	(d_nested_name): Parse H after N in nested name.
> +	(d_count_templates_scopes): Handle
> +	DEMANGLE_COMPONENT_XOBJ_MEMBER_FUNCTION.
> +	(d_print_mod): Likewise.
> +	(d_print_function_type): Likewise.
> +	* testsuite/demangle-expected: Add tests for explicit object
> +	member functions.
> +
>  2023-12-05  Jakub Jelinek  <jakub@redhat.com>
>  
>  	* configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and
> diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
> index 8b92946981f..ee9e84f5d6b 100644
> --- a/libiberty/cplus-dem.c
> +++ b/libiberty/cplus-dem.c
> @@ -186,7 +186,7 @@ cplus_demangle (const char *mangled, int options)
>    if (GNAT_DEMANGLING)
>      return ada_demangle (mangled, options);
>  
> -  if (DLANG_DEMANGLING)
> +  if (DLANG_DEMANGLING || AUTO_DEMANGLING)
>      {
>        ret = dlang_demangle (mangled, options);
>        if (ret)
> diff --git a/libiberty/dyn-string.c b/libiberty/dyn-string.c
> index ecd8c069984..5805c0b4ff8 100644
> --- a/libiberty/dyn-string.c
> +++ b/libiberty/dyn-string.c
> @@ -47,7 +47,7 @@ Boston, MA 02110-1301, USA.  */
>  
>  /* Performs in-place initialization of a dyn_string struct.  This
>     function can be used with a dyn_string struct on the stack or
> -   embedded in another object.  The contents of of the string itself
> +   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.  
> diff --git a/libiberty/functions.texi b/libiberty/functions.texi
> index 651b169b040..b56b02e0686 100644
> --- a/libiberty/functions.texi
> +++ b/libiberty/functions.texi
> @@ -165,7 +165,7 @@ not recommended.
>  
>  @end deftypefn
>  
> -@c make-temp-file.c:108
> +@c make-temp-file.c:95
>  @deftypefn Replacement const char* choose_tmpdir ()
>  
>  Returns a pointer to a directory path suitable for creating temporary
> @@ -192,7 +192,7 @@ Concatenate zero or more of strings and return the result in freshly
>  
>  @end deftypefn
>  
> -@c argv.c:485
> +@c argv.c:495
>  @deftypefn Extension int countargv (char * const *@var{argv})
>  
>  Return the number of elements in @var{argv}.
> @@ -257,7 +257,7 @@ symbolic name or message.
>  
>  @end deftypefn
>  
> -@c argv.c:339
> +@c argv.c:352
>  @deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
>  
>  The @var{argcp} and @code{argvp} arguments are pointers to the usual
> @@ -726,7 +726,7 @@ relative prefix can be found, return @code{NULL}.
>  
>  @end deftypefn
>  
> -@c make-temp-file.c:185
> +@c make-temp-file.c:173
>  @deftypefn Replacement char* make_temp_file (const char *@var{suffix})
>  
>  Return a temporary file name (as a string) or @code{NULL} if unable to
> @@ -1747,7 +1747,7 @@ that the converted value is unsigned.
>  @c strtoll.c:33
>  @deftypefn Supplemental {long long int} strtoll (const char *@var{string}, @
>    char **@var{endptr}, int @var{base})
> -@deftypefnx Supplemental {unsigned long long int} strtoul (@
> +@deftypefnx Supplemental {unsigned long long int} strtoull (@
>    const char *@var{string}, char **@var{endptr}, int @var{base})
>  
>  The @code{strtoll} function converts the string in @var{string} to a
> @@ -1938,8 +1938,8 @@ does the return value.  The third argument is unused in @libib{}.
>  @deftypefn Extension int writeargv (char * const *@var{argv}, FILE *@var{file})
>  
>  Write each member of ARGV, handling all necessary quoting, to the file
> -associated with FILE, separated by whitespace.  Return 0 on success,
> -non-zero if an error occurred while writing to FILE.
> +named by FILE, separated by whitespace.  Return 0 on success, non-zero
> +if an error occurred while writing to FILE.
>  
>  @end deftypefn
>  
> diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
> index 48f28078114..e3a07256a30 100644
> --- a/libiberty/hashtab.c
> +++ b/libiberty/hashtab.c
> @@ -940,26 +940,23 @@ iterative_hash (const void *k_in /* the key */,
>    c = initval;           /* the previous hash value */
>  
>    /*---------------------------------------- handle most of the key */
> -#ifndef WORDS_BIGENDIAN
> -  /* On a little-endian machine, if the data is 4-byte aligned we can hash
> -     by word for better speed.  This gives nondeterministic results on
> -     big-endian machines.  */
> -  if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
> -    while (len >= 12)    /* aligned */
> +  /* Provide specialization for the aligned case for targets that cannot
> +     efficiently perform misaligned loads of a merged access.  */
> +  if ((((size_t)k)&3) == 0)
> +    while (len >= 12)
>        {
> -	a += *(hashval_t *)(k+0);
> -	b += *(hashval_t *)(k+4);
> -	c += *(hashval_t *)(k+8);
> +	a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));
> +	b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));
> +	c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));
>  	mix(a,b,c);
>  	k += 12; len -= 12;
>        }
>    else /* unaligned */
> -#endif
>      while (len >= 12)
>        {
> -	a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
> -	b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
> -	c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
> +	a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));
> +	b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));
> +	c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));
>  	mix(a,b,c);
>  	k += 12; len -= 12;
>        }
> diff --git a/libiberty/pex-unix.c b/libiberty/pex-unix.c
> index af98062a94c..f3a1cc95ada 100644
> --- a/libiberty/pex-unix.c
> +++ b/libiberty/pex-unix.c
> @@ -695,6 +695,7 @@ pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
>  	{
>  	  *err = ret;
>  	  *errmsg = "posix_spawnp";
> +	  pid = -1; /* The value of pid is unspecified on failure.  */
>  	  goto exit;
>  	}
>      }
> @@ -705,6 +706,7 @@ pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
>  	{
>  	  *err = ret;
>  	  *errmsg = "posix_spawn";
> +	  pid = -1;
>  	  goto exit;
>  	}
>      }
> diff --git a/libiberty/regex.c b/libiberty/regex.c
> index 4841c5a08f9..67747e6ce5a 100644
> --- a/libiberty/regex.c
> +++ b/libiberty/regex.c
> @@ -5597,7 +5597,7 @@ byte_re_match_2_internal (struct re_pattern_buffer *bufp,
>       to resume scanning the pattern; the second one is where to resume
>       scanning the strings.  If the latter is zero, the failure point is
>       a ``dummy''; if a failure happens and the failure point is a dummy,
> -     it gets discarded and the next next one is tried.  */
> +     it gets discarded and the next one is tried.  */
>  #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global.  */
>    PREFIX(fail_stack_type) fail_stack;
>  #endif
> diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected
> index 47b059c4298..cfbdf2a52cb 100644
> --- a/libiberty/testsuite/d-demangle-expected
> +++ b/libiberty/testsuite/d-demangle-expected
> @@ -1470,3 +1470,8 @@ demangle.anonymous
>  --format=dlang
>  _D8demangle9anonymous03fooZ
>  demangle.anonymous.foo
> +#
> +# Test that 'auto' works.
> +--format=auto
> +_D8demangle9anonymous03fooZ
> +demangle.anonymous.foo
> diff --git a/libiberty/vprintf-support.c b/libiberty/vprintf-support.c
> index b590e5ab034..0543ec0554e 100644
> --- a/libiberty/vprintf-support.c
> +++ b/libiberty/vprintf-support.c
> @@ -56,6 +56,7 @@ libiberty_vprintf_buffer_size (const char *format, va_list args)
>      {
>        if (*p++ == '%')
>  	{
> +	  int prec = 0;
>  	  while (strchr ("-+ #0", *p))
>  	    ++p;
>  	  if (*p == '*')
> @@ -76,8 +77,43 @@ libiberty_vprintf_buffer_size (const char *format, va_list args)
>  	      else
>  	      total_width += strtoul (p, (char **) &p, 10);
>  	    }
> -	  while (strchr ("hlL", *p))
> -	    ++p;
> +	  do
> +	    {
> +	      switch (*p)
> +		{
> +		case 'h':
> +		  ++p;
> +		  continue;
> +		case 'l':
> +		case 'L':
> +		  ++prec;
> +		  ++p;
> +		  continue;
> +		case 'z':
> +		  prec = 3;
> +		  ++p;
> +		  continue;
> +		case 't':
> +		  prec = 4;
> +		  ++p;
> +		  continue;
> +#ifdef _WIN32
> +		case 'I':
> +		  if (p[1] == '6' && p[2] == '4')
> +		    {
> +		      prec = 2;
> +		      p += 3;
> +		      continue;
> +		    }
> +		  break;
> +#endif
> +		default:
> +		  break;
> +		}
> +	      break;
> +	    }
> +	  while (1);
> +
>  	  /* Should be big enough for any format specifier except %s and floats.  */
>  	  total_width += 30;
>  	  switch (*p)
> @@ -88,6 +124,15 @@ libiberty_vprintf_buffer_size (const char *format, va_list args)
>  	    case 'u':
>  	    case 'x':
>  	    case 'X':
> +	      switch (prec)
> +		{
> +		case 0: (void) va_arg (ap, int); break;
> +		case 1: (void) va_arg (ap, long int); break;
> +		case 2: (void) va_arg (ap, long long int); break;
> +		case 3: (void) va_arg (ap, size_t); break;
> +		case 4: (void) va_arg (ap, ptrdiff_t); break;
> +		}
> +	      break;
>  	    case 'c':
>  	      (void) va_arg (ap, int);
>  	      break;
> @@ -96,10 +141,18 @@ libiberty_vprintf_buffer_size (const char *format, va_list args)
>  	    case 'E':
>  	    case 'g':
>  	    case 'G':
> -	      (void) va_arg (ap, double);
> -	      /* Since an ieee double can have an exponent of 307, we'll
> -		 make the buffer wide enough to cover the gross case. */
> -	      total_width += 307;
> +	      if (!prec)
> +		{
> +		  (void) va_arg (ap, double);
> +		  /* Since an ieee double can have an exponent of 308, we'll
> +		     make the buffer wide enough to cover the gross case. */
> +		  total_width += 308;
> +		}
> +	      else
> +		{
> +		  (void) va_arg (ap, long double);
> +		  total_width += 4932;
> +		}
>  	      break;
>  	    case 's':
>  	      total_width += strlen (va_arg (ap, char *));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 377 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/gdb-patches/attachments/20240712/93371706/attachment-0001.sig>


More information about the Gdb-patches mailing list