Compare commits

...

50 Commits

Author SHA1 Message Date
Dave Murphy
74e2c3ebc4 devkitPPC: move linkscripts to separate project 2026-01-06 12:38:44 +00:00
Dave Murphy
1118d68a97 devkitPPC: gcc 15.2.0 2025-12-27 15:10:15 +00:00
Dave Murphy
5c0124ec01 devkitPPC: binutils 2.45.1 2025-12-27 14:48:19 +00:00
Dave Murphy
329ce986eb devkitA64: gcc 15.2.0 2025-12-27 14:48:13 +00:00
Dave Murphy
73d0dafa21 devkitA64: binutils 2.45.1 2025-12-26 19:53:33 +00:00
Dave Murphy
5fb027fd3b devkitPPC: enable positional arguments 2025-06-04 14:00:00 +01:00
Dave Murphy
b5cdec82b7 devkitA64: release 28 2025-05-25 19:02:18 +01:00
Dave Murphy
2d21601d71 devkitA64: newlib 4.5.0 2025-05-25 19:01:58 +01:00
Dave Murphy
c879ba7e62 devkitA64: gcc 15.1.0 2025-05-25 19:01:58 +01:00
Dave Murphy
b6613d5f5f devkitA64: binutils 2.44 2025-05-25 19:01:58 +01:00
Dave Murphy
b970a10d09 devkitPPC: release 47 2025-05-25 19:01:57 +01:00
Dave Murphy
dbcb7aa399 devkitPPC: remove stale patches 2025-05-25 19:01:57 +01:00
Dave Murphy
67b34f5df3 devkitPPC: update newlib to 4.5.0 2025-05-25 18:59:00 +01:00
Dave Murphy
141c30be36 devkitPPC: update gcc to 15.1.0 2025-05-25 18:58:59 +01:00
Dave Murphy
1e91020d5c devkitPPC: update binutils to 2.44 2025-05-25 18:58:59 +01:00
Dave Murphy
24164cca86 devkitARM: release 66 2025-05-25 18:58:59 +01:00
Dave Murphy
d6434abd04 devkitARM: update crtls & rules versions 2025-05-25 18:58:58 +01:00
Dave Murphy
55eb881d09 devkitARM: remove stale patches 2025-05-05 00:12:13 +01:00
Dave Murphy
3a70b58ce2 devkitARM: newlib 4.5.0 2025-05-02 19:26:17 +01:00
Dave Murphy
3fedda9d74 devkitARM: 15.1.0 2025-05-02 19:26:17 +01:00
Dave Murphy
7e4aed9985 devkitARM: binutils 2.44 2025-05-02 19:26:11 +01:00
Dave Murphy
1b09b3a824 devkitPPC: r46.1 2024-11-11 10:32:05 +00:00
Dave Murphy
a133b4d622 devkitPPC: fix _REENT_INIT_PTR for gcc 14 2024-11-11 10:31:59 +00:00
Dave Murphy
f1428f47e8 devkitPPC: newlib fixes for gcc 14 2024-11-05 12:25:27 +00:00
Dave Murphy
1a3f555292 devkitARM: remove stale patches 2024-11-05 11:40:01 +00:00
Dave Murphy
6ea8070246 devkitA64: remove stale patches 2024-11-05 11:39:21 +00:00
Dave Murphy
57928f194f devkitPPC: update binutils to 2.43.1 2024-11-05 11:38:12 +00:00
Dave Murphy
6628e681e2 devkitPPC: update to gcc 14.2.0 2024-11-05 11:36:12 +00:00
Dave Murphy
72ca8f813f devkitARM: update gcc to 14.2.0 2024-08-30 20:00:15 +01:00
Dave Murphy
ce700b701d devkitARM: update binutils to 2.43.1 2024-08-30 19:59:41 +01:00
Dave Murphy
8b3fb07490 devkitA64: add relr defines 2024-08-30 11:54:06 +01:00
Dave Murphy
5599e42c8c devkitA64: update gcc to 14.2.0 2024-08-30 11:54:06 +01:00
Dave Murphy
57b7f68921 devkitA64: update binutils to 2.43.1 2024-08-30 11:54:06 +01:00
Jaeden Amero
88bd526925 Prefer using GNU Patch
The patches we use do not apply with BSD Patch. Attempt to find GNU
Patch and use that instead of the default 'patch' program. The patches
appear to apply fine as no errors are returned when we run patch.
However, files like libsysbase/dummy.c aren't created and we see the
following error:

    gmake[2]: Entering directory '.devkitARM/arm-none-eabi/newlib/arm-none-eabi/libgloss' /usr/local/bin/gmake  all-recursive
    gmake[3]: Entering directory '.devkitARM/arm-none-eabi/newlib/arm-none-eabi/libgloss'
    Making all in .
    gmake[4]: Entering directory '.devkitARM/arm-none-eabi/newlib/arm-none-eabi/libgloss'
      MAKEINFO ../../../../newlib-4.4.0.20231231/libgloss/doc/porting.info
      gmake[4]: *** No rule to make target 'libsysbase/dummy.c', needed by 'libsysbase/dummy.o'.  Stop.

By switching to GNU Patch, our patches properly apply and the build
succeeds.
2024-07-07 18:56:47 +01:00
Jaeden Amero
d3d636cb54 crtls: Use exported make
Without this, when building on platforms where 'make' is not GNU Make,
building crtls will fail. The Makefiles used to build crtls depend on
GNU Make and will not work on e.g. BSD Make.
2024-07-07 18:56:47 +01:00
Dave Murphy
78eb432d11 devkitA64: update version 2024-06-16 11:47:58 +01:00
Dave Murphy
aa76a0ea46 devkitA64: make read/write posix compliant 2024-06-16 11:47:13 +01:00
Dave Murphy
2429e9ee7d gcc 2024-05-26 18:33:40 +01:00
Dave Murphy
f0b081246c devkitA64: use latest newlib patches 2024-05-26 17:25:22 +01:00
Dave Murphy
a280f18794 devkitA64: update gcc to 14.1.0 2024-05-26 17:25:15 +01:00
Dave Murphy
c012acf8d8 macOS fix 2024-05-16 22:57:12 +01:00
Dave Murphy
19217fdc51 update devkitarm rules/crtls versions 2024-05-11 19:55:02 +01:00
Dave Murphy
aad3392808 devkitARM: binutils 2.42 2024-05-11 19:09:58 +01:00
Dave Murphy
7b0a333842 devkitARM: remove stale patches 2024-05-11 19:09:58 +01:00
Dave Murphy
41922724cb devkitARM: use LDFLAGS from environment 2024-05-11 19:09:57 +01:00
Dave Murphy
2422223439 devkitARM: gcc 14.1.0 2024-05-11 19:09:50 +01:00
Dave Murphy
23afd9959c devkitARM: latest newlib patches 2024-05-04 21:04:10 +01:00
Dave Murphy
03bc549c5c devkitARM: gcc 14.1 release candidate 2024-05-04 21:03:49 +01:00
Dave Murphy
5ae950ae8b devkitPPC: r45.2 2024-04-28 12:44:28 +01:00
Dave Murphy
c62e968c1e devkitPPC: newlib tweaks 2024-04-28 12:42:29 +01:00
20 changed files with 7614 additions and 2512 deletions

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# devkitARM release 63 # devkitARM release 66
# devkitPPC release 45.1 # devkitPPC release 48
# devkitA64 release 25.1 # devkitA64 release 29
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
@@ -27,15 +27,28 @@ echo
DKARM_RULES_VER=1.5.0 DKARM_RULES_VER=1.6.1
DKARM_CRTLS_VER=1.2.2 DKARM_CRTLS_VER=1.2.7
DKPPC_RULES_VER=1.2.1 DKPPC_RULES_VER=1.2.1
DKPPC_CRTLS_VER=1.0.0
DKA64_RULES_VER=1.1.1 DKA64_RULES_VER=1.1.1
OSXMIN=${OSXMIN:-10.9} OSXMIN=${OSXMIN:-10.9}
#---------------------------------------------------------------------------------
# find proper patch
#---------------------------------------------------------------------------------
if [ -z "$PATCH" -a -x "$(which gpatch)" ]; then PATCH=$(which gpatch); fi
if [ -z "$PATCH" -a -x "$(which patch)" ]; then PATCH=$(which patch); fi
if [ -z "$PATCH" ]; then
echo no patch found
exit 1
fi
echo use $PATCH as patch
export PATCH
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
function extract_and_patch { function extract_and_patch {
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -46,7 +59,7 @@ function extract_and_patch {
fi fi
if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2.patch ]]; then if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2.patch ]]; then
echo "patching $1-$2" echo "patching $1-$2"
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; } $PATCH -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
touch patched-$1-$2 touch patched-$1-$2
fi fi
} }
@@ -183,7 +196,7 @@ if [ "$BUILD_DKPRO_SKIP_CRTLS" != "1" ]; then
fi fi
if [ $VERSION -eq 2 ]; then if [ $VERSION -eq 2 ]; then
archives="devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives" archives="devkitppc-crtls-$DKPPC_CRTLS_VER.tar.gz devkitppc-rules-$DKPPC_RULES_VER.tar.gz $archives"
fi fi
if [ $VERSION -eq 3 ]; then if [ $VERSION -eq 3 ]; then

