Compare commits

...

28 Commits

Author SHA1 Message Date
Dave Murphy
78eb432d11 devkitA64: update version 2024-06-16 11:47:58 +01:00
Dave Murphy
aa76a0ea46 devkitA64: make read/write posix compliant 2024-06-16 11:47:13 +01:00
Dave Murphy
2429e9ee7d gcc 2024-05-26 18:33:40 +01:00
Dave Murphy
f0b081246c devkitA64: use latest newlib patches 2024-05-26 17:25:22 +01:00
Dave Murphy
a280f18794 devkitA64: update gcc to 14.1.0 2024-05-26 17:25:15 +01:00
Dave Murphy
c012acf8d8 macOS fix 2024-05-16 22:57:12 +01:00
Dave Murphy
19217fdc51 update devkitarm rules/crtls versions 2024-05-11 19:55:02 +01:00
Dave Murphy
aad3392808 devkitARM: binutils 2.42 2024-05-11 19:09:58 +01:00
Dave Murphy
7b0a333842 devkitARM: remove stale patches 2024-05-11 19:09:58 +01:00
Dave Murphy
41922724cb devkitARM: use LDFLAGS from environment 2024-05-11 19:09:57 +01:00
Dave Murphy
2422223439 devkitARM: gcc 14.1.0 2024-05-11 19:09:50 +01:00
Dave Murphy
23afd9959c devkitARM: latest newlib patches 2024-05-04 21:04:10 +01:00
Dave Murphy
03bc549c5c devkitARM: gcc 14.1 release candidate 2024-05-04 21:03:49 +01:00
Dave Murphy
5ae950ae8b devkitPPC: r45.2 2024-04-28 12:44:28 +01:00
Dave Murphy
c62e968c1e devkitPPC: newlib tweaks 2024-04-28 12:42:29 +01:00
Dave Murphy
ee693ddac0 devkitPPC: fix regex.h for C++ 2024-04-22 09:37:31 +01:00
Dave Murphy
ff5a6b07d3 devkitPPC: fixup file buffer alignment 2024-04-20 15:33:32 +01:00
Dave Murphy
80f5db66de devkitPPC: fix readdir 2024-04-14 17:48:41 +01:00
Dave Murphy
4ef6c0321a devkitPPC: syscall abort & assert_func 2024-04-12 18:20:07 +01:00
Dave Murphy
b4e8b963f3 devkitPPC: expand dirent 2024-04-06 16:25:51 +01:00
Dave Murphy
dbd33d2312 devkitPPC: add stat to dirent 2024-03-30 20:53:11 +00:00
Dave Murphy
3f5312c34a devkitPPC: update binutils to 2.42 2024-03-30 20:52:39 +00:00
Dave Murphy
1ac48f5437 devkitA64: add sys/mkdev.h header 2024-02-15 19:19:55 +00:00
Dave Murphy
9d8f579c1c devkitA64: update newlib to 4.4.0 2024-02-01 20:48:07 +00:00
Dave Murphy
de681b1691 devkitA64: update binutils to 2.42 2024-02-01 20:48:02 +00:00
Dave Murphy
dfb3d82a96 devkitARM: update newlib to 4.4.0 2024-02-01 11:00:58 +00:00
Dave Murphy
7318227e11 devkitPPC: upgrade newlib to 4.4.0 2024-01-26 17:35:07 +00:00
Dave Murphy
c04144a5cf install to fixed prefix 2024-01-17 18:49:53 +00:00
14 changed files with 461259 additions and 8858 deletions

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
#---------------------------------------------------------------------------------
# devkitARM release 62
# devkitPPC release 44.2
# devkitA64 release 24
# devkitARM release 64
# devkitPPC release 45.2
# devkitA64 release 25.1
#---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then
@@ -27,8 +27,8 @@ echo
DKARM_RULES_VER=1.5.0
DKARM_CRTLS_VER=1.2.2
DKARM_RULES_VER=1.5.1
DKARM_CRTLS_VER=1.2.5
DKPPC_RULES_VER=1.2.1
@@ -72,20 +72,18 @@ fi
. ./select_toolchain.sh
#---------------------------------------------------------------------------------
# Get preferred installation directory and set paths to the sources
# Legacy versions of these scripts allowed the selection of a prefix which is
# no longer supported. Since adopting pacman and providing precompiled binaries
# of "portlibs" everything we distribute is intended to work within opt/devkitpro
#
# Rather than attempting to repackage our work for exotic linux distributions it
# would be much better for everyone concerned if efforts were made to provide
# pacman and whatever support is necessary to allow the binaries we distribute to
# work as expected.
#
# See https://github.com/devkitPro/pacman and https://devkitpro.org/wiki/devkitPro_pacman
#---------------------------------------------------------------------------------
if [ ! -z "$BUILD_DKPRO_INSTALLDIR" ] ; then
INSTALLDIR="$BUILD_DKPRO_INSTALLDIR"
else
echo
echo "Please enter the directory where you would like '$package' to be installed:"
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
read -e INSTALLDIR
echo
fi
INSTALLDIR=/opt/devkitpro
[ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1;

View File

@@ -13,12 +13,6 @@
#---------------------------------------------------------------------------------
BUILD_DKPRO_PACKAGE=0
#---------------------------------------------------------------------------------
# Toolchain installation directory, comment if not specified
#---------------------------------------------------------------------------------
#BUILD_DKPRO_INSTALLDIR=/opt/devkitpro
#BUILD_DKPRO_INSTALLDIR=c:/devkitPro
#---------------------------------------------------------------------------------
# Path to previously downloaded source packages, comment if not specified
#---------------------------------------------------------------------------------

View File

@@ -0,0 +1,507 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 3ed22fa6c52..16cec309746 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1984,6 +1984,14 @@ struct output_elf_obj_tdata
asection *sec;
} package_metadata;
+ /* Data for .nx-module-name. */
+ struct
+ {
+ bool (*after_write_object_contents) (bfd *);
+ const char *name;
+ asection *sec;
+ } nx_module_name;
+
/* Records the result of `get_program_header_size'. */
bfd_size_type program_header_size;
diff --git a/bfd/elf.c b/bfd/elf.c
index 88c75ae3ce0..c4b5cda59a7 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7359,6 +7359,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd))
return false;
+ /* Write out the NX module name. */
+ if (t->o->nx_module_name.after_write_object_contents != NULL)
+ {
+ failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd);
+ if (failed)
+ return false;
+ }
+
/* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
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 109517db4aa..36ea8726544 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer,
};
+/* Is an undefined weak symbol resolved to 0 ? */
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
+ && bfd_link_executable (INFO) \
+ && !(INFO)->dynamic_undefined_weak)
+
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6947,11 +6953,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
+ struct elf_aarch64_link_hash_entry *eh;
bfd_vma relocation;
bfd_reloc_status_type r;
arelent bfd_reloc;
char sym_type;
bool unresolved_reloc = false;
+ bool resolved_to_zero = false;
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -7091,6 +7099,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
h, &unresolved_reloc,
save_addend, &addend, sym);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -7114,7 +7126,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7209,7 +7221,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7258,7 +7270,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7584,6 +7596,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return false;
}
+/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */
+
+static bool
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h)
+{
+ if (h->dynindx != -1
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
+ {
+ h->dynindx = -1;
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index);
+ }
+ return true;
+}
+
/* 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
@@ -8802,6 +8831,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;
+ bool resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8821,6 +8851,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);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
/* 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
@@ -8830,7 +8864,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. */
- if (h->dynindx == -1 && !h->forced_local
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8864,6 +8898,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;
+ /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */
+ if (!resolved_to_zero)
+ {
+
/* 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;
@@ -8892,6 +8931,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8904,9 +8944,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0;
}
- eh = (struct elf_aarch64_link_hash_entry *) h;
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
-
if (h->got.refcount > 0)
{
bool dyn;
@@ -8918,7 +8955,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. */
- if (dyn && h->dynindx == -1 && !h->forced_local
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8932,7 +8969,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;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8968,7 +9005,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -9050,7 +9087,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)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
h->dyn_relocs = NULL;
@@ -9070,7 +9107,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. */
- if (!h->non_got_ref
+ if (!(h->non_got_ref
+ || (h->root.type == bfd_link_hash_undefweak
+ && !resolved_to_zero))
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -9081,6 +9120,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
+ && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return false;
@@ -9638,8 +9678,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh;
+ bool local_undefweak;
htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h;
+
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
+ resolved undefined weak symbols in executable so that their
+ references have value 0 at run-time. */
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
+
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -9674,7 +9723,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
return false;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular)
+ if (!local_undefweak && !h->def_regular)
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -9696,7 +9745,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. */
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
+ && !local_undefweak)
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -10343,6 +10393,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
+#define elf_backend_fixup_symbol \
+ elfNN_aarch64_elf_fixup_symbol
+
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
index 8f68e517b45..260a590e69e 100644
--- a/ld/emulparams/aarch64elf.sh
+++ b/ld/emulparams/aarch64elf.sh
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 5a08d9e29f1..e4c9abf85a1 100644
--- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh
@@ -1,3 +1,5 @@
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0x1f2003d5
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index b647909ae63..3e2d7a171b9 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -378,7 +378,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
-PARSE_AND_LIST_OPTIONS='
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" 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 71cec19fdc6..3fd0585dee6 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -574,6 +574,7 @@ enum elf_options
OPTION_EXCLUDE_LIBS,
OPTION_HASH_STYLE,
OPTION_BUILD_ID,
+ OPTION_NX_MODULE_NAME,
OPTION_PACKAGE_METADATA,
OPTION_AUDIT,
OPTION_COMPRESS_DEBUG
@@ -605,6 +606,7 @@ EOF
fi
fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
{"package-metadata", optional_argument, NULL, OPTION_PACKAGE_METADATA},
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF
@@ -675,6 +677,16 @@ gld${EMULATION_NAME}_handle_option (int optc)
einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
optarg);
break;
+ case OPTION_NX_MODULE_NAME:
+ if (ldelf_emit_nx_module_name != NULL)
+ {
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = NULL;
+ }
+ if (optarg == NULL)
+ optarg = "";
+ ldelf_emit_nx_module_name = xstrdup (optarg);
+ break;
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
diff --git a/ld/ldelf.c b/ld/ldelf.c
index 2852851dcd5..0b1efa9675a 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id;
/* Content of .note.package section. */
const char *ldelf_emit_note_fdo_package_metadata;
+/* NX module name. */
+const char *ldelf_emit_nx_module_name;
+
/* These variables are required to pass information back and forth
between after_open and check_needed and stat_needed and vercheck. */
@@ -1209,8 +1212,93 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
*save_input_bfd_tail = NULL;
}
-/* This is called before calling plugin 'all symbols read' hook. */
+static bool
+write_nx_module_name (bfd *abfd)
+{
+ struct elf_obj_tdata *t = elf_tdata (abfd);
+ const char *name;
+ asection *asec;
+ Elf_Internal_Shdr *i_shdr;
+ unsigned char *contents;
+ bfd_size_type size;
+ file_ptr position;
+ name = t->o->nx_module_name.name;
+ asec = t->o->nx_module_name.sec;
+ if (bfd_is_abs_section (asec->output_section))
+ {
+ einfo (_("%P: warning: .nx-module-name section discarded,"
+ " --build-id ignored\n"));
+ return true;
+ }
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr;
+
+ if (i_shdr->contents == NULL)
+ {
+ if (asec->contents == NULL)
+ asec->contents = (unsigned char *) xmalloc (asec->size);
+ contents = asec->contents;
+ }
+ else
+ contents = i_shdr->contents + asec->output_offset;
+
+ size = asec->size;
+ bfd_h_put_32 (abfd, 0, &contents[0]);
+ bfd_h_put_32 (abfd, size - 9, &contents[4]);
+ memcpy (&contents[8], name, size - 9);
+ contents[size - 1] = 0; /* ensure null termination for AMS */
+
+ position = i_shdr->sh_offset + asec->output_offset;
+
+ return (bfd_seek (abfd, position, SEEK_SET) == 0
+ && bfd_write (contents, size, abfd) == size);
+}
+
+/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */
+
+static bool
+setup_nx_module_name (bfd *ibfd, bfd *obfd)
+{
+ asection *s;
+ bfd_size_type size;
+ flagword flags;
+
+ if (ldelf_emit_nx_module_name[0] == '\0')
+ {
+ /* Extract the basename of the output bfd and use it as the module name. */
+ char *dot_pos;
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd));
+ ldelf_emit_nx_module_name = xstrdup (ldelf_emit_nx_module_name);
+ dot_pos = strrchr (ldelf_emit_nx_module_name, '.');
+ if (dot_pos != NULL)
+ {
+ /* Remove extension. */
+ *dot_pos = 0;
+ }
+ }
+
+ size = 8 + strlen(ldelf_emit_nx_module_name) + 1; /* extra null terminator for AMS */
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
+ s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags);
+ if (s != NULL && bfd_set_section_alignment (s, 4))
+ {
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd);
+ t->o->nx_module_name.after_write_object_contents = &write_nx_module_name;
+ t->o->nx_module_name.name = ldelf_emit_nx_module_name;
+ t->o->nx_module_name.sec = s;
+ elf_section_type (s) = SHT_PROGBITS;
+ s->size = size;
+ return true;
+ }
+
+ einfo (_("%P: warning: cannot create .nx-module-name section,"
+ " --nx-module-name ignored\n"));
+ return false;
+}
+
+/* This is called before calling plugin 'all symbols read' hook. */
void
ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
int is_linux, int is_freebsd,
@@ -1289,6 +1377,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
}
}
+ if (ldelf_emit_nx_module_name != NULL)
+ {
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+ && bfd_count_sections (abfd) != 0
+ && !((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
+ break;
+
+ /* If there are no ELF input files do not try to create a .nx-module-name section. */
+ if (abfd == NULL || !setup_nx_module_name (abfd, link_info.output_bfd))
+ {
+ free ((char *) ldelf_emit_nx_module_name);
+ ldelf_emit_nx_module_name = NULL;
+ }
+ }
+
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
/* Do not allow executable files to be used as inputs to the link. */
diff --git a/ld/ldelf.h b/ld/ldelf.h
index 239194772c4..68516dbf45e 100644
--- a/ld/ldelf.h
+++ b/ld/ldelf.h
@@ -20,6 +20,7 @@
extern const char *ldelf_emit_note_gnu_build_id;
extern const char *ldelf_emit_note_fdo_package_metadata;
+extern const char *ldelf_emit_nx_module_name;
extern void ldelf_after_parse (void);
extern bool ldelf_load_symbols (lang_input_statement_type *);

View File

@@ -1,8 +1,8 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 648b3dc2110..ed605b28956 100644
index 95c91ee02be..4711542eee5 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1132,7 +1132,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
@@ -1195,7 +1195,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
tmake_file="${tmake_file} aarch64/t-aarch64"
case $target in
aarch64-*-elf*)
@@ -18,7 +18,7 @@ index 648b3dc2110..ed605b28956 100644
aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index ec45f23fa41..a208eabd806 100644
index 5396da9b2d6..87235d680ad 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@
@@ -30,27 +30,24 @@ index ec45f23fa41..a208eabd806 100644
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index a9f3e2715ca..0c7304e1d81 100644
index a05c0d3ded1..5551807e4c6 100644
--- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h
@@ -52,6 +52,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS
@@ -80,7 +80,8 @@ enum aarch64_tp_reg {
AARCH64_TPIDR_EL1 = 1,
AARCH64_TPIDR_EL2 = 2,
AARCH64_TPIDR_EL3 = 3,
- AARCH64_TPIDRRO_EL0 = 4
+ AARCH64_TPIDRRO_EL0 = 4,
+ AARCH64_TP_SOFT = 5
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
/* SVE vector register sizes. */
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index f5db5379543..f582e5a7543 100644
index 1beec94629d..90a9ec580f8 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -19550,8 +19550,24 @@ aarch64_load_tp (rtx target)
@@ -21060,8 +21060,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
@@ -78,32 +75,31 @@ index f5db5379543..f582e5a7543 100644
}
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 73b09e20508..ad62b5080cc 100644
index 4fa1dfc7906..43a01fe3d56 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -1154,6 +1154,10 @@ typedef struct
@@ -1377,6 +1377,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
+#define TARGET_HARD_TP (aarch64_tpidr_reg != AARCH64_TP_SOFT)
+#define TARGET_SOFT_TP (aarch64_tpidr_reg == AARCH64_TP_SOFT)
+
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 36d0bb3f718..cfa2f7efc7f 100644
index dbde066f747..3e3198bf52f 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -7068,11 +7068,22 @@
@@ -7436,11 +7436,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
- ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
"* return aarch64_output_load_tp (operands[0]);"
[(set_attr "type" "mrs")]
)
@@ -122,32 +118,20 @@ index 36d0bb3f718..cfa2f7efc7f 100644
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 1d7967db9c0..17870f18b8b 100644
index 6356c419399..a6907ed0a0b 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -128,6 +128,21 @@ Enum(aarch64_tls_size) String(32) Value(32)
@@ -128,6 +128,9 @@ Enum(tp_reg) String(tpidr_el3) Value(AARCH64_TPIDR_EL3)
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
Enum(tp_reg) String(tpidrro_el0) Value(AARCH64_TPIDRRO_EL0)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
+Enum(tp_reg) String(soft) Value(AARCH64_TP_SOFT)
+
+EnumValue
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
+
+
march=
Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string)
Use features of architecture ARCH.
@@ -266,7 +281,7 @@ TargetVariable
mtp=
Target RejectNegative Joined Enum(tp_reg) Var(aarch64_tpidr_reg) Init(AARCH64_TPIDR_EL0) Save
Specify the thread pointer register.
@@ -329,7 +332,7 @@ TargetVariable
long aarch64_stack_protector_guard_offset = 0
moutline-atomics
@@ -155,13 +139,13 @@ index 1d7967db9c0..17870f18b8b 100644
+Target Var(aarch64_flag_outline_atomics) Save
Generate local calls to out-of-line atomic operations.
-param=aarch64-sve-compare-costs=
-param=aarch64-vect-compare-costs=
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index a9a244ab6d6..a29f2772d63 100644
index 78713558e7d..76c0914d8ce 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -177,8 +177,10 @@ aarch64-cc-fusion.o: $(srcdir)/config/aarch64/aarch64-cc-fusion.cc \
$(srcdir)/config/aarch64/aarch64-cc-fusion.cc
@@ -208,8 +208,10 @@ aarch64-ldp-fusion.o: $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc \
$(srcdir)/config/aarch64/aarch64-ldp-fusion.cc
comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
@@ -246,8 +230,15 @@ index 00000000000..9acbbf9d27c
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
new file mode 100644
index 00000000000..ab7b466aa71
--- /dev/null
+++ b/gcc/config/devkitpro.opt.urls
@@ -0,0 +1 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index acff6138d63..8dc91b75f93 100644
index 42563982e42..923dc198a7e 100644
--- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc
@@ -93,7 +93,10 @@ mingw32_gt_pch_get_address (size_t size, int)
@@ -263,10 +254,10 @@ index acff6138d63..8dc91b75f93 100644
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644
index 728332b8153..47fc03eb8c8 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */
@@ -881,6 +881,11 @@ proper position among the other output files. */
#endif
#endif
@@ -278,7 +269,7 @@ index 16bb07f2cdc..22a181a3a1c 100644
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
@@ -1208,6 +1213,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
@@ -286,7 +277,7 @@ index 16bb07f2cdc..22a181a3a1c 100644
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
@@ -1720,6 +1726,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -294,8 +285,21 @@ index 16bb07f2cdc..22a181a3a1c 100644
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libcc1/configure b/libcc1/configure
index ea689a353c8..98f9d9b21b7 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5119,7 +5119,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644
index 38d3859a73c..f97358d9787 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void)
@@ -308,7 +312,7 @@ index 93ff5b81dc5..20c0fe89a28 100644
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 1989c0c86ed..f1c49b2d4b1 100644
index 33c2d8ff630..2a0a9c1e87e 100644
--- a/libgcc/gthr.h
+++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -321,10 +325,10 @@ index 1989c0c86ed..f1c49b2d4b1 100644
#define GTHREAD_USE_WEAK 0
#endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index a880e8ee227..c58249f986c 100644
index 422a0f4bd0a..ee09ada9170 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
@@ -1429,6 +1429,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -333,10 +337,10 @@ index a880e8ee227..c58249f986c 100644
< $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 0ff875b280b..37820c57a0a 100644
index 9fd4ab4848c..beea48941a3 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1891,6 +1891,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
@@ -1903,6 +1903,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -344,3 +348,16 @@ index 0ff875b280b..37820c57a0a 100644
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/lto-plugin/configure b/lto-plugin/configure
index 28f5dd79cd7..a79f318a4d6 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6469,7 +6469,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/sh
#---------------------------------------------------------------------------------
#---------------------------------------------------------------------------------
@@ -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 24" \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 26.1" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \

View File

@@ -1,8 +1,8 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 6fd1594480a..92b82426f50 100644
index 95c91ee02be..19f003c7952 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1412,6 +1412,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
@@ -1482,6 +1482,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
tm_file="$tm_file newlib-stdint.h"
tmake_file="${tmake_file} arm/t-bpabi"
use_gcc_stdint=wrap
@@ -15,7 +15,7 @@ index 6fd1594480a..92b82426f50 100644
arm*-*-fuchsia*)
tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h"
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index f1fa3fa174c..2bb894b5b2d 100644
index 451b15fe9f9..c9efaf21c8c 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -416,7 +416,7 @@ begin arch armv6k
@@ -28,7 +28,7 @@ index f1fa3fa174c..2bb894b5b2d 100644
optalias vfpv2 fp
option nofp remove ALL_FP
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index f7fc1460d1c..055f9d62385 100644
index aa64e50edeb..99cc8199ec5 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -16,120 +16,22 @@
@@ -165,7 +165,7 @@ index f7fc1460d1c..055f9d62385 100644
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
+MULTILIB_REUSE = mthumb/march.armv6s-m/mfloat-abi.soft=mthumb/march.armv6s-m
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 397ac3f68b9..b9a388f19be 100644
index 6b313042f20..7b39702224a 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@
@@ -252,11 +252,18 @@ index 00000000000..9acbbf9d27c
+Driver
+
+; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
new file mode 100644
index 00000000000..ab7b466aa71
--- /dev/null
+++ b/gcc/config/devkitpro.opt.urls
@@ -0,0 +1 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644
index 728332b8153..47fc03eb8c8 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */
@@ -881,6 +881,11 @@ proper position among the other output files. */
#endif
#endif
@@ -268,7 +275,7 @@ index 16bb07f2cdc..22a181a3a1c 100644
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
@@ -1208,6 +1213,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
@@ -276,7 +283,7 @@ index 16bb07f2cdc..22a181a3a1c 100644
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
@@ -1720,6 +1726,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -284,6 +291,19 @@ index 16bb07f2cdc..22a181a3a1c 100644
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libcc1/configure b/libcc1/configure
index ea689a353c8..98f9d9b21b7 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5119,7 +5119,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi
@@ -295,7 +315,7 @@ index dddddc7c444..c2502597953 100644
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644
index 38d3859a73c..f97358d9787 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void)
@@ -308,7 +328,7 @@ index 93ff5b81dc5..20c0fe89a28 100644
in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 1989c0c86ed..dc3220cdf3c 100644
index 33c2d8ff630..e23c2a7990f 100644
--- a/libgcc/gthr.h
+++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -320,11 +340,202 @@ index 1989c0c86ed..dc3220cdf3c 100644
#undef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 0
#endif
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 21abaeb0778..0ef23891978 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -893,6 +893,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1027,6 +1028,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1279,6 +1281,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1416,7 +1427,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1569,6 +1580,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -5080,7 +5092,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5126,7 +5138,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5150,7 +5162,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5195,7 +5207,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5219,7 +5231,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -12280,7 +12292,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12283 "configure"
+#line 12295 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12386,7 +12398,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12389 "configure"
+#line 12401 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -16182,7 +16194,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 16185 "configure"
+#line 16197 "configure"
int main()
{
typedef bool atomic_type;
@@ -16217,7 +16229,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16220 "configure"
+#line 16232 "configure"
int main()
{
typedef short atomic_type;
@@ -16252,7 +16264,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16255 "configure"
+#line 16267 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -16288,7 +16300,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16291 "configure"
+#line 16303 "configure"
int main()
{
typedef long long atomic_type;
@@ -16444,7 +16456,7 @@ $as_echo "mutex" >&6; }
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16447 "configure"
+#line 16459 "configure"
int main()
{
_Decimal32 d1;
@@ -16486,7 +16498,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16489 "configure"
+#line 16501 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -28575,6 +28587,8 @@ _ACEOF
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
+
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 37396bd6ebb..1dadf658c08 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -378,6 +378,7 @@ dnl # rather than hardcoding that information.
AC_DEFINE(HAVE_ICONV)
AC_DEFINE(HAVE_MEMALIGN)
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index a880e8ee227..2050e2e4ccf 100644
index 422a0f4bd0a..42185df9517 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
@@ -1429,6 +1429,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -333,7 +544,7 @@ index a880e8ee227..2050e2e4ccf 100644
< $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 0ff875b280b..7d270fc3a83 100644
index 9fd4ab4848c..0b7ba4021ee 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -336,6 +336,7 @@ prefix = @prefix@
@@ -344,7 +555,7 @@ index 0ff875b280b..7d270fc3a83 100644
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@@ -1891,6 +1892,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
@@ -1903,6 +1904,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -352,3 +563,16 @@ index 0ff875b280b..7d270fc3a83 100644
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@
diff --git a/lto-plugin/configure b/lto-plugin/configure
index 28f5dd79cd7..a79f318a4d6 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6469,7 +6469,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)

View File

@@ -10,7 +10,7 @@ cd $target/binutils
if [ ! -f configured-binutils ]
then
CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS="$ldflags $LDFLAGS" ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins \
--enable-poison-system-directories \
@@ -41,7 +41,7 @@ cd $target/gcc
if [ ! -f configured-gcc ]
then
CPPFLAGS="$cppflags $CPPFLAGS" \
LDFLAGS="$ldflags" \
LDFLAGS="$ldflags $LDFLAGS" \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
LDFLAGS_FOR_TARGET="" \
@@ -66,7 +66,7 @@ then
--with-system-zlib \
--disable-tm-clone-registry \
--disable-__cxa_atexit \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 62" \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 64" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \

File diff suppressed because it is too large Load Diff

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 44.2" \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 45.2" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \

View File

@@ -30,9 +30,9 @@ done
case "$VERSION" in
"1" )
GCC_VER=13.2.0
BINUTILS_VER=2.41
NEWLIB_VER=4.3.0.20230120
GCC_VER=14.1.0
BINUTILS_VER=2.42
NEWLIB_VER=4.4.0.20231231
basedir='dkarm-eabi'
package=devkitARM
target=arm-none-eabi
@@ -40,18 +40,18 @@ case "$VERSION" in
;;
"2" )
GCC_VER=13.2.0
BINUTILS_VER=2.41
BINUTILS_VER=2.42
MN_BINUTILS_VER=2.24
NEWLIB_VER=4.3.0.20230120
NEWLIB_VER=4.4.0.20231231
basedir='dkppc'
package=devkitPPC
target=powerpc-eabi
toolchain=DEVKITPPC
;;
"3" )
GCC_VER=13.2.0
BINUTILS_VER=2.41
NEWLIB_VER=4.3.0.20230120
GCC_VER=14.1.0
BINUTILS_VER=2.42
NEWLIB_VER=4.4.0.20231231
basedir='dka64'
package=devkitA64
target=aarch64-none-elf