Commit Graph

12 Commits

Author SHA1 Message Date
Jakub Jelinek 6441eb6dc0 Update copyright years. 2025-01-02 11:59:57 +01:00
Jakub Jelinek 53bb714513 libiberty: Fix up libiberty_vprintf_buffer_size
When writing the HOST_SIZE_T_PRINT_UNSIGNED incremental patch,
my first bootstrap failed on i686-linux.  That is because I've also had
@@ -1344,8 +1344,10 @@ adjust_field_rtx_def (type_p t, options_
            }

          subfields = create_field (subfields, t,
-                                   xasprintf (".fld[%lu].%s",
-                                              (unsigned long) aindex,
+                                   xasprintf (".fld["
+                                              HOST_SIZE_T_PRINT_UNSIGNED
+                                              "].%s",
+                                              (fmt_size_t) aindex,
                                               subname));
          subfields->opt = nodot;
          if (t == note_union_tp)
hunk in gengtype.cc.  While sprintf obviously can print in this case %llu
with fmt_size_t being unsigned long long (that is another bug I'll fix
incrementally), seems libiberty_vprintf_buffer_size
can't deal with that, it ignores h, hh, l, ll and L modifiers and
unconditionally, estimates 30 chars as upper bounds for integers (that is
fine) and then uses (void) va_arg (ap, int); to skip over the argument
regardless if it was %d, %ld, %lld, %hd, %hhd etc.
Now, on x86_64 that happens to work fine probably for all of those,
on ia32 for everything but %lld, because it then skips just one half
of the long long argument; now as there is %s after it, it will try to
compute strlen not from the pointer argument corresponding to %s, but
from the most significant half of the previous long long argument.

So, the following patch attempts not to completely ignore the modifiers,
but figure out from them whether to va_arg an int (used for h and hh as
well), or long, or long long, or size_t, or ptrdiff_t - added support for
z and t there, plus for Windows I64.  And also %Lf etc. for long double.

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-02-12 18:50:16 +01:00
Jakub Jelinek a945c346f5 Update copyright years. 2024-01-03 12:19:35 +01:00
Jakub Jelinek 83ffe9cde7 Update copyright years. 2023-01-16 11:52:17 +01:00
Martin Liska 50b009c5da libiberty: stop using PTR macro
include/ChangeLog:

	* hashtab.h (HTAB_EMPTY_ENTRY): Use void * instead PTR.
	(HTAB_DELETED_ENTRY): Likewise.

libiberty/ChangeLog:

	* alloca.c (C_alloca): Use void * instead PTR.
	* calloc.c (malloc): Likewise.
	(bzero): Likewise.
	(calloc): Likewise.
	* hashtab.c (find_empty_slot_for_expand): Likewise.
	(eq_pointer): Likewise.
	(htab_create_alloc_ex): Likewise.
	(htab_create_typed_alloc): Likewise.
	(htab_set_functions_ex): Likewise.
	(htab_delete): Likewise.
	(htab_empty): Likewise.
	(htab_expand): Likewise.
	(htab_find_with_hash): Likewise.
	(htab_find): Likewise.
	(htab_find_slot_with_hash): Likewise.
	(htab_find_slot): Likewise.
	(htab_remove_elt): Likewise.
	(htab_remove_elt_with_hash): Likewise.
	(htab_clear_slot): Likewise.
	(htab_traverse_noresize): Likewise.
	(htab_traverse): Likewise.
	(htab_hash_string): Likewise.
	(iterative_hash): Likewise.
	(hash_pointer): Likewise.
	* memchr.c (memchr): Likewise.
	* memcmp.c (memcmp): Likewise.
	* memcpy.c (memcpy): Likewise.
	* memmove.c (memmove): Likewise.
	* mempcpy.c (memcpy): Likewise.
	(mempcpy): Likewise.
	* memset.c (memset): Likewise.
	* objalloc.c (malloc): Likewise.
	(free): Likewise.
	(objalloc_create): Likewise.
	(_objalloc_alloc): Likewise.
	(objalloc_free_block): Likewise.
	* random.c (PTR): Likewise.
	(void): Likewise.
	(initstate): Likewise.
	(setstate): Likewise.
	* regex.c: Likewise.
	* spaces.c (malloc): Likewise.
	(free): Likewise.
	* stpcpy.c (memcpy): Likewise.
	* strdup.c (malloc): Likewise.
	(memcpy): Likewise.
	* strerror.c (malloc): Likewise.
	(memset): Likewise.
	* strndup.c (malloc): Likewise.
	(memcpy): Likewise.
	* strsignal.c (malloc): Likewise.
	(memset): Likewise.
	* vasprintf.c (malloc): Likewise.
	* vprintf-support.c: Likewise.
	* xatexit.c (malloc): Likewise.
	* xmalloc.c (xmalloc): Likewise.
	(xcalloc): Likewise.
	(xrealloc): Likewise.
	* xmemdup.c (xmemdup): Likewise.
2022-05-10 16:04:30 +02:00
Jakub Jelinek 7adcbafe45 Update copyright years. 2022-01-03 10:42:10 +01:00
Jakub Jelinek 99dee82307 Update copyright years. 2021-01-04 10:26:59 +01:00
Jakub Jelinek 8d9254fc8a Update copyright years.
From-SVN: r279813
2020-01-01 12:51:42 +01:00
Jakub Jelinek a554497024 Update copyright years.
From-SVN: r267494
2019-01-01 13:31:55 +01:00
Jakub Jelinek 85ec4feb11 Update copyright years.
From-SVN: r256169
2018-01-03 11:03:58 +01:00
Jakub Jelinek 2afd3180c5 Update copyright years.
From-SVN: r244052
2017-01-04 12:30:51 +01:00
Uros Bizjak 01ca36af91 xvasprintf.c: New file.
* xvasprintf.c: New file.
	* vprintf-support.h: Likewise.
	* vprintf-support.c: Likewise.
	* Makefile.in (CFILES): Add vprintf-support.c, xvasprintf.c.
	(REQUIRED_OFILES): Add vprintf-support.$(objext), xvasprintf.$(objext).
	(vprintf-support.$(objext), xvasprintf.$(objext)): New targets.
	(vasprintf.$(objext)): Depend on $(srcdir)/vprintf-support.h.
	* functions.texi: Regenerate.
	* vasprintf.c (int_vasprintf): Use libiberty_vprintf_buffer_size.

include/ChangeLog:

	* libiberty.h (xvasprintf): Declare.

libcpp/ChangeLog:

	* directives.c (cpp_define_formatted): Use xvasprintf.


Co-Authored-By: Ben Elliston <bje@au.ibm.com>
Co-Authored-By: Manuel López-Ibáñez <manu@gcc.gnu.org>

From-SVN: r218618
2014-12-11 09:15:37 +01:00