View File

@@ -1,507 +0,0 @@
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index ec856764519..436098cbcc2 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1966,6 +1966,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 d38e0afff2e..372e6615931 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -7321,6 +7321,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 4592bd6da27..dc27042cfe2 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. */
@@ -6916,11 +6922,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);
@@ -7060,6 +7068,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:
@@ -7083,7 +7095,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);
@@ -7178,7 +7190,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);
@@ -7227,7 +7239,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);
@@ -7553,6 +7565,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
@@ -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_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)
@@ -8790,6 +8820,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
@@ -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.
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))
@@ -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. */
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;
@@ -8861,6 +8900,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1;
}
+ }
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8873,9 +8913,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;
@@ -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.
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))
@@ -8901,7 +8938,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))
@@ -8937,7 +8974,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
@@ -9019,7 +9056,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;
@@ -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
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
@@ -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. */
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;
@@ -9607,8 +9647,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;
@@ -9643,7 +9692,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. */
@@ -9665,7 +9714,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;
@@ -10312,6 +10362,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 d47bdbf9937..b6f76d5c8d7 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 3f67f8b09d9..eb8e8e1596e 100644
--- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em
@@ -572,6 +572,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
@@ -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. */
+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. */
@@ -1206,8 +1209,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_bwrite (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,
@@ -1286,6 +1374,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 f82bd9234a7..96173dcd671 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/bfd/elf-bfd.h b/bfd/elf-bfd.h diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 3ed22fa6c52..16cec309746 100644 index 68190dbaa27..3413eaca5b3 100644
--- a/bfd/elf-bfd.h --- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h
@@ -1984,6 +1984,14 @@ struct output_elf_obj_tdata @@ -2020,6 +2020,14 @@ struct output_elf_obj_tdata
asection *sec; asection *sec;
} package_metadata; } package_metadata;
@@ -18,10 +18,10 @@ index 3ed22fa6c52..16cec309746 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 88c75ae3ce0..c4b5cda59a7 100644 index dfa04c9268d..12b76d3ffb8 100644
--- a/bfd/elf.c --- a/bfd/elf.c
+++ b/bfd/elf.c +++ b/bfd/elf.c
@@ -7359,6 +7359,14 @@ _bfd_elf_write_object_contents (bfd *abfd) @@ -7223,6 +7223,14 @@ _bfd_elf_write_object_contents (bfd *abfd)
if (!bed->s->write_shdrs_and_ehdr (abfd)) if (!bed->s->write_shdrs_and_ehdr (abfd))
return false; return false;
@@ -37,10 +37,10 @@ index 88c75ae3ce0..c4b5cda59a7 100644
if (t->o->build_id.after_write_object_contents != NULL if (t->o->build_id.after_write_object_contents != NULL
&& !(*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 109517db4aa..36ea8726544 100644 index e86f0280c2a..debb627a00f 100644
--- a/bfd/elfnn-aarch64.c --- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c
@@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type @@ -2444,6 +2444,12 @@ enum elf_aarch64_stub_type
aarch64_stub_erratum_843419_veneer, aarch64_stub_erratum_843419_veneer,
}; };
@@ -53,7 +53,7 @@ index 109517db4aa..36ea8726544 100644
struct elf_aarch64_stub_hash_entry struct elf_aarch64_stub_hash_entry
{ {
/* Base hash table entry structure. */ /* Base hash table entry structure. */
@@ -6947,11 +6953,13 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -6986,11 +6992,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;
@@ -67,7 +67,7 @@ index 109517db4aa..36ea8726544 100644
char *error_message = NULL; char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info); r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -7091,6 +7099,10 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7130,6 +7138,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 109517db4aa..36ea8726544 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:
@@ -7114,7 +7126,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7153,7 +7165,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 109517db4aa..36ea8726544 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);
@@ -7209,7 +7221,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7248,7 +7260,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 109517db4aa..36ea8726544 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);
@@ -7258,7 +7270,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, @@ -7297,7 +7309,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx); bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL need_relocs = (h == NULL
@@ -105,7 +105,7 @@ index 109517db4aa..36ea8726544 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);
@@ -7584,6 +7596,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh) @@ -7623,6 +7635,23 @@ need_copy_relocation_p (struct elf_aarch64_link_hash_entry *eh)
return false; return false;
} }
@@ -129,7 +129,7 @@ index 109517db4aa..36ea8726544 100644
/* 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
@@ -8802,6 +8831,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8728,6 +8757,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
struct elf_aarch64_link_hash_table *htab; struct elf_aarch64_link_hash_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;
@@ -137,7 +137,7 @@ index 109517db4aa..36ea8726544 100644
/* 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)
@@ -8821,6 +8851,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8747,6 +8777,10 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
info = (struct bfd_link_info *) inf; info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info); htab = elf_aarch64_hash_table (info);
@@ -148,7 +148,7 @@ index 109517db4aa..36ea8726544 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
@@ -8830,7 +8864,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8756,7 +8790,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{ {
/* Make sure this symbol is output as a dynamic symbol. /* 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. */
@@ -157,7 +157,7 @@ index 109517db4aa..36ea8726544 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))
@@ -8864,6 +8898,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8790,6 +8824,11 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
of relaxing into these from the large model PLT entries. */ of relaxing into these from the large model PLT entries. */
s->size += htab->plt_entry_size; s->size += htab->plt_entry_size;
@@ -169,7 +169,7 @@ index 109517db4aa..36ea8726544 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;
@@ -8892,6 +8931,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8818,6 +8857,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
htab->variant_pcs = 1; htab->variant_pcs = 1;
} }
@@ -177,7 +177,7 @@ index 109517db4aa..36ea8726544 100644
else else
{ {
h->plt.offset = (bfd_vma) - 1; h->plt.offset = (bfd_vma) - 1;
@@ -8904,9 +8944,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8830,9 +8870,6 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
h->needs_plt = 0; h->needs_plt = 0;
} }
@@ -187,7 +187,7 @@ index 109517db4aa..36ea8726544 100644
if (h->got.refcount > 0) if (h->got.refcount > 0)
{ {
bool dyn; bool dyn;
@@ -8918,7 +8955,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8844,7 +8881,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Make sure this symbol is output as a dynamic symbol. /* 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. */
@@ -196,7 +196,7 @@ index 109517db4aa..36ea8726544 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))
@@ -8932,7 +8969,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8858,7 +8895,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
{ {
h->got.offset = htab->root.sgot->size; h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE; htab->root.sgot->size += GOT_ENTRY_SIZE;
@@ -205,7 +205,7 @@ index 109517db4aa..36ea8726544 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))
@@ -8968,7 +9005,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8894,7 +8931,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
} }
indx = h && h->dynindx != -1 ? h->dynindx : 0; indx = h && h->dynindx != -1 ? h->dynindx : 0;
@@ -214,7 +214,7 @@ index 109517db4aa..36ea8726544 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
@@ -9050,7 +9087,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8976,7 +9013,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
visibility. */ visibility. */
if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{ {
@@ -223,7 +223,7 @@ index 109517db4aa..36ea8726544 100644
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
h->dyn_relocs = NULL; h->dyn_relocs = NULL;
@@ -9070,7 +9107,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -8996,7 +9033,9 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
symbols which turn out to need copy relocs or are not symbols which turn out to need copy relocs or are not
dynamic. */ dynamic. */
@@ -234,7 +234,7 @@ index 109517db4aa..36ea8726544 100644
&& ((h->def_dynamic && ((h->def_dynamic
&& !h->def_regular) && !h->def_regular)
|| (htab->root.dynamic_sections_created || (htab->root.dynamic_sections_created
@@ -9081,6 +9120,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) @@ -9007,6 +9046,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
Undefined weak syms won't yet be marked as dynamic. */ Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1 if (h->dynindx == -1
&& !h->forced_local && !h->forced_local
@@ -242,7 +242,7 @@ index 109517db4aa..36ea8726544 100644
&& 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;
@@ -9638,8 +9678,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -9978,8 +10018,17 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
Elf_Internal_Sym *sym) Elf_Internal_Sym *sym)
{ {
struct elf_aarch64_link_hash_table *htab; struct elf_aarch64_link_hash_table *htab;
@@ -260,8 +260,8 @@ index 109517db4aa..36ea8726544 100644
if (h->plt.offset != (bfd_vma) - 1) if (h->plt.offset != (bfd_vma) - 1)
{ {
asection *plt, *gotplt, *relplt; asection *plt, *gotplt, *relplt;
@@ -9674,7 +9723,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -10014,7 +10063,7 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
return false; abort ();
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)
@@ -269,7 +269,7 @@ index 109517db4aa..36ea8726544 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. */
@@ -9696,7 +9745,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd, @@ -10036,7 +10085,8 @@ elfNN_aarch64_finish_dynamic_symbol (bfd *output_bfd,
&& elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL && 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. */
@@ -279,7 +279,7 @@ index 109517db4aa..36ea8726544 100644
{ {
Elf_Internal_Rela rela; Elf_Internal_Rela rela;
bfd_byte *loc; bfd_byte *loc;
@@ -10343,6 +10393,9 @@ const struct elf_size_info elfNN_aarch64_size_info = @@ -10704,6 +10754,9 @@ const struct elf_size_info elfNN_aarch64_size_info =
#define elf_backend_init_index_section \ #define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections _bfd_elf_init_2_index_sections
@@ -290,30 +290,30 @@ index 109517db4aa..36ea8726544 100644
elfNN_aarch64_finish_dynamic_sections elfNN_aarch64_finish_dynamic_sections
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 8f68e517b45..260a590e69e 100644 index aa051c76a7a..073d3a47b65 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,4 +1,5 @@
source_sh ${srcdir}/emulparams/dt-relr.sh
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh +source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64 ARCH=aarch64
MACHINE= MACHINE=
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 5a08d9e29f1..e4c9abf85a1 100644 index 0565b7a066c..64821b1fc31 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,4 +1,5 @@
source_sh ${srcdir}/emulparams/dt-relr.sh
+source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh +source_sh ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32" ARCH="aarch64:ilp32"
MACHINE= MACHINE=
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 b647909ae63..3e2d7a171b9 100644 index 91d58d8fe5a..e1ac4a6b139 100644
--- a/ld/emultempl/aarch64elf.em --- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em +++ b/ld/emultempl/aarch64elf.em
@@ -378,7 +378,7 @@ PARSE_AND_LIST_LONGOPTS=' @@ -489,7 +489,7 @@ PARSE_AND_LIST_LONGOPTS='
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS}, { "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
' '
@@ -323,29 +323,22 @@ index b647909ae63..3e2d7a171b9 100644
" 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/elf.em b/ld/emultempl/elf.em diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
index 71cec19fdc6..3fd0585dee6 100644 index 431205fe644..ce288649513 100644
--- a/ld/emultempl/elf.em --- a/ld/emultempl/elf.em
+++ b/ld/emultempl/elf.em +++ b/ld/emultempl/elf.em
@@ -574,6 +574,7 @@ enum elf_options @@ -814,6 +814,7 @@ EOF
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 fi
fragment <<EOF fragment <<EOF
{"build-id", optional_argument, NULL, OPTION_BUILD_ID}, {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
+ {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME}, + {"nx-module-name", optional_argument, NULL, OPTION_NX_MODULE_NAME},
{"package-metadata", optional_argument, NULL, OPTION_PACKAGE_METADATA}, {"package-metadata", optional_argument, NULL, OPTION_PACKAGE_METADATA},
{"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG}, {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
EOF {"rosegment", no_argument, NULL, OPTION_ROSEGMENT},
@@ -675,6 +677,16 @@ gld${EMULATION_NAME}_handle_option (int optc) @@ -901,6 +902,18 @@ gld${EMULATION_NAME}_handle_option (int optc)
einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"), case OPTION_NO_ROSEGMENT:
optarg); link_info.one_rosegment = false;
break; break;
+
+ case OPTION_NX_MODULE_NAME: + case OPTION_NX_MODULE_NAME:
+ if (ldelf_emit_nx_module_name != NULL) + if (ldelf_emit_nx_module_name != NULL)
+ { + {
@@ -356,11 +349,12 @@ index 71cec19fdc6..3fd0585dee6 100644
+ optarg = ""; + optarg = "";
+ ldelf_emit_nx_module_name = xstrdup (optarg); + ldelf_emit_nx_module_name = xstrdup (optarg);
+ break; + break;
+
EOF EOF
if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
diff --git a/ld/ldelf.c b/ld/ldelf.c diff --git a/ld/ldelf.c b/ld/ldelf.c
index 2852851dcd5..0b1efa9675a 100644 index f4f27fc3873..4028cbabdc7 100644
--- a/ld/ldelf.c --- a/ld/ldelf.c
+++ b/ld/ldelf.c +++ b/ld/ldelf.c
@@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id; @@ -55,6 +55,9 @@ const char *ldelf_emit_note_gnu_build_id;
@@ -373,7 +367,7 @@ index 2852851dcd5..0b1efa9675a 100644
/* These variables are required to pass information back and forth /* These variables are required to pass information back and forth
between after_open and check_needed and stat_needed and vercheck. */ 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, @@ -1213,8 +1216,93 @@ ldelf_handle_dt_needed (struct elf_link_hash_table *htab,
*save_input_bfd_tail = NULL; *save_input_bfd_tail = NULL;
} }
@@ -388,7 +382,7 @@ index 2852851dcd5..0b1efa9675a 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))
@@ -419,7 +413,7 @@ index 2852851dcd5..0b1efa9675a 100644
+ return (bfd_seek (abfd, position, SEEK_SET) == 0 + return (bfd_seek (abfd, position, SEEK_SET) == 0
+ && bfd_write (contents, size, abfd) == size); + && bfd_write (contents, size, abfd) == size);
+} +}
+
+/* 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 bool +static bool
@@ -468,7 +462,7 @@ index 2852851dcd5..0b1efa9675a 100644
void void
ldelf_before_plugin_all_symbols_read (int use_libpath, int native, ldelf_before_plugin_all_symbols_read (int use_libpath, int native,
int is_linux, int is_freebsd, int is_linux, int is_freebsd,
@@ -1289,6 +1377,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd, @@ -1291,6 +1379,24 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
} }
} }
@@ -494,7 +488,7 @@ index 2852851dcd5..0b1efa9675a 100644
/* Do not allow executable files to be used as inputs to the link. */ /* Do not allow executable files to be used as inputs to the link. */
diff --git a/ld/ldelf.h b/ld/ldelf.h diff --git a/ld/ldelf.h b/ld/ldelf.h
index 239194772c4..68516dbf45e 100644 index e8b7c8c7eb8..0b76923d834 100644
--- a/ld/ldelf.h --- a/ld/ldelf.h
+++ b/ld/ldelf.h +++ b/ld/ldelf.h
@@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
@@ -503,5 +497,17 @@ index 239194772c4..68516dbf45e 100644
extern const char *ldelf_emit_note_fdo_package_metadata; extern const char *ldelf_emit_note_fdo_package_metadata;
+extern const char *ldelf_emit_nx_module_name; +extern const char *ldelf_emit_nx_module_name;
extern void ldelf_finish (void);
extern void ldelf_after_parse (void); extern void ldelf_after_parse (void);
extern bool ldelf_load_symbols (lang_input_statement_type *); diff --git a/ld/ldlex.h b/ld/ldlex.h
index c8d61478c60..a5bb71b1dc5 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -188,6 +188,7 @@ enum option_values
/* Used by emultempl/elf.em, emultempl/pe.em and emultempl/pep.em. */
OPTION_BUILD_ID,
OPTION_EXCLUDE_LIBS,
+ OPTION_NX_MODULE_NAME,
/* Used by emulparams/elf32mcore.sh, emultempl/beos.em, emultempl/pe.em
and emultempl/pep.em. */
OPTION_BASE_FILE,

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 648b3dc2110..ed605b28956 100644 index 40b50dc969e..debd0f3d3b2 100644
--- a/gcc/config.gcc --- a/gcc/config.gcc
+++ b/gcc/config.gcc +++ b/gcc/config.gcc
@@ -1132,7 +1132,14 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) @@ -1192,7 +1192,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 648b3dc2110..ed605b28956 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 ec45f23fa41..a208eabd806 100644 index 15cf1eb0389..aba0e9bbff9 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,27 +30,24 @@ index ec45f23fa41..a208eabd806 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 a9f3e2715ca..0c7304e1d81 100644 index a6ca5cf016b..90470fd6c44 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
@@ -52,6 +52,12 @@ enum aarch64_tls_type { @@ -91,7 +91,8 @@ enum aarch64_tp_reg {
TLS_DESCRIPTORS AARCH64_TPIDR_EL1 = 1,
AARCH64_TPIDR_EL2 = 2,
AARCH64_TPIDR_EL3 = 3,
- AARCH64_TPIDRRO_EL0 = 4
+ AARCH64_TPIDRRO_EL0 = 4,
+ AARCH64_TP_SOFT = 5
}; };
+/* Which thread pointer access sequence to use. */ /* SVE vector register sizes. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
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 f5db5379543..f582e5a7543 100644 index 433ec975d7e..d4c3835a15a 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
@@ -19550,8 +19550,24 @@ aarch64_load_tp (rtx target) @@ -21378,8 +21378,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,32 +75,31 @@ index f5db5379543..f582e5a7543 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 73b09e20508..ad62b5080cc 100644 index e8bd8c73c12..4fc0d8f4ded 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
@@ -1154,6 +1154,10 @@ typedef struct @@ -1436,6 +1436,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)
+/* Check selected thread pointer access sequence to use. */ +/* Check selected thread pointer access sequence to use. */
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD) +#define TARGET_HARD_TP (aarch64_tpidr_reg != AARCH64_TP_SOFT)
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT) +#define TARGET_SOFT_TP (aarch64_tpidr_reg == AARCH64_TP_SOFT)
+ +
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
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 36d0bb3f718..cfa2f7efc7f 100644 index 031e621c98a..0fcf0aa703f 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
@@ -7068,11 +7068,22 @@ @@ -7702,11 +7702,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))]
- "" - ""
- "mrs\\t%0, tpidr_el0"
+ "TARGET_HARD_TP" + "TARGET_HARD_TP"
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard" "* return aarch64_output_load_tp (operands[0]);"
[(set_attr "type" "mrs")] [(set_attr "type" "mrs")]
) )
@@ -122,32 +118,20 @@ index 36d0bb3f718..cfa2f7efc7f 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 1d7967db9c0..17870f18b8b 100644 index f32d56d4ffa..7cf8d3ba3d4 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
@@ -128,6 +128,21 @@ Enum(aarch64_tls_size) String(32) Value(32) @@ -137,6 +137,9 @@ Enum(tp_reg) String(tpidr_el3) Value(AARCH64_TPIDR_EL3)
EnumValue EnumValue
Enum(aarch64_tls_size) String(48) Value(48) Enum(tp_reg) String(tpidrro_el0) Value(AARCH64_TPIDRRO_EL0)
+mtp=
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
+Specify how to access the thread pointer.
+
+Enum
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
+Valid arguments to -mtp=:
+
+EnumValue +EnumValue
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD) +Enum(tp_reg) String(soft) Value(AARCH64_TP_SOFT)
+ +
+EnumValue mtp=
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT) Target RejectNegative Joined Enum(tp_reg) Var(aarch64_tpidr_reg) Init(AARCH64_TPIDR_EL0) Save
+ Specify the thread pointer register.
+ @@ -338,7 +341,7 @@ TargetVariable
march=
Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string)
Use features of architecture ARCH.
@@ -266,7 +281,7 @@ TargetVariable
long aarch64_stack_protector_guard_offset = 0 long aarch64_stack_protector_guard_offset = 0
moutline-atomics moutline-atomics
@@ -155,13 +139,13 @@ index 1d7967db9c0..17870f18b8b 100644
+Target Var(aarch64_flag_outline_atomics) Save +Target Var(aarch64_flag_outline_atomics) Save
Generate local calls to out-of-line atomic operations. Generate local calls to out-of-line atomic operations.
-param=aarch64-sve-compare-costs= -param=aarch64-vect-compare-costs=
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64 diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index a9a244ab6d6..a29f2772d63 100644 index 59571948479..f50c37d8b3c 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 \ @@ -198,8 +198,10 @@ aarch64-ldp-fusion.o: $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc \
$(srcdir)/config/aarch64/aarch64-cc-fusion.cc $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc
comma=, comma=,
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG)))) -MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
@@ -246,27 +230,33 @@ 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/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
new file mode 100644
index 00000000000..ab7b466aa71
--- /dev/null
+++ b/gcc/config/devkitpro.opt.urls
@@ -0,0 +1 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index acff6138d63..8dc91b75f93 100644 index e083f49f3da..1b81e7e88ce 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
@@ -93,7 +93,10 @@ mingw32_gt_pch_get_address (size_t size, int) @@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
for NT system dlls is in 0x70000000 to 0x78000000 range.
If we allocate at bottom we need to reserve the address as early If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */ as possible and at the same point in each invocation. */
-
+
+#if __MINGW64__ +#if __MINGW64__
+ size = UINT64_C(64 * 1024 * 1024 * 1024); + size = UINT64_C(64 * 1024 * 1024 * 1024);
+#endif +#endif
+
res = VirtualAlloc (NULL, size, res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN, MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS); PAGE_NOACCESS);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644 index 4fd87f2c4a1..6af06f7b032 100644
--- a/gcc/gcc.cc --- a/gcc/gcc.cc
+++ b/gcc/gcc.cc +++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */ @@ -888,6 +888,11 @@ proper position among the other output files. */
#endif #endif
#endif #endif
@@ -278,7 +268,7 @@ index 16bb07f2cdc..22a181a3a1c 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 \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC; @@ -1215,6 +1220,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;
@@ -286,7 +276,7 @@ index 16bb07f2cdc..22a181a3a1c 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;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] = @@ -1727,6 +1733,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),
@@ -294,8 +284,21 @@ index 16bb07f2cdc..22a181a3a1c 100644
INIT_STATIC_SPEC ("startfile", &startfile_spec), INIT_STATIC_SPEC ("startfile", &startfile_spec),
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/libcc1/configure b/libcc1/configure
index ea689a353c8..98f9d9b21b7 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5119,7 +5119,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644 index b9767cd1eee..362689c9f0b 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void) @@ -326,7 +326,7 @@ register_tm_clones (void)
@@ -308,7 +311,7 @@ index 93ff5b81dc5..20c0fe89a28 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 1989c0c86ed..f1c49b2d4b1 100644 index 557417997f4..1269ece007f 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
@@ -321,10 +324,10 @@ index 1989c0c86ed..f1c49b2d4b1 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 a880e8ee227..c58249f986c 100644 index 537774c2668..76da4f35b96 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
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1436,6 +1436,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' \
@@ -333,10 +336,10 @@ index a880e8ee227..c58249f986c 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 0ff875b280b..37820c57a0a 100644 index 7b96b2207f8..817de242772 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
@@ -1891,6 +1891,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1910,6 +1910,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' \
@@ -344,3 +347,16 @@ index 0ff875b280b..37820c57a0a 100644
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \ -e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@ < $< > $@
diff --git a/lto-plugin/configure b/lto-plugin/configure
index 28f5dd79cd7..a79f318a4d6 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6469,7 +6469,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)

