mirror of
https://github.com/devkitPro/buildscripts.git
synced 2026-08-21 18:04:06 -05:00
Compare commits
6 Commits
devkitPPC_
...
devkitA64_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e477403617 | ||
|
|
c84da440c4 | ||
|
|
e0aebb7afb | ||
|
|
eed906eda5 | ||
|
|
893eeef9c5 | ||
|
|
9f518e2f8d |
@@ -2,7 +2,7 @@
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# devkitARM release 49
|
# devkitARM release 49
|
||||||
# devkitPPC release 32
|
# devkitPPC release 32
|
||||||
# devkitA64 release 10
|
# devkitA64 release 12
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
if [ 0 -eq 1 ] ; then
|
if [ 0 -eq 1 ] ; then
|
||||||
@@ -57,8 +57,8 @@ TEX3DS_VER=1.0.0
|
|||||||
GP32_TOOLS_VER=1.0.3
|
GP32_TOOLS_VER=1.0.3
|
||||||
LIBMIRKO_VER=0.9.8
|
LIBMIRKO_VER=0.9.8
|
||||||
|
|
||||||
SWITCH_TOOLS_VER=1.4.0
|
SWITCH_TOOLS_VER=1.4.1
|
||||||
LIBNX_VER=1.2.1
|
LIBNX_VER=1.3.0
|
||||||
|
|
||||||
OSXMIN=${OSXMIN:-10.9}
|
OSXMIN=${OSXMIN:-10.9}
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ fi
|
|||||||
patchdir=$(pwd)/$basedir/patches
|
patchdir=$(pwd)/$basedir/patches
|
||||||
scriptdir=$(pwd)/$basedir/scripts
|
scriptdir=$(pwd)/$basedir/scripts
|
||||||
|
|
||||||
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
|
archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
|
||||||
|
|
||||||
if [ $VERSION -eq 1 ]; then
|
if [ $VERSION -eq 1 ]; then
|
||||||
|
|
||||||
@@ -260,7 +260,7 @@ cd $BUILDSCRIPTDIR
|
|||||||
mkdir -p $BUILDDIR
|
mkdir -p $BUILDDIR
|
||||||
cd $BUILDDIR
|
cd $BUILDDIR
|
||||||
|
|
||||||
extract_and_patch binutils $BINUTILS_VER bz2
|
extract_and_patch binutils $BINUTILS_VER xz
|
||||||
extract_and_patch gcc $GCC_VER xz
|
extract_and_patch gcc $GCC_VER xz
|
||||||
extract_and_patch newlib $NEWLIB_VER gz
|
extract_and_patch newlib $NEWLIB_VER gz
|
||||||
extract_and_patch gdb $GDB_VER xz
|
extract_and_patch gdb $GDB_VER xz
|
||||||
|
|||||||
346
dka64/patches/binutils-2.31.1.patch
Normal file
346
dka64/patches/binutils-2.31.1.patch
Normal file
@@ -0,0 +1,346 @@
|
|||||||
|
diff -NBaur binutils-2.31.1/bfd/elfnn-aarch64.c binutils-2.31.1-dka64/bfd/elfnn-aarch64.c
|
||||||
|
--- binutils-2.31.1/bfd/elfnn-aarch64.c 2018-06-25 12:44:16.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/bfd/elfnn-aarch64.c 2018-07-27 18:11:15.757082269 +0100
|
||||||
|
@@ -2342,6 +2342,12 @@
|
||||||
|
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. */
|
||||||
|
@@ -6370,11 +6376,13 @@
|
||||||
|
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;
|
||||||
|
bfd_boolean unresolved_reloc = FALSE;
|
||||||
|
+ bfd_boolean resolved_to_zero = FALSE;
|
||||||
|
char *error_message = NULL;
|
||||||
|
|
||||||
|
r_symndx = ELFNN_R_SYM (rel->r_info);
|
||||||
|
@@ -6509,6 +6517,10 @@
|
||||||
|
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:
|
||||||
|
@@ -6532,7 +6544,7 @@
|
||||||
|
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);
|
||||||
|
@@ -6627,7 +6639,7 @@
|
||||||
|
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);
|
||||||
|
@@ -6676,7 +6688,7 @@
|
||||||
|
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);
|
||||||
|
@@ -7019,6 +7031,26 @@
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Remove undefined weak symbol from the dynamic symbol table if it
|
||||||
|
+ is resolved to 0. */
|
||||||
|
+
|
||||||
|
+extern bfd_boolean
|
||||||
|
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
|
||||||
|
+
|
||||||
|
+bfd_boolean
|
||||||
|
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
|
||||||
|
+ 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
|
||||||
|
@@ -8221,6 +8253,7 @@
|
||||||
|
struct elf_aarch64_link_hash_table *htab;
|
||||||
|
struct elf_aarch64_link_hash_entry *eh;
|
||||||
|
struct elf_dyn_relocs *p;
|
||||||
|
+ bfd_boolean resolved_to_zero;
|
||||||
|
|
||||||
|
/* An example of a bfd_link_hash_indirect symbol is versioned
|
||||||
|
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
|
||||||
|
@@ -8240,6 +8273,10 @@
|
||||||
|
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
|
||||||
|
@@ -8249,7 +8286,7 @@
|
||||||
|
{
|
||||||
|
/* 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))
|
||||||
|
@@ -8283,6 +8320,11 @@
|
||||||
|
of relaxing into these from the large model PLT entries. */
|
||||||
|
s->size += PLT_SMALL_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;
|
||||||
|
@@ -8305,6 +8347,7 @@
|
||||||
|
|
||||||
|
htab->root.srelplt->reloc_count++;
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h->plt.offset = (bfd_vma) - 1;
|
||||||
|
@@ -8317,9 +8360,6 @@
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
bfd_boolean dyn;
|
||||||
|
@@ -8331,7 +8371,7 @@
|
||||||
|
|
||||||
|
/* 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))
|
||||||
|
@@ -8345,7 +8385,7 @@
|
||||||
|
{
|
||||||
|
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))
|
||||||
|
@@ -8381,7 +8421,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
@@ -8447,7 +8487,7 @@
|
||||||
|
visibility. */
|
||||||
|
if (eh->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))
|
||||||
|
eh->dyn_relocs = NULL;
|
||||||
|
|
||||||
|
@@ -8467,7 +8507,9 @@
|
||||||
|
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
|
||||||
|
@@ -8478,6 +8520,7 @@
|
||||||
|
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;
|
||||||
|
@@ -9098,8 +9141,17 @@
|
||||||
|
Elf_Internal_Sym *sym)
|
||||||
|
{
|
||||||
|
struct elf_aarch64_link_hash_table *htab;
|
||||||
|
+ struct elf_aarch64_link_hash_entry *eh;
|
||||||
|
+ bfd_boolean 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;
|
||||||
|
@@ -9134,7 +9186,7 @@
|
||||||
|
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. */
|
||||||
|
@@ -9153,10 +9205,11 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
if (h->got.offset != (bfd_vma) - 1
|
||||||
|
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
||||||
|
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
||||||
|
/* Undefined weak symbol in static PIE resolves to 0 without
|
||||||
|
any dynamic relocations. */
|
||||||
|
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
|
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
|
||||||
|
+ && !local_undefweak)
|
||||||
|
{
|
||||||
|
Elf_Internal_Rela rela;
|
||||||
|
bfd_byte *loc;
|
||||||
|
@@ -9650,6 +9703,9 @@
|
||||||
|
#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 -NBaur binutils-2.31.1/ld/emulparams/aarch64elf32.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh
|
||||||
|
--- binutils-2.31.1/ld/emulparams/aarch64elf32.sh 2018-06-24 19:38:57.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh 2018-07-27 18:04:52.585317513 +0100
|
||||||
|
@@ -1,3 +1,5 @@
|
||||||
|
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
||||||
|
+
|
||||||
|
ARCH="aarch64:ilp32"
|
||||||
|
MACHINE=
|
||||||
|
NOP=0x1f2003d5
|
||||||
|
diff -NBaur binutils-2.31.1/ld/emulparams/aarch64elf.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh
|
||||||
|
--- binutils-2.31.1/ld/emulparams/aarch64elf.sh 2018-06-24 19:38:57.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh 2018-07-27 18:04:52.585317513 +0100
|
||||||
|
@@ -1,3 +1,5 @@
|
||||||
|
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
||||||
|
+
|
||||||
|
ARCH=aarch64
|
||||||
|
MACHINE=
|
||||||
|
NOP=0x1f2003d5
|
||||||
|
diff -NBaur binutils-2.31.1/ld/emultempl/aarch64elf.em binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em
|
||||||
|
--- binutils-2.31.1/ld/emultempl/aarch64elf.em 2018-06-26 12:27:20.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em 2018-07-27 18:04:52.585317513 +0100
|
||||||
|
@@ -380,7 +380,7 @@
|
||||||
|
{ "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 -NBaur binutils-2.31.1/ld/Makefile.am binutils-2.31.1-dka64/ld/Makefile.am
|
||||||
|
--- binutils-2.31.1/ld/Makefile.am 2018-06-24 19:38:57.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/ld/Makefile.am 2018-07-27 18:04:52.585317513 +0100
|
||||||
|
@@ -1495,19 +1495,23 @@
|
||||||
|
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
||||||
|
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
||||||
|
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
||||||
|
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
||||||
|
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
|
diff -NBaur binutils-2.31.1/ld/Makefile.in binutils-2.31.1-dka64/ld/Makefile.in
|
||||||
|
--- binutils-2.31.1/ld/Makefile.in 2018-07-18 08:46:21.000000000 +0100
|
||||||
|
+++ binutils-2.31.1-dka64/ld/Makefile.in 2018-07-27 18:04:52.585317513 +0100
|
||||||
|
@@ -3097,18 +3097,22 @@
|
||||||
|
|
||||||
|
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
||||||
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
|
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
||||||
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
|
||||||
|
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
||||||
199
dka64/patches/gcc-8.2.0.patch
Normal file
199
dka64/patches/gcc-8.2.0.patch
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||||
|
index 532c33f4c2b..c8a8bc698a7 100644
|
||||||
|
--- a/gcc/config.gcc
|
||||||
|
+++ b/gcc/config.gcc
|
||||||
|
@@ -945,6 +945,7 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
|
||||||
|
case $target in
|
||||||
|
aarch64-*-elf*)
|
||||||
|
use_gcc_stdint=wrap
|
||||||
|
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
|
||||||
|
;;
|
||||||
|
aarch64-*-fuchsia*)
|
||||||
|
tm_file="${tm_file} fuchsia.h"
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
index c074238df06..ef503ddd5a6 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
|
||||||
|
@@ -22,6 +22,7 @@
|
||||||
|
#ifndef GCC_AARCH64_ELF_RAW_H
|
||||||
|
#define GCC_AARCH64_ELF_RAW_H
|
||||||
|
|
||||||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
||||||
|
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
|
||||||
|
#define ENDFILE_SPEC \
|
||||||
|
" crtend%O%s crtn%O%s " \
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
index 7a5c6d7664f..687793841de 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64-opts.h
|
||||||
|
@@ -48,6 +48,12 @@ enum aarch64_tls_type {
|
||||||
|
TLS_DESCRIPTORS
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* Which thread pointer access sequence to use. */
|
||||||
|
+enum aarch64_tp_type {
|
||||||
|
+ TP_HARD,
|
||||||
|
+ TP_SOFT
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* The code model defines the address generation strategy.
|
||||||
|
Most have a PIC and non-PIC variant. */
|
||||||
|
enum aarch64_code_model {
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
|
||||||
|
index 175f13dc264..733ab473cbd 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.c
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.c
|
||||||
|
@@ -11979,8 +11979,24 @@ aarch64_load_tp (rtx target)
|
||||||
|
|| !register_operand (target, Pmode))
|
||||||
|
target = gen_reg_rtx (Pmode);
|
||||||
|
|
||||||
|
- /* Can return in any reg. */
|
||||||
|
- emit_insn (gen_aarch64_load_tp_hard (target));
|
||||||
|
+ if (TARGET_HARD_TP)
|
||||||
|
+ {
|
||||||
|
+ /* Can return in any reg. */
|
||||||
|
+ emit_insn (gen_aarch64_load_tp_hard (target));
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ /* Always returned in r0. Immediately copy the result into a pseudo,
|
||||||
|
+ otherwise other uses of r0 (e.g. setting up function arguments) may
|
||||||
|
+ clobber the value. */
|
||||||
|
+
|
||||||
|
+ rtx tmp;
|
||||||
|
+
|
||||||
|
+ emit_insn (gen_aarch64_load_tp_soft ());
|
||||||
|
+
|
||||||
|
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
|
||||||
|
+ emit_move_insn (target, tmp);
|
||||||
|
+ }
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
|
||||||
|
index 976f9afae54..73263bcb5e7 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.h
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.h
|
||||||
|
@@ -957,6 +957,10 @@ typedef struct
|
||||||
|
/* Check TLS Descriptors mechanism is selected. */
|
||||||
|
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
|
||||||
|
|
||||||
|
+/* Check selected thread pointer access sequence to use. */
|
||||||
|
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
|
||||||
|
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
|
||||||
|
+
|
||||||
|
extern enum aarch64_code_model aarch64_cmodel;
|
||||||
|
|
||||||
|
/* When using the tiny addressing model conditional and unconditional branches
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
|
||||||
|
index 32a0e1f3685..783c655acf0 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.md
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.md
|
||||||
|
@@ -5693,11 +5693,22 @@
|
||||||
|
(define_insn "aarch64_load_tp_hard"
|
||||||
|
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||||
|
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
|
||||||
|
- ""
|
||||||
|
- "mrs\\t%0, tpidr_el0"
|
||||||
|
+ "TARGET_HARD_TP"
|
||||||
|
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
|
||||||
|
[(set_attr "type" "mrs")]
|
||||||
|
)
|
||||||
|
|
||||||
|
+(define_insn "aarch64_load_tp_soft"
|
||||||
|
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
|
||||||
|
+ (clobber (reg:DI IP0_REGNUM))
|
||||||
|
+ (clobber (reg:DI IP1_REGNUM))
|
||||||
|
+ (clobber (reg:DI LR_REGNUM))
|
||||||
|
+ (clobber (reg:CC CC_REGNUM))]
|
||||||
|
+ "TARGET_SOFT_TP"
|
||||||
|
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
|
||||||
|
+ [(set_attr "type" "branch")]
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
;; The TLS ABI specifically requires that the compiler does not schedule
|
||||||
|
;; instructions in the TLS stubs, in order to enable linker relaxation.
|
||||||
|
;; Therefore we treat the stubs as an atomic sequence.
|
||||||
|
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
|
||||||
|
index 52eaf8c6f40..52bccddc6e3 100644
|
||||||
|
--- a/gcc/config/aarch64/aarch64.opt
|
||||||
|
+++ b/gcc/config/aarch64/aarch64.opt
|
||||||
|
@@ -115,6 +115,20 @@ Enum(aarch64_tls_size) String(32) Value(32)
|
||||||
|
EnumValue
|
||||||
|
Enum(aarch64_tls_size) String(48) Value(48)
|
||||||
|
|
||||||
|
+mtp=
|
||||||
|
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
|
||||||
|
+Specify how to access the thread pointer.
|
||||||
|
+
|
||||||
|
+Enum
|
||||||
|
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
|
||||||
|
+Valid arguments to -mtp=:
|
||||||
|
+
|
||||||
|
+EnumValue
|
||||||
|
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
|
||||||
|
+
|
||||||
|
+EnumValue
|
||||||
|
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
|
||||||
|
+
|
||||||
|
march=
|
||||||
|
Target RejectNegative ToLower Joined Var(aarch64_arch_string)
|
||||||
|
-march=ARCH Use features of architecture ARCH.
|
||||||
|
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
|
||||||
|
index 0be1f0d63aa..a54068bfd96 100644
|
||||||
|
--- a/gcc/config/aarch64/t-aarch64
|
||||||
|
+++ b/gcc/config/aarch64/t-aarch64
|
||||||
|
@@ -68,5 +68,7 @@ cortex-a57-fma-steering.o: $(srcdir)/config/aarch64/cortex-a57-fma-steering.c \
|
||||||
|
$(srcdir)/config/aarch64/cortex-a57-fma-steering.c
|
||||||
|
|
||||||
|
comma=,
|
||||||
|
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
|
||||||
|
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
|
||||||
|
+MULTILIB_OPTIONS = mcmodel=large fPIC
|
||||||
|
+MULTILIB_DIRNAMES = large pic
|
||||||
|
+MULTILIB_REQUIRED = mcmodel=large fPIC
|
||||||
|
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
|
||||||
|
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||||
|
index a716f708259..6a11011dba7 100644
|
||||||
|
--- a/gcc/gcc.c
|
||||||
|
+++ b/gcc/gcc.c
|
||||||
|
@@ -786,6 +786,11 @@ proper position among the other output files. */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef LIBGLOSS_SPEC
|
||||||
|
+# define LIBGLOSS_SPEC "-lsysbase"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
||||||
|
#ifndef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -1081,6 +1086,7 @@ static const char *link_spec = LINK_SPEC;
|
||||||
|
static const char *lib_spec = LIB_SPEC;
|
||||||
|
static const char *link_gomp_spec = "";
|
||||||
|
static const char *libgcc_spec = LIBGCC_SPEC;
|
||||||
|
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
||||||
|
static const char *endfile_spec = ENDFILE_SPEC;
|
||||||
|
static const char *startfile_spec = STARTFILE_SPEC;
|
||||||
|
static const char *linker_name_spec = LINKER_NAME;
|
||||||
|
@@ -1577,6 +1583,7 @@ static struct spec_list static_specs[] =
|
||||||
|
INIT_STATIC_SPEC ("lib", &lib_spec),
|
||||||
|
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
||||||
|
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
||||||
|
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
||||||
|
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
||||||
|
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
||||||
|
INIT_STATIC_SPEC ("version", &compiler_version),
|
||||||
|
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
|
||||||
|
index 5e894455e16..f2347455de0 100644
|
||||||
|
--- a/libgcc/crtstuff.c
|
||||||
|
+++ b/libgcc/crtstuff.c
|
||||||
|
@@ -47,6 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
|
||||||
|
/* Target machine header files require this define. */
|
||||||
|
#define IN_LIBGCC2
|
||||||
|
+#define USED_FOR_TARGET
|
||||||
|
|
||||||
|
/* FIXME: Including auto-host is incorrect, but until we have
|
||||||
|
identified the set of defines that need to go into auto-target.h,
|
||||||
@@ -609,10 +609,10 @@ index 000000000..b6cdfaeb8
|
|||||||
+m4_include([../acinclude.m4])
|
+m4_include([../acinclude.m4])
|
||||||
diff --git a/libgloss/libsysbase/chdir.c b/libgloss/libsysbase/chdir.c
|
diff --git a/libgloss/libsysbase/chdir.c b/libgloss/libsysbase/chdir.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 000000000..90d2dc5b7
|
index 000000000..b94f6a8b4
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/libgloss/libsysbase/chdir.c
|
+++ b/libgloss/libsysbase/chdir.c
|
||||||
@@ -0,0 +1,201 @@
|
@@ -0,0 +1,200 @@
|
||||||
+#include <unistd.h>
|
+#include <unistd.h>
|
||||||
+#include <limits.h>
|
+#include <limits.h>
|
||||||
+#include <reent.h>
|
+#include <reent.h>
|
||||||
@@ -712,10 +712,9 @@ index 000000000..90d2dc5b7
|
|||||||
+ extra += extraSize;
|
+ extra += extraSize;
|
||||||
+ } while (extraSize != 0);
|
+ } while (extraSize != 0);
|
||||||
+
|
+
|
||||||
+ if (pathEnd[-1] != DIRECTORY_SEPARATOR_CHAR) {
|
+ if (strlen(path) > 2 ) {
|
||||||
+ pathEnd[0] = DIRECTORY_SEPARATOR_CHAR;
|
+ if (pathEnd[-1] == DIRECTORY_SEPARATOR_CHAR && pathEnd[-2] != ':')
|
||||||
+ pathEnd[1] = 0;
|
+ pathEnd[-1] = '\0';
|
||||||
+ pathEnd += 1;
|
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
@@ -5349,10 +5348,10 @@ index 000000000..da85a3f46
|
|||||||
+
|
+
|
||||||
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..0ad29029c
|
index 000000000..7d1f4545d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/libgloss/libsysbase/dirent.c
|
+++ b/libgloss/libsysbase/dirent.c
|
||||||
@@ -0,0 +1,255 @@
|
@@ -0,0 +1,256 @@
|
||||||
+#include <malloc.h>
|
+#include <malloc.h>
|
||||||
+#include <errno.h>
|
+#include <errno.h>
|
||||||
+#include <string.h>
|
+#include <string.h>
|
||||||
@@ -5562,6 +5561,7 @@ index 000000000..0ad29029c
|
|||||||
+
|
+
|
||||||
+ 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 = S_ISDIR(st.st_mode)?DT_DIR:DT_REG;
|
||||||
+
|
+
|
||||||
+ *result = entry;
|
+ *result = entry;
|
||||||
+ return 0;
|
+ return 0;
|
||||||
@@ -7416,10 +7416,10 @@ index 2082dfdb1..e535f189b 100644
|
|||||||
#define MALLOC_ALIGNMENT 16
|
#define MALLOC_ALIGNMENT 16
|
||||||
#endif
|
#endif
|
||||||
diff --git a/newlib/libc/include/sys/dirent.h b/newlib/libc/include/sys/dirent.h
|
diff --git a/newlib/libc/include/sys/dirent.h b/newlib/libc/include/sys/dirent.h
|
||||||
index a3fb5c02c..5debd1525 100644
|
index a3fb5c02c..79df5cf61 100644
|
||||||
--- a/newlib/libc/include/sys/dirent.h
|
--- a/newlib/libc/include/sys/dirent.h
|
||||||
+++ b/newlib/libc/include/sys/dirent.h
|
+++ b/newlib/libc/include/sys/dirent.h
|
||||||
@@ -1,13 +1,58 @@
|
@@ -1,13 +1,65 @@
|
||||||
/* <dirent.h> includes <sys/dirent.h>, which is this file. On a
|
/* <dirent.h> includes <sys/dirent.h>, which is this file. On a
|
||||||
system which supports <dirent.h>, this file is overridden by
|
system which supports <dirent.h>, this file is overridden by
|
||||||
dirent.h in the libc/sys/.../sys directory. On a system which does
|
dirent.h in the libc/sys/.../sys directory. On a system which does
|
||||||
@@ -7431,7 +7431,6 @@ index a3fb5c02c..5debd1525 100644
|
|||||||
+#ifndef _dirent_h_
|
+#ifndef _dirent_h_
|
||||||
+#define _dirent_h_
|
+#define _dirent_h_
|
||||||
+
|
+
|
||||||
+#include <sys/iosupport.h>
|
|
||||||
+#include <sys/types.h>
|
+#include <sys/types.h>
|
||||||
+#include <sys/syslimits.h>
|
+#include <sys/syslimits.h>
|
||||||
+
|
+
|
||||||
@@ -7444,37 +7443,45 @@ index a3fb5c02c..5debd1525 100644
|
|||||||
+#define DT_LNK 10
|
+#define DT_LNK 10
|
||||||
+#define DT_SOCK 12
|
+#define DT_SOCK 12
|
||||||
+#define DT_WHT 14
|
+#define DT_WHT 14
|
||||||
|
+
|
||||||
|
+#define _DIRENT_HAVE_D_TYPE
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
-#error "<dirent.h> not supported"
|
-#error "<dirent.h> not supported"
|
||||||
+
|
+
|
||||||
+ struct dirent {
|
+struct dirent {
|
||||||
+ ino_t d_ino;
|
+ ino_t d_ino;
|
||||||
+ unsigned char d_type;
|
+ unsigned char d_type;
|
||||||
+ char d_name[NAME_MAX+1];
|
+ char d_name[NAME_MAX+1];
|
||||||
+ };
|
+};
|
||||||
+
|
+
|
||||||
+ typedef struct {
|
+/* Directory iterator for mantaining state between dir* calls */
|
||||||
|
+typedef struct {
|
||||||
|
+ int device;
|
||||||
|
+ void *dirStruct;
|
||||||
|
+} DIR_ITER;
|
||||||
|
+
|
||||||
|
+typedef struct {
|
||||||
+ long int position;
|
+ long int position;
|
||||||
+ DIR_ITER* dirData;
|
+ DIR_ITER* dirData;
|
||||||
+ struct dirent fileData;
|
+ struct dirent fileData;
|
||||||
+ } DIR;
|
+} DIR;
|
||||||
+
|
+
|
||||||
+ int closedir(DIR *dirp);
|
+int closedir(DIR *dirp);
|
||||||
+ DIR *opendir(const char *dirname);
|
+DIR *opendir(const char *dirname);
|
||||||
+ struct dirent *readdir(DIR *dirp);
|
+struct dirent *readdir(DIR *dirp);
|
||||||
+ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
|
+int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
|
||||||
+ void rewinddir(DIR *dirp);
|
+void rewinddir(DIR *dirp);
|
||||||
+ void seekdir(DIR *dirp, long int loc);
|
+void seekdir(DIR *dirp, long int loc);
|
||||||
+ long int telldir(DIR *dirp);
|
+long int telldir(DIR *dirp);
|
||||||
+
|
+
|
||||||
+ int scandir(const char *dirp, struct dirent ***namelist,
|
+int scandir(const char *dirp, struct dirent ***namelist,
|
||||||
+ int (*filter)(const struct dirent *),
|
+ int (*filter)(const struct dirent *),
|
||||||
+ int (*compar)(const struct dirent **, const struct dirent **));
|
+ int (*compar)(const struct dirent **, const struct dirent **));
|
||||||
+
|
+
|
||||||
+ int alphasort(const struct dirent **a, const struct dirent **b);
|
+int alphasort(const struct dirent **a, const struct dirent **b);
|
||||||
+
|
+
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
@@ -7497,10 +7504,10 @@ index 2900b332f..6efb54eb3 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..ee14d2610
|
index 000000000..e177ccf8e
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/newlib/libc/include/sys/iosupport.h
|
+++ b/newlib/libc/include/sys/iosupport.h
|
||||||
@@ -0,0 +1,112 @@
|
@@ -0,0 +1,106 @@
|
||||||
+//---------------------------------------------------------------------------------
|
+//---------------------------------------------------------------------------------
|
||||||
+#ifndef __iosupp_h__
|
+#ifndef __iosupp_h__
|
||||||
+#define __iosupp_h__
|
+#define __iosupp_h__
|
||||||
@@ -7514,6 +7521,7 @@ index 000000000..ee14d2610
|
|||||||
+#include <sys/stat.h>
|
+#include <sys/stat.h>
|
||||||
+#include <sys/statvfs.h>
|
+#include <sys/statvfs.h>
|
||||||
+#include <time.h>
|
+#include <time.h>
|
||||||
|
+#include <dirent.h>
|
||||||
+
|
+
|
||||||
+enum {
|
+enum {
|
||||||
+ STD_IN,
|
+ STD_IN,
|
||||||
@@ -7522,19 +7530,12 @@ index 000000000..ee14d2610
|
|||||||
+ STD_MAX = 16
|
+ STD_MAX = 16
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+
|
|
||||||
+typedef struct {
|
+typedef struct {
|
||||||
+ unsigned int device;
|
+ unsigned int device;
|
||||||
+ unsigned int refcount;
|
+ unsigned int refcount;
|
||||||
+ void *fileStruct;
|
+ void *fileStruct;
|
||||||
+} __handle;
|
+} __handle;
|
||||||
+
|
+
|
||||||
+/* Directory iterator for mantaining state between dir* calls */
|
|
||||||
+typedef struct {
|
|
||||||
+ int device;
|
|
||||||
+ void *dirStruct;
|
|
||||||
+} DIR_ITER;
|
|
||||||
+
|
|
||||||
+typedef struct {
|
+typedef struct {
|
||||||
+ const char *name;
|
+ const char *name;
|
||||||
+ size_t structSize;
|
+ size_t structSize;
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ then
|
|||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
--enable-lto $plugin_ld\
|
--enable-lto $plugin_ld\
|
||||||
--with-system-zlib \
|
--with-system-zlib \
|
||||||
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 10" \
|
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 12" \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
$CROSS_GCC_PARAMS \
|
$CROSS_GCC_PARAMS \
|
||||||
|| { echo "Error configuring gcc"; exit 1; }
|
|| { echo "Error configuring gcc"; exit 1; }
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ case "$VERSION" in
|
|||||||
toolchain=DEVKITPPC
|
toolchain=DEVKITPPC
|
||||||
;;
|
;;
|
||||||
"3" )
|
"3" )
|
||||||
GCC_VER=8.1.0
|
GCC_VER=8.2.0
|
||||||
BINUTILS_VER=2.30
|
BINUTILS_VER=2.31.1
|
||||||
NEWLIB_VER=3.0.0
|
NEWLIB_VER=3.0.0
|
||||||
GDB_VER=8.0
|
GDB_VER=8.0
|
||||||
basedir='dka64'
|
basedir='dka64'
|
||||||
|
|||||||
@@ -27,5 +27,5 @@ fi
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
|
||||||
export PATH=$PATH:$TOOLPATH/$package/bin
|
export PATH=$PATH:$TOOLPATH/$package/bin
|
||||||
|
export prefix=$INSTALLDIR/$CROSSBUILD/$package
|
||||||
. ./strip_bins.sh
|
. ./strip_bins.sh
|
||||||
|
|||||||
Reference in New Issue
Block a user