Compare commits

...

20 Commits

Author SHA1 Message Date
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
17 changed files with 2148 additions and 455799 deletions

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# devkitARM release 64 # devkitARM release 65
# devkitPPC release 45.2 # devkitPPC release 46.1
# devkitA64 release 25.1 # devkitA64 release 27
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then if [ 0 -eq 1 ] ; then
@@ -36,6 +36,18 @@ 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 +58,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
} }

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 b89d3dda05d..1ad8a9c088d 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 @@ -2005,6 +2005,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 f85f79e1e35..d27f05b92ae 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) @@ -7166,6 +7166,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,7 +37,7 @@ 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 94c9a01069b..d39880b27c4 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 @@ -2441,6 +2441,12 @@ enum elf_aarch64_stub_type
@@ -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, @@ -6969,11 +6975,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, @@ -7113,6 +7121,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, @@ -7136,7 +7148,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, @@ -7231,7 +7243,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, @@ -7280,7 +7292,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) @@ -7606,6 +7618,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) @@ -8824,6 +8853,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) @@ -8843,6 +8873,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) @@ -8852,7 +8886,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) @@ -8886,6 +8920,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) @@ -8914,6 +8953,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) @@ -8926,9 +8966,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) @@ -8940,7 +8977,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) @@ -8954,7 +8991,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) @@ -8990,7 +9027,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) @@ -9072,7 +9109,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) @@ -9092,7 +9129,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) @@ -9103,6 +9142,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, @@ -10058,8 +10098,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, @@ -10094,7 +10143,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, @@ -10116,7 +10165,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 = @@ -10766,6 +10816,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 72616b57691..42f708118fb 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 45bf31a179a..02e0cad8699 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 aa2859d4f73..c680dca8f86 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=' @@ -368,7 +368,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 863657e12f5..672974df511 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 @@ -813,6 +813,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) @@ -892,6 +893,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 09691609fc0..5769b4aa0f9 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;
@@ -505,3 +499,15 @@ index 239194772c4..68516dbf45e 100644
extern void ldelf_after_parse (void); extern void ldelf_after_parse (void);
extern bool ldelf_load_symbols (lang_input_statement_type *); extern bool ldelf_load_symbols (lang_input_statement_type *);
diff --git a/ld/ldlex.h b/ld/ldlex.h
index defe3fcbbb9..30f31df990e 100644
--- a/ld/ldlex.h
+++ b/ld/ldlex.h
@@ -186,6 +186,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 95c91ee02be..4711542eee5 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*) @@ -1195,7 +1195,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 5396da9b2d6..87235d680ad 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 a05c0d3ded1..5551807e4c6 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 { @@ -80,7 +80,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 1beec94629d..90a9ec580f8 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) @@ -21060,8 +21060,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 4fa1dfc7906..43a01fe3d56 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 @@ -1377,6 +1377,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 dbde066f747..3e3198bf52f 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 @@ @@ -7436,11 +7436,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 6356c419399..a6907ed0a0b 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) @@ -128,6 +128,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.
+ @@ -329,7 +332,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 78713558e7d..76c0914d8ce 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 \ @@ -208,8 +208,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,8 +230,15 @@ 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 42563982e42..923dc198a7e 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) @@ -93,7 +93,10 @@ mingw32_gt_pch_get_address (size_t size, int)
@@ -263,10 +254,10 @@ index acff6138d63..8dc91b75f93 100644
MEM_RESERVE | MEM_TOP_DOWN, 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 728332b8153..47fc03eb8c8 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. */ @@ -881,6 +881,11 @@ proper position among the other output files. */
#endif #endif
#endif #endif
@@ -278,7 +269,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; @@ -1208,6 +1213,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 +277,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[] = @@ -1720,6 +1726,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 +285,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 38d3859a73c..f97358d9787 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 +312,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 33c2d8ff630..2a0a9c1e87e 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 +325,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 422a0f4bd0a..ee09ada9170 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} @@ -1429,6 +1429,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${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 +337,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 9fd4ab4848c..beea48941a3 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} @@ -1903,6 +1903,7 @@ ${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias}
-e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e '/^#/s/\(${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 +348,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
;;
*)

View File