File diff suppressed because one or more lines are too long

View File

@@ -12,4 +12,4 @@ cd $BUILDDIR
tar -xvf $SRCDIR/devkita64-rules-$DKA64_RULES_VER.tar.gz tar -xvf $SRCDIR/devkita64-rules-$DKA64_RULES_VER.tar.gz
cd devkita64-rules-$DKA64_RULES_VER cd devkita64-rules-$DKA64_RULES_VER
make install $MAKE install

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 25.1" \ --with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 29" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \
@@ -145,5 +145,3 @@ then
$MAKE install || { echo "Error installing gcc stage2"; exit 1; } $MAKE install || { echo "Error installing gcc stage2"; exit 1; }
touch installed-stage2 touch installed-stage2
fi fi
rm -fr $prefix/$target/sys-include

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 6fd1594480a..92b82426f50 100644 index 40b50dc969e..16b1224f3ec 100644
--- a/gcc/config.gcc --- a/gcc/config.gcc
+++ b/gcc/config.gcc +++ b/gcc/config.gcc
@@ -1412,6 +1412,11 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*) @@ -1508,6 +1508,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,7 +15,7 @@ index 6fd1594480a..92b82426f50 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 f1fa3fa174c..2bb894b5b2d 100644 index 1939d55b9fd..62d425cb596 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
@@ -416,7 +416,7 @@ begin arch armv6k @@ -416,7 +416,7 @@ begin arch armv6k
@@ -28,7 +28,7 @@ index f1fa3fa174c..2bb894b5b2d 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 f7fc1460d1c..055f9d62385 100644 index fdfdf9c580b..add129f0a62 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 f7fc1460d1c..055f9d62385 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 397ac3f68b9..b9a388f19be 100644 index ab3918283d8..c14a1955cad 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,11 +252,33 @@ 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/devkitpro.opt.urls b/gcc/config/devkitpro.opt.urls
new file mode 100644
index 00000000000..ab7b466aa71
--- /dev/null
+++ b/gcc/config/devkitpro.opt.urls
@@ -0,0 +1 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/devkitpro.opt and generated HTML
diff --git a/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index e083f49f3da..1b81e7e88ce 100644
--- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc
@@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
+#if __MINGW64__
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
+#endif
+
res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
diff --git a/gcc/gcc.cc b/gcc/gcc.cc diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16bb07f2cdc..22a181a3a1c 100644 index 4fd87f2c4a1..6af06f7b032 100644
--- a/gcc/gcc.cc --- a/gcc/gcc.cc
+++ b/gcc/gcc.cc +++ b/gcc/gcc.cc
@@ -868,6 +868,11 @@ proper position among the other output files. */ @@ -888,6 +888,11 @@ proper position among the other output files. */
#endif #endif
#endif #endif
@@ -268,7 +290,7 @@ index 16bb07f2cdc..22a181a3a1c 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 \
@@ -1191,6 +1196,7 @@ static const char *link_spec = LINK_SPEC; @@ -1215,6 +1220,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;
@@ -276,7 +298,7 @@ index 16bb07f2cdc..22a181a3a1c 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;
@@ -1701,6 +1707,7 @@ static struct spec_list static_specs[] = @@ -1727,6 +1733,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),
@@ -284,6 +306,19 @@ index 16bb07f2cdc..22a181a3a1c 100644
INIT_STATIC_SPEC ("startfile", &startfile_spec), INIT_STATIC_SPEC ("startfile", &startfile_spec),
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/libcc1/configure b/libcc1/configure
index ea689a353c8..98f9d9b21b7 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5119,7 +5119,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644 index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi --- a/libgcc/config/arm/t-bpabi
@@ -295,7 +330,7 @@ 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 93ff5b81dc5..20c0fe89a28 100644 index b9767cd1eee..362689c9f0b 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void) @@ -326,7 +326,7 @@ register_tm_clones (void)
@@ -308,7 +343,7 @@ index 93ff5b81dc5..20c0fe89a28 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 1989c0c86ed..dc3220cdf3c 100644 index 557417997f4..cb223aa43fc 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
@@ -316,15 +351,206 @@ index 1989c0c86ed..dc3220cdf3c 100644
For static libraries it might would work, but as we need to deal For static libraries it might would work, but as we need to deal
with shared versions too, we disable it for mingw-targets. */ with shared versions too, we disable it for mingw-targets. */
-#ifdef __MINGW32__ -#ifdef __MINGW32__
+#ifdef __MINGW32__ || defined(__DEVKITARM__) +#if defined( __MINGW32__) || defined(__DEVKITARM__)
#undef GTHREAD_USE_WEAK #undef GTHREAD_USE_WEAK
#define GTHREAD_USE_WEAK 0 #define GTHREAD_USE_WEAK 0
#endif #endif
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 819a1d82876..d81e6057c5b 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -893,6 +893,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1027,6 +1028,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1279,6 +1281,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1416,7 +1427,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1569,6 +1580,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -5080,7 +5092,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5126,7 +5138,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5150,7 +5162,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5195,7 +5207,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5219,7 +5231,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -12280,7 +12292,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12283 "configure"
+#line 12295 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12386,7 +12398,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12389 "configure"
+#line 12401 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -16182,7 +16194,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 16185 "configure"
+#line 16197 "configure"
int main()
{
typedef bool atomic_type;
@@ -16217,7 +16229,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16220 "configure"
+#line 16232 "configure"
int main()
{
typedef short atomic_type;
@@ -16252,7 +16264,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16255 "configure"
+#line 16267 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -16288,7 +16300,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16291 "configure"
+#line 16303 "configure"
int main()
{
typedef long long atomic_type;
@@ -16445,7 +16457,7 @@ $as_echo "mutex" >&6; }
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16448 "configure"
+#line 16460 "configure"
int main()
{
_Decimal32 d1;
@@ -16487,7 +16499,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16490 "configure"
+#line 16502 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -28602,6 +28614,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
+
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index a6c01b29e94..a8fb1200c8b 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -386,6 +386,7 @@ dnl # rather than hardcoding that information.
fi
AC_DEFINE(HAVE_MEMALIGN)
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index a880e8ee227..2050e2e4ccf 100644 index 537774c2668..b15e28d2371 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
@@ -1417,6 +1417,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1436,6 +1436,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' \
@@ -333,7 +559,7 @@ index a880e8ee227..2050e2e4ccf 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 0ff875b280b..7d270fc3a83 100644 index 7b96b2207f8..80f0effec92 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@
@@ -344,7 +570,7 @@ index 0ff875b280b..7d270fc3a83 100644
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -1891,6 +1892,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} @@ -1910,6 +1911,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' \
@@ -352,3 +578,16 @@ index 0ff875b280b..7d270fc3a83 100644
-e 's,^#include "\(.*\)",#include <bits/\1>,g' \ -e 's,^#include "\(.*\)",#include <bits/\1>,g' \
< $< > $@ < $< > $@
diff --git a/lto-plugin/configure b/lto-plugin/configure
index 28f5dd79cd7..a79f318a4d6 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6469,7 +6469,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)

View File

@@ -13,7 +13,7 @@ cd $BUILDDIR
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.gz tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.gz
cd devkitarm-rules-$DKARM_RULES_VER cd devkitarm-rules-$DKARM_RULES_VER
make install $MAKE install
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Install and build the crt0 files # Install and build the crt0 files
@@ -22,5 +22,5 @@ cd $BUILDDIR
tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.gz
cd devkitarm-crtls-$DKARM_CRTLS_VER cd devkitarm-crtls-$DKARM_CRTLS_VER
make install $MAKE install

View File

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

View File

@@ -1,303 +0,0 @@
/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
"elf32-powerpc")
OUTPUT_ARCH(powerpc:common)
ENTRY(_start)
SEARCH_DIR("/powerpc/powerpc-eabi-elf/lib");
/* Do we need any of these for elf?
__DYNAMIC = 0; */
PROVIDE (__stack = 0x817F0000);
SECTIONS
{
/* DOL header (from TITANIK's GC docs)
*/
. = 0x80003000;
.header :
{
file_start = .;
/* 0000-001B Text[0..6] sections File Positions */
LONG(text_file_start);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 001C-0047 Data[0..10] sections File Positions */
LONG(data_file_start);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 0048-0063 Text[0..6] sections Mem Address */
LONG(text_mem_start);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 0064-008F Data[0..10] sections Mem Address */
LONG(data_mem_start);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 0090-00AB Text[0..6] sections Sizes */
LONG(text_mem_size);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 00AC-00D7 Data[0..10] sections Sizes */
LONG(data_mem_size);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
LONG(0);
/* 00D8 BSS Mem address
* 00DC BSS Size */
LONG(bss_mem_start);
LONG(bss_mem_size);
/* 00E0 Entry Point */
LONG(ABSOLUTE(_start));
}
. = file_start + 0x100;
text_mem_start = .;
.init :
{
KEEP (*(.init))
} =0
/* Read-only sections, merged into text segment: */
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
.rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) }
.rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
.rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.text :
{
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
} =0
.fini :
{
KEEP (*(.fini))
} =0
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
. = ALIGN(32);
text_mem_size = . - text_mem_start;
data_mem_start = .;
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
.sdata2 : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
.sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
.eh_frame_hdr : { *(.eh_frame_hdr) }
. = ALIGN(32);
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { *(.preinit_array) }
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { *(.init_array) }
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { *(.fini_array) }
PROVIDE (__fini_array_end = .);
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
.fixup : { *(.fixup) }
.got1 : { *(.got1) }
.got2 : { *(.got2) }
.dynamic : { *(.dynamic) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin*.o(.ctors))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin*.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.jcr : { KEEP (*(.jcr)) }
.got : { *(.got.plt) *(.got) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
*(.sdata .sdata.* .gnu.linkonce.s.*)
}
_edata = .;
PROVIDE (edata = .);
data_mem_size = . - data_mem_start;
bss_mem_start = .;
__bss_start = .;
.sbss :
{
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
*(.dynsbss)
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
}
.plt : { *(.plt) }
.bss :
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32 / 8);
}
. = ALIGN(32 / 8);
bss_mem_size = . - bss_mem_start;
text_file_start = text_mem_start - file_start;
data_file_start = data_mem_start - file_start;
_end = .;
__end = .;
PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
}

