Compare commits

...

45 Commits

Author SHA1 Message Date
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
Dave Murphy
c5f34ab49b devkitA64: update binutils to 2.41 2023-09-17 17:05:29 +01:00
Dave Murphy
eb428eb450 devkitPPC: bump version 2023-09-13 10:10:13 +01:00
Dave Murphy
032100b82e devkitPPC: call destructors 2023-09-13 10:08:13 +01:00
Dave Murphy
d051cd518b update rules & crtls versions 2023-09-12 18:26:40 +01:00
Dave Murphy
5daf9f7bd1 devkitA64: update to gcc 13.2 2023-08-26 16:28:50 +01:00
Dave Murphy
f06196c43c devkitPPC: remove stale patch file 2023-08-07 15:14:29 +01:00
Dave Murphy
5926a76d64 devkitPPC: update binutils to 2.41 2023-08-07 15:13:35 +01:00
Dave Murphy
12a06c469f devkitPPC: update gcc to 13.2.0 2023-08-07 15:12:35 +01:00
Dave Murphy
67729ec64c devkitARM: release 62 2023-08-04 15:52:30 +01:00
Dave Murphy
d0a05636ab devkitARM: use binutils 2.41 2023-08-04 15:51:08 +01:00
Dave Murphy
7d1a2ac929 devkitARM: use gcc 13.2.0 2023-08-04 15:50:20 +01:00
Dave Murphy
9332465b06 devkitARM: remove old patches 2023-08-04 15:49:21 +01:00
Dave Murphy
3b8a45ed5b devkitA64: fix newlib patch 2023-06-17 12:15:25 +01:00
Dave Murphy
cc0e589e56 devkitA64: update gcc to 13.1.0 2023-05-07 01:03:11 +01:00
Dave Murphy
06e7ade19c devkitA64: add symlink support 2023-05-01 17:17:51 +01:00
Dave Murphy
dec683a0ed devkitA64: gcc 13.1.0 RC test 2023-05-01 17:11:02 +01:00
Dave Murphy
4319248cf8 devkitARM: fix dynamic reent 2023-05-01 16:24:23 +01:00
Dave Murphy
80a329157a prevent hard dependency on findfp 2023-05-01 16:21:39 +01:00
Dave Murphy
c8273a1082 devkitARM: newlib add symlink support 2023-05-01 16:21:38 +01:00
Dave Murphy
4defc0f22b devkitARM: update gcc to 13.1.0 2023-05-01 16:21:38 +01:00
Dave Murphy
d158002ce3 devkitARM: test 13.1.0 RC2 2023-05-01 16:21:33 +01:00
Dave Murphy
62b6ba1484 devkitPPC: enable dynamic reent 2023-05-01 12:08:04 +01:00
Dave Murphy
e3dca6f33f devkitPPC: move to gcc 13.1.0 2023-05-01 12:08:04 +01:00
Dave Murphy
db4e394ab8 update devkitppc-rules version 2023-04-29 11:39:06 +01:00
Dave Murphy
8f6a2cf470 update devkitarm rules/crtls versions 2023-04-29 10:45:59 +01:00
Dave Murphy
3429d8162f bump devkitPPC version 2023-04-20 07:42:20 +01:00
Dave Murphy
a048d2e89c devkitPPC: newlib fixes 2023-04-20 07:40:43 +01:00
Dave Murphy
94cabdf12a devkitPPC: update version 2023-04-19 09:15:33 +01:00
Dave Murphy
6a2cfec336 devkitPPC: disable gcc libssp 2023-04-19 08:59:50 +01:00
Dave Murphy
7b03d726b6 devkitPPC: update newlib to 4.3.0 2023-04-15 14:49:13 +01:00
Dave Murphy
9df0987259 devkitPPC: update binutils to 2.40 2023-04-15 14:48:22 +01:00
Dave Murphy
923724a397 devkitPPC: update gcc to 12.2.0 2023-04-15 14:48:22 +01:00
17 changed files with 13160 additions and 9432 deletions

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# devkitARM release 60 # devkitARM release 63
# devkitPPC release 41 # devkitPPC release 45.1
# devkitA64 release 21 # devkitA64 release 25.1
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
@@ -27,12 +27,12 @@ echo
DKARM_RULES_VER=1.2.1 DKARM_RULES_VER=1.5.0
DKARM_CRTLS_VER=1.1.1 DKARM_CRTLS_VER=1.2.2
DKPPC_RULES_VER=1.1.0 DKPPC_RULES_VER=1.2.1
DKA64_RULES_VER=1.0.1 DKA64_RULES_VER=1.1.1
OSXMIN=${OSXMIN:-10.9} OSXMIN=${OSXMIN:-10.9}
@@ -72,20 +72,18 @@ fi
. ./select_toolchain.sh . ./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
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
INSTALLDIR=/opt/devkitpro
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
[ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1; [ ! -z "$INSTALLDIR" ] && mkdir -p $INSTALLDIR && touch $INSTALLDIR/nonexistantfile && rm $INSTALLDIR/nonexistantfile || exit 1;

View File

@@ -13,12 +13,6 @@
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
BUILD_DKPRO_PACKAGE=0 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 # Path to previously downloaded source packages, comment if not specified
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------

View File

@@ -1,15 +1,15 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 5741c60264..fb5d9d069c 100644 index ec856764519..436098cbcc2 100644
--- a/bfd/elf-bfd.h --- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h
@@ -1789,6 +1789,14 @@ struct output_elf_obj_tdata @@ -1966,6 +1966,14 @@ struct output_elf_obj_tdata
asection *sec; asection *sec;
} build_id; } package_metadata;
+ /* Data for .nx-module-name. */ + /* Data for .nx-module-name. */
+ struct + struct
+ { + {
+ bfd_boolean (*after_write_object_contents) (bfd *); + bool (*after_write_object_contents) (bfd *);
+ const char *name; + const char *name;
+ asection *sec; + asection *sec;
+ } nx_module_name; + } nx_module_name;
@@ -18,29 +18,29 @@ index 5741c60264..fb5d9d069c 100644
bfd_size_type program_header_size; bfd_size_type program_header_size;
diff --git a/bfd/elf.c b/bfd/elf.c diff --git a/bfd/elf.c b/bfd/elf.c
index eb3e1828e9..bc6bb48804 100644 index d38e0afff2e..372e6615931 100644
--- a/bfd/elf.c --- a/bfd/elf.c
+++ b/bfd/elf.c +++ b/bfd/elf.c
@@ -6514,6 +6514,14 @@ _bfd_elf_write_object_contents (bfd *abfd) @@ -7321,6 +7321,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd)) if (!bed->s->write_shdrs_and_ehdr (abfd))
return FALSE; return false;
+ /* Write out the NX module name. */ + /* Write out the NX module name. */
+ if (t->o->nx_module_name.after_write_object_contents != NULL) + if (t->o->nx_module_name.after_write_object_contents != NULL)
+ { + {
+ failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd); + failed = !(*t->o->nx_module_name.after_write_object_contents) (abfd);
+ if (failed) + if (failed)
+ return FALSE; + return false;
+ } + }
+ +
/* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */ /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
if (t->o->build_id.after_write_object_contents != NULL) if (t->o->build_id.after_write_object_contents != NULL
return (*t->o->build_id.after_write_object_contents) (abfd); && !(*t->o->build_id.after_write_object_contents) (abfd))
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index faa27611d4..888af6bcd8 100644 index 4592bd6da27..dc27042cfe2 100644
--- a/bfd/elfnn-aarch64.c --- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c
@@ -2341,6 +2341,12 @@ enum elf_aarch64_stub_type @@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer, aarch64_stub_erratum_843419_veneer,
}; };
@@ -53,7 +53,7 @@ index faa27611d4..888af6bcd8 100644
struct elf_aarch64_stub_hash_entry struct elf_aarch64_stub_hash_entry
{ {
/* Base hash table entry structure. */ /* Base hash table entry structure. */
@@ -6436,11 +6442,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -6916,11 +6922,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
Elf_Internal_Sym *sym; Elf_Internal_Sym *sym;
asection *sec; asection *sec;
struct elf_link_hash_entry *h; struct elf_link_hash_entry *h;
@@ -62,12 +62,12 @@ index faa27611d4..888af6bcd8 100644
bfd_reloc_status_type r; bfd_reloc_status_type r;
arelent bfd_reloc; arelent bfd_reloc;
char sym_type; char sym_type;
bfd_boolean unresolved_reloc = FALSE; bool unresolved_reloc = false;
+ bfd_boolean resolved_to_zero = FALSE; + bool resolved_to_zero = false;
char *error_message = NULL; char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info); r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6576,6 +6584,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7060,6 +7068,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
h, &unresolved_reloc, h, &unresolved_reloc,
save_addend, &addend, sym); save_addend, &addend, sym);
@@ -78,7 +78,7 @@ index faa27611d4..888af6bcd8 100644
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type)) switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{ {
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6599,7 +6611,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7083,7 +7095,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs = need_relocs =
(!bfd_link_executable (info) || indx != 0) && (!bfd_link_executable (info) || indx != 0) &&
(h == NULL (h == NULL
@@ -87,7 +87,7 @@ index faa27611d4..888af6bcd8 100644
|| h->root.type != bfd_link_hash_undefweak); || h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL); BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6694,7 +6706,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7178,7 +7190,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
need_relocs = need_relocs =
(!bfd_link_executable (info) || indx != 0) && (!bfd_link_executable (info) || indx != 0) &&
(h == NULL (h == NULL
@@ -96,7 +96,7 @@ index faa27611d4..888af6bcd8 100644
|| h->root.type != bfd_link_hash_undefweak); || h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL); BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6743,7 +6755,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7227,7 +7239,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx); bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL need_relocs = (h == NULL
@@ -105,17 +105,14 @@ index faa27611d4..888af6bcd8 100644
|| h->root.type != bfd_link_hash_undefweak); || h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL); BFD_ASSERT (globals->root.srelgot != NULL);
@@ -7086,6 +7098,26 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh) @@ -7553,6 +7565,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return FALSE; return false;
} }
+/* Remove undefined weak symbol from the dynamic symbol table if it +/* Remove undefined weak symbol from the dynamic symbol table if it
+ is resolved to 0. */ + is resolved to 0. */
+ +
+extern bfd_boolean +static bool
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
+
+bfd_boolean
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info, +elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
+ struct elf_link_hash_entry *h) + struct elf_link_hash_entry *h)
+{ +{
@@ -126,21 +123,21 @@ index faa27611d4..888af6bcd8 100644
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, + _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
+ h->dynstr_index); + h->dynstr_index);
+ } + }
+ return TRUE; + return true;
+} +}
+ +
/* Adjust a symbol defined by a dynamic object and referenced by a /* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to dynamic object, but we're not including those sections. We have to
@@ -8286,6 +8318,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8771,6 +8800,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_table *htab;
struct elf_aarch64_link_hash_entry *eh; struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p; struct elf_dyn_relocs *p;
+ bfd_boolean resolved_to_zero; + bool resolved_to_zero;
/* An example of a bfd_link_hash_indirect symbol is versioned /* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect) symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -8305,6 +8338,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8790,6 +8820,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
info = (struct bfd_link_info *) inf; info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info); htab = elf_aarch64_hash_table (info);
@@ -151,7 +148,7 @@ index faa27611d4..888af6bcd8 100644
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */ here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC if (h->type == STT_GNU_IFUNC
@@ -8314,7 +8351,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8799,7 +8833,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{ {
/* Make sure this symbol is output as a dynamic symbol. /* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */ Undefined weak syms won't yet be marked as dynamic. */
@@ -160,9 +157,9 @@ index faa27611d4..888af6bcd8 100644
&& h->root.type == bfd_link_hash_undefweak) && h->root.type == bfd_link_hash_undefweak)
{ {
if (!bfd_elf_link_record_dynamic_symbol (info, h)) if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8348,6 +8385,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8833,6 +8867,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
of relaxing into these from the large model PLT entries. */ of relaxing into these from the large model PLT entries. */
s->size += PLT_SMALL_ENTRY_SIZE; s->size += htab->plt_entry_size;
+ /* There should be no PLT relocations against resolved undefined + /* There should be no PLT relocations against resolved undefined
+ weak symbols in the executable. */ + weak symbols in the executable. */
@@ -172,15 +169,15 @@ index faa27611d4..888af6bcd8 100644
/* We also need to make an entry in the .got.plt section, which /* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */ will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE; htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8370,6 +8412,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8861,6 +8900,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1;
htab->root.srelplt->reloc_count++;
} }
+ } + }
else else
{ {
h->plt.offset = (bfd_vma) - 1; h->plt.offset = (bfd_vma) - 1;
@@ -8382,9 +8425,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8873,9 +8913,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0; h->needs_plt = 0;
} }
@@ -189,8 +186,8 @@ index faa27611d4..888af6bcd8 100644
- -
if (h->got.refcount > 0) if (h->got.refcount > 0)
{ {
bfd_boolean dyn; bool dyn;
@@ -8396,7 +8436,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8887,7 +8924,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Make sure this symbol is output as a dynamic symbol. /* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */ Undefined weak syms won't yet be marked as dynamic. */
@@ -199,7 +196,7 @@ index faa27611d4..888af6bcd8 100644
&& h->root.type == bfd_link_hash_undefweak) && h->root.type == bfd_link_hash_undefweak)
{ {
if (!bfd_elf_link_record_dynamic_symbol (info, h)) if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8410,7 +8450,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8901,7 +8938,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{ {
h->got.offset = htab->root.sgot->size; h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE; htab->root.sgot->size += GOT_ENTRY_SIZE;
@@ -208,7 +205,7 @@ index faa27611d4..888af6bcd8 100644
|| h->root.type != bfd_link_hash_undefweak) || h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info) && (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)) || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8446,7 +8486,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8937,7 +8974,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
} }
indx = h && h->dynindx != -1 ? h->dynindx : 0; indx = h && h->dynindx != -1 ? h->dynindx : 0;
@@ -217,16 +214,16 @@ index faa27611d4..888af6bcd8 100644
|| h->root.type != bfd_link_hash_undefweak) || h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info) && (!bfd_link_executable (info)
|| indx != 0 || indx != 0
@@ -8512,7 +8552,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -9019,7 +9056,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
visibility. */ visibility. */
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) 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
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
eh->dyn_relocs = NULL; h->dyn_relocs = NULL;
@@ -8532,7 +8572,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -9039,7 +9076,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
symbols which turn out to need copy relocs or are not symbols which turn out to need copy relocs or are not
dynamic. */ dynamic. */
@@ -237,20 +234,20 @@ index faa27611d4..888af6bcd8 100644
&& ((h->def_dynamic && ((h->def_dynamic
&& !h->def_regular) && !h->def_regular)
|| (htab->root.dynamic_sections_created || (htab->root.dynamic_sections_created
@@ -8543,6 +8585,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -9050,6 +9089,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
Undefined weak syms won't yet be marked as dynamic. */ Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1 if (h->dynindx == -1
&& !h->forced_local && !h->forced_local
+ && !resolved_to_zero + && !resolved_to_zero
&& h->root.type == bfd_link_hash_undefweak && h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h)) && !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE; return false;
@@ -9163,8 +9206,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -9607,8 +9647,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym) Elf_Internal_Sym *sym)
{ {
struct elf_aarch64_link_hash_table *htab; struct elf_aarch64_link_hash_table *htab;
+ struct elf_aarch64_link_hash_entry *eh; + struct elf_aarch64_link_hash_entry *eh;
+ bfd_boolean local_undefweak; + bool local_undefweak;
htab = elf_aarch64_hash_table (info); htab = elf_aarch64_hash_table (info);
+ eh = (struct elf_aarch64_link_hash_entry *) h; + eh = (struct elf_aarch64_link_hash_entry *) h;
@@ -263,8 +260,8 @@ index faa27611d4..888af6bcd8 100644
if (h->plt.offset != (bfd_vma) - 1) if (h->plt.offset != (bfd_vma) - 1)
{ {
asection *plt, *gotplt, *relplt; asection *plt, *gotplt, *relplt;
@@ -9199,7 +9251,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -9643,7 +9692,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
return FALSE; return false;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info); elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
- if (!h->def_regular) - if (!h->def_regular)
@@ -272,12 +269,8 @@ index faa27611d4..888af6bcd8 100644
{ {
/* Mark the symbol as undefined, rather than as defined in /* Mark the symbol as undefined, rather than as defined in
the .plt section. */ the .plt section. */
@@ -9218,10 +9270,11 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -9665,7 +9714,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
} && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
if (h->got.offset != (bfd_vma) - 1
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
/* Undefined weak symbol in static PIE resolves to 0 without /* Undefined weak symbol in static PIE resolves to 0 without
any dynamic relocations. */ any dynamic relocations. */
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) - && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
@@ -286,7 +279,7 @@ index faa27611d4..888af6bcd8 100644
{ {
Elf_Internal_Rela rela; Elf_Internal_Rela rela;
bfd_byte *loc; bfd_byte *loc;
@@ -9715,6 +9768,9 @@ const struct elf_size_info elfNN_aarch64_size_info = @@ -10312,6 +10362,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \ #define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections _bfd_elf_init_2_index_sections
@@ -296,90 +289,31 @@ index faa27611d4..888af6bcd8 100644
#define elf_backend_finish_dynamic_sections \ #define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections elfNN_aarch64_finish_dynamic_sections
diff --git a/ld/Makefile.am b/ld/Makefile.am
index c2c798b4fe..a0073d27fe 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -1509,19 +1509,23 @@ ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff --git a/ld/Makefile.in b/ld/Makefile.in
index fc687fc516..7d85865d92 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -3114,18 +3114,22 @@ ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
index 4a59342722..2aa1ec7712 100644 index 8f68e517b45..260a590e69e 100644
--- a/ld/emulparams/aarch64elf.sh --- a/ld/emulparams/aarch64elf.sh
+++ b/ld/emulparams/aarch64elf.sh +++ b/ld/emulparams/aarch64elf.sh
@@ -1,3 +1,5 @@ @@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh +source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+ +
ARCH=aarch64 ARCH=aarch64
MACHINE= MACHINE=
NOP=0x1f2003d5 NOP=0x1f2003d5
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 38bcd4bbb0..da0f411feb 100644 index 5a08d9e29f1..e4c9abf85a1 100644
--- a/ld/emulparams/aarch64elf32.sh --- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh +++ b/ld/emulparams/aarch64elf32.sh
@@ -1,3 +1,5 @@ @@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh +source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+ +
ARCH="aarch64:ilp32" ARCH="aarch64:ilp32"
MACHINE= MACHINE=
NOP=0x1f2003d5 NOP=0x1f2003d5
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index 45e40b510c..916ef2086a 100644 index d47bdbf9937..b6f76d5c8d7 100644
--- a/ld/emultempl/aarch64elf.em --- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em
@@ -380,7 +380,7 @@ PARSE_AND_LIST_LONGOPTS=' @@ -378,7 +378,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS}, { "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
' '
@@ -388,25 +322,63 @@ index 45e40b510c..916ef2086a 100644
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n" fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n")); " enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n" fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index f4f7ad6b4e..8428a54697 100644 index 3f67f8b09d9..eb8e8e1596e 100644
--- a/ld/emultempl/elf32.em --- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf32.em +++ b/ld/emultempl/elf.em
@@ -192,6 +192,9 @@ static char *depaudit; /* colon (typically) separated list of libs */ @@ -572,6 +572,7 @@ enum elf_options
/* Style of .note.gnu.build-id section. */ OPTION_EXCLUDE_LIBS,
static const char *emit_note_gnu_build_id; OPTION_HASH_STYLE,
OPTION_BUILD_ID,
+ OPTION_NX_MODULE_NAME,
OPTION_PACKAGE_METADATA,
OPTION_AUDIT,
OPTION_COMPRESS_DEBUG
@@ -603,6 +604,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
@@ -673,6 +675,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 f9a6819366f..99e982ef5eb 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. */ +/* NX module name. */
+static const char *emit_nx_module_name; +const char *ldelf_emit_nx_module_name;
+ +
/* On Linux, it's possible to have different versions of the same /* These variables are required to pass information back and forth
shared library linked against different versions of libc. The between after_open and check_needed and stat_needed and vercheck. */
dynamic linker somehow tags which libc version to use in
@@ -1217,6 +1220,92 @@ setup_build_id (bfd *ibfd) @@ -1206,8 +1209,93 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
return FALSE; *save_input_bfd_tail = NULL;
} }
+static bfd_boolean -/* This is called before calling plugin 'all symbols read' hook. */
+static bool
+write_nx_module_name (bfd *abfd) +write_nx_module_name (bfd *abfd)
+{ +{
+ struct elf_obj_tdata *t = elf_tdata (abfd); + struct elf_obj_tdata *t = elf_tdata (abfd);
@@ -416,14 +388,14 @@ index f4f7ad6b4e..8428a54697 100644
+ unsigned char *contents; + unsigned char *contents;
+ bfd_size_type size; + bfd_size_type size;
+ file_ptr position; + file_ptr position;
+
+ name = t->o->nx_module_name.name; + name = t->o->nx_module_name.name;
+ asec = t->o->nx_module_name.sec; + asec = t->o->nx_module_name.sec;
+ if (bfd_is_abs_section (asec->output_section)) + if (bfd_is_abs_section (asec->output_section))
+ { + {
+ einfo (_("%P: warning: .nx-module-name section discarded," + einfo (_("%P: warning: .nx-module-name section discarded,"
+ " --build-id ignored\n")); + " --build-id ignored\n"));
+ return TRUE; + return true;
+ } + }
+ i_shdr = &elf_section_data (asec->output_section)->this_hdr; + i_shdr = &elf_section_data (asec->output_section)->this_hdr;
+ +
@@ -450,21 +422,21 @@ index f4f7ad6b4e..8428a54697 100644
+ +
+/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */ +/* Make .nx-module-name section, and set up elf_tdata->nx_module_name. */
+ +
+static bfd_boolean +static bool
+setup_nx_module_name (bfd *ibfd, bfd *obfd) +setup_nx_module_name (bfd *ibfd, bfd *obfd)
+{ +{
+ asection *s; + asection *s;
+ bfd_size_type size; + bfd_size_type size;
+ flagword flags; + flagword flags;
+ +
+ if (emit_nx_module_name[0] == '\0') + if (ldelf_emit_nx_module_name[0] == '\0')
+ { + {
+ /* Extract the basename of the output bfd and use it as the module name. */ + /* Extract the basename of the output bfd and use it as the module name. */
+ char *dot_pos; + char *dot_pos;
+ free ((char *) emit_nx_module_name); + free ((char *) ldelf_emit_nx_module_name);
+ emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd)); + ldelf_emit_nx_module_name = (char *) lbasename (bfd_get_filename (obfd));
+ emit_nx_module_name = xstrdup (emit_nx_module_name); + ldelf_emit_nx_module_name = xstrdup (ldelf_emit_nx_module_name);
+ dot_pos = strrchr (emit_nx_module_name, '.'); + dot_pos = strrchr (ldelf_emit_nx_module_name, '.');
+ if (dot_pos != NULL) + if (dot_pos != NULL)
+ { + {
+ /* Remove extension. */ + /* Remove extension. */
@@ -472,34 +444,35 @@ index f4f7ad6b4e..8428a54697 100644
+ } + }
+ } + }
+ +
+ size = 8 + strlen(emit_nx_module_name) + 1; /* extra null terminator for AMS */ + size = 8 + strlen(ldelf_emit_nx_module_name) + 1; /* extra null terminator for AMS */
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY + flags = (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA); + | SEC_LINKER_CREATED | SEC_READONLY | SEC_DATA);
+ s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags); + s = bfd_make_section_with_flags (ibfd, ".nx-module-name", flags);
+ if (s != NULL && bfd_set_section_alignment (ibfd, s, 4)) + if (s != NULL && bfd_set_section_alignment (s, 4))
+ { + {
+ struct elf_obj_tdata *t = elf_tdata (link_info.output_bfd); + 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.after_write_object_contents = &write_nx_module_name;
+ t->o->nx_module_name.name = emit_nx_module_name; + t->o->nx_module_name.name = ldelf_emit_nx_module_name;
+ t->o->nx_module_name.sec = s; + t->o->nx_module_name.sec = s;
+ elf_section_type (s) = SHT_PROGBITS; + elf_section_type (s) = SHT_PROGBITS;
+ s->size = size; + s->size = size;
+ return TRUE; + return true;
+ } + }
+ +
+ einfo (_("%P: warning: cannot create .nx-module-name section," + einfo (_("%P: warning: cannot create .nx-module-name section,"
+ " --nx-module-name ignored\n")); + " --nx-module-name ignored\n"));
+ return FALSE; + return false;
+} +}
+ +
/* This is called after all the input files have been opened. */ +/* This is called before calling plugin 'all symbols read' hook. */
void
static void ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
@@ -1267,6 +1356,24 @@ gld${EMULATION_NAME}_after_open (void) int is_linux, int is_freebsd,
@@ -1286,6 +1374,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
} }
} }
+ if (emit_nx_module_name != NULL) + if (ldelf_emit_nx_module_name != NULL)
+ { + {
+ /* Find an ELF input. */ + /* Find an ELF input. */
+ for (abfd = link_info.input_bfds; + for (abfd = link_info.input_bfds;
@@ -512,93 +485,23 @@ index f4f7ad6b4e..8428a54697 100644
+ /* If there are no ELF input files do not try to create a .nx-module-name section. */ + /* 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)) + if (abfd == NULL || !setup_nx_module_name (abfd, link_info.output_bfd))
+ { + {
+ free ((char *) emit_nx_module_name); + free ((char *) ldelf_emit_nx_module_name);
+ emit_nx_module_name = NULL; + ldelf_emit_nx_module_name = NULL;
+ } + }
+ } + }
+ +
get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info); get_elf_backend_data (link_info.output_bfd)->setup_gnu_properties (&link_info);
if (bfd_link_relocatable (&link_info)) /* Do not allow executable files to be used as inputs to the link. */
@@ -2720,6 +2827,7 @@ enum elf_options diff --git a/ld/ldelf.h b/ld/ldelf.h
OPTION_EXCLUDE_LIBS, index f82bd9234a7..96173dcd671 100644
OPTION_HASH_STYLE, --- a/ld/ldelf.h
OPTION_BUILD_ID, +++ b/ld/ldelf.h
+ OPTION_NX_MODULE_NAME, @@ -20,6 +20,7 @@
OPTION_AUDIT,
OPTION_COMPRESS_DEBUG
};
@@ -2750,6 +2858,7 @@ EOF
fi
fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
@@ -2814,6 +2923,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 (emit_nx_module_name != NULL)
+ {
+ free ((char *) emit_nx_module_name);
+ emit_nx_module_name = NULL;
+ }
+ if (optarg == NULL)
+ optarg = "";
+ emit_nx_module_name = xstrdup (optarg);
+ break;
EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then extern const char *ldelf_emit_note_gnu_build_id;
diff --git a/ld/ldgram.y b/ld/ldgram.y extern const char *ldelf_emit_note_fdo_package_metadata;
index c3eadeb392..59ab143526 100644 +extern const char *ldelf_emit_nx_module_name;
--- a/ld/ldgram.y
+++ b/ld/ldgram.y
@@ -819,6 +819,7 @@ origin_spec:
ORIGIN '=' mustbe_exp
{
region->origin_exp = $3;
+ region->current = region->origin;
}
;
diff --git a/ld/ldlang.c b/ld/ldlang.c extern void ldelf_after_parse (void);
index 33f6bda292..7161f4210a 100644 extern bool ldelf_load_symbols (lang_input_statement_type *);
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -7381,9 +7381,6 @@ lang_process (void)
current_target = default_target;
lang_statement_iteration++;
open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
- /* open_input_bfds also handles assignments, so we can give values
- to symbolic origin/length now. */
- lang_do_memory_regions ();
#ifdef ENABLE_PLUGINS
if (link_info.lto_plugin_active)
@@ -7526,6 +7523,8 @@ lang_process (void)
/* PR 13683: We must rerun the assignments prior to running garbage
collection in order to make sure that all symbol aliases are resolved. */
lang_do_assignments (lang_mark_phase_enum);
+
+ lang_do_memory_regions();
expld.phase = lang_first_phase_enum;
/* Size up the common data. */
@@ -7610,11 +7609,8 @@ lang_process (void)
/* Fix any __start, __stop, .startof. or .sizeof. symbols. */
lang_finalize_start_stop ();
- /* Do all the assignments again, to report errors. Assignment
- statements are processed multiple times, updating symbols; In
- open_input_bfds, lang_do_assignments, and lang_size_sections.
- Since lang_relax_sections calls lang_do_assignments, symbols are
- also updated in ldemul_after_allocation. */
+ /* Do all the assignments, now that we know the final resting places
+ of all the symbols. */
lang_do_assignments (lang_final_phase_enum);
ldemul_finish ();

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 diff --git a/gcc/config.gcc b/gcc/config.gcc
index c5064dd3766..decfa78fb7b 100644 index 648b3dc2110..ed605b28956 100644
--- a/gcc/config.gcc --- a/gcc/config.gcc
+++ b/gcc/config.gcc +++ b/gcc/config.gcc
@@ -1093,7 +1093,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) @@ -1132,7 +1132,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
tmake_file="${tmake_file} aarch64/t-aarch64" tmake_file="${tmake_file} aarch64/t-aarch64"
case $target in case $target in
aarch64-*-elf*) aarch64-*-elf*)
@@ -18,7 +18,7 @@ index c5064dd3766..decfa78fb7b 100644
aarch64-*-fuchsia*) aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h" tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index d4d820a9d54..ed5dd440846 100644 index ec45f23fa41..a208eabd806 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h --- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h +++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@ @@ -22,6 +22,7 @@
@@ -30,10 +30,10 @@ index d4d820a9d54..ed5dd440846 100644
#define ENDFILE_SPEC \ #define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \ " crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index 93572fe8330..9327c52a819 100644 index a9f3e2715ca..0c7304e1d81 100644
--- a/gcc/config/aarch64/aarch64-opts.h --- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h +++ b/gcc/config/aarch64/aarch64-opts.h
@@ -48,6 +48,12 @@ enum aarch64_tls_type { @@ -52,6 +52,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS TLS_DESCRIPTORS
}; };
@@ -47,10 +47,10 @@ index 93572fe8330..9327c52a819 100644
Most have a PIC and non-PIC variant. */ Most have a PIC and non-PIC variant. */
enum aarch64_code_model { enum aarch64_code_model {
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 5c9e7791a12..718db155d57 100644 index f5db5379543..f582e5a7543 100644
--- a/gcc/config/aarch64/aarch64.cc --- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc
@@ -19413,8 +19413,24 @@ aarch64_load_tp (rtx target) @@ -19550,8 +19550,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode)) || !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode); target = gen_reg_rtx (Pmode);
@@ -78,10 +78,10 @@ index 5c9e7791a12..718db155d57 100644
} }
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 359b6e8561f..f5b596fc312 100644 index 73b09e20508..ad62b5080cc 100644
--- a/gcc/config/aarch64/aarch64.h --- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h
@@ -1245,6 +1245,10 @@ typedef struct @@ -1154,6 +1154,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */ /* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS) #define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
@@ -92,20 +92,11 @@ index 359b6e8561f..f5b596fc312 100644
extern enum aarch64_code_model aarch64_cmodel; extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches /* When using the tiny addressing model conditional and unconditional branches
@@ -1290,7 +1294,7 @@ extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
#define MCPU_TO_MARCH_SPEC_FUNCTIONS \
{ "rewrite_mcpu", aarch64_rewrite_mcpu },
-#if defined(__aarch64__)
+#if 0 // defined(__aarch64__)
extern const char *host_detect_local_cpu (int argc, const char **argv);
#define HAVE_LOCAL_CPU_DETECT
# define EXTRA_SPEC_FUNCTIONS \
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 34b8059b45b..4debacf3cb9 100644 index 36d0bb3f718..cfa2f7efc7f 100644
--- a/gcc/config/aarch64/aarch64.md --- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md
@@ -6906,11 +6906,22 @@ @@ -7068,11 +7068,22 @@
(define_insn "aarch64_load_tp_hard" (define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r") [(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_TLS))] (unspec:DI [(const_int 0)] UNSPEC_TLS))]
@@ -131,10 +122,10 @@ index 34b8059b45b..4debacf3cb9 100644
;; instructions in the TLS stubs, in order to enable linker relaxation. ;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence. ;; Therefore we treat the stubs as an atomic sequence.
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 92220b26ee2..68abc1764f6 100644 index 1d7967db9c0..17870f18b8b 100644
--- a/gcc/config/aarch64/aarch64.opt --- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt
@@ -122,6 +122,21 @@ Enum(aarch64_tls_size) String(32) Value(32) @@ -128,6 +128,21 @@ Enum(aarch64_tls_size) String(32) Value(32)
EnumValue EnumValue
Enum(aarch64_tls_size) String(48) Value(48) Enum(aarch64_tls_size) String(48) Value(48)
@@ -156,7 +147,7 @@ index 92220b26ee2..68abc1764f6 100644
march= march=
Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string) Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string)
Use features of architecture ARCH. Use features of architecture ARCH.
@@ -260,7 +275,7 @@ TargetVariable @@ -266,7 +281,7 @@ TargetVariable
long aarch64_stack_protector_guard_offset = 0 long aarch64_stack_protector_guard_offset = 0
moutline-atomics moutline-atomics
@@ -166,7 +157,7 @@ index 92220b26ee2..68abc1764f6 100644
-param=aarch64-sve-compare-costs= -param=aarch64-sve-compare-costs=
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64 diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index ba74abc0a43..5202ec05d0b 100644 index a9a244ab6d6..a29f2772d63 100644
--- a/gcc/config/aarch64/t-aarch64 --- a/gcc/config/aarch64/t-aarch64
+++ b/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 \ @@ -177,8 +177,10 @@ aarch64-cc-fusion.o: $(srcdir)/config/aarch64/aarch64-cc-fusion.cc \
@@ -256,26 +247,26 @@ index 00000000000..9acbbf9d27c
+ +
+; This comment is to ensure we retain the blank line above. +; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index 3b0d83ffc60..6e063b6ccd0 100644 index acff6138d63..8dc91b75f93 100644
--- a/gcc/config/i386/host-mingw32.cc --- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc +++ b/gcc/config/i386/host-mingw32.cc
@@ -45,7 +45,11 @@ static size_t mingw32_gt_pch_alloc_granularity (void); @@ -93,7 +93,10 @@ mingw32_gt_pch_get_address (size_t size, int)
static inline void w32_error(const char*, const char*, int, const char*); for NT system dlls is in 0x70000000 to 0x78000000 range.
If we allocate at bottom we need to reserve the address as early
/* FIXME: Is this big enough? */ as possible and at the same point in each invocation. */
-
+
+#if __MINGW64__ +#if __MINGW64__
+static const size_t pch_VA_max_size = UINT64_C(64 * 1024 * 1024 * 1024); + size = UINT64_C(64 * 1024 * 1024 * 1024);
+#else
static const size_t pch_VA_max_size = 128 * 1024 * 1024;
+#endif +#endif
res = VirtualAlloc (NULL, size,
/* Granularity for reserving address space. */ MEM_RESERVE | MEM_TOP_DOWN,
static size_t va_granularity = 0x10000; PAGE_NOACCESS);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index bb07cc244e3..eff31f5093d 100644 index 16bb07f2cdc..22a181a3a1c 100644
--- a/gcc/gcc.cc --- a/gcc/gcc.cc
+++ b/gcc/gcc.cc +++ b/gcc/gcc.cc
@@ -860,6 +860,11 @@ proper position among the other output files. */ @@ -868,6 +868,11 @@ proper position among the other output files. */
#endif #endif
#endif #endif
@@ -287,7 +278,7 @@ index bb07cc244e3..eff31f5093d 100644
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */ /* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC #ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \ #define STARTFILE_SPEC \
@@ -1204,6 +1209,7 @@ static const char *link_spec = LINK_SPEC; @@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC; static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = ""; static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC; static const char *libgcc_spec = LIBGCC_SPEC;
@@ -295,7 +286,7 @@ index bb07cc244e3..eff31f5093d 100644
static const char *endfile_spec = ENDFILE_SPEC; static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC; static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME; static const char *linker_name_spec = LINKER_NAME;
@@ -1709,6 +1715,7 @@ static struct spec_list static_specs[] = @@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec), INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec), INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec), INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -304,10 +295,10 @@ index bb07cc244e3..eff31f5093d 100644
INIT_STATIC_SPEC ("cross_compile", &cross_compile), INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version), INIT_STATIC_SPEC ("version", &compiler_version),
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index b98b86a5a88..3f62b3616d2 100644 index 93ff5b81dc5..20c0fe89a28 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ register_tm_clones (void) @@ -326,7 +326,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF #ifdef OBJECT_FORMAT_ELF
@@ -317,7 +308,7 @@ index b98b86a5a88..3f62b3616d2 100644
in every shared-object; in a main program its value is zero. The in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 7943c94f6d1..6d23362f7f0 100644 index 1989c0c86ed..f1c49b2d4b1 100644
--- a/libgcc/gthr.h --- a/libgcc/gthr.h
+++ b/libgcc/gthr.h +++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see @@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -330,10 +321,10 @@ index 7943c94f6d1..6d23362f7f0 100644
#define GTHREAD_USE_WEAK 0 #define GTHREAD_USE_WEAK 0
#endif #endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 7708f4cf6c5..d3f484a5623 100644 index a880e8ee227..c58249f986c 100644
--- a/libstdc++-v3/include/Makefile.am --- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am
@@ -1366,6 +1366,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \ -e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -342,10 +333,10 @@ index 7708f4cf6c5..d3f484a5623 100644
< $< > $@ < $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 7023c2de23e..d150a616d13 100644 index 0ff875b280b..37820c57a0a 100644
--- a/libstdc++-v3/include/Makefile.in --- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in
@@ -1857,6 +1857,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1891,6 +1891,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \ -e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \

View File

@@ -62,7 +62,7 @@ then
--enable-lto \ --enable-lto \
--disable-tm-clone-registry \ --disable-tm-clone-registry \
--disable-__cxa_atexit \ --disable-__cxa_atexit \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 21" \ --with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 25.1" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \

View File

@@ -1,8 +1,8 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc diff --git a/gcc/config.gcc b/gcc/config.gcc
index c5064dd3766..b244608f001 100644 index 6fd1594480a..92b82426f50 100644
--- a/gcc/config.gcc --- a/gcc/config.gcc
+++ b/gcc/config.gcc +++ b/gcc/config.gcc
@@ -1366,6 +1366,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*) @@ -1412,6 +1412,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*)
tm_file="$tm_file newlib-stdint.h" tm_file="$tm_file newlib-stdint.h"
tmake_file="${tmake_file} arm/t-bpabi" tmake_file="${tmake_file} arm/t-bpabi"
use_gcc_stdint=wrap use_gcc_stdint=wrap
@@ -15,10 +15,10 @@ index c5064dd3766..b244608f001 100644
arm*-*-fuchsia*) arm*-*-fuchsia*)
tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h" 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 diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 0d3082b569f..15be7fc47b3 100644 index f1fa3fa174c..2bb894b5b2d 100644
--- a/gcc/config/arm/arm-cpus.in --- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in
@@ -412,7 +412,7 @@ begin arch armv6k @@ -416,7 +416,7 @@ begin arch armv6k
tune for mpcore tune for mpcore
tune flags CO_PROC tune flags CO_PROC
base 6K base 6K
@@ -28,7 +28,7 @@ index 0d3082b569f..15be7fc47b3 100644
optalias vfpv2 fp optalias vfpv2 fp
option nofp remove ALL_FP option nofp remove ALL_FP
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index 1459afea921..72e1d20861d 100644 index f7fc1460d1c..055f9d62385 100644
--- a/gcc/config/arm/t-arm-elf --- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf +++ b/gcc/config/arm/t-arm-elf
@@ -16,120 +16,22 @@ @@ -16,120 +16,22 @@
@@ -165,7 +165,7 @@ index 1459afea921..72e1d20861d 100644
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard -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 +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 diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index bfb294beaa3..7e2e1c7bbbe 100644 index 397ac3f68b9..b9a388f19be 100644
--- a/gcc/config/arm/unknown-elf.h --- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h +++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
@@ -252,27 +252,11 @@ index 00000000000..9acbbf9d27c
+Driver +Driver
+ +
+; This comment is to ensure we retain the blank line above. +; This comment is to ensure we retain the blank line above.
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index 3b0d83ffc60..6e063b6ccd0 100644
--- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc
@@ -45,7 +45,11 @@ static size_t mingw32_gt_pch_alloc_granularity (void);
static inline void w32_error(const char*, const char*, int, const char*);
/* FIXME: Is this big enough? */
+#if __MINGW64__
+static const size_t pch_VA_max_size = UINT64_C(64 * 1024 * 1024 * 1024);
+#else
static const size_t pch_VA_max_size = 128 * 1024 * 1024;
+#endif
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
diff --git a/gcc/gcc.cc b/gcc/gcc.cc diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index bb07cc244e3..eff31f5093d 100644 index 16bb07f2cdc..22a181a3a1c 100644
--- a/gcc/gcc.cc --- a/gcc/gcc.cc
+++ b/gcc/gcc.cc +++ b/gcc/gcc.cc
@@ -860,6 +860,11 @@ proper position among the other output files. */ @@ -868,6 +868,11 @@ proper position among the other output files. */
#endif #endif
#endif #endif
@@ -284,7 +268,7 @@ index bb07cc244e3..eff31f5093d 100644
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */ /* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC #ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \ #define STARTFILE_SPEC \
@@ -1204,6 +1209,7 @@ static const char *link_spec = LINK_SPEC; @@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC; static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = ""; static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC; static const char *libgcc_spec = LIBGCC_SPEC;
@@ -292,7 +276,7 @@ index bb07cc244e3..eff31f5093d 100644
static const char *endfile_spec = ENDFILE_SPEC; static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC; static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME; static const char *linker_name_spec = LINKER_NAME;
@@ -1709,6 +1715,7 @@ static struct spec_list static_specs[] = @@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec), INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec), INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec), INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -311,10 +295,10 @@ index dddddc7c444..c2502597953 100644
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions +LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index b98b86a5a88..3f62b3616d2 100644 index 93ff5b81dc5..20c0fe89a28 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ register_tm_clones (void) @@ -326,7 +326,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF #ifdef OBJECT_FORMAT_ELF
@@ -324,7 +308,7 @@ index b98b86a5a88..3f62b3616d2 100644
in every shared-object; in a main program its value is zero. The in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance object should in any case be protected. This means the instance
diff --git a/libgcc/gthr.h b/libgcc/gthr.h diff --git a/libgcc/gthr.h b/libgcc/gthr.h
index 7943c94f6d1..1edc5360f6a 100644 index 1989c0c86ed..dc3220cdf3c 100644
--- a/libgcc/gthr.h --- a/libgcc/gthr.h
+++ b/libgcc/gthr.h +++ b/libgcc/gthr.h
@@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see @@ -136,7 +136,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -337,10 +321,10 @@ index 7943c94f6d1..1edc5360f6a 100644
#define GTHREAD_USE_WEAK 0 #define GTHREAD_USE_WEAK 0
#endif #endif
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 7708f4cf6c5..01743392303 100644 index a880e8ee227..2050e2e4ccf 100644
--- a/libstdc++-v3/include/Makefile.am --- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am
@@ -1366,6 +1366,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \ -e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \
@@ -349,7 +333,7 @@ index 7708f4cf6c5..01743392303 100644
< $< > $@ < $< > $@
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 7023c2de23e..33bec80c2ce 100644 index 0ff875b280b..7d270fc3a83 100644
--- a/libstdc++-v3/include/Makefile.in --- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in
@@ -336,6 +336,7 @@ prefix = @prefix@ @@ -336,6 +336,7 @@ prefix = @prefix@
@@ -360,7 +344,7 @@ index 7023c2de23e..33bec80c2ce 100644
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -1857,6 +1858,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1891,6 +1892,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \
-e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \
-e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \ -e 's/_GLIBCXX___MINGW32_GLIBCXX___/__MINGW32__/g' \

View File

@@ -66,7 +66,7 @@ then
--with-system-zlib \ --with-system-zlib \
--disable-tm-clone-registry \ --disable-tm-clone-registry \
--disable-__cxa_atexit \ --disable-__cxa_atexit \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 60" \ --with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 63" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \

View File

@@ -1,28 +0,0 @@
diff -NBaur binutils-2.37/libiberty/rust-demangle.c binutils-2.37-new/libiberty/rust-demangle.c
--- binutils-2.37/libiberty/rust-demangle.c 2021-07-15 15:19:46.000000000 +0100
+++ binutils-2.37-new/libiberty/rust-demangle.c 2022-01-01 22:02:21.860422023 +0000
@@ -75,10 +75,10 @@
int version;
/* Recursion depth. */
- uint recursion;
+ unsigned recursion;
/* Maximum number of times demangle_path may be called recursively. */
#define RUST_MAX_RECURSION_COUNT 1024
-#define RUST_NO_RECURSION_LIMIT ((uint) -1)
+#define RUST_NO_RECURSION_LIMIT ((unsigned) -1)
uint64_t bound_lifetime_depth;
};
diff -NBaur binutils-2.37/opcodes/ppc-opc.c binutils-2.37-new/opcodes/ppc-opc.c
--- binutils-2.37/opcodes/ppc-opc.c 2021-07-08 12:37:21.000000000 +0100
+++ binutils-2.37-new/opcodes/ppc-opc.c 2022-01-01 22:02:04.409141184 +0000
@@ -4302,7 +4302,7 @@
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCSPE2 PPC_OPCODE_SPE2

