Compare commits

..

3 Commits

Author SHA1 Message Date
Dave Murphy
329ce986eb devkitA64: gcc 15.2.0 2025-12-27 14:48:13 +00:00
Dave Murphy
73d0dafa21 devkitA64: binutils 2.45.1 2025-12-26 19:53:33 +00:00
Dave Murphy
5fb027fd3b devkitPPC: enable positional arguments 2025-06-04 14:00:00 +01:00
7 changed files with 135 additions and 55 deletions

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
#---------------------------------------------------------------------------------
# devkitARM release 66
# devkitPPC release 47
# devkitA64 release 28
# devkitPPC release 47.1
# devkitA64 release 29
#---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then

View File

@@ -1,8 +1,8 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index c89327fdc9c..b46689a21c1 100644
index 68190dbaa27..3413eaca5b3 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -2008,6 +2008,14 @@ struct output_elf_obj_tdata
@@ -2020,6 +2020,14 @@ struct output_elf_obj_tdata
asection *sec;
} package_metadata;
@@ -18,10 +18,10 @@ index c89327fdc9c..b46689a21c1 100644
bfd_size_type program_header_size;
diff --git a/bfd/elf.c b/bfd/elf.c
index 1f2b82bfe92..7e9964a15f4 100644
index dfa04c9268d..12b76d3ffb8 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7189,6 +7189,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
@@ -7223,6 +7223,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd))
return false;
@@ -37,10 +37,10 @@ index 1f2b82bfe92..7e9964a15f4 100644
if (t->o->build_id.after_write_object_contents != NULL
&& !(*t->o->build_id.after_write_object_contents) (abfd))
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 65182f49070..3ba294ad940 100644
index e86f0280c2a..debb627a00f 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type
@@ -2444,6 +2444,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer,
};
@@ -53,7 +53,7 @@ index 65182f49070..3ba294ad940 100644
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6977,11 +6983,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
@@ -6986,11 +6992,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
@@ -67,7 +67,7 @@ index 65182f49070..3ba294ad940 100644
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -7121,6 +7129,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
@@ -7130,6 +7138,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
h, &unresolved_reloc,
save_addend, &addend, sym);
@@ -78,7 +78,7 @@ index 65182f49070..3ba294ad940 100644
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -7144,7 +7156,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
@@ -7153,7 +7165,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
@@ -87,7 +87,7 @@ index 65182f49070..3ba294ad940 100644
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7239,7 +7251,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
@@ -7248,7 +7260,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
@@ -96,7 +96,7 @@ index 65182f49070..3ba294ad940 100644
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7288,7 +7300,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
@@ -7297,7 +7309,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
@@ -105,7 +105,7 @@ index 65182f49070..3ba294ad940 100644
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7614,6 +7626,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
@@ -7623,6 +7635,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return false;
}
@@ -129,7 +129,7 @@ index 65182f49070..3ba294ad940 100644
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -8720,6 +8749,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8728,6 +8757,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
@@ -137,7 +137,7 @@ index 65182f49070..3ba294ad940 100644
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8739,6 +8769,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8747,6 +8777,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
@@ -148,7 +148,7 @@ index 65182f49070..3ba294ad940 100644
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -8748,7 +8782,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8756,7 +8790,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -157,7 +157,7 @@ index 65182f49070..3ba294ad940 100644
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8782,6 +8816,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8790,6 +8824,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
of relaxing into these from the large model PLT entries. */
s->size += htab->plt_entry_size;
@@ -169,7 +169,7 @@ index 65182f49070..3ba294ad940 100644
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8810,6 +8849,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8818,6 +8857,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1;
}
@@ -177,7 +177,7 @@ index 65182f49070..3ba294ad940 100644
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8822,9 +8862,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8830,9 +8870,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0;
}
@@ -187,7 +187,7 @@ index 65182f49070..3ba294ad940 100644
if (h->got.refcount > 0)
{
bool dyn;
@@ -8836,7 +8873,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8844,7 +8881,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -196,7 +196,7 @@ index 65182f49070..3ba294ad940 100644
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8850,7 +8887,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8858,7 +8895,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
@@ -205,7 +205,7 @@ index 65182f49070..3ba294ad940 100644
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8886,7 +8923,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8894,7 +8931,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
@@ -214,7 +214,7 @@ index 65182f49070..3ba294ad940 100644
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -8968,7 +9005,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8976,7 +9013,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
visibility. */
if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
@@ -223,7 +223,7 @@ index 65182f49070..3ba294ad940 100644
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
h->dyn_relocs = NULL;
@@ -8988,7 +9025,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -8996,7 +9033,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
symbols which turn out to need copy relocs or are not
dynamic. */
@@ -234,7 +234,7 @@ index 65182f49070..3ba294ad940 100644
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8999,6 +9038,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
@@ -9007,6 +9046,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
@@ -242,7 +242,7 @@ index 65182f49070..3ba294ad940 100644
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return false;
@@ -9954,8 +9994,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
@@ -9978,8 +10018,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
@@ -260,7 +260,7 @@ index 65182f49070..3ba294ad940 100644
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -9990,7 +10039,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
@@ -10014,7 +10063,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
abort ();
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
@@ -269,7 +269,7 @@ index 65182f49070..3ba294ad940 100644
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -10012,7 +10061,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
@@ -10036,7 +10085,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
/* Undefined weak symbol in static PIE resolves to 0 without
any dynamic relocations. */
@@ -279,7 +279,7 @@ index 65182f49070..3ba294ad940 100644
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -10680,6 +10730,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
@@ -10704,6 +10754,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
@@ -290,7 +290,7 @@ index 65182f49070..3ba294ad940 100644
elfNN_aarch64_finish_dynamic_sections
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
index 72616b57691..42f708118fb 100644
index aa051c76a7a..073d3a47b65 100644
--- a/ld/emulparams/aarch64elf.sh
+++ b/ld/emulparams/aarch64elf.sh
@@ -1,4 +1,5 @@
@@ -300,7 +300,7 @@ index 72616b57691..42f708118fb 100644
ARCH=aarch64
MACHINE=
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 45bf31a179a..02e0cad8699 100644
index 0565b7a066c..64821b1fc31 100644
--- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh
@@ -1,4 +1,5 @@
@@ -310,10 +310,10 @@ index 45bf31a179a..02e0cad8699 100644
ARCH="aarch64:ilp32"
MACHINE=
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index 7791aabf16d..a1486617099 100644
index 91d58d8fe5a..e1ac4a6b139 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -458,7 +458,7 @@ PARSE_AND_LIST_LONGOPTS='
@@ -489,7 +489,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
@@ -323,7 +323,7 @@ index 7791aabf16d..a1486617099 100644
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index 777f7204038..895f9ce59e6 100644
index 431205fe644..ce288649513 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -814,6 +814,7 @@ EOF
@@ -354,7 +354,7 @@ index 777f7204038..895f9ce59e6 100644
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
diff --git a/ld/ldelf.c b/ld/ldelf.c
index 4a1aa044e70..24025b0c5a6 100644
index f4f27fc3873..4028cbabdc7 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id;
@@ -462,7 +462,7 @@ index 4a1aa044e70..24025b0c5a6 100644
void
ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
int is_linux, int is_freebsd,
@@ -1293,6 +1381,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
@@ -1291,6 +1379,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
}
}
@@ -488,7 +488,7 @@ index 4a1aa044e70..24025b0c5a6 100644
/* Do not allow executable files to be used as inputs to the link. */
diff --git a/ld/ldelf.h b/ld/ldelf.h
index a6498cf2758..b69da549175 100644
index e8b7c8c7eb8..0b76923d834 100644
--- a/ld/ldelf.h
+++ b/ld/ldelf.h
@@ -20,6 +20,7 @@
@@ -500,10 +500,10 @@ index a6498cf2758..b69da549175 100644
extern void ldelf_finish (void);
extern void ldelf_after_parse (void);
diff --git a/ld/ldlex.h b/ld/ldlex.h
index b8b7d6b6829..3c9ee8d8742 100644
index c8d61478c60..a5bb71b1dc5 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -187,6 +187,7 @@ enum option_values
@@ -188,6 +188,7 @@ enum option_values
/* Used by emultempl/elf.em, emultempl/pe.em and emultempl/pep.em. */
OPTION_BUILD_ID,
OPTION_EXCLUDE_LIBS,