View File

@@ -1,283 +0,0 @@
/*
* Linkscript for GC
*
*/
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc");
OUTPUT_ARCH(powerpc:common);
EXTERN(_start);
ENTRY(_start);
PHDRS
{
stub PT_LOAD FLAGS(5);
text PT_LOAD FLAGS(5);
data PT_LOAD FLAGS(6);
bss PT_LOAD;
}
SECTIONS
{
/* default base address */
/* use -Wl,--section-start,.init=0xADDRESS to change */
. = 0x80003100;
/* Program */
.init :
{
KEEP (*crt0.o(*.init))
KEEP (*(.init))
} :text = 0
.plt : { *(.plt) }
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
.rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) }
.rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
.rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.text :
{
*(.text)
*(.text.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
.fini :
{
KEEP (*(.fini))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) }
.sdata2 : {
PROVIDE(_SDA2_BASE_ = . );
*(.sdata2) *(.sdata2.*)
*(.gnu.linkonce.s2.*)
}
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { *(.preinit_array) }
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { *(.init_array) }
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { *(.fini_array) }
PROVIDE (__fini_array_end = .);
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.data1 : { *(.data1) }
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
.fixup : { *(.fixup) }
.got1 : { *(.got1) }
.got2 : { *(.got2) }
.dynamic : { *(.dynamic) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.jcr : { KEEP (*(.jcr)) }
.got : { *(.got.plt) *(.got) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
PROVIDE(_SDA_BASE_ = . );
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
_edata = .;
PROVIDE (edata = .);
.sbss :
{
__sbss_start = .;
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.gnu.linkonce.sb.*)
*(.scommon)
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
__sbss_end = .;
} :bss
.bss :
{
__bss_start = .;
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32);
PROVIDE (__bss_end = .);
__bss_end = .;
}
_end = .;
PROVIDE(end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}
__isIPL = 0;
__stack_addr = (__bss_start + SIZEOF(.bss) + 0x20000 + 7) & (-8);
__stack_end = (__bss_start + SIZEOF(.bss));
__intrstack_addr = (__stack_addr + 0x4000);
__intrstack_end = (__stack_addr);
__Arena1Lo = (__intrstack_addr + 31) & (-32);
__Arena1Hi = (0x817FEFF0);
__gxregs = (__Arena1Hi + 31) & (-32);
/* for backward compatibility with old crt0 */
PROVIDE (__stack = (0x817FEFF0));
PROVIDE(__isIPL = __isIPL);
PROVIDE(__stack_addr = __stack_addr);
PROVIDE(__stack_end = __stack_end);
PROVIDE(__intrstack_addr = __intrstack_addr);
PROVIDE(__intrstack_end = __intrstack_end);
PROVIDE(__Arena1Lo = __Arena1Lo);
PROVIDE(__Arena1Hi = __Arena1Hi);
PROVIDE(__gxregs = __gxregs);

View File

@@ -1,304 +0,0 @@
/*
* Linkscript for Wii
*/
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc");
OUTPUT_ARCH(powerpc:common);
EXTERN(_start);
ENTRY(_start);
PHDRS
{
stub PT_LOAD FLAGS(5);
text PT_LOAD FLAGS(5);
data PT_LOAD FLAGS(6);
bss1 PT_LOAD;
bss2 PT_LOAD;
}
SECTIONS
{
/* stub is loaded at physical address 0x00003400 (though both 0x80003400 and 0x00003400 are equivalent for IOS) */
/* This can also be used to load an arbitrary standalone stub at an arbitrary address in memory, for any purpose */
/* Use -Wl,--section-start,.stub=0xADDRESS to change */
. = 0x00003400;
.stub :
{
KEEP(*(.stub))
} :stub = 0
/* default base address */
/* use -Wl,--section-start,.init=0xADDRESS to change */
. = 0x80004000;
/* Program */
.init :
{
KEEP (*crt0.o(*.init))
KEEP (*(.init))
} :text = 0
.plt : { *(.plt) }
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
.rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) }
.rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
.rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.text :
{
*(.text)
*(.text.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
.fini :
{
KEEP (*(.fini))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) }
.sdata2 : {
PROVIDE(_SDA2_BASE_ = .);
*(.sdata2)
*(.sdata2.*)
*(.gnu.linkonce.s2.*)
}
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
/* Ensure the __preinit_array_start label is properly aligned. We
could instead move the label definition inside the section, but
the linker would then create the section even if it turns out to
be empty, which isn't pretty. */
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
.preinit_array : { *(.preinit_array) }
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { *(.init_array) }
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { *(.fini_array) }
PROVIDE (__fini_array_end = .);
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.data1 : { *(.data1) }
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
.fixup : { *(.fixup) }
.got1 : { *(.got1) }
.got2 : { *(.got2) }
.dynamic : { *(.dynamic) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.jcr : { KEEP (*(.jcr)) }
.got : { *(.got.plt) *(.got) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
PROVIDE(_SDA_BASE_ = .);
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
_edata = .;
PROVIDE (edata = .);
.sbss :
{
__sbss_start = .;
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.gnu.linkonce.sb.*)
*(.scommon)
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
__sbss_end = .;
} :bss1
.bss :
{
__bss_start = .;
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32);
PROVIDE (__bss_end = .);
__bss_end = .;
} :bss2
_end = .;
PROVIDE(end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}
__isIPL = 0;
__stack_addr = (__bss_start + SIZEOF(.bss) + 0x20000 + 7) & (-8);
__stack_end = (__bss_start + SIZEOF(.bss));
__intrstack_addr = (__stack_addr + 0x4000);
__intrstack_end = (__stack_addr);
__Arena1Lo = (__intrstack_addr + 31) & (-32);
__Arena1Hi = (0x817FEFF0);
__Arena2Lo = (0x90002000);
__Arena2Hi = (0x933E0000);
__gxregs = (__Arena1Hi + 31) & (-32);
__ipcbufferLo = (0x933e0000);
__ipcbufferHi = (0x93400000);
/* for backward compatibility with old crt0 */
PROVIDE (__stack = (0x817FEFF0));
PROVIDE(__isIPL = __isIPL);
PROVIDE(__stack_addr = __stack_addr);
PROVIDE(__stack_end = __stack_end);
PROVIDE(__intrstack_addr = __intrstack_addr);
PROVIDE(__intrstack_end = __intrstack_end);
PROVIDE(__Arena1Lo = __Arena1Lo);
PROVIDE(__Arena1Hi = __Arena1Hi);
PROVIDE(__Arena2Lo = __Arena2Lo);
PROVIDE(__Arena2Hi = __Arena2Hi);
PROVIDE(__ipcbufferLo = __ipcbufferLo);
PROVIDE(__ipcbufferHi = __ipcbufferHi);
PROVIDE(__gxregs = __gxregs);

View File

@@ -12,7 +12,7 @@ index da892988f5d..6b8efb9bbdb 100644
.fixup ${RELOCATING-0} : { *(.fixup) } .fixup ${RELOCATING-0} : { *(.fixup) }
.got1 ${RELOCATING-0} : { *(.got1) } .got1 ${RELOCATING-0} : { *(.got1) }
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 37f1aeb780c..f8de8aacc44 100644 index e55bfe846cd..f160e290bce 100644
--- a/opcodes/ppc-opc.c --- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c +++ b/opcodes/ppc-opc.c
@@ -4988,7 +4988,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands); @@ -4988,7 +4988,7 @@ const unsigned int num_powerpc_operands = ARRAY_SIZE (powerpc_operands);