View File

@@ -0,0 +1,26 @@
diff --git a/ld/emulparams/elf32ppccommon.sh b/ld/emulparams/elf32ppccommon.sh
index da892988f5d..6b8efb9bbdb 100644
--- a/ld/emulparams/elf32ppccommon.sh
+++ b/ld/emulparams/elf32ppccommon.sh
@@ -23,7 +23,7 @@ else
unset SBSS_START_SYMBOLS
unset SBSS_END_SYMBOLS
fi
-OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};"
+OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end = .${CREATE_SHLIB+)};${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};"
OTHER_RELRO_SECTIONS="
.fixup ${RELOCATING-0} : { *(.fixup) }
.got1 ${RELOCATING-0} : { *(.got1) }
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 37f1aeb780c..f8de8aacc44 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -4988,7 +4988,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands);
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
#define PPCE300 PPC_OPCODE_E300
#define PPCSPE PPC_OPCODE_SPE
#define PPCSPE2 PPC_OPCODE_SPE2

View File

@@ -1,7 +1,8 @@
diff -NBaur gcc-12.1.0/config/gthr.m4 gcc-12.1.0-dkppc/config/gthr.m4 diff --git a/config/gthr.m4 b/config/gthr.m4
--- gcc-12.1.0/config/gthr.m4 2022-05-06 08:30:56.000000000 +0100 index 11996247f15..f21b315ce8a 100644
+++ gcc-12.1.0-dkppc/config/gthr.m4 2022-05-06 19:17:44.784777075 +0100 --- a/config/gthr.m4
@@ -13,6 +13,7 @@ +++ b/config/gthr.m4
@@ -13,6 +13,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
case $1 in case $1 in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
@@ -9,25 +10,11 @@ diff -NBaur gcc-12.1.0/config/gthr.m4 gcc-12.1.0-dkppc/config/gthr.m4
gcn) thread_header=config/gcn/gthr-gcn.h ;; gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff -NBaur gcc-12.1.0/gcc/config/i386/host-mingw32.cc gcc-12.1.0-dkppc/gcc/config/i386/host-mingw32.cc diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h
--- gcc-12.1.0/gcc/config/i386/host-mingw32.cc 2022-05-06 08:30:56.000000000 +0100 index 98bc77b46b8..4f1690d4f4d 100644
+++ gcc-12.1.0-dkppc/gcc/config/i386/host-mingw32.cc 2022-05-06 19:17:44.784777075 +0100 --- a/gcc/config/newlib-stdint.h
@@ -45,7 +45,11 @@ +++ b/gcc/config/newlib-stdint.h
static inline void w32_error(const char*, const char*, int, const char*); @@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* FIXME: Is this big enough? */
+#if __MINGW64__
+static const size_t pch_VA_max_size = UINT64_C(64 * 1024 * 1024 * 1024);
+#else
static const size_t pch_VA_max_size = 128 * 1024 * 1024;
+#endif
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
diff -NBaur gcc-12.1.0/gcc/config/newlib-stdint.h gcc-12.1.0-dkppc/gcc/config/newlib-stdint.h
--- gcc-12.1.0/gcc/config/newlib-stdint.h 2022-05-06 08:30:57.000000000 +0100
+++ gcc-12.1.0-dkppc/gcc/config/newlib-stdint.h 2022-05-06 19:17:44.784777075 +0100
@@ -25,7 +25,7 @@
/* newlib uses 32-bit long in certain cases for all non-SPU /* newlib uses 32-bit long in certain cases for all non-SPU
targets. */ targets. */
#ifndef STDINT_LONG32 #ifndef STDINT_LONG32
@@ -36,10 +23,24 @@ diff -NBaur gcc-12.1.0/gcc/config/newlib-stdint.h gcc-12.1.0-dkppc/gcc/config/ne
#endif #endif
#define SIG_ATOMIC_TYPE "int" #define SIG_ATOMIC_TYPE "int"
diff -NBaur gcc-12.1.0/gcc/config/rs6000/rs6000.h gcc-12.1.0-dkppc/gcc/config/rs6000/rs6000.h diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h
--- gcc-12.1.0/gcc/config/rs6000/rs6000.h 2022-05-06 08:30:57.000000000 +0100 index 5bfc377e0de..342ed1932b9 100644
+++ gcc-12.1.0-dkppc/gcc/config/rs6000/rs6000.h 2022-05-06 19:22:10.793624730 +0100 --- a/gcc/config/rs6000/eabi.h
@@ -196,6 +196,7 @@ +++ b/gcc/config/rs6000/eabi.h
@@ -36,6 +36,8 @@
builtin_assert ("system=embedded"); \
builtin_assert ("cpu=powerpc"); \
builtin_assert ("machine=powerpc"); \
+ builtin_define ("__DEVKITPPC__"); \
+ builtin_define ("__DEVKITPRO__"); \
TARGET_OS_SYSV_CPP_BUILTINS (); \
} \
while (0)
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3503614efbd..b0a1b8e4ad7 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -199,6 +199,7 @@ ASM_OPT_ANY
/* -mcpu=native handling only makes sense with compiler running on /* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.cc. */ the condition in driver-rs6000.cc. */
@@ -47,7 +48,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/rs6000.h gcc-12.1.0-dkppc/gcc/config/rs
#if defined(__powerpc__) || defined(__POWERPC__) || defined(_AIX) #if defined(__powerpc__) || defined(__POWERPC__) || defined(_AIX)
/* In driver-rs6000.cc. */ /* In driver-rs6000.cc. */
extern const char *host_detect_local_cpu (int argc, const char **argv); extern const char *host_detect_local_cpu (int argc, const char **argv);
@@ -207,6 +208,8 @@ @@ -210,6 +211,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#else #else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)" #define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif #endif
@@ -56,10 +57,11 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/rs6000.h gcc-12.1.0-dkppc/gcc/config/rs
#ifndef CC1_CPU_SPEC #ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT #ifdef HAVE_LOCAL_CPU_DETECT
diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6000/sysv4.h diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
--- gcc-12.1.0/gcc/config/rs6000/sysv4.h 2022-05-06 08:30:57.000000000 +0100 index ae932fc22f0..527b48878b8 100644
+++ gcc-12.1.0-dkppc/gcc/config/rs6000/sysv4.h 2022-05-06 19:17:44.784777075 +0100 --- a/gcc/config/rs6000/sysv4.h
@@ -589,7 +589,11 @@ +++ b/gcc/config/rs6000/sysv4.h
@@ -581,7 +581,11 @@ GNU_USER_TARGET_CC1_SPEC
/* Default starting address if specified. */ /* Default starting address if specified. */
#define LINK_START_SPEC "\ #define LINK_START_SPEC "\
@@ -72,7 +74,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(link_start_yellowknife) ; \ myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \ mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \ msim : %(link_start_sim) ; \
@@ -620,7 +624,8 @@ @@ -612,7 +616,8 @@ GNU_USER_TARGET_CC1_SPEC
/* Any specific OS flags. */ /* Any specific OS flags. */
#define LINK_OS_SPEC "\ #define LINK_OS_SPEC "\
@@ -82,7 +84,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(link_os_yellowknife) ; \ myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \ mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \ msim : %(link_os_sim) ; \
@@ -635,7 +640,10 @@ @@ -627,7 +632,10 @@ GNU_USER_TARGET_CC1_SPEC
/* Override rs6000.h definition. */ /* Override rs6000.h definition. */
#undef CPP_SPEC #undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
@@ -94,7 +96,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(cpp_os_yellowknife) ; \ myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \ mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \ msim : %(cpp_os_sim) ; \
@@ -649,7 +657,10 @@ @@ -641,7 +649,10 @@ GNU_USER_TARGET_CC1_SPEC
#undef STARTFILE_SPEC #undef STARTFILE_SPEC
#define STARTFILE_SPEC "\ #define STARTFILE_SPEC "\
@@ -106,7 +108,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(startfile_yellowknife) ; \ myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \ mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \ msim : %(startfile_sim) ; \
@@ -663,7 +674,8 @@ @@ -655,7 +666,8 @@ GNU_USER_TARGET_CC1_SPEC
#undef LIB_SPEC #undef LIB_SPEC
#define LIB_SPEC "\ #define LIB_SPEC "\
@@ -116,7 +118,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(lib_yellowknife) ; \ myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \ mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \ msim : %(lib_sim) ; \
@@ -673,11 +685,12 @@ @@ -665,11 +677,12 @@ GNU_USER_TARGET_CC1_SPEC
mcall-openbsd: %(lib_openbsd) ; \ mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }" : %(lib_default) }"
@@ -131,7 +133,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
myellowknife : %(endfile_yellowknife) ; \ myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \ mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \ msim : %(endfile_sim) ; \
@@ -693,16 +706,27 @@ @@ -685,16 +698,27 @@ GNU_USER_TARGET_CC1_SPEC
/* Motorola ADS support. */ /* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group" #define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
@@ -159,7 +161,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
/* Motorola Yellowknife support. */ /* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group" #define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -850,6 +874,7 @@ @@ -842,6 +866,7 @@ ncrtn.o%s"
#undef SUBTARGET_EXTRA_SPECS #undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \ #define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \ { "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
@@ -167,7 +169,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "lib_ads", LIB_ADS_SPEC }, \ { "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \ { "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \ { "lib_mvme", LIB_MVME_SPEC }, \
@@ -859,6 +884,7 @@ @@ -851,6 +876,7 @@ ncrtn.o%s"
{ "lib_netbsd", LIB_NETBSD_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \ { "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \
@@ -175,7 +177,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "startfile_ads", STARTFILE_ADS_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \ { "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -868,6 +894,7 @@ @@ -860,6 +886,7 @@ ncrtn.o%s"
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \
@@ -183,7 +185,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "endfile_ads", ENDFILE_ADS_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \ { "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -879,7 +906,11 @@ @@ -871,7 +898,11 @@ ncrtn.o%s"
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \ { "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \ { "link_start", LINK_START_SPEC }, \
@@ -195,7 +197,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \ { "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \ { "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \ { "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -889,6 +920,7 @@ @@ -881,6 +912,7 @@ ncrtn.o%s"
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \ { "link_os", LINK_OS_SPEC }, \
@@ -203,7 +205,7 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "link_os_ads", LINK_OS_ADS_SPEC }, \ { "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \ { "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \ { "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -900,6 +932,9 @@ @@ -892,6 +924,9 @@ ncrtn.o%s"
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \ { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \ { "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
@@ -213,10 +215,11 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.h gcc-12.1.0-dkppc/gcc/config/rs6
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \ { "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \ { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \ { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.opt gcc-12.1.0-dkppc/gcc/config/rs6000/sysv4.opt diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
--- gcc-12.1.0/gcc/config/rs6000/sysv4.opt 2022-05-06 08:30:57.000000000 +0100 index 691e0d3d2e8..2eb60bc56b6 100644
+++ gcc-12.1.0-dkppc/gcc/config/rs6000/sysv4.opt 2022-05-06 19:17:44.784777075 +0100 --- a/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,26 @@ +++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,26 @@ mads
Target RejectNegative Target RejectNegative
Link with libads.a, libc.a and crt0.o. Link with libads.a, libc.a and crt0.o.
@@ -243,33 +246,36 @@ diff -NBaur gcc-12.1.0/gcc/config/rs6000/sysv4.opt gcc-12.1.0-dkppc/gcc/config/r
myellowknife myellowknife
Target RejectNegative Target RejectNegative
Link with libyk.a, libc.a and crt0.o. Link with libyk.a, libc.a and crt0.o.
diff -NBaur gcc-12.1.0/gcc/configure gcc-12.1.0-dkppc/gcc/configure diff --git a/gcc/configure b/gcc/configure
--- gcc-12.1.0/gcc/configure 2022-05-06 08:30:57.000000000 +0100 index c7b26d1927d..d1e32ef9ec5 100755
+++ gcc-12.1.0-dkppc/gcc/configure 2022-05-06 19:17:44.788859483 +0100 --- a/gcc/configure
@@ -12884,7 +12884,7 @@ +++ b/gcc/configure
@@ -13011,7 +13011,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
- aix | dce | lynx | mipssde | posix | rtems | \ - aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \ + aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
diff -NBaur gcc-12.1.0/gcc/configure.ac gcc-12.1.0-dkppc/gcc/configure.ac diff --git a/gcc/configure.ac b/gcc/configure.ac
--- gcc-12.1.0/gcc/configure.ac 2022-05-06 08:30:57.000000000 +0100 index 09082e8ccae..f5700df9455 100644
+++ gcc-12.1.0-dkppc/gcc/configure.ac 2022-05-06 19:17:44.788859483 +0100 --- a/gcc/configure.ac
@@ -1994,7 +1994,7 @@ +++ b/gcc/configure.ac
@@ -2020,7 +2020,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
- aix | dce | lynx | mipssde | posix | rtems | \ - aix | dce | lynx | mipssde | posix | rtems | \
+ aix | dce | dkp | lynx | mipssde | posix | rtems | \ + aix | dce | dkp | lynx | mipssde | posix | rtems | \
single | tpf | vxworks | win32) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
diff -NBaur gcc-12.1.0/libgcc/config/rs6000/crtrestvr.S gcc-12.1.0-dkppc/libgcc/config/rs6000/crtrestvr.S diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S
--- gcc-12.1.0/libgcc/config/rs6000/crtrestvr.S 2022-05-06 08:30:59.000000000 +0100 index cf7f71ae123..7e0892a845f 100644
+++ gcc-12.1.0-dkppc/libgcc/config/rs6000/crtrestvr.S 2022-05-06 19:17:44.792941894 +0100 --- a/libgcc/config/rs6000/crtrestvr.S
+++ b/libgcc/config/rs6000/crtrestvr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */ /* On PowerPC64 Linux, these functions are provided by the linker. */
@@ -279,14 +285,15 @@ diff -NBaur gcc-12.1.0/libgcc/config/rs6000/crtrestvr.S gcc-12.1.0-dkppc/libgcc/
#undef __ALTIVEC__ #undef __ALTIVEC__
#define __ALTIVEC__ 1 #define __ALTIVEC__ 1
#include "ppc-asm.h" #include "ppc-asm.h"
@@ -86,3 +86,4 @@ @@ -86,3 +86,4 @@ FUNC_END(_restvr_20)
CFI_ENDPROC CFI_ENDPROC
#endif #endif
+#endif +#endif
diff -NBaur gcc-12.1.0/libgcc/config/rs6000/crtsavevr.S gcc-12.1.0-dkppc/libgcc/config/rs6000/crtsavevr.S diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S
--- gcc-12.1.0/libgcc/config/rs6000/crtsavevr.S 2022-05-06 08:30:59.000000000 +0100 index 19de2128714..d116593062d 100644
+++ gcc-12.1.0-dkppc/libgcc/config/rs6000/crtsavevr.S 2022-05-06 19:17:44.792941894 +0100 --- a/libgcc/config/rs6000/crtsavevr.S
+++ b/libgcc/config/rs6000/crtsavevr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
/* On PowerPC64 Linux, these functions are provided by the linker. */ /* On PowerPC64 Linux, these functions are provided by the linker. */
@@ -296,14 +303,16 @@ diff -NBaur gcc-12.1.0/libgcc/config/rs6000/crtsavevr.S gcc-12.1.0-dkppc/libgcc/
#undef __ALTIVEC__ #undef __ALTIVEC__
#define __ALTIVEC__ 1 #define __ALTIVEC__ 1
#include "ppc-asm.h" #include "ppc-asm.h"
@@ -86,3 +86,4 @@ @@ -86,3 +86,4 @@ FUNC_END(_savevr_20)
CFI_ENDPROC CFI_ENDPROC
#endif #endif
+#endif +#endif
diff -NBaur gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.c gcc-12.1.0-dkppc/libgcc/config/rs6000/gthr-dkp.c diff --git a/libgcc/config/rs6000/gthr-dkp.c b/libgcc/config/rs6000/gthr-dkp.c
--- gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.c 1970-01-01 01:00:00.000000000 +0100 new file mode 100644
+++ gcc-12.1.0-dkppc/libgcc/config/rs6000/gthr-dkp.c 2022-05-06 19:17:44.792941894 +0100 index 00000000000..26180aa7f36
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.c
@@ -0,0 +1,319 @@ @@ -0,0 +1,319 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */ +/* Compile this one with gcc. */
@@ -624,9 +633,11 @@ diff -NBaur gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.c gcc-12.1.0-dkppc/libgcc/c
+ +
+ return __gthr_impl_cond_destroy(__cond); + return __gthr_impl_cond_destroy(__cond);
+} +}
diff -NBaur gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.h gcc-12.1.0-dkppc/libgcc/config/rs6000/gthr-dkp.h diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h
--- gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.h 1970-01-01 01:00:00.000000000 +0100 new file mode 100644
+++ gcc-12.1.0-dkppc/libgcc/config/rs6000/gthr-dkp.h 2022-05-06 19:17:44.792941894 +0100 index 00000000000..72ecf82ab83
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,187 @@ @@ -0,0 +1,187 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */ +/* Compile this one with gcc. */
@@ -815,19 +826,21 @@ diff -NBaur gcc-12.1.0/libgcc/config/rs6000/gthr-dkp.h gcc-12.1.0-dkppc/libgcc/c
+#endif +#endif
+ +
+#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */ +#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */
diff -NBaur gcc-12.1.0/libgcc/config/rs6000/t-ppccomm gcc-12.1.0-dkppc/libgcc/config/rs6000/t-ppccomm diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm
--- gcc-12.1.0/libgcc/config/rs6000/t-ppccomm 2022-05-06 08:30:59.000000000 +0100 index fb812d3801f..7f6669d530f 100644
+++ gcc-12.1.0-dkppc/libgcc/config/rs6000/t-ppccomm 2022-05-06 19:17:44.792941894 +0100 --- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c \ LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c \
+ $(srcdir)/config/rs6000/gthr-dkp.c \ + $(srcdir)/config/rs6000/gthr-dkp.c \
$(srcdir)/config/rs6000/tramp.S $(srcdir)/config/rs6000/tramp.S
# This can't end up in shared libgcc # This can't end up in shared libgcc
diff -NBaur gcc-12.1.0/libgcc/configure gcc-12.1.0-dkppc/libgcc/configure diff --git a/libgcc/configure b/libgcc/configure
--- gcc-12.1.0/libgcc/configure 2022-05-06 08:30:59.000000000 +0100 index be5d45f1755..5c5aa253655 100755
+++ gcc-12.1.0-dkppc/libgcc/configure 2022-05-06 19:17:44.792941894 +0100 --- a/libgcc/configure
@@ -5689,6 +5689,7 @@ +++ b/libgcc/configure
@@ -5690,6 +5690,7 @@ tm_file="${tm_file_}"
case $target_thread_file in case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
@@ -835,10 +848,11 @@ diff -NBaur gcc-12.1.0/libgcc/configure gcc-12.1.0-dkppc/libgcc/configure
gcn) thread_header=config/gcn/gthr-gcn.h ;; gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff -NBaur gcc-12.1.0/libgcc/crtstuff.c gcc-12.1.0-dkppc/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
--- gcc-12.1.0/libgcc/crtstuff.c 2022-05-06 08:30:59.000000000 +0100 index 93ff5b81dc5..20c0fe89a28 100644
+++ gcc-12.1.0-dkppc/libgcc/crtstuff.c 2022-05-06 19:17:44.792941894 +0100 --- a/libgcc/crtstuff.c
@@ -325,7 +325,7 @@ +++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void)
#ifdef OBJECT_FORMAT_ELF #ifdef OBJECT_FORMAT_ELF
@@ -847,10 +861,11 @@ diff -NBaur gcc-12.1.0/libgcc/crtstuff.c gcc-12.1.0-dkppc/libgcc/crtstuff.c
/* Declare the __dso_handle variable. It should have a unique value /* Declare the __dso_handle variable. It should have a unique value
in every shared-object; in a main program its value is zero. The in every shared-object; in a main program its value is zero. The
object should in any case be protected. This means the instance object should in any case be protected. This means the instance
diff -NBaur gcc-12.1.0/libstdc++-v3/configure gcc-12.1.0-dkppc/libstdc++-v3/configure diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
--- gcc-12.1.0/libstdc++-v3/configure 2022-05-06 08:31:00.000000000 +0100 index 68ee94c9e28..1e17f789b89 100755
+++ gcc-12.1.0-dkppc/libstdc++-v3/configure 2022-05-06 19:17:44.801106712 +0100 --- a/libstdc++-v3/configure
@@ -15765,6 +15765,7 @@ +++ b/libstdc++-v3/configure
@@ -15800,6 +15800,7 @@ $as_echo "$target_thread_file" >&6; }
case $target_thread_file in case $target_thread_file in
aix) thread_header=config/rs6000/gthr-aix.h ;; aix) thread_header=config/rs6000/gthr-aix.h ;;
dce) thread_header=config/pa/gthr-dce.h ;; dce) thread_header=config/pa/gthr-dce.h ;;
@@ -858,3 +873,104 @@ diff -NBaur gcc-12.1.0/libstdc++-v3/configure gcc-12.1.0-dkppc/libstdc++-v3/conf
gcn) thread_header=config/gcn/gthr-gcn.h ;; gcn) thread_header=config/gcn/gthr-gcn.h ;;
lynx) thread_header=config/gthr-lynx.h ;; lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;; mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index 3dff4e5e74e..7835a727321 100644
--- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream
@@ -48,7 +48,7 @@
// This can be overridden by the target's os_defines.h
#ifndef _GLIBCXX_BUFSIZ
-# define _GLIBCXX_BUFSIZ BUFSIZ
+# define _GLIBCXX_BUFSIZ (BUFSIZ+1)
#endif
namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc
index 8380052c9f3..100de070f20 100644
--- a/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -143,6 +143,7 @@ namespace
{
public:
pool() noexcept;
+ ~pool();
_GLIBCXX_NODISCARD void *allocate (std::size_t) noexcept;
void free (void *) noexcept;
@@ -248,6 +249,15 @@ namespace
first_free_entry->next = NULL;
}
+ pool::~pool()
+ {
+ if (arena)
+ {
+ ::free(arena);
+ arena = 0;
+ }
+ }
+
void *pool::allocate (std::size_t size) noexcept
{
__scoped_lock sentry(emergency_mutex);
diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc
index c94d260632f..74c7a06a90d 100644
--- a/libstdc++-v3/src/c++17/fs_ops.cc
+++ b/libstdc++-v3/src/c++17/fs_ops.cc
@@ -1124,6 +1124,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
}
int err = 0;
+#ifndef __DEVKITPPC__
#if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag))
@@ -1133,6 +1134,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<posix::mode_t>(prms)))
err = errno;
+#endif
#endif
if (err)
diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h
index c95511b5c95..f9be4529bb2 100644
--- a/libstdc++-v3/src/filesystem/ops-common.h
+++ b/libstdc++-v3/src/filesystem/ops-common.h
@@ -486,6 +486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
return false;
}
+#ifndef __DEVKITPPC__
#if defined _GLIBCXX_USE_FCHMOD && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
if (::fchmod(out.fd, from_st->st_mode))
#elif defined _GLIBCXX_USE_FCHMODAT && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
@@ -497,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
ec.assign(errno, std::generic_category());
return false;
}
+#endif
size_t count = from_st->st_size;
#if defined _GLIBCXX_USE_SENDFILE && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index d33c13d7f15..7c343cdc30e 100644
--- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/libstdc++-v3/src/filesystem/ops.cc
@@ -972,6 +972,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
}
int err = 0;
+#ifndef __DEVKITPPC__
#if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag))
@@ -981,6 +982,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<mode_t>(prms)))
err = errno;
+#endif
#endif
if (err)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -76,6 +76,8 @@ cd $BUILDDIR
mkdir -p $target/gcc mkdir -p $target/gcc
cd $target/gcc cd $target/gcc
export gcc_cv_libc_provides_ssp=yes
if [ ! -f configured-gcc ] if [ ! -f configured-gcc ]
then then
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
@@ -93,12 +95,13 @@ then
--enable-libstdcxx-filesystem-ts \ --enable-libstdcxx-filesystem-ts \
--disable-tm-clone-registry \ --disable-tm-clone-registry \
--disable-__cxa_atexit \ --disable-__cxa_atexit \
--disable-libssp \
--enable-cxx-flags='-ffunction-sections -fdata-sections' \ --enable-cxx-flags='-ffunction-sections -fdata-sections' \
--target=$target \ --target=$target \
--with-newlib \ --with-newlib \
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \ --with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix \ --prefix=$prefix \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 41" \ --with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 45.1" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \
@@ -136,11 +139,12 @@ unset CXX
if [ ! -f configured-newlib ] if [ ! -f configured-newlib ]
then then
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \ CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections -DCUSTOM_MALLOC_LOCK" \
../../newlib-$NEWLIB_VER/configure \ ../../newlib-$NEWLIB_VER/configure \
--target=$target \ --target=$target \
--prefix=$prefix \ --prefix=$prefix \
--enable-newlib-mb \ --enable-newlib-mb \
--enable-newlib-register-fini \
|| { echo "Error configuring newlib"; exit 1; } || { echo "Error configuring newlib"; exit 1; }
touch configured-newlib touch configured-newlib
fi fi

View File

@@ -30,28 +30,28 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=12.2.0 GCC_VER=13.2.0
BINUTILS_VER=2.40 BINUTILS_VER=2.41
NEWLIB_VER=4.3.0.20230120 NEWLIB_VER=4.4.0.20231231
basedir='dkarm-eabi' basedir='dkarm-eabi'
package=devkitARM package=devkitARM
target=arm-none-eabi target=arm-none-eabi
toolchain=DEVKITARM toolchain=DEVKITARM
;; ;;
"2" ) "2" )
GCC_VER=12.1.0 GCC_VER=13.2.0
BINUTILS_VER=2.37 BINUTILS_VER=2.42
MN_BINUTILS_VER=2.24 MN_BINUTILS_VER=2.24
NEWLIB_VER=4.2.0.20211231 NEWLIB_VER=4.4.0.20231231
basedir='dkppc' basedir='dkppc'
package=devkitPPC package=devkitPPC
target=powerpc-eabi target=powerpc-eabi
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" ) "3" )
GCC_VER=12.2.0 GCC_VER=13.2.0
BINUTILS_VER=2.32 BINUTILS_VER=2.42
NEWLIB_VER=4.3.0.20230120 NEWLIB_VER=4.4.0.20231231
basedir='dka64' basedir='dka64'
package=devkitA64 package=devkitA64
target=aarch64-none-elf target=aarch64-none-elf