View File

@@ -62,7 +62,7 @@ then
--enable-lto \
--disable-tm-clone-registry \
--disable-__cxa_atexit \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 28" \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 29" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \
@@ -145,5 +145,3 @@ then
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
touch installed-stage2
fi
rm -fr $prefix/$target/sys-include

View File

@@ -11023,7 +11023,7 @@ index f25db3b0a..8e1626550 100644
for i in $(srcdir)/libc/sys/$(sys_dir)/sys/*.h; do \
if [ -f $$i ]; then \
diff --git a/newlib/configure.host b/newlib/configure.host
index ff2e51275..7ef23d5f6 100644
index ff2e51275..dfa957d55 100644
--- a/newlib/configure.host
+++ b/newlib/configure.host
@@ -646,6 +646,14 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
@@ -11041,14 +11041,15 @@ index ff2e51275..7ef23d5f6 100644
arm*-*-pe)
syscall_dir=syscalls
newlib_cflags="${newlib_cflags} -DHAVE_SYSCONF_PAGESIZE"
@@ -818,7 +826,13 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
@@ -818,7 +826,14 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
default_newlib_io_long_long="yes"
newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
;;
- powerpc*-*-eabi* | \
+ powerpc*-*-eabi*)
+ default_newlib_io_c99_formats="yes"
+ default_newlib_io_c99_formats="yes"
+ default_newlib_io_long_long="yes"
+ default_newlib_io_pos_args="yes"
+ newlib_cflags="${newlib_cflags} -DHAVE_ASSERT_FUNC -DABORT_PROVIDED -DCUSTOM_MALLOC_LOCK -D__DYNAMIC_REENT__ -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__"
+ newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections"
+ syscall_dir=syscalls
@@ -11960,7 +11961,7 @@ index d8dfdbd82..a85b5a99b 100644
return 0;
}
diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c
index feb1fab56..7a59eb21f 100644
index feb1fab56..99ec9c458 100644
--- a/newlib/libc/stdio/vfprintf.c
+++ b/newlib/libc/stdio/vfprintf.c
@@ -108,6 +108,8 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
@@ -11972,7 +11973,28 @@ index feb1fab56..7a59eb21f 100644
#if defined(LIBC_SCCS) && !defined(lint)
/*static char *sccsid = "from: @(#)vfprintf.c 5.50 (Berkeley) 12/16/92";*/
static char *rcsid = "$Id$";
@@ -1188,7 +1190,7 @@ reswitch: switch (ch) {
@@ -548,12 +550,19 @@ _VFPRINTF_R (struct _reent *data,
#endif
/* Macros to support positional arguments */
+
+#if _ARCH_PPC
+#define __VALIST_PTR(arg) ((va_list *)(arg))
+#else
+#define __VALIST_PTR(arg) (&(arg))
+#endif
+
#ifndef _NO_POS_ARGS
# define GET_ARG(n, ap, type) \
(is_pos_arg \
? (n < numargs \
? args[n].val_##type \
- : get_arg (data, n, fmt_anchor, &ap, &numargs, args, \
+ : get_arg (data, n, fmt_anchor, __VALIST_PTR(ap), &numargs, args, \
arg_type, &saved_fmt)->val_##type) \
: (arg_index++ < numargs \
? args[n].val_##type \
@@ -1188,7 +1197,7 @@ reswitch: switch (ch) {
string:
#endif
sign = '\0';
@@ -11981,7 +12003,7 @@ index feb1fab56..7a59eb21f 100644
/* Behavior is undefined if the user passed a
NULL string when precision is not 0.
However, if we are not optimizing for size,
@@ -1198,7 +1200,7 @@ string:
@@ -1198,7 +1207,7 @@ string:
size = ((unsigned) prec > 6U) ? 6 : prec;
}
else
@@ -11991,7 +12013,7 @@ index feb1fab56..7a59eb21f 100644
if (ch == 'S' || (flags & LONGINT)) {
mbstate_t ps;
diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c
index 71e2c3e22..bd2d635ed 100644
index 71e2c3e22..960c41608 100644
--- a/newlib/libc/stdio/vfscanf.c
+++ b/newlib/libc/stdio/vfscanf.c
@@ -74,6 +74,8 @@ These are GNU extensions.
@@ -12003,8 +12025,28 @@ index 71e2c3e22..bd2d635ed 100644
#include <_ansi.h>
#include <reent.h>
#include <newlib.h>
@@ -572,12 +574,18 @@ __SVFSCANF_R (struct _reent *rptr,
{10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
/* Macro to support positional arguments */
+#if _ARCH_PPC
+#define __VALIST_PTR(arg) ((va_list *)(arg))
+#else
+#define __VALIST_PTR(arg) (&(arg))
+#endif
+
#ifndef _NO_POS_ARGS
# define GET_ARG(n, ap, type) \
((type) (is_pos_arg \
? (n < numargs \
? args[n] \
- : get_arg (n, &ap, &numargs, args)) \
+ : get_arg (n, __VALIST_PTR(ap), &numargs, args)) \
: (arg_index++ < numargs \
? args[n] \
: (numargs < MAX_POS_ARGS \
diff --git a/newlib/libc/stdio/vfwprintf.c b/newlib/libc/stdio/vfwprintf.c
index 5a5c36829..3eaca0ce6 100644
index 5a5c36829..3ecba7bd4 100644
--- a/newlib/libc/stdio/vfwprintf.c
+++ b/newlib/libc/stdio/vfwprintf.c
@@ -92,6 +92,9 @@ SEEALSO
@@ -12017,8 +12059,28 @@ index 5a5c36829..3eaca0ce6 100644
#include <newlib.h>
#ifdef INTEGER_ONLY
@@ -538,11 +541,18 @@ _VFWPRINTF_R (struct _reent *data,
/* Macros to support positional arguments */
#ifndef _NO_POS_ARGS
+
+#if _ARCH_PPC
+#define __VALIST_PTR(arg) ((va_list *)(arg))
+#else
+#define __VALIST_PTR(arg) (&(arg))
+#endif
+
# define GET_ARG(n, ap, type) \
(is_pos_arg \
? (n < numargs \
? args[n].val_##type \
- : get_arg (data, n, fmt_anchor, &ap, &numargs, args, \
+ : get_arg (data, n, fmt_anchor, __VALIST_PTR(ap), &numargs, args, \
arg_type, &saved_fmt)->val_##type) \
: (arg_index++ < numargs \
? args[n].val_##type \
diff --git a/newlib/libc/stdio/vfwscanf.c b/newlib/libc/stdio/vfwscanf.c
index d2f91dde2..de80cc0c0 100644
index d2f91dde2..7c44f29fb 100644
--- a/newlib/libc/stdio/vfwscanf.c
+++ b/newlib/libc/stdio/vfwscanf.c
@@ -74,6 +74,9 @@ PORTABILITY
@@ -12031,6 +12093,26 @@ index d2f91dde2..de80cc0c0 100644
#include <_ansi.h>
#include <reent.h>
#include <newlib.h>
@@ -479,11 +482,18 @@ __SVFWSCANF_R (struct _reent *rptr,
/* Macro to support positional arguments */
#ifndef _NO_POS_ARGS
+
+#if _ARCH_PPC
+#define __VALIST_PTR(arg) ((va_list *)(arg))
+#else
+#define __VALIST_PTR(arg) (&(arg))
+#endif
+
# define GET_ARG(n, ap, type) \
((type) (is_pos_arg \
? (n < numargs \
? args[n] \
- : get_arg (n, &ap, &numargs, args)) \
+ : get_arg (n, __VALIST_PTR(ap), &numargs, args)) \
: (arg_index++ < numargs \
? args[n] \
: (numargs < MAX_POS_ARGS \
diff --git a/newlib/libc/stdlib/__call_atexit.c b/newlib/libc/stdlib/__call_atexit.c
index 710440389..985e720bf 100644
--- a/newlib/libc/stdlib/__call_atexit.c

View File

@@ -101,7 +101,7 @@ then
--with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 47" \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 47.1" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \

View File

@@ -49,8 +49,8 @@ case "$VERSION" in
toolchain=DEVKITPPC
;;
"3" )
GCC_VER=15.1.0
BINUTILS_VER=2.44
GCC_VER=15.2.0
BINUTILS_VER=2.45.1
NEWLIB_VER=4.5.0.20241231
basedir='dka64'
package=devkitA64