View File

@@ -10,8 +10,23 @@ index 11996247f15..f21b315ce8a 100644
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/gcc/config/i386/host-mingw32.cc b/gcc/config/i386/host-mingw32.cc
index e083f49f3da..1b81e7e88ce 100644
--- a/gcc/config/i386/host-mingw32.cc
+++ b/gcc/config/i386/host-mingw32.cc
@@ -94,6 +94,10 @@ mingw32_gt_pch_get_address (size_t size, int)
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
+#if __MINGW64__
+ size = UINT64_C(64 * 1024 * 1024 * 1024);
+#endif
+
res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h
index 98bc77b46b8..4f1690d4f4d 100644 index 9295e0319a2..bc28e5380bd 100644
--- a/gcc/config/newlib-stdint.h --- a/gcc/config/newlib-stdint.h
+++ b/gcc/config/newlib-stdint.h +++ b/gcc/config/newlib-stdint.h
@@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see @@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -24,7 +39,7 @@ index 98bc77b46b8..4f1690d4f4d 100644
#define SIG_ATOMIC_TYPE "int" #define SIG_ATOMIC_TYPE "int"
diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h diff --git a/gcc/config/rs6000/eabi.h b/gcc/config/rs6000/eabi.h
index 5bfc377e0de..342ed1932b9 100644 index 3cbee36cd20..e0ffda81164 100644
--- a/gcc/config/rs6000/eabi.h --- a/gcc/config/rs6000/eabi.h
+++ b/gcc/config/rs6000/eabi.h +++ b/gcc/config/rs6000/eabi.h
@@ -36,6 +36,8 @@ @@ -36,6 +36,8 @@
@@ -37,10 +52,10 @@ index 5bfc377e0de..342ed1932b9 100644
} \ } \
while (0) while (0)
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3503614efbd..b0a1b8e4ad7 100644 index db6112a09e1..71cd6664a3e 100644
--- a/gcc/config/rs6000/rs6000.h --- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h
@@ -199,6 +199,7 @@ ASM_OPT_ANY @@ -193,6 +193,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. */
@@ -48,7 +63,7 @@ index 3503614efbd..b0a1b8e4ad7 100644
#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);
@@ -210,6 +211,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); @@ -204,6 +205,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
@@ -58,7 +73,7 @@ index 3503614efbd..b0a1b8e4ad7 100644
#ifndef CC1_CPU_SPEC #ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT #ifdef HAVE_LOCAL_CPU_DETECT
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index ae932fc22f0..527b48878b8 100644 index afb5c6ad867..30d30d530e8 100644
--- a/gcc/config/rs6000/sysv4.h --- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h
@@ -581,7 +581,11 @@ GNU_USER_TARGET_CC1_SPEC @@ -581,7 +581,11 @@ GNU_USER_TARGET_CC1_SPEC
@@ -161,7 +176,7 @@ index ae932fc22f0..527b48878b8 100644
/* 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"
@@ -842,6 +866,7 @@ ncrtn.o%s" @@ -843,6 +867,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 }, \
@@ -169,7 +184,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 }, \
@@ -851,6 +876,7 @@ ncrtn.o%s" @@ -852,6 +877,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 }, \
@@ -177,7 +192,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 }, \
@@ -860,6 +886,7 @@ ncrtn.o%s" @@ -861,6 +887,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 }, \
@@ -185,7 +200,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 }, \
@@ -871,7 +898,11 @@ ncrtn.o%s" @@ -872,7 +899,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 }, \
@@ -197,7 +212,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 }, \
@@ -881,6 +912,7 @@ ncrtn.o%s" @@ -882,6 +913,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 }, \
@@ -205,7 +220,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 }, \
@@ -892,6 +924,9 @@ ncrtn.o%s" @@ -893,6 +925,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 }, \
@@ -216,7 +231,7 @@ index ae932fc22f0..527b48878b8 100644
{ "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 --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
index 691e0d3d2e8..2eb60bc56b6 100644 index dc0b0e82d9e..20300b60da8 100644
--- a/gcc/config/rs6000/sysv4.opt --- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt +++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,26 @@ mads @@ -124,6 +124,26 @@ mads
@@ -247,10 +262,104 @@ index 691e0d3d2e8..2eb60bc56b6 100644
Target RejectNegative Target RejectNegative
Link with libyk.a, libc.a and crt0.o. Link with libyk.a, libc.a and crt0.o.
diff --git a/gcc/configure b/gcc/configure diff --git a/gcc/configure b/gcc/configure
index c7b26d1927d..d1e32ef9ec5 100755 index 16965953f05..7912de7061c 100755
--- a/gcc/configure --- a/gcc/configure
+++ b/gcc/configure +++ b/gcc/configure
@@ -13011,7 +13011,7 @@ case ${enable_threads} in @@ -934,6 +934,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1120,6 +1121,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE}'
@@ -1372,6 +1374,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1509,7 +1520,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1662,6 +1673,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -6253,7 +6265,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -6299,7 +6311,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -6323,7 +6335,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -6368,7 +6380,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -6392,7 +6404,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -13164,7 +13176,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
@@ -259,11 +368,29 @@ index c7b26d1927d..d1e32ef9ec5 100755
single | tpf | vxworks | win32 | mcf) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
@@ -21520,7 +21532,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 21523 "configure"
+#line 21535 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -21626,7 +21638,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 21629 "configure"
+#line 21641 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc/configure.ac b/gcc/configure.ac diff --git a/gcc/configure.ac b/gcc/configure.ac
index 09082e8ccae..f5700df9455 100644 index 9f67e62950a..30e45e80291 100644
--- a/gcc/configure.ac --- a/gcc/configure.ac
+++ b/gcc/configure.ac +++ b/gcc/configure.ac
@@ -2020,7 +2020,7 @@ case ${enable_threads} in @@ -2089,7 +2089,7 @@ case ${enable_threads} in
# default # default
target_thread_file='single' target_thread_file='single'
;; ;;
@@ -272,8 +399,21 @@ index 09082e8ccae..f5700df9455 100644
single | tpf | vxworks | win32 | mcf) single | tpf | vxworks | win32 | mcf)
target_thread_file=${enable_threads} target_thread_file=${enable_threads}
;; ;;
diff --git a/libcc1/configure b/libcc1/configure
index ea689a353c8..98f9d9b21b7 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5119,7 +5119,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S
index cf7f71ae123..7e0892a845f 100644 index 8761f612004..95cc245813b 100644
--- a/libgcc/config/rs6000/crtrestvr.S --- a/libgcc/config/rs6000/crtrestvr.S
+++ b/libgcc/config/rs6000/crtrestvr.S +++ b/libgcc/config/rs6000/crtrestvr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
@@ -291,7 +431,7 @@ index cf7f71ae123..7e0892a845f 100644
#endif #endif
+#endif +#endif
diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S
index 19de2128714..d116593062d 100644 index 9d05c98c32d..1b7e1ca68b9 100644
--- a/libgcc/config/rs6000/crtsavevr.S --- a/libgcc/config/rs6000/crtsavevr.S
+++ b/libgcc/config/rs6000/crtsavevr.S +++ b/libgcc/config/rs6000/crtsavevr.S
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
@@ -635,10 +775,10 @@ index 00000000000..26180aa7f36
+} +}
diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h
new file mode 100644 new file mode 100644
index 00000000000..72ecf82ab83 index 00000000000..51fae2d359c
--- /dev/null --- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h +++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,187 @@ @@ -0,0 +1,360 @@
+/* Threads compatibility routines for libgcc2 and libobjc. */ +/* Threads compatibility routines for libgcc2 and libobjc. */
+/* Compile this one with gcc. */ +/* Compile this one with gcc. */
+/* Copyright (C) 1997-2016 Free Software Foundation, Inc. +/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
@@ -821,6 +961,179 @@ index 00000000000..72ecf82ab83
+int +int
+__gthread_cond_destroy (__gthread_cond_t* __cond); +__gthread_cond_destroy (__gthread_cond_t* __cond);
+ +
+
+#ifdef _LIBOBJC
+
+#define UNUSED __attribute__((__unused__))
+
+/* Thread local storage for a single thread */
+static void *thread_local_storage = NULL;
+
+/* Backend initialization functions */
+
+/* Initialize the threads subsystem. */
+static inline int
+__gthread_objc_init_thread_system (void)
+{
+ /* No thread support available */
+ return -1;
+}
+
+/* Close the threads subsystem. */
+static inline int
+__gthread_objc_close_thread_system (void)
+{
+ /* No thread support available */
+ return -1;
+}
+
+/* Backend thread functions */
+
+/* Create a new thread of execution. */
+static inline objc_thread_t
+__gthread_objc_thread_detach (void (* func)(void *), void * arg UNUSED)
+{
+ /* No thread support available */
+ return NULL;
+}
+
+/* Set the current thread's priority. */
+static inline int
+__gthread_objc_thread_set_priority (int priority UNUSED)
+{
+ /* No thread support available */
+ return -1;
+}
+
+/* Return the current thread's priority. */
+static inline int
+__gthread_objc_thread_get_priority (void)
+{
+ return OBJC_THREAD_INTERACTIVE_PRIORITY;
+}
+
+/* Yield our process time to another thread. */
+static inline void
+__gthread_objc_thread_yield (void)
+{
+ return;
+}
+
+/* Terminate the current thread. */
+static inline int
+__gthread_objc_thread_exit (void)
+{
+ /* No thread support available */
+ /* Should we really exit the program */
+ /* exit (&__objc_thread_exit_status); */
+ return -1;
+}
+
+/* Returns an integer value which uniquely describes a thread. */
+static inline objc_thread_t
+__gthread_objc_thread_id (void)
+{
+ /* No thread support, use 1. */
+ return (objc_thread_t) 1;
+}
+
+/* Sets the thread's local storage pointer. */
+static inline int
+__gthread_objc_thread_set_data (void *value)
+{
+ thread_local_storage = value;
+ return 0;
+}
+
+/* Returns the thread's local storage pointer. */
+static inline void *
+__gthread_objc_thread_get_data (void)
+{
+ return thread_local_storage;
+}
+
+/* Backend mutex functions */
+
+/* Allocate a mutex. */
+static inline int
+__gthread_objc_mutex_allocate (objc_mutex_t mutex UNUSED)
+{
+ return 0;
+}
+
+/* Deallocate a mutex. */
+static inline int
+__gthread_objc_mutex_deallocate (objc_mutex_t mutex UNUSED)
+{
+ return 0;
+}
+
+/* Grab a lock on a mutex. */
+static inline int
+__gthread_objc_mutex_lock (objc_mutex_t mutex UNUSED)
+{
+ /* There can only be one thread, so we always get the lock */
+ return 0;
+}
+
+/* Try to grab a lock on a mutex. */
+static inline int
+__gthread_objc_mutex_trylock (objc_mutex_t mutex UNUSED)
+{
+ /* There can only be one thread, so we always get the lock */
+ return 0;
+}
+
+/* Unlock the mutex */
+static inline int
+__gthread_objc_mutex_unlock (objc_mutex_t mutex UNUSED)
+{
+ return 0;
+}
+
+/* Backend condition mutex functions */
+
+/* Allocate a condition. */
+static inline int
+__gthread_objc_condition_allocate (objc_condition_t condition UNUSED)
+{
+ return 0;
+}
+
+/* Deallocate a condition. */
+static inline int
+__gthread_objc_condition_deallocate (objc_condition_t condition UNUSED)
+{
+ return 0;
+}
+
+/* Wait on the condition */
+static inline int
+__gthread_objc_condition_wait (objc_condition_t condition UNUSED,
+ objc_mutex_t mutex UNUSED)
+{
+ return 0;
+}
+
+/* Wake up all threads waiting on this condition. */
+static inline int
+__gthread_objc_condition_broadcast (objc_condition_t condition UNUSED)
+{
+ return 0;
+}
+
+/* Wake up one thread waiting on this condition. */
+static inline int
+__gthread_objc_condition_signal (objc_condition_t condition UNUSED)
+{
+ return 0;
+}
+
+#undef UNUSED
+
+#endif /* _LIBOBJC */
+
+
+#ifdef __cplusplus +#ifdef __cplusplus
+} +}
+#endif +#endif
@@ -837,10 +1150,10 @@ index fb812d3801f..7f6669d530f 100644
# This can't end up in shared libgcc # This can't end up in shared libgcc
diff --git a/libgcc/configure b/libgcc/configure diff --git a/libgcc/configure b/libgcc/configure
index be5d45f1755..5c5aa253655 100755 index 18418336c9b..0abc84af6c8 100755
--- a/libgcc/configure --- a/libgcc/configure
+++ b/libgcc/configure +++ b/libgcc/configure
@@ -5690,6 +5690,7 @@ tm_file="${tm_file_}" @@ -5724,6 +5724,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 ;;
@@ -849,7 +1162,7 @@ index be5d45f1755..5c5aa253655 100755
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/libgcc/crtstuff.c b/libgcc/crtstuff.c diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 93ff5b81dc5..20c0fe89a28 100644 index b9767cd1eee..362689c9f0b 100644
--- a/libgcc/crtstuff.c --- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c
@@ -326,7 +326,7 @@ register_tm_clones (void) @@ -326,7 +326,7 @@ register_tm_clones (void)
@@ -862,10 +1175,122 @@ index 93ff5b81dc5..20c0fe89a28 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/libstdc++-v3/configure b/libstdc++-v3/configure diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 68ee94c9e28..1e17f789b89 100755 index 819a1d82876..be18f306f85 100755
--- a/libstdc++-v3/configure --- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure +++ b/libstdc++-v3/configure
@@ -15800,6 +15800,7 @@ $as_echo "$target_thread_file" >&6; } @@ -893,6 +893,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -1027,6 +1028,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1279,6 +1281,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1416,7 +1427,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1569,6 +1580,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -5080,7 +5092,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5126,7 +5138,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5150,7 +5162,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5195,7 +5207,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5219,7 +5231,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -12280,7 +12292,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12283 "configure"
+#line 12295 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12386,7 +12398,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12389 "configure"
+#line 12401 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15965,6 +15977,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 ;;
@@ -873,11 +1298,86 @@ index 68ee94c9e28..1e17f789b89 100755
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 ;;
@@ -16182,7 +16195,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 16185 "configure"
+#line 16198 "configure"
int main()
{
typedef bool atomic_type;
@@ -16217,7 +16230,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16220 "configure"
+#line 16233 "configure"
int main()
{
typedef short atomic_type;
@@ -16252,7 +16265,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16255 "configure"
+#line 16268 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -16288,7 +16301,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 16291 "configure"
+#line 16304 "configure"
int main()
{
typedef long long atomic_type;
@@ -16445,7 +16458,7 @@ $as_echo "mutex" >&6; }
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16448 "configure"
+#line 16461 "configure"
int main()
{
_Decimal32 d1;
@@ -16487,7 +16500,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16490 "configure"
+#line 16503 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -28602,6 +28615,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
$as_echo "#define HAVE_MEMALIGN 1" >>confdefs.h
+ $as_echo "#define HAVE_ALIGNED_ALLOC 1" >>confdefs.h
+
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index a6c01b29e94..a8fb1200c8b 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -386,6 +386,7 @@ dnl # rather than hardcoding that information.
fi
AC_DEFINE(HAVE_MEMALIGN)
+ AC_DEFINE(HAVE_ALIGNED_ALLOC)
case "${target}" in
*-rtems*)
diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream diff --git a/libstdc++-v3/include/std/fstream b/libstdc++-v3/include/std/fstream
index 3dff4e5e74e..7835a727321 100644 index 53e794162eb..08602c21949 100644
--- a/libstdc++-v3/include/std/fstream --- a/libstdc++-v3/include/std/fstream
+++ b/libstdc++-v3/include/std/fstream +++ b/libstdc++-v3/include/std/fstream
@@ -48,7 +48,7 @@ @@ -53,7 +53,7 @@
// This can be overridden by the target's os_defines.h // This can be overridden by the target's os_defines.h
#ifndef _GLIBCXX_BUFSIZ #ifndef _GLIBCXX_BUFSIZ
@@ -887,7 +1387,7 @@ index 3dff4e5e74e..7835a727321 100644
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc diff --git a/libstdc++-v3/libsupc++/eh_alloc.cc b/libstdc++-v3/libsupc++/eh_alloc.cc
index 8380052c9f3..100de070f20 100644 index 42ca2ea5116..04f75c43cf5 100644
--- a/libstdc++-v3/libsupc++/eh_alloc.cc --- a/libstdc++-v3/libsupc++/eh_alloc.cc
+++ b/libstdc++-v3/libsupc++/eh_alloc.cc +++ b/libstdc++-v3/libsupc++/eh_alloc.cc
@@ -143,6 +143,7 @@ namespace @@ -143,6 +143,7 @@ namespace
@@ -915,10 +1415,10 @@ index 8380052c9f3..100de070f20 100644
{ {
__scoped_lock sentry(emergency_mutex); __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 diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc
index c94d260632f..74c7a06a90d 100644 index 4f188153ae3..ea9d379e33a 100644
--- a/libstdc++-v3/src/c++17/fs_ops.cc --- a/libstdc++-v3/src/c++17/fs_ops.cc
+++ b/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, @@ -1153,6 +1153,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
} }
int err = 0; int err = 0;
@@ -926,7 +1426,7 @@ index c94d260632f..74c7a06a90d 100644
#if _GLIBCXX_USE_FCHMODAT #if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0; const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag)) 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, @@ -1162,6 +1163,7 @@ fs::permissions(const path& p, perms prms, perm_options opts,
ec = std::__unsupported(); ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<posix::mode_t>(prms))) else if (posix::chmod(p.c_str(), static_cast<posix::mode_t>(prms)))
err = errno; err = errno;
@@ -935,10 +1435,10 @@ index c94d260632f..74c7a06a90d 100644
if (err) if (err)
diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h diff --git a/libstdc++-v3/src/filesystem/ops-common.h b/libstdc++-v3/src/filesystem/ops-common.h
index c95511b5c95..f9be4529bb2 100644 index 4feacfdb932..b8c49f49381 100644
--- a/libstdc++-v3/src/filesystem/ops-common.h --- a/libstdc++-v3/src/filesystem/ops-common.h
+++ b/libstdc++-v3/src/filesystem/ops-common.h +++ b/libstdc++-v3/src/filesystem/ops-common.h
@@ -486,6 +486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM @@ -563,6 +563,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
return false; return false;
} }
@@ -946,19 +1446,19 @@ index c95511b5c95..f9be4529bb2 100644
#if defined _GLIBCXX_USE_FCHMOD && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS #if defined _GLIBCXX_USE_FCHMOD && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
if (::fchmod(out.fd, from_st->st_mode)) if (::fchmod(out.fd, from_st->st_mode))
#elif defined _GLIBCXX_USE_FCHMODAT && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS #elif defined _GLIBCXX_USE_FCHMODAT && ! defined _GLIBCXX_FILESYSTEM_IS_WINDOWS
@@ -497,6 +498,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM @@ -576,6 +577,7 @@ _GLIBCXX_BEGIN_NAMESPACE_FILESYSTEM
ec.assign(errno, std::generic_category()); ec.assign(errno, std::generic_category());
return false; return false;
} }
+#endif +#endif
size_t count = from_st->st_size; bool has_copied = false;
#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 diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index d33c13d7f15..7c343cdc30e 100644 index 4e21e43b97a..d93c8985224 100644
--- a/libstdc++-v3/src/filesystem/ops.cc --- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/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 @@ -987,6 +987,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
} }
int err = 0; int err = 0;
@@ -966,7 +1466,7 @@ index d33c13d7f15..7c343cdc30e 100644
#if _GLIBCXX_USE_FCHMODAT #if _GLIBCXX_USE_FCHMODAT
const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0; const int flag = (nofollow && is_symlink(st)) ? AT_SYMLINK_NOFOLLOW : 0;
if (::fchmodat(AT_FDCWD, p.c_str(), static_cast<mode_t>(prms), flag)) 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 @@ -996,6 +997,7 @@ fs::permissions(const path& p, perms prms, error_code& ec) noexcept
ec = std::__unsupported(); ec = std::__unsupported();
else if (posix::chmod(p.c_str(), static_cast<mode_t>(prms))) else if (posix::chmod(p.c_str(), static_cast<mode_t>(prms)))
err = errno; err = errno;
@@ -974,3 +1474,16 @@ index d33c13d7f15..7c343cdc30e 100644
#endif #endif
if (err) if (err)
diff --git a/lto-plugin/configure b/lto-plugin/configure
index 28f5dd79cd7..a79f318a4d6 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -6469,7 +6469,7 @@ else
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
+ $tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)