@@ -13,7 +13,7 @@ index 0d4460b58..0eab54b65 100644
include lm32/Makefile.inc include lm32/Makefile.inc
endif endif
diff --git a/libgloss/Makefile.in b/libgloss/Makefile.in diff --git a/libgloss/Makefile.in b/libgloss/Makefile.in
index fd845cf5f..5f80b89ab 100644 index fd845cf5f..0a6ff43fb 100644
--- a/libgloss/Makefile.in --- a/libgloss/Makefile.in
+++ b/libgloss/Makefile.in +++ b/libgloss/Makefile.in
@@ -173,25 +173,28 @@ check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) @@ -173,25 +173,28 @@ check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3)
@@ -104,7 +104,7 @@ index fd845cf5f..5f80b89ab 100644
$(top_srcdir)/m68k/acinclude.m4 \ $(top_srcdir)/m68k/acinclude.m4 \
$(top_srcdir)/mcore/acinclude.m4 \ $(top_srcdir)/mcore/acinclude.m4 \
$(top_srcdir)/mips/acinclude.m4 \ $(top_srcdir)/mips/acinclude.m4 \
@@ -459,6 +463,69 @@ libobjs_a_LIBADD = @@ -459,6 +463,70 @@ libobjs_a_LIBADD =
am_libobjs_a_OBJECTS = $(am__objects_3) $(am__objects_4) \ am_libobjs_a_OBJECTS = $(am__objects_3) $(am__objects_4) \
$(am__objects_5) $(am__objects_6) $(am__objects_7) $(am__objects_5) $(am__objects_6) $(am__objects_7)
libobjs_a_OBJECTS = $(am_libobjs_a_OBJECTS) libobjs_a_OBJECTS = $(am_libobjs_a_OBJECTS)
@@ -118,6 +118,7 @@ index fd845cf5f..5f80b89ab 100644
+libsysbase_libsysbase_a_LIBADD = +libsysbase_libsysbase_a_LIBADD =
+@CONFIG_LIBSYSBASE_TRUE@am_libsysbase_libsysbase_a_OBJECTS = libsysbase/libsysbase_libsysbase_a-_exit.$(OBJEXT) \ +@CONFIG_LIBSYSBASE_TRUE@am_libsysbase_libsysbase_a_OBJECTS = libsysbase/libsysbase_libsysbase_a-_exit.$(OBJEXT) \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-abort.$(OBJEXT) \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-abort.$(OBJEXT) \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-assert.$(OBJEXT) \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-build_argv.$(OBJEXT) \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-build_argv.$(OBJEXT) \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-chdir.$(OBJEXT) \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-chdir.$(OBJEXT) \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-chmod.$(OBJEXT) \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/libsysbase_libsysbase_a-chmod.$(OBJEXT) \
@@ -174,7 +175,7 @@ index fd845cf5f..5f80b89ab 100644
lm32_libgloss_a_AR = $(AR) $(ARFLAGS) lm32_libgloss_a_AR = $(AR) $(ARFLAGS)
lm32_libgloss_a_LIBADD = lm32_libgloss_a_LIBADD =
@CONFIG_LM32_TRUE@am_lm32_libgloss_a_OBJECTS = lm32/isatty.$(OBJEXT) \ @CONFIG_LM32_TRUE@am_lm32_libgloss_a_OBJECTS = lm32/isatty.$(OBJEXT) \
@@ -668,7 +735,8 @@ SOURCES = $(aarch64_librdimon_a_SOURCES) $(arc_libnsim_a_SOURCES) \ @@ -668,7 +736,8 @@ SOURCES = $(aarch64_librdimon_a_SOURCES) $(arc_libnsim_a_SOURCES) \
$(bfin_libbfinbsp_a_SOURCES) $(bfin_libsim_a_SOURCES) \ $(bfin_libbfinbsp_a_SOURCES) $(bfin_libsim_a_SOURCES) \
$(csky_libsemi_a_SOURCES) $(d30v_libsim_a_SOURCES) \ $(csky_libsemi_a_SOURCES) $(d30v_libsim_a_SOURCES) \
$(iq2000_libeval_a_SOURCES) $(libnosys_libnosys_a_SOURCES) \ $(iq2000_libeval_a_SOURCES) $(libnosys_libnosys_a_SOURCES) \
@@ -184,7 +185,7 @@ index fd845cf5f..5f80b89ab 100644
$(nios2_libnios2_a_SOURCES) $(riscv_libgloss_a_SOURCES) \ $(nios2_libnios2_a_SOURCES) $(riscv_libgloss_a_SOURCES) \
$(riscv_libsemihost_a_SOURCES) $(riscv_libsim_a_SOURCES) \ $(riscv_libsemihost_a_SOURCES) $(riscv_libsim_a_SOURCES) \
$(xtensa_libgloss_a_SOURCES) \ $(xtensa_libgloss_a_SOURCES) \
@@ -761,7 +829,7 @@ ETAGS = etags @@ -761,7 +830,7 @@ ETAGS = etags
CTAGS = ctags CTAGS = ctags
CSCOPE = cscope CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS) DIST_SUBDIRS = $(SUBDIRS)
@@ -193,7 +194,7 @@ index fd845cf5f..5f80b89ab 100644
AARCH64_OBJTYPE = @AARCH64_OBJTYPE@ AARCH64_OBJTYPE = @AARCH64_OBJTYPE@
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
@@ -779,7 +847,7 @@ CCASFLAGS = @CCASFLAGS@ @@ -779,7 +848,7 @@ CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@ CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
@@ -202,7 +203,7 @@ index fd845cf5f..5f80b89ab 100644
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
@@ -874,6 +942,7 @@ pdfdir = @pdfdir@ @@ -874,6 +943,7 @@ pdfdir = @pdfdir@
prefix = @prefix@ prefix = @prefix@
program_transform_name = @program_transform_name@ program_transform_name = @program_transform_name@
psdir = @psdir@ psdir = @psdir@
@@ -210,7 +211,7 @@ index fd845cf5f..5f80b89ab 100644
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@ srcdir = @srcdir@
@@ -899,14 +968,14 @@ multilibtooldir = $(tooldir)/lib$(MULTISUBDIR) @@ -899,14 +969,14 @@ multilibtooldir = $(tooldir)/lib$(MULTISUBDIR)
multilibtool_DATA = $(am__append_3) $(am__append_6) $(am__append_7) \ multilibtool_DATA = $(am__append_3) $(am__append_6) $(am__append_7) \
$(am__append_8) $(am__append_13) $(am__append_15) \ $(am__append_8) $(am__append_13) $(am__append_15) \
$(am__append_18) $(am__append_22) $(am__append_23) \ $(am__append_18) $(am__append_22) $(am__append_23) \
@@ -230,7 +231,7 @@ index fd845cf5f..5f80b89ab 100644
includetooldir = $(tooldir)/include includetooldir = $(tooldir)/include
includetool_DATA = $(am__append_16) includetool_DATA = $(am__append_16)
includesystooldir = $(tooldir)/include/sys includesystooldir = $(tooldir)/include/sys
@@ -917,7 +986,7 @@ AM_CPPFLAGS = -idirafter $(srcroot)/include @@ -917,7 +987,7 @@ AM_CPPFLAGS = -idirafter $(srcroot)/include
# to install (e.g. our crt0.o objects). # to install (e.g. our crt0.o objects).
noinst_LIBRARIES = libobjs.a noinst_LIBRARIES = libobjs.a
libobjs_a_SOURCES = $(am__append_14) $(am__append_19) $(am__append_25) \ libobjs_a_SOURCES = $(am__append_14) $(am__append_19) $(am__append_25) \
@@ -239,7 +240,7 @@ index fd845cf5f..5f80b89ab 100644
FLAGS_TO_PASS = \ FLAGS_TO_PASS = \
"CC=$(CC)" \ "CC=$(CC)" \
"CFLAGS=$(CFLAGS)" \ "CFLAGS=$(CFLAGS)" \
@@ -1098,6 +1167,65 @@ TEXINFO_TEX = ../texinfo/texinfo.tex @@ -1098,6 +1168,66 @@ TEXINFO_TEX = ../texinfo/texinfo.tex
@CONFIG_LIBNOSYS_TRUE@ libnosys/getentropy.c \ @CONFIG_LIBNOSYS_TRUE@ libnosys/getentropy.c \
@CONFIG_LIBNOSYS_TRUE@ libnosys/_exit.c @CONFIG_LIBNOSYS_TRUE@ libnosys/_exit.c
@@ -250,6 +251,7 @@ index fd845cf5f..5f80b89ab 100644
+@CONFIG_LIBSYSBASE_TRUE@libsysbase_libsysbase_a_SOURCES = \ +@CONFIG_LIBSYSBASE_TRUE@libsysbase_libsysbase_a_SOURCES = \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/_exit.c \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/_exit.c \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/abort.c \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/abort.c \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/assert.c \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/build_argv.c \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/build_argv.c \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/chdir.c \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/chdir.c \
+@CONFIG_LIBSYSBASE_TRUE@ libsysbase/chmod.c \ +@CONFIG_LIBSYSBASE_TRUE@ libsysbase/chmod.c \
@@ -305,7 +307,7 @@ index fd845cf5f..5f80b89ab 100644
@CONFIG_LM32_TRUE@lm32_libgloss_a_SOURCES = \ @CONFIG_LM32_TRUE@lm32_libgloss_a_SOURCES = \
@CONFIG_LM32_TRUE@ lm32/isatty.c \ @CONFIG_LM32_TRUE@ lm32/isatty.c \
@CONFIG_LM32_TRUE@ lm32/scall.S @CONFIG_LM32_TRUE@ lm32/scall.S
@@ -1203,19 +1331,19 @@ TEXINFO_TEX = ../texinfo/texinfo.tex @@ -1203,19 +1333,19 @@ TEXINFO_TEX = ../texinfo/texinfo.tex
@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@xtensa_libgloss_a_SOURCES = xtensa/sleep.S \ @CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@xtensa_libgloss_a_SOURCES = xtensa/sleep.S \
@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/syscalls.c \ @CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/syscalls.c \
@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/window-vectors.S \ @CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/window-vectors.S \
@@ -331,7 +333,7 @@ index fd845cf5f..5f80b89ab 100644
@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@xtensa_libsys_openocd_a_SOURCES = \ @CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@xtensa_libsys_openocd_a_SOURCES = \
@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/syscalls.c @CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/syscalls.c
@@ -1228,7 +1356,7 @@ all: config.h @@ -1228,7 +1358,7 @@ all: config.h
.SUFFIXES: .S .c .dvi .o .obj .ps .SUFFIXES: .S .c .dvi .o .obj .ps
am--refresh: Makefile am--refresh: Makefile
@: @:
@@ -340,7 +342,7 @@ index fd845cf5f..5f80b89ab 100644
@for dep in $?; do \ @for dep in $?; do \
case '$(am__configure_deps)' in \ case '$(am__configure_deps)' in \
*$$dep*) \ *$$dep*) \
@@ -1250,7 +1378,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @@ -1250,7 +1380,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac; esac;
@@ -349,7 +351,7 @@ index fd845cf5f..5f80b89ab 100644
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck $(SHELL) ./config.status --recheck
@@ -1730,6 +1858,183 @@ libobjs.a: $(libobjs_a_OBJECTS) $(libobjs_a_DEPENDENCIES) $(EXTRA_libobjs_a_DEPE @@ -1730,6 +1860,186 @@ libobjs.a: $(libobjs_a_OBJECTS) $(libobjs_a_DEPENDENCIES) $(EXTRA_libobjs_a_DEPE
$(AM_V_at)-rm -f libobjs.a $(AM_V_at)-rm -f libobjs.a
$(AM_V_AR)$(libobjs_a_AR) libobjs.a $(libobjs_a_OBJECTS) $(libobjs_a_LIBADD) $(AM_V_AR)$(libobjs_a_AR) libobjs.a $(libobjs_a_OBJECTS) $(libobjs_a_LIBADD)
$(AM_V_at)$(RANLIB) libobjs.a $(AM_V_at)$(RANLIB) libobjs.a
@@ -372,6 +374,9 @@ index fd845cf5f..5f80b89ab 100644
+libsysbase/libsysbase_libsysbase_a-abort.$(OBJEXT): \ +libsysbase/libsysbase_libsysbase_a-abort.$(OBJEXT): \
+ libsysbase/$(am__dirstamp) \ + libsysbase/$(am__dirstamp) \
+ libsysbase/$(DEPDIR)/$(am__dirstamp) + libsysbase/$(DEPDIR)/$(am__dirstamp)
+libsysbase/libsysbase_libsysbase_a-assert.$(OBJEXT): \
+ libsysbase/$(am__dirstamp) \
+ libsysbase/$(DEPDIR)/$(am__dirstamp)
+libsysbase/libsysbase_libsysbase_a-build_argv.$(OBJEXT): \ +libsysbase/libsysbase_libsysbase_a-build_argv.$(OBJEXT): \
+ libsysbase/$(am__dirstamp) \ + libsysbase/$(am__dirstamp) \
+ libsysbase/$(DEPDIR)/$(am__dirstamp) + libsysbase/$(DEPDIR)/$(am__dirstamp)
@@ -533,7 +538,7 @@ index fd845cf5f..5f80b89ab 100644
lm32/isatty.$(OBJEXT): lm32/$(am__dirstamp) \ lm32/isatty.$(OBJEXT): lm32/$(am__dirstamp) \
lm32/$(DEPDIR)/$(am__dirstamp) lm32/$(DEPDIR)/$(am__dirstamp)
lm32/scall.$(OBJEXT): lm32/$(am__dirstamp) \ lm32/scall.$(OBJEXT): lm32/$(am__dirstamp) \
@@ -2113,6 +2418,7 @@ mostlyclean-compile: @@ -2113,6 +2423,7 @@ mostlyclean-compile:
-rm -f d30v/*.$(OBJEXT) -rm -f d30v/*.$(OBJEXT)
-rm -f iq2000/*.$(OBJEXT) -rm -f iq2000/*.$(OBJEXT)
-rm -f libnosys/*.$(OBJEXT) -rm -f libnosys/*.$(OBJEXT)
@@ -541,13 +546,14 @@ index fd845cf5f..5f80b89ab 100644
-rm -f lm32/*.$(OBJEXT) -rm -f lm32/*.$(OBJEXT)
-rm -f nios2/*.$(OBJEXT) -rm -f nios2/*.$(OBJEXT)
-rm -f riscv/*.$(OBJEXT) -rm -f riscv/*.$(OBJEXT)
@@ -2238,6 +2544,60 @@ distclean-compile: @@ -2238,6 +2549,61 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/unlink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/unlink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/wait.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/wait.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/write.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/dummy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/dummy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-_exit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-abort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-abort.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-chdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-chdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-chmod.Po@am__quote@
@@ -602,7 +608,7 @@ index fd845cf5f..5f80b89ab 100644
@AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/crt0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/crt0.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/isatty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/isatty.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/scall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/scall.Po@am__quote@
@@ -3082,6 +3442,748 @@ csky/csky_libsemi_a-getpid.obj: csky/getpid.c @@ -3082,6 +3448,762 @@ csky/csky_libsemi_a-getpid.obj: csky/getpid.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-getpid.obj `if test -f 'csky/getpid.c'; then $(CYGPATH_W) 'csky/getpid.c'; else $(CYGPATH_W) '$(srcdir)/csky/getpid.c'; fi` @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-getpid.obj `if test -f 'csky/getpid.c'; then $(CYGPATH_W) 'csky/getpid.c'; else $(CYGPATH_W) '$(srcdir)/csky/getpid.c'; fi`
@@ -634,6 +640,20 @@ index fd845cf5f..5f80b89ab 100644
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsysbase/libsysbase_libsysbase_a-abort.obj `if test -f 'libsysbase/abort.c'; then $(CYGPATH_W) 'libsysbase/abort.c'; else $(CYGPATH_W) '$(srcdir)/libsysbase/abort.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsysbase/libsysbase_libsysbase_a-abort.obj `if test -f 'libsysbase/abort.c'; then $(CYGPATH_W) 'libsysbase/abort.c'; else $(CYGPATH_W) '$(srcdir)/libsysbase/abort.c'; fi`
+ +
+libsysbase/libsysbase_libsysbase_a-assert.o: libsysbase/assert.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsysbase/libsysbase_libsysbase_a-assert.o -MD -MP -MF libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Tpo -c -o libsysbase/libsysbase_libsysbase_a-assert.o `test -f 'libsysbase/assert.c' || echo '$(srcdir)/'`libsysbase/assert.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Tpo libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libsysbase/assert.c' object='libsysbase/libsysbase_libsysbase_a-assert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsysbase/libsysbase_libsysbase_a-assert.o `test -f 'libsysbase/assert.c' || echo '$(srcdir)/'`libsysbase/assert.c
+
+libsysbase/libsysbase_libsysbase_a-assert.obj: libsysbase/assert.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsysbase/libsysbase_libsysbase_a-assert.obj -MD -MP -MF libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Tpo -c -o libsysbase/libsysbase_libsysbase_a-assert.obj `if test -f 'libsysbase/assert.c'; then $(CYGPATH_W) 'libsysbase/assert.c'; else $(CYGPATH_W) '$(srcdir)/libsysbase/assert.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Tpo libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libsysbase/assert.c' object='libsysbase/libsysbase_libsysbase_a-assert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsysbase/libsysbase_libsysbase_a-assert.obj `if test -f 'libsysbase/assert.c'; then $(CYGPATH_W) 'libsysbase/assert.c'; else $(CYGPATH_W) '$(srcdir)/libsysbase/assert.c'; fi`
+
+libsysbase/libsysbase_libsysbase_a-build_argv.o: libsysbase/build_argv.c +libsysbase/libsysbase_libsysbase_a-build_argv.o: libsysbase/build_argv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsysbase/libsysbase_libsysbase_a-build_argv.o -MD -MP -MF libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Tpo -c -o libsysbase/libsysbase_libsysbase_a-build_argv.o `test -f 'libsysbase/build_argv.c' || echo '$(srcdir)/'`libsysbase/build_argv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsysbase_libsysbase_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsysbase/libsysbase_libsysbase_a-build_argv.o -MD -MP -MF libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Tpo -c -o libsysbase/libsysbase_libsysbase_a-build_argv.o `test -f 'libsysbase/build_argv.c' || echo '$(srcdir)/'`libsysbase/build_argv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Tpo libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Po +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Tpo libsysbase/$(DEPDIR)/libsysbase_libsysbase_a-build_argv.Po
@@ -1351,7 +1371,7 @@ index fd845cf5f..5f80b89ab 100644
nios2/nios2_libnios2_a-io-close.o: nios2/io-close.c nios2/nios2_libnios2_a-io-close.o: nios2/io-close.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-close.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo -c -o nios2/nios2_libnios2_a-io-close.o `test -f 'nios2/io-close.c' || echo '$(srcdir)/'`nios2/io-close.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-close.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo -c -o nios2/nios2_libnios2_a-io-close.o `test -f 'nios2/io-close.c' || echo '$(srcdir)/'`nios2/io-close.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Po
@@ -5103,6 +6205,8 @@ distclean-generic: @@ -5103,6 +6225,8 @@ distclean-generic:
-rm -f iq2000/$(am__dirstamp) -rm -f iq2000/$(am__dirstamp)
-rm -f libnosys/$(DEPDIR)/$(am__dirstamp) -rm -f libnosys/$(DEPDIR)/$(am__dirstamp)
-rm -f libnosys/$(am__dirstamp) -rm -f libnosys/$(am__dirstamp)
@@ -1360,7 +1380,7 @@ index fd845cf5f..5f80b89ab 100644
-rm -f lm32/$(DEPDIR)/$(am__dirstamp) -rm -f lm32/$(DEPDIR)/$(am__dirstamp)
-rm -f lm32/$(am__dirstamp) -rm -f lm32/$(am__dirstamp)
-rm -f nios2/$(DEPDIR)/$(am__dirstamp) -rm -f nios2/$(DEPDIR)/$(am__dirstamp)
@@ -5129,7 +6233,7 @@ clean-am: clean-aminfo clean-binPROGRAMS clean-checkPROGRAMS \ @@ -5129,7 +6253,7 @@ clean-am: clean-aminfo clean-binPROGRAMS clean-checkPROGRAMS \
distclean: distclean-recursive distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f $(am__CONFIG_DISTCLEAN_FILES)
@@ -1369,7 +1389,7 @@ index fd845cf5f..5f80b89ab 100644
-rm -f Makefile -rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \ distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-local distclean-tags distclean-hdr distclean-local distclean-tags
@@ -5272,7 +6376,7 @@ installcheck-am: @@ -5272,7 +6396,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache -rm -rf $(top_srcdir)/autom4te.cache
@@ -1544,10 +1564,10 @@ index 268d86c51..1b918a61e 100644
m4_include([mips/acinclude.m4]) m4_include([mips/acinclude.m4])
diff --git a/libgloss/libsysbase/Makefile.inc b/libgloss/libsysbase/Makefile.inc diff --git a/libgloss/libsysbase/Makefile.inc b/libgloss/libsysbase/Makefile.inc
new file mode 100644 new file mode 100644
index 000000000..123a1dedf index 000000000..bb3c45c32
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/Makefile.inc +++ b/libgloss/libsysbase/Makefile.inc
@@ -0,0 +1,66 @@ @@ -0,0 +1,67 @@
+multilibtool_DATA += %D%/sysbase.specs +multilibtool_DATA += %D%/sysbase.specs
+ +
+multilibtool_LIBRARIES += %D%/libpthread.a +multilibtool_LIBRARIES += %D%/libpthread.a
@@ -1563,6 +1583,7 @@ index 000000000..123a1dedf
+%C%_libsysbase_a_SOURCES = \ +%C%_libsysbase_a_SOURCES = \
+ %D%/_exit.c \ + %D%/_exit.c \
+ %D%/abort.c \ + %D%/abort.c \
+ %D%/assert.c \
+ %D%/build_argv.c \ + %D%/build_argv.c \
+ %D%/chdir.c \ + %D%/chdir.c \
+ %D%/chmod.c \ + %D%/chmod.c \
@@ -1638,17 +1659,24 @@ index 000000000..a45723f84
+} +}
diff --git a/libgloss/libsysbase/abort.c b/libgloss/libsysbase/abort.c diff --git a/libgloss/libsysbase/abort.c b/libgloss/libsysbase/abort.c
new file mode 100644 new file mode 100644
index 000000000..9272e22c9 index 000000000..9074c8fa2
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/abort.c +++ b/libgloss/libsysbase/abort.c
@@ -0,0 +1,8 @@ @@ -0,0 +1,15 @@
+#include <stdlib.h> +#include <stdlib.h>
+#include <unistd.h> +#include <unistd.h>
+#include <sys/iosupport.h>
+ +
+void abort(void) { +void abort(void) {
+ write (2, "Abort called.\n", sizeof("Abort called.\n")-1); + do {
+
+ if ( __has_syscall(abort) ) {
+ __syscall_abort();
+ } else {
+ _exit (1); + _exit (1);
+ } + }
+ } while(1);
+}
+ +
diff --git a/libgloss/libsysbase/acconfig.h b/libgloss/libsysbase/acconfig.h diff --git a/libgloss/libsysbase/acconfig.h b/libgloss/libsysbase/acconfig.h
new file mode 100644 new file mode 100644
@@ -1718,6 +1746,29 @@ index 000000000..7b0d7b4d6
+ z8k-*-*) ;; + z8k-*-*) ;;
+ *) AC_DEFINE(MISSING_SYSCALL_NAMES, 1, [Missing syscall names]) ;; + *) AC_DEFINE(MISSING_SYSCALL_NAMES, 1, [Missing syscall names]) ;;
+esac +esac
diff --git a/libgloss/libsysbase/assert.c b/libgloss/libsysbase/assert.c
new file mode 100644
index 000000000..faa74b866
--- /dev/null
+++ b/libgloss/libsysbase/assert.c
@@ -0,0 +1,17 @@
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/iosupport.h>
+
+void
+__assert_func (const char *file,
+ int line,
+ const char *func,
+ const char *failedexpr)
+{
+ if ( __has_syscall(assert_func) ) {
+ __syscall_assert_func(file, line, func, failedexpr);
+ }
+ abort();
+ /* NOTREACHED */
+}
diff --git a/libgloss/libsysbase/build_argv.c b/libgloss/libsysbase/build_argv.c diff --git a/libgloss/libsysbase/build_argv.c b/libgloss/libsysbase/build_argv.c
new file mode 100644 new file mode 100644
index 000000000..0697f53d2 index 000000000..0697f53d2
@@ -6465,10 +6516,10 @@ index 000000000..d15eab89d
+ +
diff --git a/libgloss/libsysbase/dirent.c b/libgloss/libsysbase/dirent.c diff --git a/libgloss/libsysbase/dirent.c b/libgloss/libsysbase/dirent.c
new file mode 100644 new file mode 100644
index 000000000..482d2f814 index 000000000..4dfeabd71
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/dirent.c +++ b/libgloss/libsysbase/dirent.c
@@ -0,0 +1,257 @@ @@ -0,0 +1,241 @@
+#include <malloc.h> +#include <malloc.h>
+#include <errno.h> +#include <errno.h>
+#include <string.h> +#include <string.h>
@@ -6608,47 +6659,13 @@ index 000000000..482d2f814
+ return res; + return res;
+} +}
+ +
+
+struct dirent* readdir (DIR *dirp) {
+ struct stat st;
+ char filename[NAME_MAX+1];
+ int res;
+ int olderrno = errno;
+
+ if (!dirp) {
+ errno = EBADF;
+ return NULL;
+ }
+
+ res = __dirnext (dirp->dirData, filename, &st);
+
+ if (res < 0) {
+ if (errno == ENOENT) {
+ // errno == ENONENT set by dirnext means it's end of directory
+ // But readdir should not touch errno in case of dir end
+ errno = olderrno;
+ }
+ return NULL;
+ }
+
+ // We've moved forward in the directory
+ dirp->position += 1;
+
+ if (strnlen(filename, sizeof(filename)) >= sizeof(dirp->fileData.d_name)) {
+ errno = EOVERFLOW;
+ return NULL;
+ }
+
+ strncpy (dirp->fileData.d_name, filename, sizeof(dirp->fileData.d_name));
+ dirp->fileData.d_ino = st.st_ino;
+ dirp->fileData.d_type = IFTODT(st.st_mode);
+
+ return &(dirp->fileData);
+}
+
+
+int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) { +int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) {
+ struct stat st; +#ifdef _DIRENT_HAVE_D_STAT
+ struct stat *st = &dirp->fileData.d_stat;
+#else
+ struct stat tmpstat;
+ struct stat *st = &tmpstat;
+#endif
+ char filename[NAME_MAX+1]; + char filename[NAME_MAX+1];
+ int res; + int res;
+ +
@@ -6656,7 +6673,11 @@ index 000000000..482d2f814
+ return EBADF; + return EBADF;
+ } + }
+ +
+ res = __dirnext (dirp->dirData, filename, &st); + if (!result) {
+ return EFAULT;
+ }
+
+ res = __dirnext (dirp->dirData, filename, st);
+ +
+ if (res < 0) { + if (res < 0) {
+ res = errno; + res = errno;
@@ -6665,6 +6686,7 @@ index 000000000..482d2f814
+ // errno == ENONENT set by dirnext means it's end of directory + // errno == ENONENT set by dirnext means it's end of directory
+ // But readdir should not touch errno in case of dir end + // But readdir should not touch errno in case of dir end
+ res = 0; + res = 0;
+ errno = 0;
+ } + }
+ return res; + return res;
+ } + }
@@ -6678,13 +6700,26 @@ index 000000000..482d2f814
+ } + }
+ +
+ strncpy (entry->d_name, filename, sizeof(entry->d_name)); + strncpy (entry->d_name, filename, sizeof(entry->d_name));
+ entry->d_ino = st.st_ino; + entry->d_ino = st->st_ino;
+ entry->d_type = IFTODT(st.st_mode); + entry->d_type = IFTODT(st->st_mode);
+ +
+ *result = entry; + *result = entry;
+ return 0; + return 0;
+} +}
+ +
+struct dirent* readdir (DIR *dirp) {
+
+ struct dirent *entry = &dirp->fileData;
+
+ int res = readdir_r(dirp, entry, &entry);
+
+ if (res !=0) {
+ errno = res;
+ return NULL;
+ }
+
+ return entry;
+}
+ +
+void rewinddir (DIR *dirp) { +void rewinddir (DIR *dirp) {
+ if (!dirp) { + if (!dirp) {
@@ -7058,7 +7093,7 @@ index 000000000..2bada9736
+} +}
diff --git a/libgloss/libsysbase/fpathconf.c b/libgloss/libsysbase/fpathconf.c diff --git a/libgloss/libsysbase/fpathconf.c b/libgloss/libsysbase/fpathconf.c
new file mode 100644 new file mode 100644
index 000000000..453f64870 index 000000000..9cba92a72
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fpathconf.c +++ b/libgloss/libsysbase/fpathconf.c
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
@@ -7078,7 +7113,7 @@ index 000000000..453f64870
+ struct _reent *r = _REENT; + struct _reent *r = _REENT;
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ errno = EINVAL; + errno = EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7094,10 +7129,10 @@ index 000000000..453f64870
+} +}
diff --git a/libgloss/libsysbase/fstat.c b/libgloss/libsysbase/fstat.c diff --git a/libgloss/libsysbase/fstat.c b/libgloss/libsysbase/fstat.c
new file mode 100644 new file mode 100644
index 000000000..32267b828 index 000000000..94924d802
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fstat.c +++ b/libgloss/libsysbase/fstat.c
@@ -0,0 +1,32 @@ @@ -0,0 +1,35 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -7117,7 +7152,10 @@ index 000000000..32267b828
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ errno = EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -7132,7 +7170,7 @@ index 000000000..32267b828
+} +}
diff --git a/libgloss/libsysbase/fsync.c b/libgloss/libsysbase/fsync.c diff --git a/libgloss/libsysbase/fsync.c b/libgloss/libsysbase/fsync.c
new file mode 100644 new file mode 100644
index 000000000..fb06cb6d1 index 000000000..e63e3762b
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fsync.c +++ b/libgloss/libsysbase/fsync.c
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
@@ -7156,7 +7194,7 @@ index 000000000..fb06cb6d1
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ errno = EINVAL; + errno = EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7172,7 +7210,7 @@ index 000000000..fb06cb6d1
+} +}
diff --git a/libgloss/libsysbase/ftruncate.c b/libgloss/libsysbase/ftruncate.c diff --git a/libgloss/libsysbase/ftruncate.c b/libgloss/libsysbase/ftruncate.c
new file mode 100644 new file mode 100644
index 000000000..0cd7d0fc4 index 000000000..94b4a3761
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/ftruncate.c +++ b/libgloss/libsysbase/ftruncate.c
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
@@ -7196,7 +7234,7 @@ index 000000000..0cd7d0fc4
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ r->_errno = EINVAL; + r->_errno=EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7741,10 +7779,10 @@ index 000000000..d7a988359
+ +
diff --git a/libgloss/libsysbase/lseek.c b/libgloss/libsysbase/lseek.c diff --git a/libgloss/libsysbase/lseek.c b/libgloss/libsysbase/lseek.c
new file mode 100644 new file mode 100644
index 000000000..39ef385b1 index 000000000..c5568e338
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/lseek.c +++ b/libgloss/libsysbase/lseek.c
@@ -0,0 +1,35 @@ @@ -0,0 +1,38 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -7766,7 +7804,10 @@ index 000000000..39ef385b1
+ +
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -9039,10 +9080,10 @@ index 000000000..ff84cd355
+} +}
diff --git a/libgloss/libsysbase/read.c b/libgloss/libsysbase/read.c diff --git a/libgloss/libsysbase/read.c b/libgloss/libsysbase/read.c
new file mode 100644 new file mode 100644
index 000000000..9c548d830 index 000000000..30505c7b6
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/read.c +++ b/libgloss/libsysbase/read.c
@@ -0,0 +1,32 @@ @@ -0,0 +1,35 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -9062,7 +9103,10 @@ index 000000000..9c548d830
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -10068,10 +10112,10 @@ index 000000000..2c2998250
+#endif /* __WARNING_H__ */ +#endif /* __WARNING_H__ */
diff --git a/libgloss/libsysbase/write.c b/libgloss/libsysbase/write.c diff --git a/libgloss/libsysbase/write.c b/libgloss/libsysbase/write.c
new file mode 100644 new file mode 100644
index 000000000..04198e854 index 000000000..baf0d6ae5
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/write.c +++ b/libgloss/libsysbase/write.c
@@ -0,0 +1,31 @@ @@ -0,0 +1,34 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -10091,7 +10135,10 @@ index 000000000..04198e854
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -10168,11 +10215,12 @@ index ef5038e68..32a1d5e0b 100644
.stab 0 : { *(.stab) } .stab 0 : { *(.stab) }
diff --git a/libgloss/rs6000/crtmain.c b/libgloss/rs6000/crtmain.c diff --git a/libgloss/rs6000/crtmain.c b/libgloss/rs6000/crtmain.c
new file mode 100644 new file mode 100644
index 000000000..bd25d775d index 000000000..f4f11fa28
--- /dev/null --- /dev/null
+++ b/libgloss/rs6000/crtmain.c +++ b/libgloss/rs6000/crtmain.c
@@ -0,0 +1,18 @@ @@ -0,0 +1,20 @@
+#include <unistd.h> +#include <unistd.h>
+#include <stdlib.h>
+ +
+struct __argv { +struct __argv {
+ int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid + int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid
@@ -10185,11 +10233,26 @@ index 000000000..bd25d775d
+extern struct __argv *__system_argv; +extern struct __argv *__system_argv;
+void __init(); +void __init();
+void SYS_PreMain(); +void SYS_PreMain();
+int main(int argc, char **argv);
+ +
+void __crtmain() { +void __crtmain() {
+ SYS_PreMain(); + SYS_PreMain();
+ exit ( main(__system_argv->argc,__system_argv->argv) ); + exit ( main(__system_argv->argc,__system_argv->argv) );
+} +}
diff --git a/libgloss/rs6000/mbx-print.c b/libgloss/rs6000/mbx-print.c
index 64472ee68..8474dd7d5 100644
--- a/libgloss/rs6000/mbx-print.c
+++ b/libgloss/rs6000/mbx-print.c
@@ -16,6 +16,9 @@
/*
* print -- do a raw print of a string
*/
+
+#include <unistd.h>
+
void
print (ptr)
char *ptr;
diff --git a/libgloss/rs6000/mbx.ld b/libgloss/rs6000/mbx.ld diff --git a/libgloss/rs6000/mbx.ld b/libgloss/rs6000/mbx.ld
index cedf4e867..99d849e90 100644 index cedf4e867..99d849e90 100644
--- a/libgloss/rs6000/mbx.ld --- a/libgloss/rs6000/mbx.ld
@@ -10202,6 +10265,73 @@ index cedf4e867..99d849e90 100644
/* These are needed for ELF backends which have not yet been /* These are needed for ELF backends which have not yet been
converted to the new style linker. */ converted to the new style linker. */
.stab 0 : { *(.stab) } .stab 0 : { *(.stab) }
diff --git a/libgloss/rs6000/mvme-print.c b/libgloss/rs6000/mvme-print.c
index 8d195424e..7f0877bd5 100644
--- a/libgloss/rs6000/mvme-print.c
+++ b/libgloss/rs6000/mvme-print.c
@@ -17,6 +17,10 @@
* write -- write some bytes to the output device.
*/
+void __pcrlf(void);
+void __outln(char *ptr, char *q);
+void __outstr(char *ptr, char *q);
+
int
write (fd, ptr, len)
int fd;
diff --git a/libgloss/rs6000/sim-abort.c b/libgloss/rs6000/sim-abort.c
index e1b59cf19..faeb93153 100644
--- a/libgloss/rs6000/sim-abort.c
+++ b/libgloss/rs6000/sim-abort.c
@@ -14,6 +14,9 @@
* they apply.
*/
+#include <unistd.h>
+#include <stdlib.h>
+
void abort(void)
{
write (2, "Abort called.\n", sizeof("Abort called.\n")-1);
diff --git a/libgloss/rs6000/sim-inbyte.c b/libgloss/rs6000/sim-inbyte.c
index 787b68976..44b273dff 100644
--- a/libgloss/rs6000/sim-inbyte.c
+++ b/libgloss/rs6000/sim-inbyte.c
@@ -14,6 +14,8 @@
* they apply.
*/
+#include <unistd.h>
+
int
inbyte ()
{
diff --git a/libgloss/rs6000/sim-print.c b/libgloss/rs6000/sim-print.c
index c0b9adced..e74bbfa04 100644
--- a/libgloss/rs6000/sim-print.c
+++ b/libgloss/rs6000/sim-print.c
@@ -16,6 +16,8 @@
/*
* print -- do a raw print of a string
*/
+#include <unistd.h>
+
void
print (ptr)
char *ptr;
diff --git a/libgloss/rs6000/sim-sbrk.c b/libgloss/rs6000/sim-sbrk.c
index 5c8bd6522..a536c663e 100644
--- a/libgloss/rs6000/sim-sbrk.c
+++ b/libgloss/rs6000/sim-sbrk.c
@@ -16,6 +16,7 @@
extern char _end[];
static char *curbrk = _end;
+int brk(char *curbrk);
char *
sbrk (incr)
diff --git a/libgloss/rs6000/xilinx.ld b/libgloss/rs6000/xilinx.ld diff --git a/libgloss/rs6000/xilinx.ld b/libgloss/rs6000/xilinx.ld
index 75b2a12b6..40a4a1e4b 100644 index 75b2a12b6..40a4a1e4b 100644
--- a/libgloss/rs6000/xilinx.ld --- a/libgloss/rs6000/xilinx.ld
@@ -10501,7 +10631,7 @@ index 9a32646ab..e5df29f36 100644
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/powerpc/libc_a-vfprintf.o -MD -MP -MF libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Tpo -c -o libc/machine/powerpc/libc_a-vfprintf.o `test -f 'libc/machine/powerpc/vfprintf.c' || echo '$(srcdir)/'`libc/machine/powerpc/vfprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/powerpc/libc_a-vfprintf.o -MD -MP -MF libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Tpo -c -o libc/machine/powerpc/libc_a-vfprintf.o `test -f 'libc/machine/powerpc/vfprintf.c' || echo '$(srcdir)/'`libc/machine/powerpc/vfprintf.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Tpo libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Po @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Tpo libc/machine/powerpc/$(DEPDIR)/libc_a-vfprintf.Po
diff --git a/newlib/configure.host b/newlib/configure.host diff --git a/newlib/configure.host b/newlib/configure.host
index 386183466..cc5e33ad7 100644 index 386183466..b8b021100 100644
--- a/newlib/configure.host --- a/newlib/configure.host
+++ b/newlib/configure.host +++ b/newlib/configure.host
@@ -630,13 +630,25 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID @@ -630,13 +630,25 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
@@ -10538,7 +10668,7 @@ index 386183466..cc5e33ad7 100644
+ powerpc*-*-eabi*) + powerpc*-*-eabi*)
+ default_newlib_io_c99_formats="yes" + default_newlib_io_c99_formats="yes"
+ default_newlib_io_long_long="yes" + default_newlib_io_long_long="yes"
+ newlib_cflags="${newlib_cflags} -DCUSTOM_MALLOC_LOCK -D__DYNAMIC_REENT__ -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__" + newlib_cflags="${newlib_cflags} -DHAVE_ASSERT_FUNC -DABORT_PROVIDED -DCUSTOM_MALLOC_LOCK -D__DYNAMIC_REENT__ -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__"
+ newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections" + newlib_cflags="${newlib_cflags} -ffunction-sections -fdata-sections"
+ syscall_dir=syscalls + syscall_dir=syscalls
+ ;; + ;;
@@ -10571,6 +10701,35 @@ index 5c293c83d..0dbfcd7ee 100644
/* Under Cygwin, wchar_t (or its extension wint_t) is Unicode */ /* Under Cygwin, wchar_t (or its extension wint_t) is Unicode */
#define _jp2uc(c) (c) #define _jp2uc(c) (c)
#define _jp2uc_l(c, l) (c) #define _jp2uc_l(c, l) (c)
diff --git a/newlib/libc/include/elf.h b/newlib/libc/include/elf.h
index 79d3b974b..673f3391a 100644
--- a/newlib/libc/include/elf.h
+++ b/newlib/libc/include/elf.h
@@ -580,6 +580,11 @@ typedef struct {
+typedef Elf32_Word Elf32_Relr;
+typedef Elf64_Xword Elf64_Relr;
+
+
+
#define ELF32_R_SYM(val) ((val) >> 8)
#define ELF32_R_TYPE(val) ((val) & 0xff)
#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
@@ -747,7 +752,11 @@ typedef struct {
#define DT_ENCODING 32
#define DT_PREINIT_ARRAY 32
#define DT_PREINIT_ARRAYSZ 33
-#define DT_NUM 34
+#define DT_SYMTAB_SHNDX 34
+#define DT_RELRSZ 35
+#define DT_RELR 36
+#define DT_RELRENT 37
+#define DT_NUM 38
#define DT_LOOS 0x6000000d
#define DT_HIOS 0x6ffff000
#define DT_LOPROC 0x70000000
diff --git a/newlib/libc/include/fnmatch.h b/newlib/libc/include/fnmatch.h diff --git a/newlib/libc/include/fnmatch.h b/newlib/libc/include/fnmatch.h
index a94e923a4..9171e98aa 100644 index a94e923a4..9171e98aa 100644
--- a/newlib/libc/include/fnmatch.h --- a/newlib/libc/include/fnmatch.h
@@ -10658,6 +10817,19 @@ index b1dd2a7c4..16e29c037 100644
extern void *_sbrk_r (struct _reent *, ptrdiff_t); extern void *_sbrk_r (struct _reent *, ptrdiff_t);
extern int _stat_r (struct _reent *, const char *, struct stat *); extern int _stat_r (struct _reent *, const char *, struct stat *);
extern _CLOCK_T_ _times_r (struct _reent *, struct tms *); extern _CLOCK_T_ _times_r (struct _reent *, struct tms *);
diff --git a/newlib/libc/include/regex.h b/newlib/libc/include/regex.h
index fa3e26879..4da1a374e 100644
--- a/newlib/libc/include/regex.h
+++ b/newlib/libc/include/regex.h
@@ -96,7 +96,7 @@ __BEGIN_DECLS
int regcomp(regex_t *__restrict, const char *__restrict, int);
size_t regerror(int, const regex_t *__restrict, char *__restrict, size_t);
int regexec(const regex_t *__restrict, const char *__restrict,
- size_t, regmatch_t [__restrict], int);
+ size_t, regmatch_t [__restrict_arr], int);
void regfree(regex_t *);
__END_DECLS
diff --git a/newlib/libc/include/semaphore.h b/newlib/libc/include/semaphore.h diff --git a/newlib/libc/include/semaphore.h b/newlib/libc/include/semaphore.h
new file mode 100755 new file mode 100755
index 000000000..4afb0e419 index 000000000..4afb0e419
@@ -10922,27 +11094,34 @@ index f810b008f..ca7e11dc7 100644
+ +
#endif /* !_SYS__TIMESPEC_H_ */ #endif /* !_SYS__TIMESPEC_H_ */
diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index 5dcc77a80..6930a751d 100644 index 5dcc77a80..10a992c21 100644
--- a/newlib/libc/include/sys/config.h --- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h +++ b/newlib/libc/include/sys/config.h
@@ -4,8 +4,19 @@ @@ -4,8 +4,26 @@
#include <machine/ieeefp.h> /* floating point macros */ #include <machine/ieeefp.h> /* floating point macros */
#include <sys/features.h> /* POSIX defs */ #include <sys/features.h> /* POSIX defs */
-#ifdef __aarch64__ -#ifdef __aarch64__
+#ifdef __DEVKITARM__ +#ifdef __DEVKITARM__
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
+#define MALLOC_ALIGNMENT_THRESHOLD 32
+#endif +#endif
+ +
+#ifdef __DEVKITA64__ +#ifdef __DEVKITA64__
#define MALLOC_ALIGNMENT 16 #define MALLOC_ALIGNMENT 16
+#define MALLOC_ALIGNMENT_THRESHOLD 32
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
+#endif +#endif
+ +
+#ifdef __DEVKITPPC__ +#ifdef __DEVKITPPC__
+#define MALLOC_ALIGNMENT_THRESHOLD 64
+#define __BUFSIZ__ 32768 +#define __BUFSIZ__ 32768
+#define MALLOC_ALIGNMENT 64
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
+#endif
+
+#ifdef __DEVKITPRO__
+#define _READ_WRITE_RETURN_TYPE _ssize_t
+#define _READ_WRITE_BUFSIZE_TYPE size_t
#endif #endif
#ifdef __AMDGCN__ #ifdef __AMDGCN__
@@ -10970,10 +11149,10 @@ index a7d4bc52d..a04f13544 100644
#ifdef __rtems__ #ifdef __rtems__
diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h
new file mode 100644 new file mode 100644
index 000000000..335014a4b index 000000000..b81214720
--- /dev/null --- /dev/null
+++ b/newlib/libc/include/sys/iosupport.h +++ b/newlib/libc/include/sys/iosupport.h
@@ -0,0 +1,140 @@ @@ -0,0 +1,142 @@
+//--------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------
+#ifndef __iosupp_h__ +#ifndef __iosupp_h__
+#define __iosupp_h__ +#define __iosupp_h__
@@ -11060,6 +11239,8 @@ index 000000000..335014a4b
+#define __SYSCALL(_name) __syscall_##_name +#define __SYSCALL(_name) __syscall_##_name
+#endif +#endif
+ +
+void __SYSCALL(abort) (void);
+void __SYSCALL(assert_func) (const char *file, int line, const char *func, const char *failedexpr);
+void __SYSCALL(exit) ( int rc ); +void __SYSCALL(exit) ( int rc );
+int __SYSCALL(gettod_r) (struct _reent *ptr, struct timeval *tp, struct timezone *tz); +int __SYSCALL(gettod_r) (struct _reent *ptr, struct timeval *tp, struct timezone *tz);
+void __SYSCALL(lock_init) (_LOCK_T *lock); +void __SYSCALL(lock_init) (_LOCK_T *lock);
@@ -11701,17 +11882,19 @@ index 000000000..a7d63da51
+#endif // _MACHINE__TYPES_H +#endif // _MACHINE__TYPES_H
diff --git a/newlib/libc/machine/powerpc/sys/dirent.h b/newlib/libc/machine/powerpc/sys/dirent.h diff --git a/newlib/libc/machine/powerpc/sys/dirent.h b/newlib/libc/machine/powerpc/sys/dirent.h
new file mode 100644 new file mode 100644
index 000000000..2aaca6080 index 000000000..b3780c263
--- /dev/null --- /dev/null
+++ b/newlib/libc/machine/powerpc/sys/dirent.h +++ b/newlib/libc/machine/powerpc/sys/dirent.h
@@ -0,0 +1,58 @@ @@ -0,0 +1,61 @@
+#ifndef _dirent_h_ +#ifndef _dirent_h_
+#define _dirent_h_ +#define _dirent_h_
+ +
+#define _DIRENT_HAVE_D_TYPE +#define _DIRENT_HAVE_D_TYPE
+#define _DIRENT_HAVE_D_STAT
+ +
+#include <sys/iosupport.h> +#include <sys/iosupport.h>
+#include <sys/types.h> +#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syslimits.h> +#include <sys/syslimits.h>
+ +
+#define DT_UNKNOWN 0 +#define DT_UNKNOWN 0
@@ -11730,6 +11913,7 @@ index 000000000..2aaca6080
+ +
+struct dirent { +struct dirent {
+ ino_t d_ino; + ino_t d_ino;
+ struct stat d_stat;
+ unsigned char d_type; + unsigned char d_type;
+ char d_name[NAME_MAX+1]; + char d_name[NAME_MAX+1];
+}; +};
@@ -11983,6 +12167,30 @@ index 63c0618f1..dd3801900 100644
#define _STDIO_WITH_THREAD_CANCELLATION_SUPPORT #define _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
#endif #endif
diff --git a/newlib/libc/stdio/makebuf.c b/newlib/libc/stdio/makebuf.c
index b9c75bbf8..bc65acc2a 100644
--- a/newlib/libc/stdio/makebuf.c
+++ b/newlib/libc/stdio/makebuf.c
@@ -19,6 +19,7 @@
#include <_ansi.h>
#include <stdio.h>
#include <stdlib.h>
+#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/unistd.h>
@@ -50,7 +51,11 @@ __smakebuf_r (struct _reent *ptr,
return;
}
flags = __swhatbuf_r (ptr, fp, &size, &couldbetty);
+#ifdef MALLOC_ALIGNMENT_THRESHOLD
+ if ((p = _memalign_r (ptr, MALLOC_ALIGNMENT_THRESHOLD, size)) == NULL)
+#else
if ((p = _malloc_r (ptr, size)) == NULL)
+#endif
{
if (!(fp->_flags & __SSTR))
{
diff --git a/newlib/libc/stdio/remove.c b/newlib/libc/stdio/remove.c diff --git a/newlib/libc/stdio/remove.c b/newlib/libc/stdio/remove.c
index d8dfdbd82..a85b5a99b 100644 index d8dfdbd82..a85b5a99b 100644
--- a/newlib/libc/stdio/remove.c --- a/newlib/libc/stdio/remove.c
@@ -12151,6 +12359,24 @@ index 9b7bd518b..f0e33bbc1 100644
/* /*
* Exit, flushing stdio buffers if necessary. * Exit, flushing stdio buffers if necessary.
*/ */
diff --git a/newlib/libc/stdlib/malloc.c b/newlib/libc/stdlib/malloc.c
index f5ac29208..7d016a653 100644
--- a/newlib/libc/stdlib/malloc.c
+++ b/newlib/libc/stdlib/malloc.c
@@ -161,7 +161,12 @@ Supporting OS subroutines required: <<sbrk>>. */
void *
malloc (size_t nbytes) /* get a block */
{
- return _malloc_r (_REENT, nbytes);
+#ifdef MALLOC_ALIGNMENT_THRESHOLD
+ if (nbytes >= MALLOC_ALIGNMENT_THRESHOLD)
+ return _memalign_r (_REENT, MALLOC_ALIGNMENT_THRESHOLD, nbytes);
+ else
+#endif
+ return _malloc_r (_REENT, nbytes);
}
void
diff --git a/newlib/libc/stdlib/mlock.c b/newlib/libc/stdlib/mlock.c diff --git a/newlib/libc/stdlib/mlock.c b/newlib/libc/stdlib/mlock.c
index 23aa10173..ba88eb9fb 100644 index 23aa10173..ba88eb9fb 100644
--- a/newlib/libc/stdlib/mlock.c --- a/newlib/libc/stdlib/mlock.c

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 27" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \

View File

@@ -291,6 +291,19 @@ index 728332b8153..47fc03eb8c8 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
@@ -550,3 +563,16 @@ index 9fd4ab4848c..0b7ba4021ee 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

@@ -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 64" \ --with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 65" \
$CROSS_PARAMS \ $CROSS_PARAMS \
$CROSS_GCC_PARAMS \ $CROSS_GCC_PARAMS \
$EXTRA_GCC_PARAMS \ $EXTRA_GCC_PARAMS \

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);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7049,7 +7049,7 @@ index 000000000..2bada9736
+} +}
diff --git a/libgloss/libsysbase/fpathconf.c b/libgloss/libsysbase/fpathconf.c diff --git a/libgloss/libsysbase/fpathconf.c b/libgloss/libsysbase/fpathconf.c
new file mode 100644 new file mode 100644
index 000000000..453f64870 index 000000000..9cba92a72
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fpathconf.c +++ b/libgloss/libsysbase/fpathconf.c
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
@@ -7069,7 +7069,7 @@ index 000000000..453f64870
+ struct _reent *r = _REENT; + struct _reent *r = _REENT;
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ errno = EINVAL; + errno = EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7085,10 +7085,10 @@ index 000000000..453f64870
+} +}
diff --git a/libgloss/libsysbase/fstat.c b/libgloss/libsysbase/fstat.c diff --git a/libgloss/libsysbase/fstat.c b/libgloss/libsysbase/fstat.c
new file mode 100644 new file mode 100644
index 000000000..32267b828 index 000000000..94924d802
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fstat.c +++ b/libgloss/libsysbase/fstat.c
@@ -0,0 +1,32 @@ @@ -0,0 +1,35 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -7108,7 +7108,10 @@ index 000000000..32267b828
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ errno = EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -7123,7 +7126,7 @@ index 000000000..32267b828
+} +}
diff --git a/libgloss/libsysbase/fsync.c b/libgloss/libsysbase/fsync.c diff --git a/libgloss/libsysbase/fsync.c b/libgloss/libsysbase/fsync.c
new file mode 100644 new file mode 100644
index 000000000..fb06cb6d1 index 000000000..e63e3762b
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/fsync.c +++ b/libgloss/libsysbase/fsync.c
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
@@ -7147,7 +7150,7 @@ index 000000000..fb06cb6d1
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ errno = EINVAL; + errno = EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7163,7 +7166,7 @@ index 000000000..fb06cb6d1
+} +}
diff --git a/libgloss/libsysbase/ftruncate.c b/libgloss/libsysbase/ftruncate.c diff --git a/libgloss/libsysbase/ftruncate.c b/libgloss/libsysbase/ftruncate.c
new file mode 100644 new file mode 100644
index 000000000..0cd7d0fc4 index 000000000..94b4a3761
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/ftruncate.c +++ b/libgloss/libsysbase/ftruncate.c
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
@@ -7187,7 +7190,7 @@ index 000000000..0cd7d0fc4
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) { + if ( NULL == handle ) {
+ r->_errno = EINVAL; + r->_errno=EBADF;
+ return ret; + return ret;
+ } + }
+ +
@@ -7732,10 +7735,10 @@ index 000000000..d7a988359
+ +
diff --git a/libgloss/libsysbase/lseek.c b/libgloss/libsysbase/lseek.c diff --git a/libgloss/libsysbase/lseek.c b/libgloss/libsysbase/lseek.c
new file mode 100644 new file mode 100644
index 000000000..39ef385b1 index 000000000..c5568e338
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/lseek.c +++ b/libgloss/libsysbase/lseek.c
@@ -0,0 +1,35 @@ @@ -0,0 +1,38 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -7757,7 +7760,10 @@ index 000000000..39ef385b1
+ +
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -7941,10 +7947,10 @@ index 000000000..a696c9ab9
+} +}
diff --git a/libgloss/libsysbase/read.c b/libgloss/libsysbase/read.c diff --git a/libgloss/libsysbase/read.c b/libgloss/libsysbase/read.c
new file mode 100644 new file mode 100644
index 000000000..9c548d830 index 000000000..30505c7b6
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/read.c +++ b/libgloss/libsysbase/read.c
@@ -0,0 +1,32 @@ @@ -0,0 +1,35 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -7964,7 +7970,10 @@ index 000000000..9c548d830
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -8919,10 +8928,10 @@ index 000000000..2c2998250
+#endif /* __WARNING_H__ */ +#endif /* __WARNING_H__ */
diff --git a/libgloss/libsysbase/write.c b/libgloss/libsysbase/write.c diff --git a/libgloss/libsysbase/write.c b/libgloss/libsysbase/write.c
new file mode 100644 new file mode 100644
index 000000000..04198e854 index 000000000..baf0d6ae5
--- /dev/null --- /dev/null
+++ b/libgloss/libsysbase/write.c +++ b/libgloss/libsysbase/write.c
@@ -0,0 +1,31 @@ @@ -0,0 +1,34 @@
+#include "config.h" +#include "config.h"
+#include <_ansi.h> +#include <_ansi.h>
+#include <_syslist.h> +#include <_syslist.h>
@@ -8942,7 +8951,10 @@ index 000000000..04198e854
+ if(fileDesc!=-1) { + if(fileDesc!=-1) {
+ handle = __get_handle(fileDesc); + handle = __get_handle(fileDesc);
+ +
+ if ( NULL == handle ) return ret; + if ( NULL == handle ) {
+ r->_errno=EBADF;
+ return ret;
+ }
+ +
+ dev = handle->device; + dev = handle->device;
+ +
@@ -9019,11 +9031,11 @@ index ef5038e68..32a1d5e0b 100644
.stab 0 : { *(.stab) } .stab 0 : { *(.stab) }
diff --git a/libgloss/rs6000/crtmain.c b/libgloss/rs6000/crtmain.c diff --git a/libgloss/rs6000/crtmain.c b/libgloss/rs6000/crtmain.c
new file mode 100644 new file mode 100644
index 000000000..bd25d775d index 000000000..7f8850624
--- /dev/null --- /dev/null
+++ b/libgloss/rs6000/crtmain.c +++ b/libgloss/rs6000/crtmain.c
@@ -0,0 +1,18 @@ @@ -0,0 +1,20 @@
+#include <unistd.h> +#include <stdlib.h>
+ +
+struct __argv { +struct __argv {
+ int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid + int argvMagic; //!< argv magic number, set to 0x5f617267 ('_arg') if valid
@@ -9037,10 +9049,28 @@ index 000000000..bd25d775d
+void __init(); +void __init();
+void SYS_PreMain(); +void SYS_PreMain();
+ +
+int main(int argc, char **argv);
+
+void __crtmain() { +void __crtmain() {
+ SYS_PreMain(); + SYS_PreMain();
+ exit ( main(__system_argv->argc,__system_argv->argv) ); + exit ( main(__system_argv->argc,__system_argv->argv) );
+} +}
diff --git a/libgloss/rs6000/mbx-print.c b/libgloss/rs6000/mbx-print.c
index 64472ee68..5a16e1ab7 100644
--- a/libgloss/rs6000/mbx-print.c
+++ b/libgloss/rs6000/mbx-print.c
@@ -15,7 +15,10 @@
/*
* print -- do a raw print of a string
- */
+ */
+
+#include <unistd.h>
+
void
print (ptr)
char *ptr;
diff --git a/libgloss/rs6000/mbx.ld b/libgloss/rs6000/mbx.ld diff --git a/libgloss/rs6000/mbx.ld b/libgloss/rs6000/mbx.ld
index cedf4e867..99d849e90 100644 index cedf4e867..99d849e90 100644
--- a/libgloss/rs6000/mbx.ld --- a/libgloss/rs6000/mbx.ld
@@ -9053,6 +9083,77 @@ index cedf4e867..99d849e90 100644
/* These are needed for ELF backends which have not yet been /* These are needed for ELF backends which have not yet been
converted to the new style linker. */ converted to the new style linker. */
.stab 0 : { *(.stab) } .stab 0 : { *(.stab) }
diff --git a/libgloss/rs6000/mvme-print.c b/libgloss/rs6000/mvme-print.c
index 8d195424e..bae0eaf7c 100644
--- a/libgloss/rs6000/mvme-print.c
+++ b/libgloss/rs6000/mvme-print.c
@@ -17,6 +17,10 @@
* write -- write some bytes to the output device.
*/
+void __outln( char *ptr, char *q);
+void __outstr( char *ptr, char *q);
+void __pcrlf();
+
int
write (fd, ptr, len)
int fd;
diff --git a/libgloss/rs6000/sim-abort.c b/libgloss/rs6000/sim-abort.c
index e1b59cf19..faeb93153 100644
--- a/libgloss/rs6000/sim-abort.c
+++ b/libgloss/rs6000/sim-abort.c
@@ -14,6 +14,9 @@
* they apply.
*/
+#include <unistd.h>
+#include <stdlib.h>
+
void abort(void)
{
write (2, "Abort called.\n", sizeof("Abort called.\n")-1);
diff --git a/libgloss/rs6000/sim-inbyte.c b/libgloss/rs6000/sim-inbyte.c
index 787b68976..44b273dff 100644
--- a/libgloss/rs6000/sim-inbyte.c
+++ b/libgloss/rs6000/sim-inbyte.c
@@ -14,6 +14,8 @@
* they apply.
*/
+#include <unistd.h>
+
int
inbyte ()
{
diff --git a/libgloss/rs6000/sim-print.c b/libgloss/rs6000/sim-print.c
index c0b9adced..911d8f4a2 100644
--- a/libgloss/rs6000/sim-print.c
+++ b/libgloss/rs6000/sim-print.c
@@ -15,7 +15,10 @@
/*
* print -- do a raw print of a string
- */
+ */
+
+#include <unistd.h>
+
void
print (ptr)
char *ptr;
diff --git a/libgloss/rs6000/sim-sbrk.c b/libgloss/rs6000/sim-sbrk.c
index 5c8bd6522..9cf7de25d 100644
--- a/libgloss/rs6000/sim-sbrk.c
+++ b/libgloss/rs6000/sim-sbrk.c
@@ -17,6 +17,8 @@
extern char _end[];
static char *curbrk = _end;
+int brk(char *curbrk);
+
char *
sbrk (incr)
int incr;
diff --git a/libgloss/rs6000/xilinx.ld b/libgloss/rs6000/xilinx.ld diff --git a/libgloss/rs6000/xilinx.ld b/libgloss/rs6000/xilinx.ld
index 75b2a12b6..40a4a1e4b 100644 index 75b2a12b6..40a4a1e4b 100644
--- a/libgloss/rs6000/xilinx.ld --- a/libgloss/rs6000/xilinx.ld
@@ -9337,24 +9438,27 @@ index fa3e26879..4da1a374e 100644
__END_DECLS __END_DECLS
diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index 5dcc77a80..c53fce983 100644 index 5dcc77a80..fdf232649 100644
--- a/newlib/libc/include/sys/config.h --- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h +++ b/newlib/libc/include/sys/config.h
@@ -4,8 +4,18 @@ @@ -4,8 +4,21 @@
#include <machine/ieeefp.h> /* floating point macros */ #include <machine/ieeefp.h> /* floating point macros */
#include <sys/features.h> /* POSIX defs */ #include <sys/features.h> /* POSIX defs */
-#ifdef __aarch64__ -#ifdef __aarch64__
+#ifdef __DEVKITARM__ +#ifdef __DEVKITARM__
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
+#define MALLOC_ALIGNMENT_THRESHOLD 32
+#endif +#endif
+ +
+#ifdef __DEVKITA64__ +#ifdef __DEVKITA64__
#define MALLOC_ALIGNMENT 16 #define MALLOC_ALIGNMENT 16
+#define MALLOC_ALIGNMENT_THRESHOLD 32
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
+#endif +#endif
+ +
+#ifdef __DEVKITPPC__ +#ifdef __DEVKITPPC__
+#define MALLOC_ALIGNMENT_THRESHOLD 64
+#define __BUFSIZ__ 32768 +#define __BUFSIZ__ 32768
+#define __DYNAMIC_REENT__ +#define __DYNAMIC_REENT__
#endif #endif
@@ -9376,7 +9480,7 @@ index a7d4bc52d..6b06ce5a5 100644
#ifdef __rtems__ #ifdef __rtems__
diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h
new file mode 100644 new file mode 100644
index 000000000..a38b71599 index 000000000..3a7c44c28
--- /dev/null --- /dev/null
+++ b/newlib/libc/include/sys/iosupport.h +++ b/newlib/libc/include/sys/iosupport.h
@@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
@@ -9389,7 +9493,7 @@ index 000000000..a38b71599
+extern "C" { +extern "C" {
+#endif +#endif
+ +
+#include <reent.h> +#include <sys/reent.h>
+#include <sys/stat.h> +#include <sys/stat.h>
+#include <sys/statvfs.h> +#include <sys/statvfs.h>
+#include <sys/time.h> +#include <sys/time.h>
@@ -9539,10 +9643,19 @@ index 9a6f115a6..142e71d35 100644
#define MAXPATHLEN PATH_MAX #define MAXPATHLEN PATH_MAX
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index a02e7c2bd..61de73f88 100644 index a02e7c2bd..5bade6497 100644
--- a/newlib/libc/include/sys/reent.h --- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h +++ b/newlib/libc/include/sys/reent.h
@@ -420,6 +420,8 @@ struct _reent @@ -45,6 +45,8 @@ struct _reent;
struct __locale_t;
+void * memset (void *, int, size_t);
+
/*
* If _REENT_SMALL is defined, we make struct _reent as small as possible,
* by having nearly everything possible allocated at first use.
@@ -420,6 +422,8 @@ struct _reent
__FILE *__sf; /* file descriptors */ __FILE *__sf; /* file descriptors */
struct _misc_reent *_misc; /* strtok, multibyte states */ struct _misc_reent *_misc; /* strtok, multibyte states */
char *_signal_buf; /* strsignal */ char *_signal_buf; /* strsignal */
@@ -9551,7 +9664,7 @@ index a02e7c2bd..61de73f88 100644
}; };
# define _REENT_INIT(var) \ # define _REENT_INIT(var) \
@@ -648,6 +650,8 @@ struct _reent @@ -648,6 +652,8 @@ struct _reent
/* signal info */ /* signal info */
void (**_sig_func)(int); void (**_sig_func)(int);
@@ -10121,7 +10234,7 @@ index 8664dc3e5..dbaba0264 100644
fp->_r -= resid; fp->_r -= resid;
fp->_p += resid; fp->_p += resid;
diff --git a/newlib/libc/stdio/makebuf.c b/newlib/libc/stdio/makebuf.c diff --git a/newlib/libc/stdio/makebuf.c b/newlib/libc/stdio/makebuf.c
index b9c75bbf8..d748d5dc8 100644 index b9c75bbf8..bc65acc2a 100644
--- a/newlib/libc/stdio/makebuf.c --- a/newlib/libc/stdio/makebuf.c
+++ b/newlib/libc/stdio/makebuf.c +++ b/newlib/libc/stdio/makebuf.c
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
@@ -10132,12 +10245,15 @@ index b9c75bbf8..d748d5dc8 100644
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/unistd.h> #include <sys/unistd.h>
@@ -50,7 +51,7 @@ __smakebuf_r (struct _reent *ptr, @@ -50,7 +51,11 @@ __smakebuf_r (struct _reent *ptr,
return; return;
} }
flags = __swhatbuf_r (ptr, fp, &size, &couldbetty); flags = __swhatbuf_r (ptr, fp, &size, &couldbetty);
- if ((p = _malloc_r (ptr, size)) == NULL) +#ifdef MALLOC_ALIGNMENT_THRESHOLD
+ if ((p = _memalign_r (ptr, 64, size)) == NULL) + if ((p = _memalign_r (ptr, MALLOC_ALIGNMENT_THRESHOLD, size)) == NULL)
+#else
if ((p = _malloc_r (ptr, size)) == NULL)
+#endif
{ {
if (!(fp->_flags & __SSTR)) if (!(fp->_flags & __SSTR))
{ {
@@ -10277,18 +10393,20 @@ index 710440389..985e720bf 100644
#endif /* _WANT_REGISTER_FINI */ #endif /* _WANT_REGISTER_FINI */
diff --git a/newlib/libc/stdlib/malloc.c b/newlib/libc/stdlib/malloc.c diff --git a/newlib/libc/stdlib/malloc.c b/newlib/libc/stdlib/malloc.c
index f5ac29208..3f21ea154 100644 index f5ac29208..7d016a653 100644
--- a/newlib/libc/stdlib/malloc.c --- a/newlib/libc/stdlib/malloc.c
+++ b/newlib/libc/stdlib/malloc.c +++ b/newlib/libc/stdlib/malloc.c
@@ -161,7 +161,10 @@ Supporting OS subroutines required: <<sbrk>>. */ @@ -161,7 +161,12 @@ Supporting OS subroutines required: <<sbrk>>. */
void * void *
malloc (size_t nbytes) /* get a block */ malloc (size_t nbytes) /* get a block */
{ {
- return _malloc_r (_REENT, nbytes); - return _malloc_r (_REENT, nbytes);
+ if (nbytes < 64) +#ifdef MALLOC_ALIGNMENT_THRESHOLD
+ return _malloc_r (_REENT, nbytes); + if (nbytes >= MALLOC_ALIGNMENT_THRESHOLD)
+ return _memalign_r (_REENT, MALLOC_ALIGNMENT_THRESHOLD, nbytes);
+ else + else
+ return _memalign_r (_REENT, 64, nbytes); +#endif
+ return _malloc_r (_REENT, nbytes);
} }
void void

View File

@@ -13,4 +13,4 @@ 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

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

View File

@@ -30,8 +30,8 @@ done
case "$VERSION" in case "$VERSION" in
"1" ) "1" )
GCC_VER=14.1.0 GCC_VER=14.2.0
BINUTILS_VER=2.42 BINUTILS_VER=2.43.1
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.4.0.20231231
basedir='dkarm-eabi' basedir='dkarm-eabi'
package=devkitARM package=devkitARM
@@ -39,8 +39,8 @@ case "$VERSION" in
toolchain=DEVKITARM toolchain=DEVKITARM
;; ;;
"2" ) "2" )
GCC_VER=13.2.0 GCC_VER=14.2.0
BINUTILS_VER=2.42 BINUTILS_VER=2.43.1
MN_BINUTILS_VER=2.24 MN_BINUTILS_VER=2.24
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.4.0.20231231
basedir='dkppc' basedir='dkppc'
@@ -49,8 +49,8 @@ case "$VERSION" in
toolchain=DEVKITPPC toolchain=DEVKITPPC
;; ;;
"3" ) "3" )
GCC_VER=13.2.0 GCC_VER=14.2.0
BINUTILS_VER=2.42 BINUTILS_VER=2.43.1
NEWLIB_VER=4.4.0.20231231 NEWLIB_VER=4.4.0.20231231
basedir='dka64' basedir='dka64'
package=devkitA64 package=devkitA64