File diff suppressed because one or more lines are too long

View File

@@ -13,4 +13,13 @@ cd $BUILDDIR
tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.gz tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.gz
cd devkitppc-rules-$DKPPC_RULES_VER cd devkitppc-rules-$DKPPC_RULES_VER
make install $MAKE install
#---------------------------------------------------------------------------------
# Install the linkscripts
#---------------------------------------------------------------------------------
cd $BUILDDIR
tar -xvf $SRCDIR/devkitppc-crtls-$DKPPC_CRTLS_VER.tar.gz
cd devkitppc-crtls-$DKPPC_CRTLS_VER
$MAKE install

View File

@@ -101,7 +101,7 @@ then
--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 45.1" \ --with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 48" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \
@@ -183,13 +183,4 @@ then
touch installed-stage2 touch installed-stage2
fi fi
rm -fr $prefix/$target/sys-include
#---------------------------------------------------------------------------------
# Install and build the gamecube crt and libogc
#---------------------------------------------------------------------------------
echo "installing linkscripts ..."
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
cd $BUILDDIR cd $BUILDDIR

View File

@@ -30,28 +30,28 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=13.2.0 GCC_VER=15.1.0
BINUTILS_VER=2.41 BINUTILS_VER=2.44
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.5.0.20241231
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=13.2.0 GCC_VER=15.2.0
BINUTILS_VER=2.42 BINUTILS_VER=2.45.1
MN_BINUTILS_VER=2.24 MN_BINUTILS_VER=2.24
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.5.0.20241231
basedir='dkppc' basedir='dkppc'
package=devkitPPC package=devkitPPC
target=powerpc-eabi target=powerpc-eabi
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" ) "3" )
GCC_VER=13.2.0 GCC_VER=15.2.0
BINUTILS_VER=2.42 BINUTILS_VER=2.45.1
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.5.0.20241231
basedir='dka64' basedir='dka64'
package=devkitA64 package=devkitA64
target=aarch64-none-elf target=aarch64-none-elf