Put postmarketOS aports inside pmbootstrap repo
Later, the aports folder will probably get split up in its own repository. But right now this is simply convenient.
This commit is contained in:
commit
1c0ff6aa23
120 changed files with 15717 additions and 0 deletions
67
binutils-armhf/APKBUILD
Normal file
67
binutils-armhf/APKBUILD
Normal file
|
@ -0,0 +1,67 @@
|
|||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen binutils-armhf
|
||||
# Based on: main/binutils
|
||||
|
||||
|
||||
pkgname="binutils-armhf"
|
||||
pkgver=2.28
|
||||
pkgrel=2
|
||||
pkgdesc="Tools necessary to build programs for armhf targets"
|
||||
url="http://www.gnu.org/software/binutils/"
|
||||
depends=""
|
||||
makedepends_build=""
|
||||
makedepends_host=""
|
||||
makedepends="gettext libtool autoconf automake bison"
|
||||
arch="all"
|
||||
license="GPL2 GPL3+ LGPL2 BSD"
|
||||
subpackages=""
|
||||
source="http://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2
|
||||
binutils-ld-fix-static-linking.patch
|
||||
hash-style-gnu.patch
|
||||
CVE-2017-7614.patch
|
||||
"
|
||||
builddir="$srcdir/binutils-$pkgver"
|
||||
|
||||
if [ "$CHOST" != "$CTARGET" ]; then
|
||||
pkgname="binutils-$CTARGET_ARCH"
|
||||
subpackages=""
|
||||
sonameprefix="binutils:"
|
||||
fi
|
||||
|
||||
# secfixes:
|
||||
# 2.28-r1:
|
||||
# - CVE-2017-7614
|
||||
|
||||
build() {
|
||||
_target="$(arch_to_hostspec armhf)"
|
||||
cd "$builddir"
|
||||
"$builddir"/configure \
|
||||
--build="$CBUILD" \
|
||||
--target=$_target \
|
||||
--with-lib-path=/usr/lib \
|
||||
--prefix=/usr \
|
||||
--with-sysroot=/usr/$_target \
|
||||
--enable-ld=default \
|
||||
--enable-gold=yes \
|
||||
--enable-plugins \
|
||||
--disable-multilib \
|
||||
--disable-werror \
|
||||
--disable-nls \
|
||||
|| return 1
|
||||
make
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$builddir"
|
||||
make install DESTDIR="$pkgdir" || return 1
|
||||
|
||||
# remove man, info folders
|
||||
rm -rf "$pkgdir"/usr/share
|
||||
}
|
||||
|
||||
|
||||
|
||||
sha512sums="ede2e4e59a800260eea8c14eafbaee94e30abadafd5c419a3370f9f62213cf027d6400a1d4970b6958bd4d220e675dcd483a708107016e7abd5c99d7392ba8fd binutils-2.28.tar.bz2
|
||||
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
|
||||
24e853bf4b58621a77921087e599da2ace47ba3079e2d50fb5d08ae399be5f060c5fdd7f65257bcc0526aebc66e68b98aafd45d714c035da8ea2bdc3d8d4e375 hash-style-gnu.patch
|
||||
03e2329a216eaaaebc00a2b487a8ffa57657845ea3428f24a1029eabaca2103cb00f39cb4824fe6b70ce9c124e0f850c893746fcf203a6a69288d19df624c60a CVE-2017-7614.patch"
|
84
binutils-armhf/CVE-2017-7614.patch
Normal file
84
binutils-armhf/CVE-2017-7614.patch
Normal file
|
@ -0,0 +1,84 @@
|
|||
From ad32986fdf9da1c8748e47b8b45100398223dba8 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Clifton <nickc@redhat.com>
|
||||
Date: Tue, 4 Apr 2017 11:23:36 +0100
|
||||
Subject: [PATCH] Fix null pointer dereferences when using a link built with
|
||||
clang.
|
||||
|
||||
PR binutils/21342
|
||||
* elflink.c (_bfd_elf_define_linkage_sym): Prevent null pointer
|
||||
dereference.
|
||||
(bfd_elf_final_link): Only initialize the extended symbol index
|
||||
section if there are extended symbol tables to list.
|
||||
---
|
||||
bfd/elflink.c | 35 +++++++++++++++++++++--------------
|
||||
2 files changed, 29 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
||||
index 776357f..9bf75c8 100644
|
||||
--- a/bfd/elflink.c
|
||||
+++ b/bfd/elflink.c
|
||||
@@ -119,15 +119,18 @@ _bfd_elf_define_linkage_sym (bfd *abfd,
|
||||
defined in shared libraries can't be overridden, because we
|
||||
lose the link to the bfd which is via the symbol section. */
|
||||
h->root.type = bfd_link_hash_new;
|
||||
+ bh = &h->root;
|
||||
}
|
||||
+ else
|
||||
+ bh = NULL;
|
||||
|
||||
- bh = &h->root;
|
||||
bed = get_elf_backend_data (abfd);
|
||||
if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
|
||||
sec, 0, NULL, FALSE, bed->collect,
|
||||
&bh))
|
||||
return NULL;
|
||||
h = (struct elf_link_hash_entry *) bh;
|
||||
+ BFD_ASSERT (h != NULL);
|
||||
h->def_regular = 1;
|
||||
h->non_elf = 0;
|
||||
h->root.linker_def = 1;
|
||||
@@ -12038,24 +12041,28 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||
{
|
||||
/* Finish up and write out the symbol string table (.strtab)
|
||||
section. */
|
||||
- Elf_Internal_Shdr *symstrtab_hdr;
|
||||
+ Elf_Internal_Shdr *symstrtab_hdr = NULL;
|
||||
file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
|
||||
|
||||
- symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
|
||||
- if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
|
||||
+ if (elf_symtab_shndx_list (abfd))
|
||||
{
|
||||
- symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
|
||||
- symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
|
||||
- symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
|
||||
- amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
|
||||
- symtab_shndx_hdr->sh_size = amt;
|
||||
+ symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
|
||||
|
||||
- off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
|
||||
- off, TRUE);
|
||||
+ if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
|
||||
+ {
|
||||
+ symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
|
||||
+ symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
|
||||
+ symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
|
||||
+ amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
|
||||
+ symtab_shndx_hdr->sh_size = amt;
|
||||
|
||||
- if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
|
||||
- || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
|
||||
- return FALSE;
|
||||
+ off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
|
||||
+ off, TRUE);
|
||||
+
|
||||
+ if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
|
||||
+ || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
|
||||
+ return FALSE;
|
||||
+ }
|
||||
}
|
||||
|
||||
symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
|
||||
--
|
||||
2.9.3
|
||||
|
46
binutils-armhf/binutils-ld-fix-static-linking.patch
Normal file
46
binutils-armhf/binutils-ld-fix-static-linking.patch
Normal file
|
@ -0,0 +1,46 @@
|
|||
This fixes static linking for our hardened toolchain
|
||||
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
|
||||
index e8126cb..9532bfb 100644
|
||||
--- a/ld/scripttempl/elf.sc
|
||||
+++ b/ld/scripttempl/elf.sc
|
||||
@@ -235,8 +235,8 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
|
||||
if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then
|
||||
SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))"
|
||||
SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))"
|
||||
- CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors"
|
||||
- DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors"
|
||||
+ CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors"
|
||||
+ DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors"
|
||||
else
|
||||
SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))"
|
||||
SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))"
|
||||
@@ -270,15 +270,14 @@ CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
doesn't matter which directory crtbegin.o
|
||||
is in. */
|
||||
|
||||
- KEEP (*crtbegin.o(.ctors))
|
||||
- KEEP (*crtbegin?.o(.ctors))
|
||||
+ KEEP (*crtbegin*.o(.ctors))
|
||||
|
||||
/* We don't want to include the .ctor section from
|
||||
the crtend.o file until after the sorted ctors.
|
||||
The .ctor section from the crtend file contains the
|
||||
end of ctors marker and it must be last */
|
||||
|
||||
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
|
||||
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
${CONSTRUCTING+${CTOR_END}}
|
||||
@@ -286,9 +285,8 @@ CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
DTOR=".dtors ${CONSTRUCTING-0} :
|
||||
{
|
||||
${CONSTRUCTING+${DTOR_START}}
|
||||
- KEEP (*crtbegin.o(.dtors))
|
||||
- KEEP (*crtbegin?.o(.dtors))
|
||||
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
|
||||
+ KEEP (*crtbegin*.o(.dtors))
|
||||
+ KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
${CONSTRUCTING+${DTOR_END}}
|
31
binutils-armhf/hash-style-gnu.patch
Normal file
31
binutils-armhf/hash-style-gnu.patch
Normal file
|
@ -0,0 +1,31 @@
|
|||
# DP: Default to --hash-style=gnu in ld.bfd and ld.gold.
|
||||
|
||||
--- a/ld/ldmain.c
|
||||
+++ b/ld/ldmain.c
|
||||
@@ -287,6 +288,15 @@
|
||||
emulation = get_emulation (argc, argv);
|
||||
ldemul_choose_mode (emulation);
|
||||
default_target = ldemul_choose_target (argc, argv);
|
||||
+
|
||||
+ /* Default to --hash-style=gnu */
|
||||
+ if (strcmp (default_target, "elf32-tradbigmips") != 0
|
||||
+ && strcmp (default_target, "elf32-tradlittlemips") != 0)
|
||||
+ {
|
||||
+ link_info.emit_gnu_hash = TRUE;
|
||||
+ link_info.emit_hash = FALSE;
|
||||
+ }
|
||||
+
|
||||
config.maxpagesize = bfd_emul_get_maxpagesize (default_target);
|
||||
config.commonpagesize = bfd_emul_get_commonpagesize (default_target);
|
||||
lang_init ();
|
||||
--- a/gold/options.h
|
||||
+++ b/gold/options.h
|
||||
@@ -794,7 +794,7 @@
|
||||
N_("Min fraction of empty buckets in dynamic hash"),
|
||||
N_("FRACTION"));
|
||||
|
||||
- DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "sysv",
|
||||
+ DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "gnu",
|
||||
N_("Dynamic hash style"), N_("[sysv,gnu,both]"),
|
||||
{"sysv", "gnu", "both"});
|
||||
|
25
busybox/0001-ash-exec-busybox.static.patch
Normal file
25
busybox/0001-ash-exec-busybox.static.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
From 6ad2305eb299c864dbe04b368a9921e91fd41bcb Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Thu, 4 Aug 2016 11:03:07 +0200
|
||||
Subject: [PATCH 01/12] ash: exec busybox.static
|
||||
|
||||
---
|
||||
shell/ash.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/shell/ash.c b/shell/ash.c
|
||||
index 8d8cc466b..1b1012e76 100644
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -7552,6 +7552,8 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char **
|
||||
}
|
||||
/* re-exec ourselves with the new arguments */
|
||||
execve(bb_busybox_exec_path, argv, envp);
|
||||
+ execve("/bin/busybox.static",argv,envp);
|
||||
+ execve("/bin/busybox",argv,envp);
|
||||
/* If they called chroot or otherwise made the binary no longer
|
||||
* executable, fall through */
|
||||
}
|
||||
--
|
||||
2.11.0
|
||||
|
39
busybox/0002-app-location-for-vi-and-lspci.patch
Normal file
39
busybox/0002-app-location-for-vi-and-lspci.patch
Normal file
|
@ -0,0 +1,39 @@
|
|||
From a3016293eb42eb3679400148ed4520005ff6b8a7 Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Tue, 27 Dec 2016 20:46:59 +0100
|
||||
Subject: [PATCH 02/12] app location for vi and lspci
|
||||
|
||||
---
|
||||
editors/vi.c | 2 +-
|
||||
util-linux/lspci.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/editors/vi.c b/editors/vi.c
|
||||
index 38a4692fd..dd3efda75 100644
|
||||
--- a/editors/vi.c
|
||||
+++ b/editors/vi.c
|
||||
@@ -166,7 +166,7 @@
|
||||
//config: Unless you want more (or less) frequent "undo points" while typing,
|
||||
//config: you should probably leave this unchanged.
|
||||
|
||||
-//applet:IF_VI(APPLET(vi, BB_DIR_BIN, BB_SUID_DROP))
|
||||
+//applet:IF_VI(APPLET(vi, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||
|
||||
//kbuild:lib-$(CONFIG_VI) += vi.o
|
||||
|
||||
diff --git a/util-linux/lspci.c b/util-linux/lspci.c
|
||||
index 8b38a2366..f918f0972 100644
|
||||
--- a/util-linux/lspci.c
|
||||
+++ b/util-linux/lspci.c
|
||||
@@ -16,7 +16,7 @@
|
||||
//config:
|
||||
//config: This version uses sysfs (/sys/bus/pci/devices) only.
|
||||
|
||||
-//applet:IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||
+//applet:IF_LSPCI(APPLET(lspci, BB_DIR_USR_SBIN, BB_SUID_DROP))
|
||||
|
||||
//kbuild:lib-$(CONFIG_LSPCI) += lspci.o
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
35
busybox/0003-udhcpc-set-default-discover-retries-to-5.patch
Normal file
35
busybox/0003-udhcpc-set-default-discover-retries-to-5.patch
Normal file
|
@ -0,0 +1,35 @@
|
|||
From 5b9fc802f7f3bb7e1b0c539a3d6101dcca5399e9 Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Thu, 4 Aug 2016 11:08:35 +0200
|
||||
Subject: [PATCH 03/12] udhcpc: set default discover retries to 5
|
||||
|
||||
Some slower nics needs more attempts to get a lease
|
||||
---
|
||||
networking/udhcp/dhcpc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
|
||||
index 0e236261b..3c36bc39b 100644
|
||||
--- a/networking/udhcp/dhcpc.c
|
||||
+++ b/networking/udhcp/dhcpc.c
|
||||
@@ -1189,7 +1189,7 @@ static void client_background(void)
|
||||
//usage: "\n -s,--script PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")"
|
||||
//usage: "\n -p,--pidfile FILE Create pidfile"
|
||||
//usage: "\n -B,--broadcast Request broadcast replies"
|
||||
-//usage: "\n -t,--retries N Send up to N discover packets (default 3)"
|
||||
+//usage: "\n -t,--retries N Send up to N discover packets (default 5)"
|
||||
//usage: "\n -T,--timeout SEC Pause between packets (default 3)"
|
||||
//usage: "\n -A,--tryagain SEC Wait if lease is not obtained (default 20)"
|
||||
//usage: "\n -n,--now Exit if lease is not obtained"
|
||||
@@ -1272,7 +1272,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
|
||||
llist_t *list_x = NULL;
|
||||
int tryagain_timeout = 20;
|
||||
int discover_timeout = 3;
|
||||
- int discover_retries = 3;
|
||||
+ int discover_retries = 5;
|
||||
uint32_t server_addr = server_addr; /* for compiler */
|
||||
uint32_t requested_ip = 0;
|
||||
uint32_t xid = xid; /* for compiler */
|
||||
--
|
||||
2.11.0
|
||||
|
197
busybox/0004-ping-make-ping-work-without-root-privileges.patch
Normal file
197
busybox/0004-ping-make-ping-work-without-root-privileges.patch
Normal file
|
@ -0,0 +1,197 @@
|
|||
From 9432235d7dc8d4a2bc9b546e63e52e84b7cad5ce Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Tue, 29 Mar 2016 18:59:22 +0200
|
||||
Subject: [PATCH 04/12] ping: make ping work without root privileges
|
||||
|
||||
---
|
||||
networking/ping.c | 103 +++++++++++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 87 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/networking/ping.c b/networking/ping.c
|
||||
index d0ef7ba62..73e903927 100644
|
||||
--- a/networking/ping.c
|
||||
+++ b/networking/ping.c
|
||||
@@ -155,6 +155,7 @@ enum {
|
||||
pingsock = 0,
|
||||
};
|
||||
|
||||
+static int using_dgram;
|
||||
static void
|
||||
#if ENABLE_PING6
|
||||
create_icmp_socket(len_and_sockaddr *lsa)
|
||||
@@ -171,9 +172,23 @@ create_icmp_socket(void)
|
||||
#endif
|
||||
sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
|
||||
if (sock < 0) {
|
||||
- if (errno == EPERM)
|
||||
- bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
|
||||
- bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket);
|
||||
+ if (errno != EPERM)
|
||||
+ bb_perror_msg_and_die(bb_msg_can_not_create_raw_socket);
|
||||
+#if defined(__linux__) || defined(__APPLE__)
|
||||
+ /* We don't have root privileges. Try SOCK_DGRAM instead.
|
||||
+ * Linux needs net.ipv4.ping_group_range for this to work.
|
||||
+ * MacOSX allows ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ
|
||||
+ */
|
||||
+#if ENABLE_PING6
|
||||
+ if (lsa->u.sa.sa_family == AF_INET6)
|
||||
+ sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6);
|
||||
+ else
|
||||
+#endif
|
||||
+ sock = socket(AF_INET, SOCK_DGRAM, 1); /* 1 == ICMP */
|
||||
+ if (sock < 0)
|
||||
+#endif
|
||||
+ bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
|
||||
+ using_dgram = 1;
|
||||
}
|
||||
|
||||
xmove_fd(sock, pingsock);
|
||||
@@ -226,10 +241,12 @@ static void ping4(len_and_sockaddr *lsa)
|
||||
bb_perror_msg("recvfrom");
|
||||
continue;
|
||||
}
|
||||
- if (c >= 76) { /* ip + icmp */
|
||||
- struct iphdr *iphdr = (struct iphdr *) G.packet;
|
||||
+ if (c >= 76 || using_dgram && (c == 64)) { /* ip + icmp */
|
||||
+ if(!using_dgram) {
|
||||
+ struct iphdr *iphdr = (struct iphdr *) G.packet;
|
||||
|
||||
- pkt = (struct icmp *) (G.packet + (iphdr->ihl << 2)); /* skip ip hdr */
|
||||
+ pkt = (struct icmp *) (G.packet + (iphdr->ihl << 2)); /* skip ip hdr */
|
||||
+ } else pkt = (struct icmp *) G.packet;
|
||||
if (pkt->icmp_id != G.myid)
|
||||
continue; /* not our ping */
|
||||
if (pkt->icmp_type == ICMP_ECHOREPLY)
|
||||
@@ -627,19 +644,21 @@ static void unpack_tail(int sz, uint32_t *tp,
|
||||
}
|
||||
static void unpack4(char *buf, int sz, struct sockaddr_in *from)
|
||||
{
|
||||
- struct icmp *icmppkt;
|
||||
struct iphdr *iphdr;
|
||||
+ struct icmp *icmppkt;
|
||||
int hlen;
|
||||
|
||||
/* discard if too short */
|
||||
if (sz < (datalen + ICMP_MINLEN))
|
||||
return;
|
||||
+ if(!using_dgram) {
|
||||
+ /* check IP header */
|
||||
+ iphdr = (struct iphdr *) buf;
|
||||
+ hlen = iphdr->ihl << 2;
|
||||
+ sz -= hlen;
|
||||
+ icmppkt = (struct icmp *) (buf + hlen);
|
||||
+ } else icmppkt = (struct icmp *) buf;
|
||||
|
||||
- /* check IP header */
|
||||
- iphdr = (struct iphdr *) buf;
|
||||
- hlen = iphdr->ihl << 2;
|
||||
- sz -= hlen;
|
||||
- icmppkt = (struct icmp *) (buf + hlen);
|
||||
if (icmppkt->icmp_id != myid)
|
||||
return; /* not our ping */
|
||||
|
||||
@@ -651,7 +670,7 @@ static void unpack4(char *buf, int sz, struct sockaddr_in *from)
|
||||
tp = (uint32_t *) icmppkt->icmp_data;
|
||||
unpack_tail(sz, tp,
|
||||
inet_ntoa(*(struct in_addr *) &from->sin_addr.s_addr),
|
||||
- recv_seq, iphdr->ttl);
|
||||
+ recv_seq, using_dgram ? 42 : iphdr->ttl);
|
||||
} else if (icmppkt->icmp_type != ICMP_ECHO) {
|
||||
bb_error_msg("warning: got ICMP %d (%s)",
|
||||
icmppkt->icmp_type,
|
||||
@@ -695,11 +714,31 @@ static void ping4(len_and_sockaddr *lsa)
|
||||
int sockopt;
|
||||
|
||||
pingaddr.sin = lsa->u.sin;
|
||||
- if (source_lsa) {
|
||||
+ if (source_lsa && !using_dgram) {
|
||||
if (setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_IF,
|
||||
&source_lsa->u.sa, source_lsa->len))
|
||||
bb_error_msg_and_die("can't set multicast source interface");
|
||||
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
|
||||
+ } else if(using_dgram) {
|
||||
+ struct sockaddr_in sa;
|
||||
+ socklen_t sl;
|
||||
+
|
||||
+ sa.sin_family = AF_INET;
|
||||
+ sa.sin_port = 0;
|
||||
+ sa.sin_addr.s_addr = source_lsa ?
|
||||
+ source_lsa->u.sin.sin_addr.s_addr : 0;
|
||||
+ sl = sizeof(sa);
|
||||
+
|
||||
+ if (bind(pingsock, (struct sockaddr *) &sa, sl) == -1) {
|
||||
+ perror("bind");
|
||||
+ exit(2);
|
||||
+ }
|
||||
+
|
||||
+ if (getsockname(pingsock, (struct sockaddr *) &sa, &sl) == -1) {
|
||||
+ perror("getsockname");
|
||||
+ exit(2);
|
||||
+ }
|
||||
+ myid = sa.sin_port;
|
||||
}
|
||||
|
||||
/* enable broadcast pings */
|
||||
@@ -716,6 +755,15 @@ static void ping4(len_and_sockaddr *lsa)
|
||||
setsockopt_int(pingsock, IPPROTO_IP, IP_MULTICAST_TTL, opt_ttl);
|
||||
}
|
||||
|
||||
+ if(using_dgram) {
|
||||
+ int hold = 65536;
|
||||
+ if (setsockopt(pingsock, SOL_IP, IP_RECVTTL, (char *)&hold, sizeof(hold)))
|
||||
+ perror("WARNING: setsockopt(IP_RECVTTL)");
|
||||
+ if (setsockopt(pingsock, SOL_IP, IP_RETOPTS, (char *)&hold, sizeof(hold)))
|
||||
+ perror("WARNING: setsockopt(IP_RETOPTS)");
|
||||
+
|
||||
+ }
|
||||
+
|
||||
signal(SIGINT, print_stats_and_exit);
|
||||
|
||||
/* start the ping's going ... */
|
||||
@@ -749,10 +797,33 @@ static void ping6(len_and_sockaddr *lsa)
|
||||
char control_buf[CMSG_SPACE(36)];
|
||||
|
||||
pingaddr.sin6 = lsa->u.sin6;
|
||||
- if (source_lsa)
|
||||
+ if (source_lsa && !using_dgram)
|
||||
xbind(pingsock, &source_lsa->u.sa, source_lsa->len);
|
||||
+ else if(using_dgram) {
|
||||
+ struct sockaddr_in6 sa = {0};
|
||||
+ socklen_t sl;
|
||||
+
|
||||
+ sa.sin6_family = AF_INET6;
|
||||
+ sa.sin6_port = 0;
|
||||
+ if(source_lsa) {
|
||||
+ memcpy(&sa.sin6_addr, &source_lsa->u.sin6.sin6_addr, sizeof(struct in6_addr));
|
||||
+ }
|
||||
+ sl = sizeof(sa);
|
||||
+
|
||||
+ if (bind(pingsock, (struct sockaddr *) &sa, sl) == -1) {
|
||||
+ perror("bind");
|
||||
+ exit(2);
|
||||
+ }
|
||||
+
|
||||
+ if (getsockname(pingsock, (struct sockaddr *) &sa, &sl) == -1) {
|
||||
+ perror("getsockname");
|
||||
+ exit(2);
|
||||
+ }
|
||||
+ myid = sa.sin6_port;
|
||||
+ }
|
||||
|
||||
#ifdef ICMP6_FILTER
|
||||
+ if(!using_dgram)
|
||||
{
|
||||
struct icmp6_filter filt;
|
||||
if (!(option_mask32 & OPT_VERBOSE)) {
|
||||
@@ -880,7 +951,7 @@ static int common_ping_main(int opt, char **argv)
|
||||
if (opt & OPT_p)
|
||||
G.pattern = xstrtou_range(str_p, 16, 0, 255);
|
||||
|
||||
- myid = (uint16_t) getpid();
|
||||
+ if (!using_dgram) myid = (uint16_t) getpid();
|
||||
hostname = argv[optind];
|
||||
#if ENABLE_PING6
|
||||
{
|
||||
--
|
||||
2.11.0
|
||||
|
187
busybox/0005-fbsplash-support-console-switching.patch
Normal file
187
busybox/0005-fbsplash-support-console-switching.patch
Normal file
|
@ -0,0 +1,187 @@
|
|||
From f5660f60455d2a86fd78d5a8949a31864233faf8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
||||
Date: Mon, 24 Sep 2012 07:58:29 +0300
|
||||
Subject: [PATCH 05/12] fbsplash: support console switching
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
|
||||
---
|
||||
miscutils/fbsplash.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 76 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
|
||||
index fc6c9b953..ec5947314 100644
|
||||
--- a/miscutils/fbsplash.c
|
||||
+++ b/miscutils/fbsplash.c
|
||||
@@ -47,7 +47,7 @@
|
||||
//kbuild:lib-$(CONFIG_FBSPLASH) += fbsplash.o
|
||||
|
||||
//usage:#define fbsplash_trivial_usage
|
||||
-//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
|
||||
+//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD] [-T tty]"
|
||||
//usage:#define fbsplash_full_usage "\n\n"
|
||||
//usage: " -s Image"
|
||||
//usage: "\n -c Hide cursor"
|
||||
@@ -57,11 +57,17 @@
|
||||
//usage: "\n BAR_R,BAR_G,BAR_B"
|
||||
//usage: "\n -f Control pipe (else exit after drawing image)"
|
||||
//usage: "\n commands: 'NN' (% for progress bar) or 'exit'"
|
||||
+//usage: "\n -T Switch to TTY to hide all console messages"
|
||||
|
||||
#include "libbb.h"
|
||||
#include "common_bufsiz.h"
|
||||
#include <linux/fb.h>
|
||||
|
||||
+#include <sys/vt.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+#include <linux/tiocl.h>
|
||||
+#include <linux/kd.h>
|
||||
+
|
||||
/* If you want logging messages on /tmp/fbsplash.log... */
|
||||
#define DEBUG 0
|
||||
|
||||
@@ -73,6 +79,8 @@ struct globals {
|
||||
unsigned char *addr; // pointer to framebuffer memory
|
||||
unsigned ns[7]; // n-parameters
|
||||
const char *image_filename;
|
||||
+ int silent_tty, fd_tty_s;
|
||||
+ bool do_not_draw;
|
||||
struct fb_var_screeninfo scr_var;
|
||||
struct fb_fix_screeninfo scr_fix;
|
||||
unsigned bytes_per_pixel;
|
||||
@@ -483,6 +491,11 @@ static void init(const char *cfg_filename)
|
||||
config_close(parser);
|
||||
}
|
||||
|
||||
+static void sighandler(int sig)
|
||||
+{
|
||||
+ ioctl(G.fd_tty_s, VT_RELDISP, sig == SIGUSR1 ? 1 : 2);
|
||||
+ G.do_not_draw = (sig != SIGUSR2);
|
||||
+}
|
||||
|
||||
int fbsplash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
@@ -492,6 +505,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
char *num_buf;
|
||||
unsigned num;
|
||||
bool bCursorOff;
|
||||
+ int fd_tty0, active_vt;
|
||||
+ struct vt_stat vtstat;
|
||||
+ struct vt_mode vt;
|
||||
|
||||
INIT_G();
|
||||
|
||||
@@ -499,8 +515,10 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
fb_device = "/dev/fb0";
|
||||
cfg_filename = NULL;
|
||||
fifo_filename = NULL;
|
||||
- bCursorOff = 1 & getopt32(argv, "cs:d:i:f:",
|
||||
- &G.image_filename, &fb_device, &cfg_filename, &fifo_filename);
|
||||
+ opt_complementary = "T+"; // numeric params
|
||||
+ bCursorOff = 1 & getopt32(argv, "cs:d:i:f:T:",
|
||||
+ &G.image_filename, &fb_device, &cfg_filename, &fifo_filename,
|
||||
+ &G.silent_tty);
|
||||
|
||||
// parse configuration file
|
||||
if (cfg_filename)
|
||||
@@ -510,11 +528,43 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
if (!G.image_filename)
|
||||
bb_show_usage();
|
||||
|
||||
+ fd_tty0 = get_console_fd_or_die();
|
||||
+ if (G.silent_tty) {
|
||||
+ char buf[16];
|
||||
+
|
||||
+ /* Initialize TTY */
|
||||
+ bb_signals((1LL << SIGUSR1) | (1LL << SIGUSR2), sighandler);
|
||||
+ snprintf(buf, sizeof(buf), "/dev/tty%d", G.silent_tty);
|
||||
+ G.fd_tty_s = xopen(buf, O_RDWR | O_NOCTTY);
|
||||
+
|
||||
+ /* Activate TTY */
|
||||
+ xioctl(fd_tty0, VT_GETSTATE, &vtstat);
|
||||
+ active_vt = vtstat.v_active;
|
||||
+ console_make_active(fd_tty0, G.silent_tty);
|
||||
+
|
||||
+ /* Get notifications on console changes */
|
||||
+ vt.mode = VT_PROCESS;
|
||||
+ vt.waitv = 0;
|
||||
+ vt.relsig = SIGUSR1;
|
||||
+ vt.acqsig = SIGUSR2;
|
||||
+ ioctl(G.fd_tty_s, VT_SETMODE, &vt);
|
||||
+
|
||||
+ /* Redirect all kernel messages to tty1 so that they don't get
|
||||
+ * printed over our silent splash image. And clear it. */
|
||||
+ buf[0] = TIOCL_SETKMSGREDIRECT;
|
||||
+ buf[1] = 1;
|
||||
+ ioctl(G.fd_tty_s, TIOCLINUX, buf);
|
||||
+ full_write(G.fd_tty_s, "\e[H\e[2J" "\e[?17;0c", 7+8);
|
||||
+ ioctl(G.fd_tty_s, KDSETMODE, KD_GRAPHICS);
|
||||
+ } else {
|
||||
+ G.fd_tty_s = STDOUT_FILENO;
|
||||
+ }
|
||||
+
|
||||
fb_open(fb_device);
|
||||
|
||||
if (fifo_filename && bCursorOff) {
|
||||
// hide cursor (BEFORE any fb ops)
|
||||
- full_write(STDOUT_FILENO, "\033[?25l", 6);
|
||||
+ full_write(G.fd_tty_s, "\033[?25l", 6);
|
||||
}
|
||||
|
||||
fb_drawimage();
|
||||
@@ -522,6 +572,7 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
if (!fifo_filename)
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
+ sig_block(SIGUSR1);
|
||||
fp = xfopen_stdin(fifo_filename);
|
||||
if (fp != stdin) {
|
||||
// For named pipes, we want to support this:
|
||||
@@ -537,8 +588,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
// and become an additional writer :)
|
||||
open(fifo_filename, O_WRONLY); // errors are ignored
|
||||
}
|
||||
-
|
||||
fb_drawprogressbar(0);
|
||||
+ sig_unblock(SIGUSR1);
|
||||
+
|
||||
// Block on read, waiting for some input.
|
||||
// Use of <stdio.h> style I/O allows to correctly
|
||||
// handle a case when we have many buffered lines
|
||||
@@ -553,12 +605,29 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
|
||||
#if DEBUG
|
||||
DEBUG_MESSAGE(itoa(num));
|
||||
#endif
|
||||
- fb_drawprogressbar(num);
|
||||
+ sig_block(SIGUSR1);
|
||||
+ if (!G.do_not_draw)
|
||||
+ fb_drawprogressbar(num);
|
||||
+ sig_unblock(SIGUSR1);
|
||||
}
|
||||
free(num_buf);
|
||||
}
|
||||
|
||||
- if (bCursorOff) // restore cursor
|
||||
+ if (G.silent_tty) {
|
||||
+ usleep(100*1000);
|
||||
+
|
||||
+ ioctl(G.fd_tty_s, VT_RELDISP, 1);
|
||||
+ ioctl(G.fd_tty_s, KDSETMODE, KD_TEXT);
|
||||
+ vt.mode = VT_AUTO;
|
||||
+ vt.waitv = 0;
|
||||
+ ioctl(G.fd_tty_s, VT_SETMODE, &vt);
|
||||
+ close(G.fd_tty_s);
|
||||
+
|
||||
+ xioctl(fd_tty0, VT_GETSTATE, &vtstat);
|
||||
+ if (vtstat.v_active == G.silent_tty)
|
||||
+ console_make_active(fd_tty0, active_vt);
|
||||
+ ioctl(fd_tty0, VT_DISALLOCATE, (void *)(ptrdiff_t)G.silent_tty);
|
||||
+ } else if (bCursorOff) // restore cursor
|
||||
full_write(STDOUT_FILENO, "\033[?25h", 6);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
From 1dab8b58ff051d529fd3fd74caf6016e51b10ae3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
||||
Date: Fri, 21 Nov 2014 16:06:34 +0200
|
||||
Subject: [PATCH 06/12] fbsplash: support image and bar alignment and
|
||||
positioning
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
|
||||
---
|
||||
miscutils/fbsplash.c | 91 +++++++++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 76 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
|
||||
index ec5947314..34bbf81f5 100644
|
||||
--- a/miscutils/fbsplash.c
|
||||
+++ b/miscutils/fbsplash.c
|
||||
@@ -53,6 +53,7 @@
|
||||
//usage: "\n -c Hide cursor"
|
||||
//usage: "\n -d Framebuffer device (default /dev/fb0)"
|
||||
//usage: "\n -i Config file (var=value):"
|
||||
+//usage: "\n IMAGE_ALIGN"
|
||||
//usage: "\n BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT"
|
||||
//usage: "\n BAR_R,BAR_G,BAR_B"
|
||||
//usage: "\n -f Control pipe (else exit after drawing image)"
|
||||
@@ -71,13 +72,38 @@
|
||||
/* If you want logging messages on /tmp/fbsplash.log... */
|
||||
#define DEBUG 0
|
||||
|
||||
+enum {
|
||||
+ image_align,
|
||||
+
|
||||
+ image_posx,
|
||||
+ image_posy,
|
||||
+ bar_width,
|
||||
+ bar_height,
|
||||
+ bar_posx,
|
||||
+ bar_posy,
|
||||
+ bar_colr,
|
||||
+ bar_colg,
|
||||
+ bar_colb,
|
||||
+
|
||||
+ debug
|
||||
+};
|
||||
+
|
||||
+#define nimage_align ns[image_align]
|
||||
+#define nbar_width ns[bar_width]
|
||||
+#define nbar_height ns[bar_height]
|
||||
+#define nbar_posx ns[bar_posx]
|
||||
+#define nbar_posy ns[bar_posy]
|
||||
+#define nbar_colr ns[bar_colr]
|
||||
+#define nbar_colg ns[bar_colg]
|
||||
+#define nbar_colb ns[bar_colb]
|
||||
+
|
||||
struct globals {
|
||||
#if DEBUG
|
||||
bool bdebug_messages; // enable/disable logging
|
||||
FILE *logfile_fd; // log file
|
||||
#endif
|
||||
unsigned char *addr; // pointer to framebuffer memory
|
||||
- unsigned ns[7]; // n-parameters
|
||||
+ unsigned ns[debug+1]; // n-parameters
|
||||
const char *image_filename;
|
||||
int silent_tty, fd_tty_s;
|
||||
bool do_not_draw;
|
||||
@@ -94,14 +120,6 @@ struct globals {
|
||||
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
|
||||
} while (0)
|
||||
|
||||
-#define nbar_width ns[0] // progress bar width
|
||||
-#define nbar_height ns[1] // progress bar height
|
||||
-#define nbar_posx ns[2] // progress bar horizontal position
|
||||
-#define nbar_posy ns[3] // progress bar vertical position
|
||||
-#define nbar_colr ns[4] // progress bar color red component
|
||||
-#define nbar_colg ns[5] // progress bar color green component
|
||||
-#define nbar_colb ns[6] // progress bar color blue component
|
||||
-
|
||||
#if DEBUG
|
||||
#define DEBUG_MESSAGE(strMessage, args...) \
|
||||
if (G.bdebug_messages) { \
|
||||
@@ -382,7 +400,7 @@ static void fb_drawimage(void)
|
||||
FILE *theme_file;
|
||||
char *read_ptr;
|
||||
unsigned char *pixline;
|
||||
- unsigned i, j, width, height, line_size;
|
||||
+ int i, j, width, height, line_size, xoffs, yoffs, xstart;
|
||||
|
||||
if (LONE_DASH(G.image_filename)) {
|
||||
theme_file = stdin;
|
||||
@@ -432,18 +450,46 @@ static void fb_drawimage(void)
|
||||
line_size = width*3;
|
||||
pixline = xmalloc(line_size);
|
||||
|
||||
+#if 0
|
||||
if (width > G.scr_var.xres)
|
||||
width = G.scr_var.xres;
|
||||
if (height > G.scr_var.yres)
|
||||
height = G.scr_var.yres;
|
||||
- for (j = 0; j < height; j++) {
|
||||
+#endif
|
||||
+
|
||||
+ xoffs = yoffs = 0;
|
||||
+ switch (G.nimage_align % 3) {
|
||||
+ case 1: xoffs = (G.scr_var.xres - width) / 2; break;
|
||||
+ case 2: xoffs = G.scr_var.xres - width; break;
|
||||
+ }
|
||||
+ xstart = 0;
|
||||
+ if (xoffs < 0) {
|
||||
+ xstart = -xoffs;
|
||||
+ width -= xstart;
|
||||
+ xoffs = 0;
|
||||
+ }
|
||||
+ xoffs *= G.bytes_per_pixel;
|
||||
+ if (width > G.scr_var.xres)
|
||||
+ width = G.scr_var.xres;
|
||||
+
|
||||
+ switch (G.nimage_align / 3) {
|
||||
+ case 1: yoffs = (G.scr_var.yres - height) / 2; break;
|
||||
+ case 2: yoffs = G.scr_var.yres - height; break;
|
||||
+ }
|
||||
+
|
||||
+ for (j = 0; j < height && yoffs < G.scr_var.yres; j++, yoffs++) {
|
||||
unsigned char *pixel;
|
||||
unsigned char *src;
|
||||
|
||||
if (fread(pixline, 1, line_size, theme_file) != line_size)
|
||||
bb_error_msg_and_die("bad PPM file '%s'", G.image_filename);
|
||||
+
|
||||
+ if (yoffs < 0)
|
||||
+ continue;
|
||||
+
|
||||
pixel = pixline;
|
||||
- src = G.addr + j * G.scr_fix.line_length;
|
||||
+ src = G.addr + yoffs * G.scr_fix.line_length + xoffs;
|
||||
+
|
||||
for (i = 0; i < width; i++) {
|
||||
unsigned thispix = fb_pixel_value(pixel[0], pixel[1], pixel[2]);
|
||||
fb_write_pixel(src, thispix);
|
||||
@@ -462,9 +508,17 @@ static void fb_drawimage(void)
|
||||
*/
|
||||
static void init(const char *cfg_filename)
|
||||
{
|
||||
+ static const char align_names[] ALIGN1 =
|
||||
+ "LT\0" "CT\0" "RT\0"
|
||||
+ "LM\0" "CM\0" "RM\0"
|
||||
+ "LB\0" "CB\0" "RB\0";
|
||||
static const char param_names[] ALIGN1 =
|
||||
+ "IMAGE_ALIGN\0"
|
||||
+
|
||||
+ "IMAGE_X\0" "IMAGE_Y\0"
|
||||
"BAR_WIDTH\0" "BAR_HEIGHT\0"
|
||||
"BAR_LEFT\0" "BAR_TOP\0"
|
||||
+
|
||||
"BAR_R\0" "BAR_G\0" "BAR_B\0"
|
||||
#if DEBUG
|
||||
"DEBUG\0"
|
||||
@@ -474,14 +528,21 @@ static void init(const char *cfg_filename)
|
||||
parser_t *parser = config_open2(cfg_filename, xfopen_stdin);
|
||||
while (config_read(parser, token, 2, 2, "#=",
|
||||
(PARSE_NORMAL | PARSE_MIN_DIE) & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
|
||||
- unsigned val = xatoi_positive(token[1]);
|
||||
+ unsigned val;
|
||||
int i = index_in_strings(param_names, token[0]);
|
||||
+
|
||||
if (i < 0)
|
||||
bb_error_msg_and_die("syntax error: %s", token[0]);
|
||||
- if (i >= 0 && i < 7)
|
||||
+
|
||||
+ if (i <= image_align)
|
||||
+ val = index_in_strings(align_names, token[1]);
|
||||
+ else
|
||||
+ val = xatoi_positive(token[1]);
|
||||
+
|
||||
+ if (i < debug)
|
||||
G.ns[i] = val;
|
||||
#if DEBUG
|
||||
- if (i == 7) {
|
||||
+ if (i == debug) {
|
||||
G.bdebug_messages = val;
|
||||
if (G.bdebug_messages)
|
||||
G.logfile_fd = xfopen_for_write("/tmp/fbsplash.log");
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,511 @@
|
|||
From 0445b9734e02856a66cc7925a6816f26fedc822d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
||||
Date: Sun, 25 Oct 2015 22:21:41 +0200
|
||||
Subject: [PATCH 07/12] depmod: support generating kmod binary index files
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This allows to use busybox depmod, and run daemons
|
||||
using libkmod (or even kmod modprobe if needed).
|
||||
|
||||
About +1500 bytes when enabled. This patch merges some
|
||||
depmod code paths, so when this is disabled it shrinks
|
||||
the code size a little bit.
|
||||
|
||||
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
|
||||
---
|
||||
modutils/Config.src | 10 ++
|
||||
modutils/depmod.c | 281 ++++++++++++++++++++++++++++++++++++++++++----------
|
||||
modutils/modprobe.c | 15 ---
|
||||
modutils/modutils.c | 27 ++++-
|
||||
modutils/modutils.h | 15 +++
|
||||
5 files changed, 281 insertions(+), 67 deletions(-)
|
||||
|
||||
diff --git a/modutils/Config.src b/modutils/Config.src
|
||||
index 4227f356a..6680044fc 100644
|
||||
--- a/modutils/Config.src
|
||||
+++ b/modutils/Config.src
|
||||
@@ -118,6 +118,16 @@ config FEATURE_MODUTILS_ALIAS
|
||||
|
||||
Say Y if unsure.
|
||||
|
||||
+config FEATURE_MODUTILS_BIN
|
||||
+ bool "Support for the kmod .bin file format"
|
||||
+ default n
|
||||
+ depends on DEPMOD && !MODPROBE_SMALL
|
||||
+ select PLATFORM_LINUX
|
||||
+ help
|
||||
+ Generate kmod compatible binary index files for .dep, .alias,
|
||||
+ .symbols and .builtin files. Allows mixing use of busybox
|
||||
+ modutils and kmod (binaries and library).
|
||||
+
|
||||
config FEATURE_MODUTILS_SYMBOLS
|
||||
bool "Support for module.symbols file"
|
||||
default y
|
||||
diff --git a/modutils/depmod.c b/modutils/depmod.c
|
||||
index b9347027e..e3cea18c1 100644
|
||||
--- a/modutils/depmod.c
|
||||
+++ b/modutils/depmod.c
|
||||
@@ -2,7 +2,7 @@
|
||||
/*
|
||||
* depmod - generate modules.dep
|
||||
* Copyright (c) 2008 Bernhard Reutner-Fischer
|
||||
- * Copyrihgt (c) 2008 Timo Teras <timo.teras@iki.fi>
|
||||
+ * Copyrihgt (c) 2008-2015 Timo Teras <timo.teras@iki.fi>
|
||||
* Copyright (c) 2008 Vladimir Dronnikov
|
||||
*
|
||||
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
|
||||
@@ -25,6 +25,24 @@
|
||||
#include "modutils.h"
|
||||
#include <sys/utsname.h> /* uname() */
|
||||
|
||||
+#define INDEX_MINCHAR 32
|
||||
+#define INDEX_MAXCHAR 128
|
||||
+
|
||||
+typedef struct index_node {
|
||||
+ char *prefix;
|
||||
+ llist_t *values;
|
||||
+ struct index_node *children[INDEX_MAXCHAR-INDEX_MINCHAR];
|
||||
+} index_node;
|
||||
+
|
||||
+struct globals {
|
||||
+ module_db db;
|
||||
+ index_node *root_node;
|
||||
+} FIX_ALIASING;
|
||||
+#define G (*ptr_to_globals)
|
||||
+#define INIT_G() do { \
|
||||
+ SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
|
||||
+} while (0)
|
||||
+
|
||||
/*
|
||||
* Theory of operation:
|
||||
* - iterate over all modules and record their full path
|
||||
@@ -52,18 +70,12 @@ static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARA
|
||||
|
||||
for (ptr = image; ptr < image + len - 10; ptr++) {
|
||||
if (is_prefixed_with(ptr, "depends=")) {
|
||||
- char *u;
|
||||
-
|
||||
ptr += 8;
|
||||
- for (u = ptr; *u; u++)
|
||||
- if (*u == '-')
|
||||
- *u = '_';
|
||||
- ptr += string_to_llist(ptr, &e->deps, ",");
|
||||
+ string_to_llist(replace_underscores(ptr), &e->deps, ",");
|
||||
} else if (ENABLE_FEATURE_MODUTILS_ALIAS
|
||||
&& is_prefixed_with(ptr, "alias=")
|
||||
) {
|
||||
- llist_add_to(&e->aliases, xstrdup(ptr + 6));
|
||||
- ptr += strlen(ptr);
|
||||
+ llist_add_to(&e->aliases, replace_underscores(xstrdup(ptr + 6)));
|
||||
} else if (ENABLE_FEATURE_MODUTILS_SYMBOLS
|
||||
&& is_prefixed_with(ptr, "__ksymtab_")
|
||||
) {
|
||||
@@ -73,9 +85,10 @@ static int FAST_FUNC parse_module(const char *fname, struct stat *sb UNUSED_PARA
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
- llist_add_to(&e->symbols, xstrdup(ptr));
|
||||
- ptr += strlen(ptr);
|
||||
- }
|
||||
+ llist_add_to(&e->symbols, xasprintf("symbol:%s", ptr));
|
||||
+ } else
|
||||
+ continue;
|
||||
+ ptr += strlen(ptr);
|
||||
}
|
||||
free(image);
|
||||
|
||||
@@ -107,12 +120,6 @@ static void order_dep_list(module_db *modules, module_entry *start, llist_t *add
|
||||
}
|
||||
}
|
||||
|
||||
-static void xfreopen_write(const char *file, FILE *f)
|
||||
-{
|
||||
- if (freopen(file, "w", f) == NULL)
|
||||
- bb_perror_msg_and_die("can't open '%s'", file);
|
||||
-}
|
||||
-
|
||||
//usage:#if !ENABLE_MODPROBE_SMALL
|
||||
//usage:#define depmod_trivial_usage "[-n] [-b BASE] [VERSION] [MODFILES]..."
|
||||
//usage:#define depmod_full_usage "\n\n"
|
||||
@@ -166,6 +173,169 @@ enum {
|
||||
OPT_C = (1 << 9), /* -C,--config etc_modules_conf: ignored */
|
||||
};
|
||||
|
||||
+/* Support for the mod binary index generation */
|
||||
+
|
||||
+static void index_init(const char *filename)
|
||||
+{
|
||||
+ if (ENABLE_FEATURE_MODUTILS_BIN) {
|
||||
+ index_node *n;
|
||||
+
|
||||
+ n = xzalloc(sizeof(index_node));
|
||||
+ n->prefix = xstrdup("");
|
||||
+ G.root_node = n;
|
||||
+ }
|
||||
+
|
||||
+ if (filename && !(option_mask32 & OPT_n)) {
|
||||
+ if (freopen(filename, "w", stdout) == NULL)
|
||||
+ bb_perror_msg_and_die("can't open '%s'", filename);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void index_add(const char *key, char *value, const char *prefix)
|
||||
+{
|
||||
+ if (prefix && *prefix)
|
||||
+ printf("%s%s %s\n", prefix, key, value);
|
||||
+ else if (prefix)
|
||||
+ printf("%s\n", value);
|
||||
+
|
||||
+ if (ENABLE_FEATURE_MODUTILS_BIN) {
|
||||
+ index_node *cur = G.root_node, *n;
|
||||
+ unsigned i = 0, j, ch;
|
||||
+
|
||||
+ while (1) {
|
||||
+ /* Ensure node->prefix is a prefix of &str[i].
|
||||
+ * If it is not already, then we must split node. */
|
||||
+ for (j = 0; cur->prefix[j]; j++) {
|
||||
+ ch = cur->prefix[j];
|
||||
+ if (ch != key[i+j]) {
|
||||
+ /* New child is copy of node with prefix[j+1..N] */
|
||||
+ n = xzalloc(sizeof(index_node));
|
||||
+ n->prefix = xstrdup(&cur->prefix[j+1]);
|
||||
+ n->values = cur->values;
|
||||
+ memcpy(n->children, cur->children, sizeof(n->children));
|
||||
+
|
||||
+ /* Parent has prefix[0..j], child at prefix[j] */
|
||||
+ cur->prefix[j] = '\0';
|
||||
+ cur->values = NULL;
|
||||
+ memset(cur->children, 0, sizeof(cur->children));
|
||||
+ cur->children[ch-INDEX_MINCHAR] = n;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ i += j;
|
||||
+
|
||||
+ ch = key[i];
|
||||
+ if (ch == 0)
|
||||
+ break;
|
||||
+
|
||||
+ if (ch < INDEX_MINCHAR || ch >= INDEX_MAXCHAR)
|
||||
+ bb_error_msg_and_die("bad module name");
|
||||
+
|
||||
+ ch -= INDEX_MINCHAR;
|
||||
+ if (!cur->children[ch]) {
|
||||
+ n = xzalloc(sizeof(index_node));
|
||||
+ cur->children[ch] = n;
|
||||
+ n->prefix = xstrdup(&key[i+1]);
|
||||
+ cur = n;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* Descend into child node and continue */
|
||||
+ cur = cur->children[ch];
|
||||
+ i++;
|
||||
+ }
|
||||
+
|
||||
+ llist_add_to(&cur->values, value);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static uint32_t index_write_node(FILE *out, index_node *n, void (*freeit)(void *data))
|
||||
+{
|
||||
+ uint32_t child_offs[INDEX_MAXCHAR-INDEX_MINCHAR];
|
||||
+ uint32_t offset;
|
||||
+ uint8_t first = 255, last = 0;
|
||||
+ unsigned i;
|
||||
+
|
||||
+ for (i = 0; i < INDEX_MAXCHAR-INDEX_MINCHAR; i++) {
|
||||
+ child_offs[i] = 0;
|
||||
+ if (!n->children[i])
|
||||
+ continue;
|
||||
+ child_offs[i] = index_write_node(out, n->children[i], freeit);
|
||||
+ if (first > INDEX_MAXCHAR)
|
||||
+ first = i;
|
||||
+ last = i;
|
||||
+ }
|
||||
+
|
||||
+ offset = ftell(out);
|
||||
+
|
||||
+ if (n->prefix[0]) {
|
||||
+ fputs(n->prefix, out);
|
||||
+ fputc('\0', out);
|
||||
+ offset |= INDEX_NODE_PREFIX;
|
||||
+ }
|
||||
+
|
||||
+ if (first < INDEX_MAXCHAR) {
|
||||
+ fputc(first + INDEX_MINCHAR, out);
|
||||
+ fputc(last + INDEX_MINCHAR, out);
|
||||
+ fwrite(child_offs + first, sizeof(uint32_t), last - first + 1, out);
|
||||
+ offset |= INDEX_NODE_CHILDS;
|
||||
+ }
|
||||
+
|
||||
+ if (n->values) {
|
||||
+ const llist_t *v;
|
||||
+ unsigned int cnt;
|
||||
+ uint32_t u;
|
||||
+
|
||||
+ n->values = llist_rev(n->values);
|
||||
+ for (v = n->values, cnt = 0; v != NULL; v = v->link, cnt++);
|
||||
+ u = htonl(cnt);
|
||||
+ fwrite(&u, sizeof(u), 1, out);
|
||||
+ for (v = n->values, cnt = 0; v != NULL; v = v->link, cnt++) {
|
||||
+ u = htonl(cnt);
|
||||
+ fwrite(&u, sizeof(u), 1, out);
|
||||
+ fputs(v->data, out);
|
||||
+ fputc('\0', out);
|
||||
+ }
|
||||
+ offset |= INDEX_NODE_VALUES;
|
||||
+ }
|
||||
+
|
||||
+ llist_free(n->values, freeit);
|
||||
+ free(n->prefix);
|
||||
+ free(n);
|
||||
+
|
||||
+ return htonl(offset);
|
||||
+}
|
||||
+
|
||||
+static void index_dump(const char *filename, int deps_file)
|
||||
+{
|
||||
+ if (ENABLE_FEATURE_MODUTILS_BIN) {
|
||||
+ FILE *out;
|
||||
+ uint32_t header[3] = {
|
||||
+ htonl(INDEX_MAGIC),
|
||||
+ htonl(INDEX_VERSION),
|
||||
+ };
|
||||
+
|
||||
+ if (option_mask32 & OPT_n)
|
||||
+ filename = "/dev/null";
|
||||
+ else
|
||||
+ filename = xasprintf("tmp.%s.bin", filename);
|
||||
+
|
||||
+ out = xfopen_for_write(filename);
|
||||
+ fwrite(header, sizeof(uint32_t), 3, out);
|
||||
+ header[2] = index_write_node(out, G.root_node, deps_file ? free : 0);
|
||||
+ rewind(out);
|
||||
+ G.root_node = NULL;
|
||||
+ fwrite(header, sizeof(uint32_t), 3, out);
|
||||
+ if (fclose(out)) {
|
||||
+ remove(filename);
|
||||
+ bb_error_msg_and_die(bb_msg_write_error);
|
||||
+ }
|
||||
+ /* .bin files are mmap'ed; not renaming it may crash
|
||||
+ * long standing daemon using libkmod */
|
||||
+ rename_or_warn(filename, filename + 4);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int depmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int depmod_main(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
@@ -177,6 +347,8 @@ int depmod_main(int argc UNUSED_PARAM, char **argv)
|
||||
unsigned i;
|
||||
int tmp;
|
||||
|
||||
+ INIT_G();
|
||||
+
|
||||
getopt32(argv, "aAb:eF:nruqC:", &moddir_base, NULL, NULL);
|
||||
argv += optind;
|
||||
|
||||
@@ -209,53 +381,60 @@ int depmod_main(int argc UNUSED_PARAM, char **argv)
|
||||
}
|
||||
|
||||
/* Generate dependency and alias files */
|
||||
- if (!(option_mask32 & OPT_n))
|
||||
- xfreopen_write(CONFIG_DEFAULT_DEPMOD_FILE, stdout);
|
||||
-
|
||||
+ index_init(CONFIG_DEFAULT_DEPMOD_FILE);
|
||||
moddb_foreach_module(&modules, m, i) {
|
||||
- printf("%s:", m->name);
|
||||
-
|
||||
+ char *buf = xasprintf("%s:", m->name);
|
||||
order_dep_list(&modules, m, m->deps);
|
||||
+
|
||||
while (m->dnext != m) {
|
||||
dep = m->dnext;
|
||||
- printf(" %s", dep->name);
|
||||
-
|
||||
+ buf = gather_options_str(buf, dep->name);
|
||||
/* unlink current entry */
|
||||
dep->dnext->dprev = dep->dprev;
|
||||
dep->dprev->dnext = dep->dnext;
|
||||
dep->dnext = dep->dprev = dep;
|
||||
}
|
||||
- bb_putchar('\n');
|
||||
+ index_add(m->modname, buf, "");
|
||||
}
|
||||
-
|
||||
-#if ENABLE_FEATURE_MODUTILS_ALIAS
|
||||
- if (!(option_mask32 & OPT_n))
|
||||
- xfreopen_write("modules.alias", stdout);
|
||||
- moddb_foreach_module(&modules, m, i) {
|
||||
- while (m->aliases) {
|
||||
- /*
|
||||
- * Last word used to be a basename
|
||||
- * (filename with path and .ko.* stripped)
|
||||
- * at the time of module-init-tools 3.4.
|
||||
- * kmod v.12 uses module name, i.e., s/-/_/g.
|
||||
- */
|
||||
- printf("alias %s %s\n",
|
||||
- (char*)llist_pop(&m->aliases),
|
||||
- m->modname);
|
||||
+ index_dump(CONFIG_DEFAULT_DEPMOD_FILE, 1);
|
||||
+
|
||||
+ if (ENABLE_FEATURE_MODUTILS_ALIAS) {
|
||||
+ index_init("modules.alias");
|
||||
+ moddb_foreach_module(&modules, m, i) {
|
||||
+ while (m->aliases) {
|
||||
+ /*
|
||||
+ * Last word used to be a basename
|
||||
+ * (filename with path and .ko.* stripped)
|
||||
+ * at the time of module-init-tools 3.4.
|
||||
+ * kmod v.12 uses module name, i.e., s/-/_/g.
|
||||
+ */
|
||||
+ index_add((char*)llist_pop(&m->aliases), m->modname, "alias ");
|
||||
+ }
|
||||
}
|
||||
+ index_dump("modules.alias", 0);
|
||||
}
|
||||
-#endif
|
||||
-#if ENABLE_FEATURE_MODUTILS_SYMBOLS
|
||||
- if (!(option_mask32 & OPT_n))
|
||||
- xfreopen_write("modules.symbols", stdout);
|
||||
- moddb_foreach_module(&modules, m, i) {
|
||||
- while (m->symbols) {
|
||||
- printf("alias symbol:%s %s\n",
|
||||
- (char*)llist_pop(&m->symbols),
|
||||
- m->modname);
|
||||
+ if (ENABLE_FEATURE_MODUTILS_SYMBOLS) {
|
||||
+ index_init("modules.symbols");
|
||||
+ moddb_foreach_module(&modules, m, i) {
|
||||
+ while (m->symbols) {
|
||||
+ index_add((char*)llist_pop(&m->symbols), m->modname, "alias ");
|
||||
+ }
|
||||
+ }
|
||||
+ index_dump("modules.symbols", 0);
|
||||
+ }
|
||||
+ if (ENABLE_FEATURE_MODUTILS_BIN) {
|
||||
+ char line[PATH_MAX], modname[MODULE_NAME_LEN];
|
||||
+ FILE *in;
|
||||
+
|
||||
+ index_init(NULL);
|
||||
+ in = xfopen_for_read("modules.builtin");
|
||||
+ while (fgets(line, sizeof(line), in) != NULL) {
|
||||
+ filename2modname(line, modname);
|
||||
+ index_add(modname, (char *) "", 0);
|
||||
}
|
||||
+ fclose(in);
|
||||
+ index_dump("modules.builtin", 0);
|
||||
}
|
||||
-#endif
|
||||
|
||||
if (ENABLE_FEATURE_CLEAN_UP)
|
||||
moddb_free(&modules);
|
||||
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
|
||||
index d404ef92f..72f449978 100644
|
||||
--- a/modutils/modprobe.c
|
||||
+++ b/modutils/modprobe.c
|
||||
@@ -189,21 +189,6 @@ struct globals {
|
||||
|
||||
static int read_config(const char *path);
|
||||
|
||||
-static char *gather_options_str(char *opts, const char *append)
|
||||
-{
|
||||
- /* Speed-optimized. We call gather_options_str many times. */
|
||||
- if (append) {
|
||||
- if (opts == NULL) {
|
||||
- opts = xstrdup(append);
|
||||
- } else {
|
||||
- int optlen = strlen(opts);
|
||||
- opts = xrealloc(opts, optlen + strlen(append) + 2);
|
||||
- sprintf(opts + optlen, " %s", append);
|
||||
- }
|
||||
- }
|
||||
- return opts;
|
||||
-}
|
||||
-
|
||||
static struct module_entry *get_or_add_modentry(const char *module)
|
||||
{
|
||||
return moddb_get_or_create(&G.db, module);
|
||||
diff --git a/modutils/modutils.c b/modutils/modutils.c
|
||||
index d36caaf68..aecfc2acb 100644
|
||||
--- a/modutils/modutils.c
|
||||
+++ b/modutils/modutils.c
|
||||
@@ -70,6 +70,21 @@ void FAST_FUNC moddb_free(module_db *db)
|
||||
}
|
||||
}
|
||||
|
||||
+char * FAST_FUNC gather_options_str(char *opts, const char *append)
|
||||
+{
|
||||
+ /* Speed-optimized. We call gather_options_str many times. */
|
||||
+ if (append) {
|
||||
+ if (opts == NULL) {
|
||||
+ opts = xstrdup(append);
|
||||
+ } else {
|
||||
+ int optlen = strlen(opts);
|
||||
+ opts = xrealloc(opts, optlen + strlen(append) + 2);
|
||||
+ sprintf(opts + optlen, " %s", append);
|
||||
+ }
|
||||
+ }
|
||||
+ return opts;
|
||||
+}
|
||||
+
|
||||
void FAST_FUNC replace(char *s, char what, char with)
|
||||
{
|
||||
while (*s) {
|
||||
@@ -81,7 +96,17 @@ void FAST_FUNC replace(char *s, char what, char with)
|
||||
|
||||
char* FAST_FUNC replace_underscores(char *s)
|
||||
{
|
||||
- replace(s, '-', '_');
|
||||
+ int i;
|
||||
+ for (i = 0; s[i]; i++) {
|
||||
+ switch (s[i]) {
|
||||
+ case '-':
|
||||
+ s[i] = '_';
|
||||
+ break;
|
||||
+ case '[':
|
||||
+ i += strcspn(&s[i], "]");
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
return s;
|
||||
}
|
||||
|
||||
diff --git a/modutils/modutils.h b/modutils/modutils.h
|
||||
index 2cbd1448a..dd6f173f3 100644
|
||||
--- a/modutils/modutils.h
|
||||
+++ b/modutils/modutils.h
|
||||
@@ -18,6 +18,20 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
|
||||
#define MODULE_NAME_LEN 256
|
||||
#define MODULE_HASH_SIZE 256
|
||||
|
||||
+/* .bin index format definitions */
|
||||
+#define INDEX_MAGIC 0xB007F457
|
||||
+#define INDEX_VERSION_MAJOR 0x0002
|
||||
+#define INDEX_VERSION_MINOR 0x0001
|
||||
+#define INDEX_VERSION ((INDEX_VERSION_MAJOR<<16)|INDEX_VERSION_MINOR)
|
||||
+
|
||||
+enum node_offset {
|
||||
+ INDEX_NODE_FLAGS = 0xF0000000, /* Flags in high nibble */
|
||||
+ INDEX_NODE_PREFIX = 0x80000000,
|
||||
+ INDEX_NODE_VALUES = 0x40000000,
|
||||
+ INDEX_NODE_CHILDS = 0x20000000,
|
||||
+ INDEX_NODE_MASK = 0x0FFFFFFF, /* Offset value */
|
||||
+};
|
||||
+
|
||||
typedef struct module_entry {
|
||||
struct module_entry *next;
|
||||
char *name, *modname;
|
||||
@@ -47,6 +61,7 @@ module_entry *moddb_get(module_db *db, const char *s) FAST_FUNC;
|
||||
module_entry *moddb_get_or_create(module_db *db, const char *s) FAST_FUNC;
|
||||
void moddb_free(module_db *db) FAST_FUNC;
|
||||
|
||||
+char *gather_options_str(char *opts, const char *append) FAST_FUNC;
|
||||
void replace(char *s, char what, char with) FAST_FUNC;
|
||||
char *replace_underscores(char *s) FAST_FUNC;
|
||||
int string_to_llist(char *string, llist_t **llist, const char *delim) FAST_FUNC;
|
||||
--
|
||||
2.11.0
|
||||
|
103
busybox/0008-login-move-check_securetty-to-libbb.patch
Normal file
103
busybox/0008-login-move-check_securetty-to-libbb.patch
Normal file
|
@ -0,0 +1,103 @@
|
|||
From 49cc996bd0c049c37e98506409c2e3ec30790bf0 Mon Sep 17 00:00:00 2001
|
||||
From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
|
||||
Date: Thu, 5 Nov 2015 16:27:34 +0200
|
||||
Subject: [PATCH 08/12] login: move check_securetty to libbb
|
||||
|
||||
---
|
||||
include/libbb.h | 1 +
|
||||
libbb/Kbuild.src | 1 +
|
||||
libbb/securetty.c | 27 +++++++++++++++++++++++++++
|
||||
loginutils/login.c | 19 -------------------
|
||||
4 files changed, 29 insertions(+), 19 deletions(-)
|
||||
create mode 100644 libbb/securetty.c
|
||||
|
||||
diff --git a/include/libbb.h b/include/libbb.h
|
||||
index abdc8c2b8..38d6d0b1e 100644
|
||||
--- a/include/libbb.h
|
||||
+++ b/include/libbb.h
|
||||
@@ -1390,6 +1390,7 @@ extern void selinux_or_die(void) FAST_FUNC;
|
||||
#define SETUP_ENV_NO_CHDIR (1 << 4)
|
||||
void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC;
|
||||
void nuke_str(char *str) FAST_FUNC;
|
||||
+int check_securetty(const char *short_tty);
|
||||
int check_password(const struct passwd *pw, const char *plaintext) FAST_FUNC;
|
||||
int ask_and_check_password_extended(const struct passwd *pw, int timeout, const char *prompt) FAST_FUNC;
|
||||
int ask_and_check_password(const struct passwd *pw) FAST_FUNC;
|
||||
diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src
|
||||
index e426f3c7e..84f3ff477 100644
|
||||
--- a/libbb/Kbuild.src
|
||||
+++ b/libbb/Kbuild.src
|
||||
@@ -83,6 +83,7 @@ lib-y += safe_gethostname.o
|
||||
lib-y += safe_poll.o
|
||||
lib-y += safe_strncpy.o
|
||||
lib-y += safe_write.o
|
||||
+lib-y += securetty.o
|
||||
lib-y += setup_environment.o
|
||||
lib-y += signals.o
|
||||
lib-y += simplify_path.o
|
||||
diff --git a/libbb/securetty.c b/libbb/securetty.c
|
||||
new file mode 100644
|
||||
index 000000000..95edbc944
|
||||
--- /dev/null
|
||||
+++ b/libbb/securetty.c
|
||||
@@ -0,0 +1,27 @@
|
||||
+/* vi: set sw=4 ts=4: */
|
||||
+/*
|
||||
+ * /etc/securetty checking.
|
||||
+ *
|
||||
+ * Licensed under GPLv2, see file LICENSE in this source tree.
|
||||
+ */
|
||||
+
|
||||
+#include "libbb.h"
|
||||
+
|
||||
+#if ENABLE_FEATURE_SECURETTY && !ENABLE_PAM
|
||||
+int check_securetty(const char *short_tty)
|
||||
+{
|
||||
+ char *buf = (char*)"/etc/securetty"; /* any non-NULL is ok */
|
||||
+ parser_t *parser = config_open2("/etc/securetty", fopen_for_read);
|
||||
+ while (config_read(parser, &buf, 1, 1, "# \t", PARSE_NORMAL)) {
|
||||
+ if (strcmp(buf, short_tty) == 0)
|
||||
+ break;
|
||||
+ buf = NULL;
|
||||
+ }
|
||||
+ config_close(parser);
|
||||
+ /* buf != NULL here if config file was not found, empty
|
||||
+ * or line was found which equals short_tty */
|
||||
+ return buf != NULL;
|
||||
+}
|
||||
+#else
|
||||
+ALWAYS_INLINE int check_securetty(const char *short_tty UNUSED_PARAM) { return 1; }
|
||||
+#endif
|
||||
diff --git a/loginutils/login.c b/loginutils/login.c
|
||||
index 52abc1886..30aa63aee 100644
|
||||
--- a/loginutils/login.c
|
||||
+++ b/loginutils/login.c
|
||||
@@ -173,25 +173,6 @@ static void die_if_nologin(void)
|
||||
# define die_if_nologin() ((void)0)
|
||||
#endif
|
||||
|
||||
-#if ENABLE_FEATURE_SECURETTY && !ENABLE_PAM
|
||||
-static int check_securetty(const char *short_tty)
|
||||
-{
|
||||
- char *buf = (char*)"/etc/securetty"; /* any non-NULL is ok */
|
||||
- parser_t *parser = config_open2("/etc/securetty", fopen_for_read);
|
||||
- while (config_read(parser, &buf, 1, 1, "# \t", PARSE_NORMAL)) {
|
||||
- if (strcmp(buf, short_tty) == 0)
|
||||
- break;
|
||||
- buf = NULL;
|
||||
- }
|
||||
- config_close(parser);
|
||||
- /* buf != NULL here if config file was not found, empty
|
||||
- * or line was found which equals short_tty */
|
||||
- return buf != NULL;
|
||||
-}
|
||||
-#else
|
||||
-static ALWAYS_INLINE int check_securetty(const char *short_tty UNUSED_PARAM) { return 1; }
|
||||
-#endif
|
||||
-
|
||||
#if ENABLE_SELINUX
|
||||
static void initselinux(char *username, char *full_tty,
|
||||
security_context_t *user_sid)
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
From 7d2e6a0a89ba11a98ce665e307d7acf86b5f00b6 Mon Sep 17 00:00:00 2001
|
||||
From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
|
||||
Date: Thu, 5 Nov 2015 16:27:35 +0200
|
||||
Subject: [PATCH 09/12] libbb: allow_blank argument for
|
||||
ask_and_check_password_extended()
|
||||
|
||||
---
|
||||
include/libbb.h | 2 +-
|
||||
libbb/correct_password.c | 6 +++---
|
||||
loginutils/sulogin.c | 2 +-
|
||||
3 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/include/libbb.h b/include/libbb.h
|
||||
index 38d6d0b1e..f0ddce94f 100644
|
||||
--- a/include/libbb.h
|
||||
+++ b/include/libbb.h
|
||||
@@ -1392,7 +1392,7 @@ void setup_environment(const char *shell, int flags, const struct passwd *pw) FA
|
||||
void nuke_str(char *str) FAST_FUNC;
|
||||
int check_securetty(const char *short_tty);
|
||||
int check_password(const struct passwd *pw, const char *plaintext) FAST_FUNC;
|
||||
-int ask_and_check_password_extended(const struct passwd *pw, int timeout, const char *prompt) FAST_FUNC;
|
||||
+int ask_and_check_password_extended(const struct passwd *pw, int timeout, int allow_blank, const char *prompt) FAST_FUNC;
|
||||
int ask_and_check_password(const struct passwd *pw) FAST_FUNC;
|
||||
/* Returns a malloced string */
|
||||
#if !ENABLE_USE_BB_CRYPT
|
||||
diff --git a/libbb/correct_password.c b/libbb/correct_password.c
|
||||
index 513c93028..57cd2b890 100644
|
||||
--- a/libbb/correct_password.c
|
||||
+++ b/libbb/correct_password.c
|
||||
@@ -96,7 +96,7 @@ int FAST_FUNC check_password(const struct passwd *pw, const char *plaintext)
|
||||
* NULL pw means "just fake it for login with bad username"
|
||||
*/
|
||||
int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw,
|
||||
- int timeout, const char *prompt)
|
||||
+ int timeout, int allow_blank, const char *prompt)
|
||||
{
|
||||
IF_FEATURE_SHADOWPASSWDS(char buffer[SHADOW_BUFSIZE];)
|
||||
char *plaintext;
|
||||
@@ -105,7 +105,7 @@ int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw,
|
||||
|
||||
pw_pass = get_passwd(pw, buffer);
|
||||
if (!pw_pass[0]) /* empty password field? */
|
||||
- return 1;
|
||||
+ return allow_blank;
|
||||
|
||||
plaintext = bb_ask(STDIN_FILENO, timeout, prompt);
|
||||
if (!plaintext) {
|
||||
@@ -120,5 +120,5 @@ int FAST_FUNC ask_and_check_password_extended(const struct passwd *pw,
|
||||
|
||||
int FAST_FUNC ask_and_check_password(const struct passwd *pw)
|
||||
{
|
||||
- return ask_and_check_password_extended(pw, 0, "Password: ");
|
||||
+ return ask_and_check_password_extended(pw, 0, 1, "Password: ");
|
||||
}
|
||||
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c
|
||||
index 2e32e2bbd..d2ddc6afa 100644
|
||||
--- a/loginutils/sulogin.c
|
||||
+++ b/loginutils/sulogin.c
|
||||
@@ -62,7 +62,7 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
|
||||
while (1) {
|
||||
int r;
|
||||
|
||||
- r = ask_and_check_password_extended(pwd, timeout,
|
||||
+ r = ask_and_check_password_extended(pwd, timeout, 1,
|
||||
"Give root password for system maintenance\n"
|
||||
"(or type Control-D for normal startup):"
|
||||
);
|
||||
--
|
||||
2.11.0
|
||||
|
71
busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch
Normal file
71
busybox/0010-su-FEATURE_SU_NULLOK_SECURE.patch
Normal file
|
@ -0,0 +1,71 @@
|
|||
From d9c09138d91566af49ef8179d9995c84294e2486 Mon Sep 17 00:00:00 2001
|
||||
From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
|
||||
Date: Thu, 5 Nov 2015 16:27:36 +0200
|
||||
Subject: [PATCH 10/12] su: FEATURE_SU_NULLOK_SECURE
|
||||
|
||||
When this feature is enabled, blank passwords are not accepted by su
|
||||
unless the user is on a secure TTY defined in /etc/securetty. This
|
||||
resembles the default PAM configuration of some Linux distros which
|
||||
specify the nullok_secure option for pam_unix.so.
|
||||
---
|
||||
loginutils/su.c | 18 +++++++++++++-----
|
||||
1 file changed, 13 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/loginutils/su.c b/loginutils/su.c
|
||||
index 24ffbde86..086445243 100644
|
||||
--- a/loginutils/su.c
|
||||
+++ b/loginutils/su.c
|
||||
@@ -24,6 +24,11 @@
|
||||
//config: bool "Enable su to check user's shell to be listed in /etc/shells"
|
||||
//config: depends on SU
|
||||
//config: default y
|
||||
+//config:config FEATURE_SU_NULLOK_SECURE
|
||||
+//config: bool "Disallow blank passwords from TTYs other than specified in /etc/securetty"
|
||||
+//config: depends on SU
|
||||
+//config: default n
|
||||
+
|
||||
|
||||
//applet:/* Needs to be run by root or be suid root - needs to change uid and gid: */
|
||||
//applet:IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE))
|
||||
@@ -76,6 +81,7 @@ int su_main(int argc UNUSED_PARAM, char **argv)
|
||||
struct passwd *pw;
|
||||
uid_t cur_uid = getuid();
|
||||
const char *tty;
|
||||
+ int allow_blank = 1;
|
||||
#if ENABLE_FEATURE_UTMP
|
||||
char user_buf[64];
|
||||
#endif
|
||||
@@ -100,6 +106,12 @@ int su_main(int argc UNUSED_PARAM, char **argv)
|
||||
argv++;
|
||||
}
|
||||
|
||||
+ tty = xmalloc_ttyname(STDIN_FILENO);
|
||||
+ if (!tty) tty = "none";
|
||||
+ tty = skip_dev_pfx(tty);
|
||||
+
|
||||
+ if (ENABLE_FEATURE_SU_NULLOK_SECURE) allow_blank = check_securetty(tty);
|
||||
+
|
||||
if (ENABLE_FEATURE_SU_SYSLOG) {
|
||||
/* The utmp entry (via getlogin) is probably the best way to
|
||||
* identify the user, especially if someone su's from a su-shell.
|
||||
@@ -113,16 +125,12 @@ int su_main(int argc UNUSED_PARAM, char **argv)
|
||||
pw = getpwuid(cur_uid);
|
||||
old_user = pw ? xstrdup(pw->pw_name) : "";
|
||||
}
|
||||
- tty = xmalloc_ttyname(2);
|
||||
- if (!tty) {
|
||||
- tty = "none";
|
||||
- }
|
||||
openlog(applet_name, 0, LOG_AUTH);
|
||||
}
|
||||
|
||||
pw = xgetpwnam(opt_username);
|
||||
|
||||
- if (cur_uid == 0 || ask_and_check_password(pw) > 0) {
|
||||
+ if (cur_uid == 0 || ask_and_check_password_extended(pw, 0, allow_blank, "Password: ") > 0) {
|
||||
if (ENABLE_FEATURE_SU_SYSLOG)
|
||||
syslog(LOG_NOTICE, "%c %s %s:%s",
|
||||
'+', tty, old_user, opt_username);
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
From 838188511cb2085d8980956b270cc68ed9911102 Mon Sep 17 00:00:00 2001
|
||||
From: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
|
||||
Date: Thu, 4 Aug 2016 12:26:56 +0200
|
||||
Subject: [PATCH 11/12] ntpd: postpone hostname resolution if fails on startup
|
||||
|
||||
Signed-off-by: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
|
||||
---
|
||||
networking/ntpd.c | 130 +++++++++++++++++++++++++++---------------------------
|
||||
1 file changed, 64 insertions(+), 66 deletions(-)
|
||||
|
||||
diff --git a/networking/ntpd.c b/networking/ntpd.c
|
||||
index b7fa5dce9..c6d07adac 100644
|
||||
--- a/networking/ntpd.c
|
||||
+++ b/networking/ntpd.c
|
||||
@@ -155,6 +155,7 @@
|
||||
#define RETRY_INTERVAL 32 /* on send/recv error, retry in N secs (need to be power of 2) */
|
||||
#define NOREPLY_INTERVAL 512 /* sent, but got no reply: cap next query by this many seconds */
|
||||
#define RESPONSE_INTERVAL 16 /* wait for reply up to N secs */
|
||||
+#define HOSTNAME_INTERVAL 4 /* hostname lookup failed. Wait N secs for next try */
|
||||
|
||||
/* Step threshold (sec). std ntpd uses 0.128.
|
||||
*/
|
||||
@@ -293,6 +294,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
len_and_sockaddr *p_lsa;
|
||||
+ char *p_hostname;
|
||||
char *p_dotted;
|
||||
int p_fd;
|
||||
int datapoint_idx;
|
||||
@@ -318,7 +320,6 @@ typedef struct {
|
||||
datapoint_t filter_datapoint[NUM_DATAPOINTS];
|
||||
/* last sent packet: */
|
||||
msg_t p_xmt_msg;
|
||||
- char p_hostname[1];
|
||||
} peer_t;
|
||||
|
||||
|
||||
@@ -791,27 +792,17 @@ reset_peer_stats(peer_t *p, double offset)
|
||||
}
|
||||
|
||||
static void
|
||||
-resolve_peer_hostname(peer_t *p, int loop_on_fail)
|
||||
-{
|
||||
- len_and_sockaddr *lsa;
|
||||
-
|
||||
- again:
|
||||
- lsa = host2sockaddr(p->p_hostname, 123);
|
||||
- if (!lsa) {
|
||||
- /* error message already emitted by host2sockaddr() */
|
||||
- if (!loop_on_fail)
|
||||
- return;
|
||||
-//FIXME: do this to avoid infinite looping on typo in a hostname?
|
||||
-//well... in which case, what is a good value for loop_on_fail?
|
||||
- //if (--loop_on_fail == 0)
|
||||
- // xfunc_die();
|
||||
- sleep(5);
|
||||
- goto again;
|
||||
+resolve_peer_hostname(peer_t *p) {
|
||||
+ len_and_sockaddr *lsa = host2sockaddr(p->p_hostname, 123);
|
||||
+ if (lsa) {
|
||||
+ if (p->p_lsa) {
|
||||
+ free(p->p_lsa);
|
||||
+ free(p->p_dotted);
|
||||
+ }
|
||||
+ p->p_lsa = lsa;
|
||||
+ p->p_dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa);
|
||||
}
|
||||
- free(p->p_lsa);
|
||||
- free(p->p_dotted);
|
||||
- p->p_lsa = lsa;
|
||||
- p->p_dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa);
|
||||
+ set_next(p, lsa ? 0 : HOSTNAME_INTERVAL);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -820,28 +811,29 @@ add_peers(const char *s)
|
||||
llist_t *item;
|
||||
peer_t *p;
|
||||
|
||||
- p = xzalloc(sizeof(*p) + strlen(s));
|
||||
- strcpy(p->p_hostname, s);
|
||||
- resolve_peer_hostname(p, /*loop_on_fail=*/ 1);
|
||||
+ p = xzalloc(sizeof(*p));
|
||||
+ p->p_hostname = xstrdup(s);
|
||||
+ resolve_peer_hostname(p);
|
||||
|
||||
/* Names like N.<country2chars>.pool.ntp.org are randomly resolved
|
||||
* to a pool of machines. Sometimes different N's resolve to the same IP.
|
||||
* It is not useful to have two peers with same IP. We skip duplicates.
|
||||
*/
|
||||
- for (item = G.ntp_peers; item != NULL; item = item->link) {
|
||||
- peer_t *pp = (peer_t *) item->data;
|
||||
- if (strcmp(p->p_dotted, pp->p_dotted) == 0) {
|
||||
- bb_error_msg("duplicate peer %s (%s)", s, p->p_dotted);
|
||||
- free(p->p_lsa);
|
||||
- free(p->p_dotted);
|
||||
- free(p);
|
||||
- return;
|
||||
+ if (p->p_lsa)
|
||||
+ for (item = G.ntp_peers; item != NULL; item = item->link) {
|
||||
+ peer_t *pp = (peer_t *) item->data;
|
||||
+ if (pp->p_lsa && strcmp(p->p_dotted, pp->p_dotted) == 0) {
|
||||
+ bb_error_msg("duplicate peer %s (%s)", s, p->p_dotted);
|
||||
+ free(p->p_hostname);
|
||||
+ free(p->p_lsa);
|
||||
+ free(p->p_dotted);
|
||||
+ free(p);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
|
||||
p->p_fd = -1;
|
||||
p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
|
||||
- p->next_action_time = G.cur_time; /* = set_next(p, 0); */
|
||||
reset_peer_stats(p, STEP_THRESHOLD);
|
||||
|
||||
llist_add_to(&G.ntp_peers, p);
|
||||
@@ -2378,44 +2370,50 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
|
||||
for (item = G.ntp_peers; item != NULL; item = item->link) {
|
||||
peer_t *p = (peer_t *) item->data;
|
||||
|
||||
- if (p->next_action_time <= G.cur_time) {
|
||||
- if (p->p_fd == -1) {
|
||||
- /* Time to send new req */
|
||||
- if (--cnt == 0) {
|
||||
- VERB4 bb_error_msg("disabling burst mode");
|
||||
- G.polladj_count = 0;
|
||||
- G.poll_exp = MINPOLL;
|
||||
+ if (p->p_lsa) {
|
||||
+
|
||||
+ if (p->next_action_time <= G.cur_time) {
|
||||
+ if (p->p_fd == -1) {
|
||||
+ /* Time to send new req */
|
||||
+ if (--cnt == 0) {
|
||||
+ VERB4 bb_error_msg("disabling burst mode");
|
||||
+ G.polladj_count = 0;
|
||||
+ G.poll_exp = MINPOLL;
|
||||
+ }
|
||||
+ send_query_to_peer(p);
|
||||
+ } else {
|
||||
+ /* Timed out waiting for reply */
|
||||
+ close(p->p_fd);
|
||||
+ p->p_fd = -1;
|
||||
+ /* If poll interval is small, increase it */
|
||||
+ if (G.poll_exp < BIGPOLL)
|
||||
+ adjust_poll(MINPOLL);
|
||||
+ timeout = poll_interval(NOREPLY_INTERVAL);
|
||||
+ bb_error_msg("timed out waiting for %s, reach 0x%02x, next query in %us",
|
||||
+ p->p_dotted, p->reachable_bits, timeout);
|
||||
+
|
||||
+ /* What if don't see it because it changed its IP? */
|
||||
+ if (p->reachable_bits == 0)
|
||||
+ resolve_peer_hostname(p);
|
||||
+
|
||||
+ set_next(p, timeout);
|
||||
}
|
||||
- send_query_to_peer(p);
|
||||
- } else {
|
||||
- /* Timed out waiting for reply */
|
||||
- close(p->p_fd);
|
||||
- p->p_fd = -1;
|
||||
- /* If poll interval is small, increase it */
|
||||
- if (G.poll_exp < BIGPOLL)
|
||||
- adjust_poll(MINPOLL);
|
||||
- timeout = poll_interval(NOREPLY_INTERVAL);
|
||||
- bb_error_msg("timed out waiting for %s, reach 0x%02x, next query in %us",
|
||||
- p->p_dotted, p->reachable_bits, timeout);
|
||||
-
|
||||
- /* What if don't see it because it changed its IP? */
|
||||
- if (p->reachable_bits == 0)
|
||||
- resolve_peer_hostname(p, /*loop_on_fail=*/ 0);
|
||||
-
|
||||
- set_next(p, timeout);
|
||||
}
|
||||
- }
|
||||
+
|
||||
+ if (p->p_fd >= 0) {
|
||||
+ /* Wait for reply from this peer */
|
||||
+ pfd[i].fd = p->p_fd;
|
||||
+ pfd[i].events = POLLIN;
|
||||
+ idx2peer[i] = p;
|
||||
+ i++;
|
||||
+ }
|
||||
+
|
||||
+ } else
|
||||
+ resolve_peer_hostname(p);
|
||||
|
||||
if (p->next_action_time < nextaction)
|
||||
nextaction = p->next_action_time;
|
||||
|
||||
- if (p->p_fd >= 0) {
|
||||
- /* Wait for reply from this peer */
|
||||
- pfd[i].fd = p->p_fd;
|
||||
- pfd[i].events = POLLIN;
|
||||
- idx2peer[i] = p;
|
||||
- i++;
|
||||
- }
|
||||
}
|
||||
|
||||
timeout = nextaction - G.cur_time;
|
||||
--
|
||||
2.11.0
|
||||
|
63
busybox/0012-diff-add-support-for-no-dereference.patch
Normal file
63
busybox/0012-diff-add-support-for-no-dereference.patch
Normal file
|
@ -0,0 +1,63 @@
|
|||
From 56c14ec7f75a68c191f2fc210915108f428e849c Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Fri, 25 Jul 2014 15:28:33 +0200
|
||||
Subject: [PATCH 12/12] diff: add support for --no-dereference
|
||||
|
||||
Add flag for not following symlinks when recursing
|
||||
|
||||
function old new delta
|
||||
.rodata 7934 7967 +33
|
||||
diff_longopts 253 270 +17
|
||||
packed_usage 1704 1720 +16
|
||||
diff_main 1665 1662 -3
|
||||
------------------------------------------------------------------------------
|
||||
(add/remove: 0/0 grow/shrink: 3/1 up/down: 66/-3) Total: 63 bytes
|
||||
|
||||
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
|
||||
---
|
||||
editors/diff.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/editors/diff.c b/editors/diff.c
|
||||
index 75229ad8c..6266bde0d 100644
|
||||
--- a/editors/diff.c
|
||||
+++ b/editors/diff.c
|
||||
@@ -117,6 +117,9 @@
|
||||
//usage: "\n -N Treat absent files as empty"
|
||||
//usage: "\n -q Output only whether files differ"
|
||||
//usage: "\n -r Recurse"
|
||||
+//usage: IF_LONG_OPTS(
|
||||
+//usage: "\n --no-dereference Don't follow symlinks"
|
||||
+//usage: )
|
||||
//usage: "\n -S Start with FILE when comparing directories"
|
||||
//usage: "\n -T Make tabs line up by prefixing a tab when necessary"
|
||||
//usage: "\n -s Report when two files are the same"
|
||||
@@ -158,6 +161,7 @@ enum { /* Commandline flags */
|
||||
FLAG_p, /* not implemented */
|
||||
FLAG_B,
|
||||
FLAG_E, /* not implemented */
|
||||
+ FLAG_no_deref,
|
||||
};
|
||||
#define FLAG(x) (1 << FLAG_##x)
|
||||
|
||||
@@ -872,7 +876,8 @@ static void diffdir(char *p[2], const char *s_start)
|
||||
* Using list.len to specify its length,
|
||||
* add_to_dirlist will remove it. */
|
||||
list[i].len = strlen(p[i]);
|
||||
- recursive_action(p[i], ACTION_RECURSE | ACTION_FOLLOWLINKS,
|
||||
+ recursive_action(p[i], ACTION_RECURSE |
|
||||
+ ((option_mask32 & FLAG(no_deref)) ? 0 : ACTION_FOLLOWLINKS),
|
||||
add_to_dirlist, skip_dir, &list[i], 0);
|
||||
/* Sort dl alphabetically.
|
||||
* GNU diff does this ignoring any number of trailing dots.
|
||||
@@ -969,6 +974,7 @@ static const char diff_longopts[] ALIGN1 =
|
||||
"report-identical-files\0" No_argument "s"
|
||||
"starting-file\0" Required_argument "S"
|
||||
"minimal\0" No_argument "d"
|
||||
+ "no-dereference\0" No_argument "\xff"
|
||||
;
|
||||
#endif
|
||||
|
||||
--
|
||||
2.11.0
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
From e139ae307e4fd9eb3b86a6fc2e97b4e212925199 Mon Sep 17 00:00:00 2001
|
||||
From: Denys Vlasenko <vda.linux@googlemail.com>
|
||||
Date: Wed, 12 Apr 2017 21:02:33 +0200
|
||||
Subject: [PATCH 13/14] ash: make shellexec capable of using separate argv[0]
|
||||
and filename to exec
|
||||
|
||||
function old new delta
|
||||
execcmd 71 78 +7
|
||||
shellexec 221 224 +3
|
||||
evalcommand 1158 1161 +3
|
||||
------------------------------------------------------------------------------
|
||||
(add/remove: 0/0 grow/shrink: 3/0 up/down: 13/0) Total: 13 bytes
|
||||
|
||||
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
||||
---
|
||||
shell/ash.c | 21 ++++++++++-----------
|
||||
1 file changed, 10 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/shell/ash.c b/shell/ash.c
|
||||
index 983f7b1..044f166 100644
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -7744,9 +7744,8 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char **
|
||||
* have to change the find_command routine as well.
|
||||
* argv[-1] must exist and be writable! See tryexec() for why.
|
||||
*/
|
||||
-static void shellexec(char **, const char *, int) NORETURN;
|
||||
-static void
|
||||
-shellexec(char **argv, const char *path, int idx)
|
||||
+static void shellexec(char *prog, char **argv, const char *path, int idx) NORETURN;
|
||||
+static void shellexec(char *prog, char **argv, const char *path, int idx)
|
||||
{
|
||||
char *cmdname;
|
||||
int e;
|
||||
@@ -7755,12 +7754,12 @@ shellexec(char **argv, const char *path, int idx)
|
||||
int applet_no = -1; /* used only by FEATURE_SH_STANDALONE */
|
||||
|
||||
envp = listvars(VEXPORT, VUNSET, /*end:*/ NULL);
|
||||
- if (strchr(argv[0], '/') != NULL
|
||||
+ if (strchr(prog, '/') != NULL
|
||||
#if ENABLE_FEATURE_SH_STANDALONE
|
||||
- || (applet_no = find_applet_by_name(argv[0])) >= 0
|
||||
+ || (applet_no = find_applet_by_name(prog)) >= 0
|
||||
#endif
|
||||
) {
|
||||
- tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) argv[0], argv, envp);
|
||||
+ tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) prog, argv, envp);
|
||||
if (applet_no >= 0) {
|
||||
/* We tried execing ourself, but it didn't work.
|
||||
* Maybe /proc/self/exe doesn't exist?
|
||||
@@ -7772,7 +7771,7 @@ shellexec(char **argv, const char *path, int idx)
|
||||
} else {
|
||||
try_PATH:
|
||||
e = ENOENT;
|
||||
- while ((cmdname = path_advance(&path, argv[0])) != NULL) {
|
||||
+ while ((cmdname = path_advance(&path, prog)) != NULL) {
|
||||
if (--idx < 0 && pathopt == NULL) {
|
||||
tryexec(IF_FEATURE_SH_STANDALONE(-1,) cmdname, argv, envp);
|
||||
if (errno != ENOENT && errno != ENOTDIR)
|
||||
@@ -7796,8 +7795,8 @@ shellexec(char **argv, const char *path, int idx)
|
||||
}
|
||||
exitstatus = exerrno;
|
||||
TRACE(("shellexec failed for %s, errno %d, suppress_int %d\n",
|
||||
- argv[0], e, suppress_int));
|
||||
- ash_msg_and_raise(EXEXIT, "%s: %s", argv[0], errmsg(e, "not found"));
|
||||
+ prog, e, suppress_int));
|
||||
+ ash_msg_and_raise(EXEXIT, "%s: %s", prog, errmsg(e, "not found"));
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
@@ -9371,7 +9370,7 @@ execcmd(int argc UNUSED_PARAM, char **argv)
|
||||
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
|
||||
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
|
||||
|
||||
- shellexec(argv + 1, pathval(), 0);
|
||||
+ shellexec(argv[1], argv + 1, pathval(), 0);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
return 0;
|
||||
@@ -9773,7 +9772,7 @@ evalcommand(union node *cmd, int flags)
|
||||
/* fall through to exec'ing external program */
|
||||
}
|
||||
listsetvar(varlist.list, VEXPORT|VSTACK);
|
||||
- shellexec(argv, path, cmdentry.u.index);
|
||||
+ shellexec(argv[0], argv, path, cmdentry.u.index);
|
||||
/* NOTREACHED */
|
||||
} /* default */
|
||||
case CMDBUILTIN:
|
||||
--
|
||||
2.9.3
|
||||
|
69
busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch
Normal file
69
busybox/0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch
Normal file
|
@ -0,0 +1,69 @@
|
|||
From 6c149f4d9afaed9edb75c88b784ad900c1f40700 Mon Sep 17 00:00:00 2001
|
||||
From: Denys Vlasenko <vda.linux@googlemail.com>
|
||||
Date: Wed, 12 Apr 2017 21:31:32 +0200
|
||||
Subject: [PATCH 14/14] ash: implement "exec -a ARGV0 CMD ARGV1..."
|
||||
|
||||
function old new delta
|
||||
execcmd 71 112 +41
|
||||
shellexec 221 224 +3
|
||||
evalcommand 1158 1161 +3
|
||||
localcmd 364 366 +2
|
||||
unaliascmd 163 154 -9
|
||||
------------------------------------------------------------------------------
|
||||
(add/remove: 0/0 grow/shrink: 4/1 up/down: 49/-9) Total: 40 bytes
|
||||
|
||||
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
||||
---
|
||||
shell/ash.c | 22 +++++++++++++++-------
|
||||
1 file changed, 15 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/shell/ash.c b/shell/ash.c
|
||||
index 044f166..e170bec 100644
|
||||
--- a/shell/ash.c
|
||||
+++ b/shell/ash.c
|
||||
@@ -3345,11 +3345,9 @@ unaliascmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
|
||||
{
|
||||
int i;
|
||||
|
||||
- while ((i = nextopt("a")) != '\0') {
|
||||
- if (i == 'a') {
|
||||
- rmaliases();
|
||||
- return 0;
|
||||
- }
|
||||
+ while (nextopt("a") != '\0') {
|
||||
+ rmaliases();
|
||||
+ return 0;
|
||||
}
|
||||
for (i = 0; *argptr; argptr++) {
|
||||
if (unalias(*argptr)) {
|
||||
@@ -9354,7 +9352,14 @@ truecmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
|
||||
static int FAST_FUNC
|
||||
execcmd(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
- if (argv[1]) {
|
||||
+ optionarg = NULL;
|
||||
+ while (nextopt("a:") != '\0')
|
||||
+ /* nextopt() sets optionarg to "-a ARGV0" */;
|
||||
+
|
||||
+ argv = argptr;
|
||||
+ if (argv[0]) {
|
||||
+ char *prog;
|
||||
+
|
||||
iflag = 0; /* exit on error */
|
||||
mflag = 0;
|
||||
optschanged();
|
||||
@@ -9370,7 +9375,10 @@ execcmd(int argc UNUSED_PARAM, char **argv)
|
||||
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
|
||||
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
|
||||
|
||||
- shellexec(argv[1], argv + 1, pathval(), 0);
|
||||
+ prog = argv[0];
|
||||
+ if (optionarg)
|
||||
+ argv[0] = optionarg;
|
||||
+ shellexec(prog, argv, pathval(), 0);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
return 0;
|
||||
--
|
||||
2.9.3
|
||||
|
199
busybox/APKBUILD
Normal file
199
busybox/APKBUILD
Normal file
|
@ -0,0 +1,199 @@
|
|||
# Contributor: Łukasz Jendrysik <scadu@yandex.com>
|
||||
# Contributor: Oliver Smith <ollieparanoid@bitmessage.ch>
|
||||
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
||||
pkgname=busybox
|
||||
pkgver=1.26.2
|
||||
pkgrel=3
|
||||
pkgdesc="Size optimized toolbox of many common UNIX utilities"
|
||||
url=http://busybox.net
|
||||
arch="all"
|
||||
license="GPL2"
|
||||
makedepends_build=""
|
||||
makedepends_host="linux-headers"
|
||||
makedepends="$makedepends_build $makedepends_host"
|
||||
install="$pkgname.post-install $pkgname-extras.post-install $pkgname.post-upgrade"
|
||||
subpackages="$pkgname-extras $pkgname-static $pkgname-suid"
|
||||
options="suid"
|
||||
_triggerpaths="/bin:/usr/bin:/sbin:/usr/sbin:/lib/modules/*"
|
||||
triggers="busybox.trigger=$_triggerpaths busybox-extras.trigger=$_triggerpaths"
|
||||
source="http://busybox.net/downloads/$pkgname-$pkgver.tar.bz2
|
||||
0001-ash-exec-busybox.static.patch
|
||||
0002-app-location-for-vi-and-lspci.patch
|
||||
0003-udhcpc-set-default-discover-retries-to-5.patch
|
||||
0004-ping-make-ping-work-without-root-privileges.patch
|
||||
0005-fbsplash-support-console-switching.patch
|
||||
0006-fbsplash-support-image-and-bar-alignment-and-positio.patch
|
||||
0007-depmod-support-generating-kmod-binary-index-files.patch
|
||||
0008-login-move-check_securetty-to-libbb.patch
|
||||
0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch
|
||||
0010-su-FEATURE_SU_NULLOK_SECURE.patch
|
||||
0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch
|
||||
0012-diff-add-support-for-no-dereference.patch
|
||||
0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch
|
||||
0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch
|
||||
|
||||
location-for-cpio.patch
|
||||
|
||||
acpid.logrotate
|
||||
busyboxconfig
|
||||
busyboxconfig-extras
|
||||
bbsuid.c
|
||||
dad.if-up
|
||||
nologin.c
|
||||
"
|
||||
|
||||
_sdir="$srcdir"/$pkgname-$pkgver
|
||||
_staticdir="$srcdir"/build-static
|
||||
_dyndir="$srcdir"/build-dynamic
|
||||
_dyndir_extras="$srcdir"/build-dynamic-extras
|
||||
_config="$srcdir"/busyboxconfig
|
||||
_config_extras="$srcdir"/busyboxconfig-extras
|
||||
|
||||
prepare() {
|
||||
mkdir -p "$_staticdir" "$_dyndir" "$_dyndir_extras"
|
||||
#patches
|
||||
cd "$_sdir"
|
||||
for i in $source; do
|
||||
local p=${i##*/}
|
||||
case $i in
|
||||
*.patch) msg $p; patch -p1 -i "$srcdir"/$p || return 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
cp "$srcdir"/nologin.c loginutils/
|
||||
}
|
||||
|
||||
build() {
|
||||
# build bbsuid
|
||||
msg "Building bbsuid"
|
||||
${CC:-${CROSS_COMPILE}gcc} ${CPPFLAGS} ${CFLAGS} \
|
||||
${LDFLAGS} "$srcdir"/bbsuid.c -o "$_dyndir"/bbsuid || return 1
|
||||
|
||||
# build dynamic
|
||||
cd "$_dyndir"
|
||||
msg "Building dynamic busybox"
|
||||
cp "$_config" .config
|
||||
[ "$CLIBC" = musl ] && sed -i \
|
||||
-e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \
|
||||
.config
|
||||
make -C "$_sdir" O="$PWD" silentoldconfig || return 1
|
||||
make || return 1
|
||||
|
||||
# build dynamic (extras)
|
||||
cd "$_dyndir_extras"
|
||||
msg "Building dynamic busybox-extras"
|
||||
cp "$_config_extras" .config
|
||||
[ "$CLIBC" = musl ] && sed -i \
|
||||
-e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \
|
||||
.config
|
||||
make -C "$_sdir" O="$PWD" silentoldconfig || return 1
|
||||
make || return 1
|
||||
|
||||
# build static
|
||||
cd "$_staticdir"
|
||||
msg "Building static busybox"
|
||||
sed -e "s/.*CONFIG_PIE.*/\# CONFIG_PIE is not set/" \
|
||||
-e "s/.*CONFIG_STATIC.*/CONFIG_STATIC=y/" \
|
||||
"$_config" > .config
|
||||
# musl does not support GNU regex
|
||||
[ "$CLIBC" = musl ] && sed -i \
|
||||
-e "s/CONFIG_EXTRA_COMPAT=y/CONFIG_EXTRA_COMPAT=n/" \
|
||||
.config
|
||||
make -C "$_sdir" O="$PWD" silentoldconfig || return 1
|
||||
make || return 1
|
||||
mv busybox busybox.static
|
||||
}
|
||||
|
||||
# $1: $_dyndir or $_dyndir_extras
|
||||
# $2: $pkgdir or $subpkgdir
|
||||
_package_dynamic() {
|
||||
cd "$1"
|
||||
mkdir -p "$2"/usr/sbin "$2"/usr/bin "$2"/tmp \
|
||||
"$2"/var/cache/misc "$2"/bin "$2"/sbin
|
||||
chmod 1777 "$2"/tmp
|
||||
install -m755 busybox "$2"/bin/busybox || return 1
|
||||
# we need /bin/sh to be able to execute post-install
|
||||
ln -s /bin/busybox "$2"/bin/sh
|
||||
|
||||
#ifupdown needs those dirs to be present
|
||||
mkdir -p \
|
||||
"$2"/etc/network/if-down.d \
|
||||
"$2"/etc/network/if-post-down.d \
|
||||
"$2"/etc/network/if-post-up.d \
|
||||
"$2"/etc/network/if-pre-down.d \
|
||||
"$2"/etc/network/if-pre-up.d \
|
||||
"$2"/etc/network/if-up.d \
|
||||
|| return 1
|
||||
install -m775 "$srcdir"/dad.if-up "$2"/etc/network/if-up.d/dad \
|
||||
|| return 1
|
||||
|
||||
install -Dm644 "$srcdir"/acpid.logrotate \
|
||||
"$2/etc/logrotate.d/acpid" || return 1
|
||||
|
||||
mkdir -p "$2"/var/lib/udhcpd || return 1
|
||||
install -Dm644 "$_sdir"/examples/udhcp/udhcpd.conf \
|
||||
"$2"/etc/udhcpd.conf || return 1
|
||||
cat >"$2"/etc/securetty <<EOF
|
||||
console
|
||||
tty1
|
||||
tty2
|
||||
tty3
|
||||
tty4
|
||||
tty5
|
||||
tty6
|
||||
tty7
|
||||
tty8
|
||||
tty9
|
||||
tty10
|
||||
tty11
|
||||
EOF
|
||||
}
|
||||
|
||||
package() {
|
||||
_package_dynamic "$_dyndir" "$pkgdir"
|
||||
}
|
||||
|
||||
extras() {
|
||||
pkgdesc="More programs enabled in Busybox"
|
||||
provides="busybox=$pkgver"
|
||||
_package_dynamic "$_dyndir_extras" "$subpkgdir"
|
||||
}
|
||||
|
||||
suid() {
|
||||
pkgdesc="suid binaries of Busybox"
|
||||
depends="${pkgname}"
|
||||
|
||||
cd "$_dyndir"
|
||||
mkdir -p "$subpkgdir"/bin
|
||||
install -m4111 bbsuid "$subpkgdir"/bin/bbsuid || return 1
|
||||
}
|
||||
|
||||
static() {
|
||||
pkgdesc="Statically linked Busybox"
|
||||
mkdir -p "$subpkgdir"/bin
|
||||
install -m755 "$_staticdir"/busybox.static \
|
||||
"$subpkgdir"/bin/busybox.static
|
||||
}
|
||||
|
||||
sha512sums="9926d211d0b4f34b513d934d7b111ebbf933c2dc31206bdd80426a62d47d5b1475b70bec5aaa14a26b94a202ab1465d994062a002750a312dcb8167096eb3719 busybox-1.26.2.tar.bz2
|
||||
ed16b7a38d99eb309ed03d3212ffd1c1993e292724665be2aaefcf645c9a37d1b0c5d24308dac7dbb093afde5b700961c55336d67be4f2bb788c85550e5f1de8 0001-ash-exec-busybox.static.patch
|
||||
cd6b0b59ca8006bfc545ba521a92de81be320c0dd3ed0a41d6a60339b73f44c80f1ac36fb05d35a8555fd173167b792f73ae279115d23d59f8f623ae01aed7d1 0002-app-location-for-vi-and-lspci.patch
|
||||
3fef7a3f47ca798859c5cf8d78bc36ed98c4b9f841a3593bca71b9242ca15719bbe9b683437f8ea61b9a5f6c31c9272b7f72dcb6ef6fc2a42fd3219e302113eb 0003-udhcpc-set-default-discover-retries-to-5.patch
|
||||
36d1090b35db49fd81ca5a39f5c5050f3173d628ac5e1b9b1c5873a3d0641942c9ffc5448533baa6c4512f4e539e8eb81d53c526a8f6e41b12f6f7606746793f 0004-ping-make-ping-work-without-root-privileges.patch
|
||||
6fc8fd411daec7989632b448ff73cbac05d8e4c497167f24c0b2a55517449f9c89fcc0131fa64973f163f0d5d0c5ed75613682b95b0f11900d340366693acf2a 0005-fbsplash-support-console-switching.patch
|
||||
7b6300130ca72b6842283b696c5138ac119b7b79d926ef336395246549b48a0f9c7c97c4708dfc45192d90898da3cad5b9bfe309072751615c012c8fcccfbb42 0006-fbsplash-support-image-and-bar-alignment-and-positio.patch
|
||||
11529fe845bbd4094dd57f99c8150aefeed69822d04bc0692975ea4f70c1691698d0b76d7522741eca9e45e8baaa877e55aed3ef21809bbaeecf67be7049bf70 0007-depmod-support-generating-kmod-binary-index-files.patch
|
||||
29589a224a432363620fa1b56c605ca93e39c879d263087f58c531aa4331ca366baa531b7464c41a8fdee96e7750b155e5e00f2bb0aeaa8da50d2cae01eab4f4 0008-login-move-check_securetty-to-libbb.patch
|
||||
fc291167b2e026166e283d98d2d61cb3c9701e5e83c09062692d0c5a77f3b838ba73065706461095039f9adcbd9a7e4ae60a8b578986d0499caa33789fea3050 0009-libbb-allow_blank-argument-for-ask_and_check_passwor.patch
|
||||
f82caa1dc4395f266b024a7face267a916a80ead95f3d392b10fd397d0fdf62703e3078357bc71962616d6531ea913aef80e1a7cdf8180bca70e723c7d331238 0010-su-FEATURE_SU_NULLOK_SECURE.patch
|
||||
16b513b34b3bf16002f14566aae66aab986403cb7a0f416c27264b739706bbd624a99fd37d5b56ff6efe623f3cc48aef3e8fe51c4ae2e94eda3fe9e8e618e3a1 0011-ntpd-postpone-hostname-resolution-if-fails-on-startu.patch
|
||||
361959788bc11b7f20d4029bb0f561759d270983b09c44fe2a01817378c4eb1c98cd8ef73e7ef8c168b7540170f58ddb36b9e4f80a97565f3fe3ba85b593a471 0012-diff-add-support-for-no-dereference.patch
|
||||
bf3e7c400e718fbc19fda19d7304ed938e5c59f45d5d1ba6eafd8f62a984d40419dbefd9f6840ac7f220d00abfae67e8f31be78b4c2e25310b265bca8beb91a2 0013-ash-make-shellexec-capable-of-using-separate-argv-0-.patch
|
||||
cb7aa4d5d22596bc8c6510cb653599dd8cf4c3a5312e93adfc6411d811376db2ad3b506a111322f46aa9929a5337e22a169da4ea250fd4b39e703adbc8792a2d 0014-ash-implement-exec-a-ARGV0-CMD-ARGV1.patch
|
||||
f26e090f5de0096ba5c4d46989ebe0ab5fa64c8bf54cd37ddec302fddfde23eac914858d86cc52bf3b5780a8e81ea2612ef6e713df2828e52c606f86a6816f39 location-for-cpio.patch
|
||||
a9b1403c844c51934637215307dd9e2adb9458921047acff0d86dcf229b6e0027f4b2c6cdaa25a58407aad9d098fb5685d58eb5ff8d2aa3de4912cdea21fe54c acpid.logrotate
|
||||
e54495f0c7473d77752a0d3856a7d3213bdcd81c716195bf6812556a24a152c22ed1858abb2384ad0b22eba73304894e6e26695f23df0ef13f81eedefa95b91e busyboxconfig
|
||||
db820fbd0438453604e8f73d62c782ffa75ccfff151ee084ffaeee13b98b7370958c7bd03376836903751a6662dc8531f96addd539423858c2475299eca2f037 busyboxconfig-extras
|
||||
c1dd56509277c59751907a27f067f1622191ddfd498acfe390d83136d36a41f2bdfc2fd4daf35af77219a66fb00fea20483f34112afd5df2ccd9f36ab548e66f bbsuid.c
|
||||
a1127c8a384294135e11500fde7ead33b73d24b11c21911b08447a4c4ef71d7a9965d6466f60f2da64e3b877213b0a3e924a5add3c5333ee3ecde8c2a91c5e02 dad.if-up
|
||||
4e7c291a70e879b74c0fc07c54a73ef50537d8be68fee6b2d409425c07afd2d67f9b6afcd8c33a7971014913cc5de85e45079681c9e77200c6cc2f34acfba6d2 nologin.c"
|
5
busybox/README.md
Normal file
5
busybox/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
This aports builds `busybox-extras` with more programs enabled (most
|
||||
importantly: `telnetd`, which is required for postmarketOS). It is getting
|
||||
upstreamed here:
|
||||
|
||||
https://github.com/alpinelinux/aports/pull/1092
|
8
busybox/acpid.logrotate
Normal file
8
busybox/acpid.logrotate
Normal file
|
@ -0,0 +1,8 @@
|
|||
/var/log/acpid.log {
|
||||
missingok
|
||||
notifempty
|
||||
sharedscripts
|
||||
postrotate
|
||||
/etc/init.d/acpid --ifstarted restart || true
|
||||
endscript
|
||||
}
|
106
busybox/bbsuid.c
Normal file
106
busybox/bbsuid.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright (C) 2008 Natanael Copa <natanael.copa@gmail.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published
|
||||
* by the Free Software Foundation. See http://www.gnu.org/ for details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <libgen.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define BBSUID_PATH "/bin/bbsuid"
|
||||
|
||||
const static char * applets[] = {
|
||||
"/bin/mount",
|
||||
"/bin/umount",
|
||||
"/usr/bin/crontab",
|
||||
"/usr/bin/passwd",
|
||||
"/usr/bin/su",
|
||||
"/usr/bin/traceroute",
|
||||
"/usr/bin/traceroute6",
|
||||
"/usr/bin/vlock",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
static const char *applet_from_path(const char *str)
|
||||
{
|
||||
const char *p = strrchr(str, '/');
|
||||
if (p == NULL)
|
||||
p = str;
|
||||
else
|
||||
p++;
|
||||
return p;
|
||||
}
|
||||
|
||||
static int is_valid_applet(const char *str)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; applets[i] != NULL; i++) {
|
||||
const char *a = applet_from_path(applets[i]);
|
||||
if (strcmp(applet_from_path(str), a) == 0)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int exec_busybox(const char *app, int argc, char **argv)
|
||||
{
|
||||
char **newargv = malloc((argc + 2) * sizeof(char *));
|
||||
int i;
|
||||
newargv[0] = "/bin/busybox";
|
||||
newargv[1] = (char *)app;
|
||||
for (i = 1; i < argc; i++)
|
||||
newargv[i+1] = argv[i];
|
||||
newargv[argc+1] = NULL;
|
||||
execv(newargv[0], newargv);
|
||||
perror(newargv[0]);
|
||||
free(newargv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int install_links(void)
|
||||
{
|
||||
int i, r = 0;
|
||||
/* we don't want others than root to install the symlinks */
|
||||
if (getuid() != 0)
|
||||
errx(1, "Only root can install symlinks");
|
||||
|
||||
for (i = 0; applets[i] != NULL; i++) {
|
||||
const char *a = applets[i];
|
||||
struct stat st;
|
||||
if (lstat(a, &st) == 0 && S_ISLNK(st.st_mode))
|
||||
unlink(a);
|
||||
if (symlink(BBSUID_PATH, a) < 0)
|
||||
r++;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *app = applet_from_path(argv[0]);
|
||||
|
||||
if (strcmp(app, "bbsuid") == 0) {
|
||||
if (argc == 2 && strcmp(argv[1], "--install") == 0)
|
||||
return install_links();
|
||||
errx(1, "Use --install to install symlinks");
|
||||
}
|
||||
|
||||
if (is_valid_applet(app))
|
||||
return exec_busybox(app, argc, argv);
|
||||
|
||||
errx(1, "%s is not a valid applet", app);
|
||||
return 1;
|
||||
}
|
||||
|
10
busybox/busybox-extras.post-install
Normal file
10
busybox/busybox-extras.post-install
Normal file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uninstall note
|
||||
echo "-> NOTE: To uninstall busybox-extras properly, do this:"
|
||||
echo " # apk del busybox-extras"
|
||||
echo " # apk add /var/cache/apk/busybox-1.26.2-r3...apk # pick latest"
|
||||
echo " # apk add busybox"
|
||||
|
||||
# We need the symlinks early
|
||||
exec /bin/busybox --install -s
|
1
busybox/busybox-extras.trigger
Symbolic link
1
busybox/busybox-extras.trigger
Symbolic link
|
@ -0,0 +1 @@
|
|||
busybox.trigger
|
20
busybox/busybox.post-install
Normal file
20
busybox/busybox.post-install
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Remove links from busybox-extras (see also: busybox.post-upgrade)
|
||||
for link in \
|
||||
/usr/bin/ftpget \
|
||||
/usr/bin/ftpput \
|
||||
/usr/bin/telnet \
|
||||
/usr/bin/tftp \
|
||||
/usr/sbin/ftpd \
|
||||
/usr/sbin/httpd \
|
||||
/usr/sbin/telnetd \
|
||||
/usr/sbin/tftpd \
|
||||
; do
|
||||
if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then
|
||||
rm "$link"
|
||||
fi
|
||||
done
|
||||
|
||||
# We need the symlinks early
|
||||
exec /bin/busybox --install -s
|
31
busybox/busybox.post-upgrade
Normal file
31
busybox/busybox.post-upgrade
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Remove links, that have been relocated (see also: busybox.post-install)
|
||||
for link in \
|
||||
/usr/bin/ftpget \
|
||||
/usr/bin/ftpput \
|
||||
/usr/bin/telnet \
|
||||
/usr/bin/tftp \
|
||||
/usr/sbin/ftpd \
|
||||
/usr/sbin/httpd \
|
||||
/usr/sbin/telnetd \
|
||||
/usr/sbin/tftpd \
|
||||
; do
|
||||
if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then
|
||||
rm "$link"
|
||||
echo "-> $(basename $link) is now in busybox-extras"
|
||||
fi
|
||||
done
|
||||
for link in /bin/install /bin/ip /bin/vi /usr/bin/lspci; do
|
||||
if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/busybox" ]; then
|
||||
rm "$link"
|
||||
fi
|
||||
done
|
||||
for link in /bin/ping /bin/ping6; do
|
||||
if [ -L "$link" ] && [ "$(readlink $link)" = "/bin/bbsuid" ]; then
|
||||
rm "$link"
|
||||
fi
|
||||
done
|
||||
|
||||
# We need the symlinks early
|
||||
exec /bin/busybox --install -s
|
19
busybox/busybox.trigger
Normal file
19
busybox/busybox.trigger
Normal file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh
|
||||
|
||||
do_bb_install=
|
||||
|
||||
for i in "$@"; do
|
||||
case "$i" in
|
||||
/lib/modules/*)
|
||||
if [ -d "$i" ]; then
|
||||
/bin/busybox depmod ${i#/lib/modules/}
|
||||
fi
|
||||
;;
|
||||
*) do_bb_install=yes;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "$do_bb_install" ]; then
|
||||
[ -e /bin/bbsuid ] && /bin/bbsuid --install
|
||||
/bin/busybox --install -s
|
||||
fi
|
1096
busybox/busyboxconfig
Normal file
1096
busybox/busyboxconfig
Normal file
File diff suppressed because it is too large
Load diff
1100
busybox/busyboxconfig-extras
Normal file
1100
busybox/busyboxconfig-extras
Normal file
File diff suppressed because it is too large
Load diff
8
busybox/dad.if-up
Normal file
8
busybox/dad.if-up
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Block ifup until DAD completion
|
||||
# Copyright (c) 2016 Kaarle Ritvanen
|
||||
|
||||
while ip address show dev $IFACE | grep -q " tentative "; do
|
||||
sleep 0.2
|
||||
done
|
13
busybox/location-for-cpio.patch
Normal file
13
busybox/location-for-cpio.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
diff --git a/archival/cpio.c b/archival/cpio.c
|
||||
index 540218cb2..369bf19a7 100644
|
||||
--- a/archival/cpio.c
|
||||
+++ b/archival/cpio.c
|
||||
@@ -43,7 +43,7 @@
|
||||
//config: help
|
||||
//config: Passthrough mode. Rarely used.
|
||||
|
||||
-//applet:IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
|
||||
+//applet:IF_CPIO(APPLET(cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
|
||||
//kbuild:lib-$(CONFIG_CPIO) += cpio.o
|
||||
|
||||
//usage:#define cpio_trivial_usage
|
38
busybox/nologin.c
Normal file
38
busybox/nologin.c
Normal file
|
@ -0,0 +1,38 @@
|
|||
/* vi: set sw=4 ts=4: */
|
||||
/*
|
||||
* nologin implementation for busybox
|
||||
*
|
||||
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
|
||||
*/
|
||||
|
||||
//config:config NOLOGIN
|
||||
//config: bool "nologin"
|
||||
//config: default n
|
||||
//config: help
|
||||
//config: nologin is a tool that is supposed to be the shell for user accounts
|
||||
//config: that are not supposed to login.
|
||||
|
||||
//applet:IF_NOLOGIN(APPLET(nologin, BB_DIR_SBIN, BB_SUID_DROP))
|
||||
//kbuild:lib-$(CONFIG_NOLOGIN) += nologin.o
|
||||
|
||||
//usage:#define nologin_trivial_usage
|
||||
//usage: ""
|
||||
//usage:#define nologin_full_usage "\n\n"
|
||||
//usage: "politely refuse a login\n"
|
||||
|
||||
#include "libbb.h"
|
||||
#include <syslog.h>
|
||||
|
||||
#define _NOLOGIN_TXT "/etc/nologin.txt"
|
||||
|
||||
int nologin_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int nologin_main(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
int fd;
|
||||
fd = open(_NOLOGIN_TXT, O_RDONLY);
|
||||
if (bb_copyfd_eof(fd, STDOUT_FILENO) == -1)
|
||||
bb_error_msg_and_die("this account is not available");
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
|
27
ccache-cross-symlinks/APKBUILD
Normal file
27
ccache-cross-symlinks/APKBUILD
Normal file
|
@ -0,0 +1,27 @@
|
|||
# Maintainer: Oliver Smith <ollieparanoid@bitmessage.ch>
|
||||
# NOTE: This could probably be upstreamed to the official ccache aport.
|
||||
|
||||
pkgname=ccache-cross-symlinks
|
||||
pkgver=1
|
||||
pkgrel=2
|
||||
pkgdesc="Enable ccache for cross-compilers with symlinks"
|
||||
url="https://ccache.samba.org/"
|
||||
arch="noarch"
|
||||
license="GPL3+"
|
||||
depends="ccache"
|
||||
makedepends=""
|
||||
source=""
|
||||
options="!check"
|
||||
|
||||
package() {
|
||||
local _archs="armhf aarch64"
|
||||
local _bins="c++ cc cpp g++ gcc"
|
||||
mkdir -p "$pkgdir/usr/lib/ccache/bin"
|
||||
cd "$pkgdir/usr/lib/ccache/bin"
|
||||
for _arch in $_archs; do
|
||||
_hostspec="$(arch_to_hostspec $_arch)"
|
||||
for _bin in $_bins; do
|
||||
ln -v -s /usr/bin/ccache ${_hostspec}-${_bin} || return 1
|
||||
done
|
||||
done
|
||||
}
|
5
device-lg-mako/90-android-touch-dev.rules
Normal file
5
device-lg-mako/90-android-touch-dev.rules
Normal file
|
@ -0,0 +1,5 @@
|
|||
# use 'weston-calibrator' to calibrate the touchscreen!
|
||||
SUBSYSTEM=="input", ATTRS{name}=="touch_dev", \
|
||||
ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \
|
||||
ENV{WL_CALIBRATION}="0.982113 -0.006129 1.983124 -0.002560 1.000800 -6.012451"
|
||||
|
33
device-lg-mako/APKBUILD
Normal file
33
device-lg-mako/APKBUILD
Normal file
|
@ -0,0 +1,33 @@
|
|||
pkgname=device-lg-mako
|
||||
pkgver=2
|
||||
pkgrel=2
|
||||
pkgdesc="Google Nexus 4"
|
||||
url="https://github.com/postmarketOS"
|
||||
arch="noarch"
|
||||
license="FIXME"
|
||||
depends="linux-lg-mako"
|
||||
makedepends=""
|
||||
install=""
|
||||
subpackages=""
|
||||
source="deviceinfo initfs-hook.sh 90-android-touch-dev.rules profile.sh"
|
||||
options="!check"
|
||||
|
||||
build() {
|
||||
return 0
|
||||
}
|
||||
|
||||
package() {
|
||||
install -D -m644 "$srcdir"/deviceinfo \
|
||||
"$pkgdir"/etc/deviceinfo
|
||||
install -D -m644 "$srcdir"/initfs-hook.sh \
|
||||
"$pkgdir"/etc/postmarketos-mkinitfs/hooks/00-${pkgname}.sh
|
||||
install -D -m644 "$srcdir"/90-android-touch-dev.rules \
|
||||
"$pkgdir"/etc/udev/rules.d/90-android-touch-dev.rules
|
||||
install -D -m644 "$srcdir"/profile.sh \
|
||||
"$pkgdir"/etc/profile.d/00-$pkgname.sh
|
||||
}
|
||||
|
||||
sha512sums="180b1cab6b0ed8c1448a1582dbb6081c81aa598bd923449293d8e41eb0dd245c92cea9b5bd30ce59009ce60801881952e9ac3a3ec6e971a894e24e22d42dee52 deviceinfo
|
||||
8590967fa10388a890fdfafdb1070b9ab22dc89e06a3a8834806c772191e3b67de7b914b0d68e5ddf581cee715cb90f3f24abcb8762c415ff328c6da23e55d52 initfs-hook.sh
|
||||
ee25f3d0377f027d108593eb7953b8db49d7f05a5c36a0c8ca7e7849d15e3c217bc1ac97d77a66e28d2db4b81c0f50b905639911276da40321d2b6cca7f797df 90-android-touch-dev.rules
|
||||
c3d0182161c33047e0af4fd7cc557037e10380896a771446f055a13813e50e4e6c9d5992de7b275a8373a053cca02cb96bcb50c732709a2e9909f903b5fba249 profile.sh"
|
26
device-lg-mako/deviceinfo
Normal file
26
device-lg-mako/deviceinfo
Normal file
|
@ -0,0 +1,26 @@
|
|||
# This document format is a draft.
|
||||
# You can source it in shell scripts.
|
||||
# Use only double quotes.
|
||||
|
||||
deviceinfo_format_version="0"
|
||||
deviceinfo_name="Google Nexus 4"
|
||||
deviceinfo_manufacturer="LG"
|
||||
deviceinfo_date=""
|
||||
deviceinfo_keyboard="false"
|
||||
deviceinfo_nonfree="????"
|
||||
deviceinfo_dtb=""
|
||||
deviceinfo_modules=""
|
||||
deviceinfo_modules_initfs=""
|
||||
deviceinfo_external_disk="false"
|
||||
deviceinfo_external_disk_install="false"
|
||||
deviceinfo_flash_methods="fastboot"
|
||||
deviceinfo_arch="armhf"
|
||||
|
||||
|
||||
# You can for example extract these from an existing boot.img
|
||||
deviceinfo_flash_offset_base="0"
|
||||
deviceinfo_flash_offset_kernel="0x80208000"
|
||||
deviceinfo_flash_offset_ramdisk="0x81800000"
|
||||
deviceinfo_flash_offset_second="0x81100000"
|
||||
deviceinfo_flash_offset_tags="0x80200100"
|
||||
deviceinfo_flash_pagesize="2048"
|
4
device-lg-mako/initfs-hook.sh
Normal file
4
device-lg-mako/initfs-hook.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
# set framebuffer resolution
|
||||
cat /sys/class/graphics/fb0/modes > /sys/class/graphics/fb0/mode
|
30
device-lg-mako/profile.sh
Normal file
30
device-lg-mako/profile.sh
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Dirty hacks, necessary to get a working demo...
|
||||
if [ -e /etc/xdg/weston/weston.ini ]; then
|
||||
rm /etc/xdg/weston/weston.ini
|
||||
echo "WARNING: xwayland does not work yet on lg-mako (probably"
|
||||
echo "because of bad framebuffer drivers)"
|
||||
echo "=> Deleted /etc/xdg/weston/weston.ini as workaround"
|
||||
fi
|
||||
if [ -e /lib/udev/v4l_id ]; then
|
||||
mv /lib/udev/v4l_id /lib/udev/v4l_id_
|
||||
echo "WARNING: v4l_id hangs with the current kernel."
|
||||
echo "=> Moved it from /lib/udev/v4l_id to /lib/udev/v4l_id_"
|
||||
fi
|
||||
|
||||
|
||||
# Run a few weston demos, because the postmarketos-demos program depends
|
||||
# on xwayland for now (Alpine's GTK3 isn't configured for Wayland
|
||||
# support yet.)
|
||||
if [ $(tty) = "/dev/tty1" ]; then
|
||||
(
|
||||
sleep 3;
|
||||
export XDG_RUNTIME_DIR=/tmp/0-runtime-dir
|
||||
weston-smoke &
|
||||
weston-simple-damage &
|
||||
weston-editor &
|
||||
weston-terminal --shell=/usr/bin/htop &
|
||||
) > /dev/null &
|
||||
fi
|
||||
|
8
device-samsung-i9100/90-android.rules
Normal file
8
device-samsung-i9100/90-android.rules
Normal file
|
@ -0,0 +1,8 @@
|
|||
# udev rules file
|
||||
# All device names can be read from weston's logfile (/tmp/weston.log in postmarketOS)
|
||||
|
||||
# Touchscreen (use 'weston-calibrator' to calibrate)
|
||||
SUBSYSTEM=="input", ATTRS{name}=="sec_touchscreen", \
|
||||
ENV{ID_INPUT}="1", ENV{ID_INPUT_TOUCHSCREEN}="1" \
|
||||
ENV{WL_CALIBRATION}="0.954174 0.016888 -2.626083 -0.006031 1.011271 14.175903"
|
||||
|
3
device-samsung-i9100/ACTIVATE_DOWNLOAD_MODE.txt
Normal file
3
device-samsung-i9100/ACTIVATE_DOWNLOAD_MODE.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
- make sure, the device is powered off
|
||||
- hold power + volume down
|
||||
- let go of the power button, as soon as something appears
|
3
device-samsung-i9100/ACTIVATE_RECOVERY.txt
Normal file
3
device-samsung-i9100/ACTIVATE_RECOVERY.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
- make sure, the device is really powered off
|
||||
- hold volume up + home + power button
|
||||
- when the samsung logo appears, only hold volume up + home
|
27
device-samsung-i9100/APKBUILD
Normal file
27
device-samsung-i9100/APKBUILD
Normal file
|
@ -0,0 +1,27 @@
|
|||
pkgname=device-samsung-i9100
|
||||
pkgver=1
|
||||
pkgrel=2
|
||||
pkgdesc="Samsung Galaxy SII"
|
||||
url="https://github.com/postmarketOS"
|
||||
arch="noarch"
|
||||
license="FIXME"
|
||||
depends="linux-samsung-i9100"
|
||||
makedepends=""
|
||||
install=""
|
||||
subpackages=""
|
||||
source="deviceinfo 90-android.rules"
|
||||
options="!check"
|
||||
|
||||
build() {
|
||||
return 0
|
||||
}
|
||||
|
||||
package() {
|
||||
install -D -m644 "$srcdir/deviceinfo" \
|
||||
"$pkgdir/etc/deviceinfo"
|
||||
install -D -m644 "$srcdir"/90-android.rules \
|
||||
"$pkgdir"/etc/udev/rules.d/90-android.rules
|
||||
}
|
||||
|
||||
sha512sums="f2dfe6b848ab751eea2d3aad82c214985b7910865a2911a7be843e44c5479299cb66c768925b4452e8dbdd84efd6bd8b69eb2e2dc49cfa27fc8a3e189ddf68a5 deviceinfo
|
||||
8aead706ddb118a44de7d049f07d10a27e727d17724058d132e4ec4fa73fed29c9ccfe03f02aca459c922ec0fbba24e171fe3c76e33f7c5462631e3dd5506e36 90-android.rules"
|
26
device-samsung-i9100/deviceinfo
Normal file
26
device-samsung-i9100/deviceinfo
Normal file
|
@ -0,0 +1,26 @@
|
|||
# This document format is a draft.
|
||||
# You can source it in shell scripts.
|
||||
# Use only double quotes.
|
||||
|
||||
deviceinfo_format_version="0"
|
||||
deviceinfo_name="Galaxy SII"
|
||||
deviceinfo_manufacturer="Samsung"
|
||||
deviceinfo_date=""
|
||||
deviceinfo_keyboard="false"
|
||||
deviceinfo_nonfree="????"
|
||||
deviceinfo_dtb=""
|
||||
deviceinfo_modules=""
|
||||
deviceinfo_modules_initfs=""
|
||||
deviceinfo_external_disk="true"
|
||||
deviceinfo_external_disk_install="true"
|
||||
deviceinfo_flash_methods="heimdall"
|
||||
deviceinfo_arch="armhf"
|
||||
|
||||
|
||||
# You can for example extract these from an existing boot.img
|
||||
deviceinfo_flash_offset_base=""
|
||||
deviceinfo_flash_offset_kernel=""
|
||||
deviceinfo_flash_offset_ramdisk=""
|
||||
deviceinfo_flash_offset_second=""
|
||||
deviceinfo_flash_offset_tags=""
|
||||
deviceinfo_flash_pagesize=""
|
4
device-samsung-i9100/initfs-hook.sh
Normal file
4
device-samsung-i9100/initfs-hook.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
# set framebuffer resolution
|
||||
cat /sys/class/graphics/fb0/modes > /sys/class/graphics/fb0/mode
|
215
gcc-armhf/001_all_default-ssp-strong.patch
Normal file
215
gcc-armhf/001_all_default-ssp-strong.patch
Normal file
|
@ -0,0 +1,215 @@
|
|||
# DP: Turn on -fstack-protector by default for C, C++, ObjC, ObjC++.
|
||||
# DP: Build libgcc using -fno-stack-protector.
|
||||
|
||||
---
|
||||
gcc/Makefile.in | 2 ++
|
||||
gcc/cp/lang-specs.h | 6 +++---
|
||||
gcc/doc/invoke.texi | 4 ++++
|
||||
gcc/gcc.c | 18 ++++++++++++++----
|
||||
gcc/objc/lang-specs.h | 10 +++++-----
|
||||
gcc/objcp/lang-specs.h | 8 ++++----
|
||||
6 files changed, 32 insertions(+), 16 deletions(-)
|
||||
|
||||
Index: b/gcc/gcc.c
|
||||
===================================================================
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -858,6 +858,14 @@ proper position among the other output f
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
|
||||
#endif
|
||||
|
||||
+#ifndef SSP_DEFAULT_SPEC
|
||||
+#ifdef TARGET_LIBC_PROVIDES_SSP
|
||||
+#define SSP_DEFAULT_SPEC "%{!fno-stack-protector:%{!fstack-protector-all:%{!ffreestanding:%{!nostdlib:%{!fstack-protector:-fstack-protector-strong}}}}}"
|
||||
+#else
|
||||
+#define SSP_DEFAULT_SPEC ""
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
#ifndef LINK_SSP_SPEC
|
||||
#ifdef TARGET_LIBC_PROVIDES_SSP
|
||||
#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
@@ -1057,6 +1065,7 @@ static const char *cc1_spec = CC1_SPEC;
|
||||
static const char *cc1plus_spec = CC1PLUS_SPEC;
|
||||
static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC;
|
||||
static const char *link_ssp_spec = LINK_SSP_SPEC;
|
||||
+static const char *ssp_default_spec = SSP_DEFAULT_SPEC;
|
||||
static const char *asm_spec = ASM_SPEC;
|
||||
static const char *asm_final_spec = ASM_FINAL_SPEC;
|
||||
static const char *link_spec = LINK_SPEC;
|
||||
@@ -1112,7 +1121,7 @@ static const char *cpp_unique_options =
|
||||
static const char *cpp_options =
|
||||
"%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
|
||||
%{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\
|
||||
- %{undef} %{save-temps*:-fpch-preprocess}";
|
||||
+ %{undef} %{save-temps*:-fpch-preprocess} %(ssp_default)";
|
||||
|
||||
/* This contains cpp options which are not passed when the preprocessor
|
||||
output will be used by another program. */
|
||||
@@ -1301,9 +1310,9 @@ static const struct compiler default_com
|
||||
%{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
|
||||
%(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\
|
||||
cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
|
||||
- %(cc1_options)}\
|
||||
+ %(cc1_options) %(ssp_default)}\
|
||||
%{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
|
||||
- cc1 %(cpp_unique_options) %(cc1_options)}}}\
|
||||
+ cc1 %(cpp_unique_options) %(cc1_options) %(ssp_default)}}}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 1},
|
||||
{"-",
|
||||
"%{!E:%e-E or -x required when input is from standard input}\
|
||||
@@ -1328,7 +1337,7 @@ static const struct compiler default_com
|
||||
%W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0},
|
||||
{".i", "@cpp-output", 0, 0, 0},
|
||||
{"@cpp-output",
|
||||
- "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
+ "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(ssp_default) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
{".s", "@assembler", 0, 0, 0},
|
||||
{"@assembler",
|
||||
"%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
|
||||
@@ -1560,6 +1569,7 @@ static struct spec_list static_specs[] =
|
||||
INIT_STATIC_SPEC ("cc1plus", &cc1plus_spec),
|
||||
INIT_STATIC_SPEC ("link_gcc_c_sequence", &link_gcc_c_sequence_spec),
|
||||
INIT_STATIC_SPEC ("link_ssp", &link_ssp_spec),
|
||||
+ INIT_STATIC_SPEC ("ssp_default", &ssp_default_spec),
|
||||
INIT_STATIC_SPEC ("endfile", &endfile_spec),
|
||||
INIT_STATIC_SPEC ("link", &link_spec),
|
||||
INIT_STATIC_SPEC ("lib", &lib_spec),
|
||||
Index: b/gcc/cp/lang-specs.h
|
||||
===================================================================
|
||||
--- a/gcc/cp/lang-specs.h
|
||||
+++ b/gcc/cp/lang-specs.h
|
||||
@@ -46,7 +46,7 @@ along with GCC; see the file COPYING3.
|
||||
%(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
|
||||
cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
- %(cc1_options) %2\
|
||||
+ %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:-o %g.s \
|
||||
%{!fdump-ada-spec*:%{!o*:--output-pch=%i.gch}\
|
||||
%W{o*:--output-pch=%*}}%V}}}}",
|
||||
@@ -58,11 +58,11 @@ along with GCC; see the file COPYING3.
|
||||
%(cpp_options) %2 -o %{save-temps*:%b.ii} %{!save-temps*:%g.ii} \n}\
|
||||
cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
- %(cc1_options) %2\
|
||||
+ %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}",
|
||||
CPLUSPLUS_CPP_SPEC, 0, 0},
|
||||
{".ii", "@c++-cpp-output", 0, 0, 0},
|
||||
{"@c++-cpp-output",
|
||||
"%{!M:%{!MM:%{!E:\
|
||||
- cc1plus -fpreprocessed %i %(cc1_options) %2\
|
||||
+ cc1plus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
Index: b/gcc/params.def
|
||||
===================================================================
|
||||
--- a/gcc/params.def
|
||||
+++ b/gcc/params.def
|
||||
@@ -673,7 +673,7 @@ DEFPARAM (PARAM_INTEGER_SHARE_LIMIT,
|
||||
DEFPARAM (PARAM_SSP_BUFFER_SIZE,
|
||||
"ssp-buffer-size",
|
||||
"The lower bound for a buffer to be considered for stack smashing protection.",
|
||||
- 8, 1, 0)
|
||||
+ 4, 1, 0)
|
||||
|
||||
DEFPARAM (PARAM_MIN_SIZE_FOR_STACK_SHARING,
|
||||
"min-size-for-stack-sharing",
|
||||
Index: b/gcc/objc/lang-specs.h
|
||||
===================================================================
|
||||
--- a/gcc/objc/lang-specs.h
|
||||
+++ b/gcc/objc/lang-specs.h
|
||||
@@ -29,9 +29,9 @@ along with GCC; see the file COPYING3.
|
||||
%{traditional|traditional-cpp:\
|
||||
%eGNU Objective C no longer supports traditional compilation}\
|
||||
%{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
|
||||
- cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}\
|
||||
+ cc1obj -fpreprocessed %{save-temps*:%b.mi} %{!save-temps*:%g.mi} %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:\
|
||||
- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}}}\
|
||||
+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}}}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
{"@objective-c-header",
|
||||
"%{E|M|MM:cc1obj -E %{traditional|traditional-cpp:-traditional-cpp}\
|
||||
@@ -40,18 +40,18 @@ along with GCC; see the file COPYING3.
|
||||
%{traditional|traditional-cpp:\
|
||||
%eGNU Objective C no longer supports traditional compilation}\
|
||||
%{save-temps*|no-integrated-cpp:cc1obj -E %(cpp_options) -o %{save-temps*:%b.mi} %{!save-temps*:%g.mi} \n\
|
||||
- cc1obj -fpreprocessed %b.mi %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
||||
+ cc1obj -fpreprocessed %b.mi %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
||||
-o %g.s %{!o*:--output-pch=%i.gch}\
|
||||
%W{o*:--output-pch=%*}%V}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:\
|
||||
- cc1obj %(cpp_unique_options) %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
||||
+ cc1obj %(cpp_unique_options) %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
||||
-o %g.s %{!o*:--output-pch=%i.gch}\
|
||||
%W{o*:--output-pch=%*}%V}}}}}", 0, 0, 0},
|
||||
{".mi", "@objective-c-cpp-output", 0, 0, 0},
|
||||
{"@objective-c-cpp-output",
|
||||
- "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
||||
+ "%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
{"@objc-cpp-output",
|
||||
"%nobjc-cpp-output is deprecated; please use objective-c-cpp-output instead\n\
|
||||
- %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{print-objc-runtime-info} %{gen-decls}\
|
||||
+ %{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %(ssp_default) %{print-objc-runtime-info} %{gen-decls}\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
Index: b/gcc/objcp/lang-specs.h
|
||||
===================================================================
|
||||
--- a/gcc/objcp/lang-specs.h
|
||||
+++ b/gcc/objcp/lang-specs.h
|
||||
@@ -36,7 +36,7 @@ along with GCC; see the file COPYING3.
|
||||
%(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
|
||||
cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
- %(cc1_options) %2\
|
||||
+ %(cc1_options) %(ssp_default) %2\
|
||||
-o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
|
||||
CPLUSPLUS_CPP_SPEC, 0, 0},
|
||||
{"@objective-c++",
|
||||
@@ -46,16 +46,16 @@ along with GCC; see the file COPYING3.
|
||||
%(cpp_options) %2 -o %{save-temps*:%b.mii} %{!save-temps*:%g.mii} \n}\
|
||||
cc1objplus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.mii} %{!save-temps*:%g.mii}}\
|
||||
%{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
|
||||
- %(cc1_options) %2\
|
||||
+ %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}",
|
||||
CPLUSPLUS_CPP_SPEC, 0, 0},
|
||||
{".mii", "@objective-c++-cpp-output", 0, 0, 0},
|
||||
{"@objective-c++-cpp-output",
|
||||
"%{!M:%{!MM:%{!E:\
|
||||
- cc1objplus -fpreprocessed %i %(cc1_options) %2\
|
||||
+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
{"@objc++-cpp-output",
|
||||
"%nobjc++-cpp-output is deprecated; please use objective-c++-cpp-output instead\n\
|
||||
%{!M:%{!MM:%{!E:\
|
||||
- cc1objplus -fpreprocessed %i %(cc1_options) %2\
|
||||
+ cc1objplus -fpreprocessed %i %(cc1_options) %(ssp_default) %2\
|
||||
%{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
|
||||
Index: b/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -9247,6 +9247,9 @@
|
||||
The minimum size of variables taking part in stack slot sharing when not
|
||||
optimizing. The default value is 32.
|
||||
|
||||
+The Alpine Linux default is "4", to increase
|
||||
+the number of functions protected by the stack protector.
|
||||
+
|
||||
@item max-jump-thread-duplication-stmts
|
||||
Maximum number of statements allowed in a block that needs to be
|
||||
duplicated when threading jumps.
|
||||
@@ -10185,6 +10188,11 @@
|
||||
Like @option{-fstack-protector} but includes additional functions to
|
||||
be protected --- those that have local array definitions, or have
|
||||
references to local frame addresses.
|
||||
+
|
||||
+NOTE: In Alpine Linux,
|
||||
+@option{-fstack-protector-strong} is enabled by default for C,
|
||||
+C++, ObjC, ObjC++, if none of @option{-fno-stack-protector},
|
||||
+@option{-nostdlib}, nor @option{-ffreestanding} are found.
|
||||
|
||||
@item -fstack-protector-explicit
|
||||
@opindex fstack-protector-explicit
|
33
gcc-armhf/002_all_default-relro.patch
Normal file
33
gcc-armhf/002_all_default-relro.patch
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Turn on -Wl,-z,relro,-z,now by default.
|
||||
|
||||
---
|
||||
gcc/doc/invoke.texi | 3 +++
|
||||
gcc/gcc.c | 1 +
|
||||
2 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: b/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -11424,6 +11424,9 @@ For example, @option{-Wl,-Map,output.map
|
||||
linker. When using the GNU linker, you can also get the same effect with
|
||||
@option{-Wl,-Map=output.map}.
|
||||
|
||||
+NOTE: In Alpine Linux, for LDFLAGS, the option
|
||||
+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}.
|
||||
+
|
||||
@item -u @var{symbol}
|
||||
@opindex u
|
||||
Pretend the symbol @var{symbol} is undefined, to force linking of
|
||||
Index: b/gcc/gcc.c
|
||||
===================================================================
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -890,6 +890,7 @@ proper position among the other output f
|
||||
"%{flto|flto=*:%<fcompare-debug*} \
|
||||
%{flto} %{fno-lto} %{flto=*} %l " LINK_PIE_SPEC \
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
+ "-z relro -z now " \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} " VTABLE_VERIFICATION_SPEC " \
|
||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) " SANITIZER_EARLY_SPEC " %o\
|
40
gcc-armhf/003_all_default-fortify-source.patch
Normal file
40
gcc-armhf/003_all_default-fortify-source.patch
Normal file
|
@ -0,0 +1,40 @@
|
|||
# DP: Turn on -D_FORTIFY_SOURCE=2 by default for C, C++, ObjC, ObjC++,
|
||||
# DP: if the optimization level is > 0
|
||||
|
||||
---
|
||||
gcc/doc/invoke.texi | 6 ++++++
|
||||
gcc/c-family/c-cppbuiltin.c | 3 +
|
||||
2 files changed, 9 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: b/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -7840,6 +7840,12 @@ also turns on the following optimization
|
||||
Please note the warning under @option{-fgcse} about
|
||||
invoking @option{-O2} on programs that use computed gotos.
|
||||
|
||||
+NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is
|
||||
+set by default, and is activated when @option{-O} is set to 2 or higher.
|
||||
+This enables additional compile-time and run-time checks for several libc
|
||||
+functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or
|
||||
+@option{-D_FORTIFY_SOURCE=0}.
|
||||
+
|
||||
@item -O3
|
||||
@opindex O3
|
||||
Optimize yet more. @option{-O3} turns on all optimizations specified
|
||||
Index: b/gcc/c-family/c-cppbuiltin.c
|
||||
===================================================================
|
||||
--- a/gcc/c-family/c-cppbuiltin.c
|
||||
+++ b/gcc/c-family/c-cppbuiltin.c
|
||||
@@ -1176,6 +1176,10 @@ c_cpp_builtins (cpp_reader *pfile)
|
||||
builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
|
||||
builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
|
||||
|
||||
+ /* Fortify Source enabled by default for optimization levels > 0 */
|
||||
+ if (optimize)
|
||||
+ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2);
|
||||
+
|
||||
/* Misc. */
|
||||
if (flag_gnu89_inline)
|
||||
cpp_define (pfile, "__GNUC_GNU_INLINE__");
|
241
gcc-armhf/005_all_default-as-needed.patch
Normal file
241
gcc-armhf/005_all_default-as-needed.patch
Normal file
|
@ -0,0 +1,241 @@
|
|||
# DP: On linux targets pass --as-needed by default to the linker, but always
|
||||
# DP: link the sanitizer libraries with --no-as-needed.
|
||||
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -568,8 +568,11 @@ proper position among the other output f
|
||||
#ifdef LIBTSAN_EARLY_SPEC
|
||||
#define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
-#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \
|
||||
- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \
|
||||
+ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " -ltsan " \
|
||||
+ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
STATIC_LIBTSAN_LIBS
|
||||
#else
|
||||
#define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS
|
||||
--- a/gcc/config/gnu-user.h
|
||||
+++ b/gcc/config/gnu-user.h
|
||||
@@ -124,13 +124,13 @@
|
||||
#define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \
|
||||
"%{static-libasan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#undef LIBTSAN_EARLY_SPEC
|
||||
#define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#undef LIBLSAN_EARLY_SPEC
|
||||
#define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#endif
|
||||
Index: b/gcc/config/aarch64/aarch64-linux.h
|
||||
===================================================================
|
||||
--- a/gcc/config/aarch64/aarch64-linux.h
|
||||
+++ b/gcc/config/aarch64/aarch64-linux.h
|
||||
@@ -36,5 +36,6 @@
|
||||
|
||||
#define LINUX_TARGET_LINK_SPEC "%{h*} \
|
||||
+ --as-needed \
|
||||
%{static:-Bstatic} \
|
||||
%{shared:-shared} \
|
||||
%{symbolic:-Bsymbolic} \
|
||||
Index: b/gcc/config/ia64/linux.h
|
||||
===================================================================
|
||||
--- a/gcc/config/ia64/linux.h
|
||||
+++ b/gcc/config/ia64/linux.h
|
||||
@@ -58,7 +58,7 @@ do { \
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "\
|
||||
+#define LINK_SPEC " --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
Index: b/gcc/config/sparc/linux.h
|
||||
===================================================================
|
||||
--- a/gcc/config/sparc/linux.h
|
||||
+++ b/gcc/config/sparc/linux.h
|
||||
@@ -86,7 +86,7 @@ extern const char *host_detect_local_cpu
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
|
||||
+#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \
|
||||
%{!mno-relax:%{!r:-relax}} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
Index: b/gcc/config/s390/linux.h
|
||||
===================================================================
|
||||
--- a/gcc/config/s390/linux.h
|
||||
+++ b/gcc/config/s390/linux.h
|
||||
@@ -65,7 +65,7 @@ along with GCC; see the file COPYING3.
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
|
||||
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{static:-static} \
|
||||
Index: b/gcc/config/rs6000/linux64.h
|
||||
===================================================================
|
||||
--- a/gcc/config/rs6000/linux64.h
|
||||
+++ b/gcc/config/rs6000/linux64.h
|
||||
@@ -466,12 +466,12 @@ extern int dot_symbols;
|
||||
" -m elf64ppc")
|
||||
#endif
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \
|
||||
%(link_os_extra_spec32)"
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \
|
||||
%(link_os_extra_spec64)"
|
||||
Index: b/gcc/config/rs6000/sysv4.h
|
||||
===================================================================
|
||||
--- a/gcc/config/rs6000/sysv4.h
|
||||
+++ b/gcc/config/rs6000/sysv4.h
|
||||
@@ -784,7 +784,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEF
|
||||
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
|
||||
MUSL_DYNAMIC_LINKER)
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
|
||||
|
||||
Index: b/gcc/config/i386/gnu-user64.h
|
||||
===================================================================
|
||||
--- a/gcc/config/i386/gnu-user64.h
|
||||
+++ b/gcc/config/i386/gnu-user64.h
|
||||
@@ -57,5 +57,6 @@ see the files COPYING3 and COPYING.RUNTI
|
||||
%{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \
|
||||
%{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \
|
||||
+ --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
Index: b/gcc/config/i386/gnu-user.h
|
||||
===================================================================
|
||||
--- a/gcc/config/i386/gnu-user.h
|
||||
+++ b/gcc/config/i386/gnu-user.h
|
||||
@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3.
|
||||
{ "link_emulation", GNU_USER_LINK_EMULATION },\
|
||||
{ "dynamic_linker", GNU_USER_DYNAMIC_LINKER }
|
||||
|
||||
-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
|
||||
+#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
Index: b/gcc/config/alpha/linux-elf.h
|
||||
===================================================================
|
||||
--- a/gcc/config/alpha/linux-elf.h
|
||||
+++ b/gcc/config/alpha/linux-elf.h
|
||||
@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3.
|
||||
|
||||
#define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER
|
||||
|
||||
-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
|
||||
+#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \
|
||||
%{O*:-O3} %{!O*:-O1} \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
Index: b/gcc/config/arm/linux-elf.h
|
||||
===================================================================
|
||||
--- a/gcc/config/arm/linux-elf.h
|
||||
+++ b/gcc/config/arm/linux-elf.h
|
||||
@@ -73,5 +73,6 @@
|
||||
%{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
|
||||
-X \
|
||||
+ --as-needed \
|
||||
%{mbig-endian:-EB} %{mlittle-endian:-EL}" \
|
||||
SUBTARGET_EXTRA_LINK_SPEC
|
||||
|
||||
Index: b/gcc/config/mips/gnu-user.h
|
||||
===================================================================
|
||||
--- a/gcc/config/mips/gnu-user.h
|
||||
+++ b/gcc/config/mips/gnu-user.h
|
||||
@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3.
|
||||
#undef GNU_USER_TARGET_LINK_SPEC
|
||||
#define GNU_USER_TARGET_LINK_SPEC "\
|
||||
%{G*} %{EB} %{EL} %{mips*} %{shared} \
|
||||
+ -as-needed \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
Index: b/libjava/Makefile.am
|
||||
===================================================================
|
||||
--- a/libjava/Makefile.am
|
||||
+++ b/libjava/Makefile.am
|
||||
@@ -627,14 +631,14 @@
|
||||
rm .libs/libgcj_bc.so; \
|
||||
mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \
|
||||
$(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
|
||||
- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \
|
||||
+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \
|
||||
rm .libs/libgcj_bc.so.1; \
|
||||
$(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1
|
||||
|
||||
## This rule creates the libgcj_bc library that is actually installed.
|
||||
install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp)
|
||||
$(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \
|
||||
- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS)
|
||||
+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj
|
||||
|
||||
## Note that property_files is defined in sources.am.
|
||||
propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files)))
|
||||
@@ -762,7 +766,7 @@
|
||||
rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
|
||||
mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
|
||||
$(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
|
||||
- -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \
|
||||
+ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \
|
||||
rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
|
||||
$(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
|
||||
rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la;
|
||||
|
||||
Index: b/libjava/Makefile.in
|
||||
===================================================================
|
||||
--- a/libjava/Makefile.in
|
||||
+++ b/libjava/Makefile.in
|
||||
@@ -10644,13 +10648,13 @@
|
||||
rm .libs/libgcj_bc.so; \
|
||||
mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \
|
||||
$(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
|
||||
- -o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \
|
||||
+ -o .libs/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \
|
||||
rm .libs/libgcj_bc.so.1; \
|
||||
$(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1
|
||||
|
||||
install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp)
|
||||
$(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \
|
||||
- $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS)
|
||||
+ $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) -Wl,--no-as-needed -lgcj
|
||||
|
||||
$(propertyo_files): %.lo: classpath/resource/%
|
||||
$(mkinstalldirs) `dirname $@`; \
|
||||
@@ -12494,7 +12498,7 @@
|
||||
@USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
|
||||
@USE_LIBGCJ_BC_TRUE@ mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
|
||||
@USE_LIBGCJ_BC_TRUE@ $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
|
||||
-@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \
|
||||
+@USE_LIBGCJ_BC_TRUE@ -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -Wl,--no-as-needed -lgcj || exit; \
|
||||
@USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
|
||||
@USE_LIBGCJ_BC_TRUE@ $(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
|
||||
@USE_LIBGCJ_BC_TRUE@ rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la;
|
||||
|
43
gcc-armhf/011_all_default-warn-format-security.patch
Normal file
43
gcc-armhf/011_all_default-warn-format-security.patch
Normal file
|
@ -0,0 +1,43 @@
|
|||
Enable -Wformat and -Wformat-security by default.
|
||||
|
||||
|
||||
--- a/gcc/c-family/c.opt
|
||||
+++ b/gcc/c-family/c.opt
|
||||
@@ -412,7 +412,7 @@ C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ O
|
||||
Warn about format strings that are not literals
|
||||
|
||||
Wformat-security
|
||||
-C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
|
||||
+C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
|
||||
Warn about possible security problems with format functions
|
||||
|
||||
Wformat-y2k
|
||||
@@ -424,7 +424,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++
|
||||
Warn about zero-length formats
|
||||
|
||||
Wformat=
|
||||
-C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0)
|
||||
+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0)
|
||||
Warn about printf/scanf/strftime/strfmon format string anomalies
|
||||
|
||||
Wignored-qualifiers
|
||||
--- a/gcc/doc/gcc.info
|
||||
+++ b/gcc/doc/gcc.info
|
||||
@@ -3451,6 +3451,8 @@ compiler warns that an unrecognized option is present.
|
||||
'-Wno-format-contains-nul', '-Wno-format-extra-args', and
|
||||
'-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'.
|
||||
|
||||
+ This option is enabled by default in Alpine Linux.
|
||||
+
|
||||
'-Wno-format-contains-nul'
|
||||
If '-Wformat' is specified, do not warn about format strings
|
||||
that contain NUL bytes.
|
||||
@@ -3496,6 +3498,8 @@ compiler warns that an unrecognized option is present.
|
||||
future warnings may be added to '-Wformat-security' that are
|
||||
not included in '-Wformat-nonliteral'.)
|
||||
|
||||
+ This option is enabled by default in Alpine Linux.
|
||||
+
|
||||
'-Wformat-y2k'
|
||||
If '-Wformat' is specified, also warn about 'strftime' formats
|
||||
that may yield only a two-digit year.
|
25
gcc-armhf/012_all_default-warn-trampolines.patch
Normal file
25
gcc-armhf/012_all_default-warn-trampolines.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
Enable -Wtrampolines by default.
|
||||
|
||||
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -648,7 +648,7 @@ Common Var(warn_system_headers) Warning
|
||||
Do not suppress warnings from system headers
|
||||
|
||||
Wtrampolines
|
||||
-Common Var(warn_trampolines) Warning
|
||||
+Common Var(warn_trampolines) Init(1) Warning
|
||||
Warn whenever a trampoline is generated
|
||||
|
||||
Wtype-limits
|
||||
--- a/gcc/doc/gcc.info
|
||||
+++ b/gcc/doc/gcc.info
|
||||
@@ -4021,6 +4021,8 @@ compiler warns that an unrecognized option is present.
|
||||
and thus requires the stack to be made executable in order for the
|
||||
program to work properly.
|
||||
|
||||
+ This warning is enabled by default in Gentoo.
|
||||
+
|
||||
'-Wfloat-equal'
|
||||
Warn if floating-point values are used in equality comparisons.
|
||||
|
39
gcc-armhf/020_all_msgfmt-libstdc++-link.patch
Normal file
39
gcc-armhf/020_all_msgfmt-libstdc++-link.patch
Normal file
|
@ -0,0 +1,39 @@
|
|||
Ensure that msgfmt doesn't encounter problems during gcc bootstrapping.
|
||||
|
||||
Solves error messages like the following:
|
||||
|
||||
msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6)
|
||||
|
||||
The libgcc_s.so used during build doesn't satisfy the needs of the
|
||||
libstdc++.so that msgfmt is linked against. On the other hand, msgfmt
|
||||
is used as a stand-alone application here, and what library it uses
|
||||
behind the scenes is of no concern to the gcc build process.
|
||||
Therefore, simply invoking it "as usual", i.e. without any special
|
||||
library path, will make it work as expected here.
|
||||
|
||||
2011-09-19 Martin von Gagern
|
||||
|
||||
References:
|
||||
https://bugs.gentoo.org/372377
|
||||
https://bugs.gentoo.org/295480
|
||||
|
||||
--- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.am
|
||||
+++ gcc-4.1.2/libstdc++-v3/po/Makefile.am
|
||||
@@ -39,6 +39,7 @@ MSGFMT = msgfmt
|
||||
EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN)
|
||||
|
||||
.po.mo:
|
||||
+ env --unset=LD_LIBRARY_PATH \
|
||||
$(MSGFMT) -o $@ $<
|
||||
|
||||
all-local: all-local-$(USE_NLS)
|
||||
--- gcc-4.1.2.orig/libstdc++-v3/po/Makefile.in
|
||||
+++ gcc-4.1.2/libstdc++-v3/po/Makefile.in
|
||||
@@ -419,6 +419,7 @@ uninstall-am: uninstall-info-am
|
||||
|
||||
|
||||
.po.mo:
|
||||
+ env --unset=LD_LIBRARY_PATH \
|
||||
$(MSGFMT) -o $@ $<
|
||||
|
||||
all-local: all-local-$(USE_NLS)
|
18
gcc-armhf/050_all_libiberty-asprintf.patch
Normal file
18
gcc-armhf/050_all_libiberty-asprintf.patch
Normal file
|
@ -0,0 +1,18 @@
|
|||
2008-07-25 Magnus Granberg <zorry@ume.nu>
|
||||
|
||||
* include/libiberty.h (asprintf): Don't declare if defined as a macro
|
||||
|
||||
--- a/include/libiberty.h
|
||||
+++ b/include/libiberty.h
|
||||
@@ -609,8 +609,11 @@ extern int pwait (int, int *, int);
|
||||
/* Like sprintf but provides a pointer to malloc'd storage, which must
|
||||
be freed by the caller. */
|
||||
|
||||
+/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */
|
||||
+#ifndef asprintf
|
||||
extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#if !HAVE_DECL_VASPRINTF
|
||||
/* Like vsprintf but provides a pointer to malloc'd storage, which
|
10
gcc-armhf/051_all_libiberty-pic.patch
Normal file
10
gcc-armhf/051_all_libiberty-pic.patch
Normal file
|
@ -0,0 +1,10 @@
|
|||
--- a/libiberty/Makefile.in
|
||||
+++ b/libiberty/Makefile.in
|
||||
@@ -246,6 +246,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
|
||||
$(AR) $(AR_FLAGS) $(TARGETLIB) \
|
||||
$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
|
||||
$(RANLIB) $(TARGETLIB); \
|
||||
+ cp $(TARGETLIB) ../ ; \
|
||||
cd ..; \
|
||||
else true; fi
|
||||
|
27
gcc-armhf/053_all_libitm-no-fortify-source.patch
Normal file
27
gcc-armhf/053_all_libitm-no-fortify-source.patch
Normal file
|
@ -0,0 +1,27 @@
|
|||
https://bugs.gentoo.org/508852
|
||||
https://gcc.gnu.org/PR61164
|
||||
|
||||
2014-04-27 Magnus Granberg <zorry@gentoo.org>
|
||||
|
||||
#508852
|
||||
* libitm/configure.tgt: Disable FORTIFY
|
||||
|
||||
--- a/libitm/configure.tgt
|
||||
+++ b/libitm/configure.tgt
|
||||
@@ -43,6 +43,16 @@ if test "$gcc_cv_have_tls" = yes ; then
|
||||
esac
|
||||
fi
|
||||
|
||||
+# FIXME: error: inlining failed in call to always_inline
|
||||
+# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’
|
||||
+# : function body can be overwritten at link time
|
||||
+# Disable Fortify in libitm for now. #508852
|
||||
+case "${target}" in
|
||||
+ *-*-linux*)
|
||||
+ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE"
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
# Map the target cpu to an ARCH sub-directory. At the same time,
|
||||
# work out any special compilation flags as necessary.
|
||||
case "${target_cpu}" in
|
194
gcc-armhf/067_all_gcc-poison-system-directories.patch
Normal file
194
gcc-armhf/067_all_gcc-poison-system-directories.patch
Normal file
|
@ -0,0 +1,194 @@
|
|||
http://cgit.openembedded.org/openembedded-core/plain/meta/recipes-devtools/gcc/gcc-6.1/0010-gcc-poison-system-directories.patch
|
||||
|
||||
From d76250323dad69212c958e4857a98d99ab51a39e Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 29 Mar 2013 08:59:00 +0400
|
||||
Subject: [PATCH 10/46] gcc: poison-system-directories
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Upstream-Status: Inappropriate [distribution: codesourcery]
|
||||
---
|
||||
gcc/common.opt | 4 ++++
|
||||
gcc/config.in | 6 ++++++
|
||||
gcc/configure | 16 ++++++++++++++++
|
||||
gcc/configure.ac | 10 ++++++++++
|
||||
gcc/doc/invoke.texi | 9 +++++++++
|
||||
gcc/gcc.c | 2 ++
|
||||
gcc/incpath.c | 19 +++++++++++++++++++
|
||||
7 files changed, 66 insertions(+)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index 67048db..733185c 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -659,6 +659,10 @@ Wreturn-local-addr
|
||||
Common Var(warn_return_local_addr) Init(1) Warning
|
||||
Warn about returning a pointer/reference to a local or temporary variable.
|
||||
|
||||
+Wpoison-system-directories
|
||||
+Common Var(flag_poison_system_directories) Init(1) Warning
|
||||
+Warn for -I and -L options using system directories if cross compiling
|
||||
+
|
||||
Wshadow
|
||||
Common Var(warn_shadow) Warning
|
||||
Warn when one local variable shadows another.
|
||||
diff --git a/gcc/config.in b/gcc/config.in
|
||||
index 115cb61..105b30f 100644
|
||||
--- a/gcc/config.in
|
||||
+++ b/gcc/config.in
|
||||
@@ -187,6 +187,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to warn for use of native system header directories */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 1c6e340..8f83152 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -942,6 +942,7 @@ with_system_zlib
|
||||
enable_maintainer_mode
|
||||
enable_link_mutex
|
||||
enable_version_specific_runtime_libs
|
||||
+enable_poison_system_directories
|
||||
enable_plugin
|
||||
enable_host_shared
|
||||
enable_libquadmath_support
|
||||
@@ -1681,6 +1682,8 @@ Optional Features:
|
||||
--enable-version-specific-runtime-libs
|
||||
specify that runtime libraries should be installed
|
||||
in a compiler-specific directory
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system header directories
|
||||
--enable-plugin enable plugin support
|
||||
--enable-host-shared build host code as shared libraries
|
||||
--disable-libquadmath-support
|
||||
@@ -28908,6 +28911,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
|
||||
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index 6c1dcd9..0fccaef 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -5861,6 +5861,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
|
||||
[specify that runtime libraries should be
|
||||
installed in a compiler-specific directory])])
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system header directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system header directories])
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
AC_SUBST(subdirs)
|
||||
AC_SUBST(srcdir)
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 821f8fd..8bb49e7 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -284,6 +284,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-Wparentheses -Wno-pedantic-ms-format @gol
|
||||
-Wplacement-new -Wplacement-new=@var{n} @gol
|
||||
-Wpointer-arith -Wno-pointer-to-int-cast @gol
|
||||
+-Wno-poison-system-directories @gol
|
||||
-Wno-pragmas -Wredundant-decls -Wno-return-local-addr @gol
|
||||
-Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol
|
||||
-Wshift-overflow -Wshift-overflow=@var{n} @gol
|
||||
@@ -4723,6 +4724,14 @@ made up of data only and thus requires no special treatment. But, for
|
||||
most targets, it is made up of code and thus requires the stack to be
|
||||
made executable in order for the program to work properly.
|
||||
|
||||
+@item -Wno-poison-system-directories
|
||||
+@opindex Wno-poison-system-directories
|
||||
+Do not warn for @option{-I} or @option{-L} options using system
|
||||
+directories such as @file{/usr/include} when cross compiling. This
|
||||
+option is intended for use in chroot environments when such
|
||||
+directories contain the correct headers and libraries for the target
|
||||
+system rather than the host.
|
||||
+
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 1af5920..4cfef7f 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -1017,6 +1017,8 @@ proper position among the other output files. */
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \
|
||||
+ %{Wno-poison-system-directories:--no-poison-system-directories} \
|
||||
+ %{Werror=poison-system-directories:--error-poison-system-directories} \
|
||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) " \
|
||||
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \
|
||||
%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
|
||||
diff --git a/gcc/incpath.c b/gcc/incpath.c
|
||||
index ea40f4a..856da41 100644
|
||||
--- a/gcc/incpath.c
|
||||
+++ b/gcc/incpath.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "intl.h"
|
||||
#include "incpath.h"
|
||||
#include "cppdefault.h"
|
||||
+#include "diagnostic-core.h"
|
||||
|
||||
/* Microsoft Windows does not natively support inodes.
|
||||
VMS has non-numeric inodes. */
|
||||
@@ -381,6 +382,24 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
}
|
||||
fprintf (stderr, _("End of search list.\n"));
|
||||
}
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (flag_poison_system_directories)
|
||||
+ {
|
||||
+ struct cpp_dir *p;
|
||||
+
|
||||
+ for (p = heads[QUOTE]; p; p = p->next)
|
||||
+ {
|
||||
+ if ((!strncmp (p->name, "/usr/include", 12))
|
||||
+ || (!strncmp (p->name, "/usr/local/include", 18))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18)))
|
||||
+ warning (OPT_Wpoison_system_directories,
|
||||
+ "include location \"%s\" is unsafe for "
|
||||
+ "cross-compilation",
|
||||
+ p->name);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Use given -I paths for #include "..." but not #include <...>, and
|
||||
--
|
||||
2.8.2
|
||||
|
18
gcc-armhf/090_all_pr55930-dependency-tracking.patch
Normal file
18
gcc-armhf/090_all_pr55930-dependency-tracking.patch
Normal file
|
@ -0,0 +1,18 @@
|
|||
libatomic build failure if configured with --disable-dependency-tracking
|
||||
load_n.c:115:1: fatal error: opening dependency file .deps/load_1_.lo.Ppo: No such file or directory
|
||||
|
||||
https://bugs.gentoo.org/463463
|
||||
http://gcc.gnu.org/PR55930
|
||||
|
||||
--- a/libatomic/Makefile.in
|
||||
+++ b/libatomic/Makefile.in
|
||||
@@ -298,7 +298,8 @@ PAT_N = $(word 2,$(PAT_SPLIT))
|
||||
PAT_S = $(word 3,$(PAT_SPLIT))
|
||||
IFUNC_DEF = -DIFUNC_ALT=$(PAT_S)
|
||||
IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS))
|
||||
-M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
|
||||
+@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo
|
||||
+@AMDEP_FALSE@M_DEPS =
|
||||
M_SIZE = -DN=$(PAT_N)
|
||||
M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT))
|
||||
M_FILE = $(PAT_BASE)_n.c
|
59
gcc-armhf/201-cilkrts.patch
Normal file
59
gcc-armhf/201-cilkrts.patch
Normal file
|
@ -0,0 +1,59 @@
|
|||
From 594e3c1ab576daddeb86015efc8b1677020b1878 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 24 Oct 2015 20:39:30 +0000
|
||||
Subject: [PATCH 1/6] cilkrts
|
||||
|
||||
---
|
||||
libcilkrts/runtime/os-unix.c | 22 +++++++---------------
|
||||
1 file changed, 7 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c
|
||||
index cb582dd..e43d7d5 100644
|
||||
--- a/libcilkrts/runtime/os-unix.c
|
||||
+++ b/libcilkrts/runtime/os-unix.c
|
||||
@@ -51,6 +51,7 @@
|
||||
#if defined __linux__
|
||||
# include <sys/sysinfo.h>
|
||||
# include <sys/syscall.h>
|
||||
+# include <sched.h>
|
||||
#elif defined __APPLE__
|
||||
# include <sys/sysctl.h>
|
||||
// Uses sysconf(_SC_NPROCESSORS_ONLN) in verbose output
|
||||
@@ -400,28 +401,19 @@ COMMON_SYSDEP void __cilkrts_sleep(void)
|
||||
|
||||
COMMON_SYSDEP void __cilkrts_yield(void)
|
||||
{
|
||||
-#if __APPLE__ || __FreeBSD__ || __VXWORKS__
|
||||
- // On MacOS, call sched_yield to yield quantum. I'm not sure why we
|
||||
- // don't do this on Linux also.
|
||||
- sched_yield();
|
||||
-#elif defined(__DragonFly__)
|
||||
- // On DragonFly BSD, call sched_yield to yield quantum.
|
||||
- sched_yield();
|
||||
-#elif defined(__MIC__)
|
||||
+#if defined(__MIC__)
|
||||
// On MIC, pthread_yield() really trashes things. Arch's measurements
|
||||
// showed that calling _mm_delay_32() (or doing nothing) was a better
|
||||
// option. Delaying 1024 clock cycles is a reasonable compromise between
|
||||
// giving up the processor and latency starting up when work becomes
|
||||
// available
|
||||
_mm_delay_32(1024);
|
||||
-#elif defined(__ANDROID__) || (defined(__sun__) && defined(__svr4__))
|
||||
- // On Android and Solaris, call sched_yield to yield quantum. I'm not
|
||||
- // sure why we don't do this on Linux also.
|
||||
- sched_yield();
|
||||
-#else
|
||||
- // On Linux, call pthread_yield (which in turn will call sched_yield)
|
||||
- // to yield quantum.
|
||||
+#elif defined(__sun__) && !defined(__svr4__)
|
||||
+ // On old SunOS call pthread_yield to yield a quantum.
|
||||
pthread_yield();
|
||||
+#else
|
||||
+ // On other platforms call sched_yield to yield a quantum.
|
||||
+ sched_yield();
|
||||
#endif
|
||||
}
|
||||
|
||||
--
|
||||
2.8.1
|
||||
|
42
gcc-armhf/202-posix_memalign.patch
Normal file
42
gcc-armhf/202-posix_memalign.patch
Normal file
|
@ -0,0 +1,42 @@
|
|||
From bab47fac06af5d891caaccac99f1dc1e75bdc219 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 1 Aug 2015 23:24:07 +0000
|
||||
Subject: [PATCH 2/6] posix_memalign
|
||||
|
||||
---
|
||||
gcc/config/i386/pmm_malloc.h | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/pmm_malloc.h b/gcc/config/i386/pmm_malloc.h
|
||||
index a1f98d3..4f6b2dc 100644
|
||||
--- a/gcc/config/i386/pmm_malloc.h
|
||||
+++ b/gcc/config/i386/pmm_malloc.h
|
||||
@@ -27,12 +27,13 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
/* We can't depend on <stdlib.h> since the prototype of posix_memalign
|
||||
- may not be visible. */
|
||||
+ may not be visible and we can't pollute the namespace either. */
|
||||
#ifndef __cplusplus
|
||||
-extern int posix_memalign (void **, size_t, size_t);
|
||||
+extern int _mm_posix_memalign (void **, size_t, size_t)
|
||||
#else
|
||||
-extern "C" int posix_memalign (void **, size_t, size_t) throw ();
|
||||
+extern "C" int _mm_posix_memalign (void **, size_t, size_t) throw ()
|
||||
#endif
|
||||
+__asm__("posix_memalign");
|
||||
|
||||
static __inline void *
|
||||
_mm_malloc (size_t size, size_t alignment)
|
||||
@@ -42,7 +43,7 @@ _mm_malloc (size_t size, size_t alignment)
|
||||
return malloc (size);
|
||||
if (alignment == 2 || (sizeof (void *) == 8 && alignment == 4))
|
||||
alignment = sizeof (void *);
|
||||
- if (posix_memalign (&ptr, alignment, size) == 0)
|
||||
+ if (_mm_posix_memalign (&ptr, alignment, size) == 0)
|
||||
return ptr;
|
||||
else
|
||||
return NULL;
|
||||
--
|
||||
2.8.1
|
||||
|
56
gcc-armhf/203-libgcc_s.patch
Normal file
56
gcc-armhf/203-libgcc_s.patch
Normal file
|
@ -0,0 +1,56 @@
|
|||
From 9e3eab51e518018d9d99b3123598b1e2322a6af3 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 24 Oct 2015 20:09:53 +0000
|
||||
Subject: [PATCH 3/6] libgcc_s
|
||||
|
||||
---
|
||||
gcc/config/i386/i386.c | 4 ++--
|
||||
libgcc/config/i386/cpuinfo.c | 6 +++---
|
||||
libgcc/config/i386/t-linux | 2 +-
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index 3d044e8..82523e1 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -40269,10 +40269,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
|
||||
{
|
||||
case IX86_BUILTIN_CPU_INIT:
|
||||
{
|
||||
- /* Make it call __cpu_indicator_init in libgcc. */
|
||||
+ /* Make it call __cpu_indicator_init_local in libgcc.a. */
|
||||
tree call_expr, fndecl, type;
|
||||
type = build_function_type_list (integer_type_node, NULL_TREE);
|
||||
- fndecl = build_fn_decl ("__cpu_indicator_init", type);
|
||||
+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type);
|
||||
call_expr = build_call_expr (fndecl, 0);
|
||||
return expand_expr (call_expr, target, mode, EXPAND_NORMAL);
|
||||
}
|
||||
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
|
||||
index 8c2248d..6c82f15 100644
|
||||
--- a/libgcc/config/i386/cpuinfo.c
|
||||
+++ b/libgcc/config/i386/cpuinfo.c
|
||||
@@ -485,7 +485,7 @@ __cpu_indicator_init (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#if defined SHARED && defined USE_ELF_SYMVER
|
||||
-__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0");
|
||||
-__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0");
|
||||
+#ifndef SHARED
|
||||
+int __cpu_indicator_init_local (void)
|
||||
+ __attribute__ ((weak, alias ("__cpu_indicator_init")));
|
||||
#endif
|
||||
diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux
|
||||
index 11bb46e..4f47f7b 100644
|
||||
--- a/libgcc/config/i386/t-linux
|
||||
+++ b/libgcc/config/i386/t-linux
|
||||
@@ -3,4 +3,4 @@
|
||||
# t-slibgcc-elf-ver and t-linux
|
||||
SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
|
||||
|
||||
-HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER
|
||||
+HOST_LIBGCC2_CFLAGS += -mlong-double-80
|
||||
--
|
||||
2.8.1
|
||||
|
25
gcc-armhf/204-linux_libc_has_function.patch
Normal file
25
gcc-armhf/204-linux_libc_has_function.patch
Normal file
|
@ -0,0 +1,25 @@
|
|||
From edec78452d693fb524daa9a6efd45c850b27b25c Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Fri, 6 Nov 2015 23:59:20 +0000
|
||||
Subject: [PATCH 4/6] linux_libc_has_function
|
||||
|
||||
---
|
||||
gcc/config/linux.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gcc/config/linux.c b/gcc/config/linux.c
|
||||
index 250296b..16c3768 100644
|
||||
--- a/gcc/config/linux.c
|
||||
+++ b/gcc/config/linux.c
|
||||
@@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
bool
|
||||
linux_libc_has_function (enum function_class fn_class)
|
||||
{
|
||||
- if (OPTION_GLIBC)
|
||||
+ if (OPTION_GLIBC || OPTION_MUSL)
|
||||
return true;
|
||||
if (OPTION_BIONIC)
|
||||
if (fn_class == function_c94
|
||||
--
|
||||
2.8.1
|
||||
|
75
gcc-armhf/205-nopie.patch
Normal file
75
gcc-armhf/205-nopie.patch
Normal file
|
@ -0,0 +1,75 @@
|
|||
From b6015aca9c9cc83739fd0ed637a835119b2c4e34 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 7 Nov 2015 02:08:05 +0000
|
||||
Subject: [PATCH 5/6] nopie
|
||||
|
||||
---
|
||||
gcc/configure | 27 +++++++++++++++++++++++++++
|
||||
gcc/configure.ac | 13 +++++++++++++
|
||||
2 files changed, 40 insertions(+)
|
||||
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 1c6e340..7e8b5d6 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -29390,6 +29390,33 @@ fi
|
||||
$as_echo "$gcc_cv_no_pie" >&6; }
|
||||
if test "$gcc_cv_no_pie" = "yes"; then
|
||||
NO_PIE_FLAG="-no-pie"
|
||||
+else
|
||||
+ # Check if -nopie works.
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5
|
||||
+$as_echo_n "checking for -nopie option... " >&6; }
|
||||
+if test "${gcc_cv_nopie+set}" = set; then :
|
||||
+ $as_echo_n "(cached) " >&6
|
||||
+else
|
||||
+ saved_LDFLAGS="$LDFLAGS"
|
||||
+ LDFLAGS="$LDFLAGS -nopie"
|
||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
+/* end confdefs.h. */
|
||||
+int main(void) {return 0;}
|
||||
+_ACEOF
|
||||
+if ac_fn_cxx_try_link "$LINENO"; then :
|
||||
+ gcc_cv_nopie=yes
|
||||
+else
|
||||
+ gcc_cv_nopie=no
|
||||
+fi
|
||||
+rm -f core conftest.err conftest.$ac_objext \
|
||||
+ conftest$ac_exeext conftest.$ac_ext
|
||||
+ LDFLAGS="$saved_LDFLAGS"
|
||||
+fi
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5
|
||||
+$as_echo "$gcc_cv_nopie" >&6; }
|
||||
+ if test "$gcc_cv_nopie" = "yes"; then
|
||||
+ NO_PIE_FLAG="-nopie"
|
||||
+ fi
|
||||
fi
|
||||
|
||||
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index 6c1dcd9..0ca7647 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -6098,6 +6098,19 @@ AC_CACHE_CHECK([for -no-pie option],
|
||||
LDFLAGS="$saved_LDFLAGS"])
|
||||
if test "$gcc_cv_no_pie" = "yes"; then
|
||||
NO_PIE_FLAG="-no-pie"
|
||||
+else
|
||||
+ # Check if -nopie works.
|
||||
+ AC_CACHE_CHECK([for -nopie option],
|
||||
+ [gcc_cv_nopie],
|
||||
+ [saved_LDFLAGS="$LDFLAGS"
|
||||
+ LDFLAGS="$LDFLAGS -nopie"
|
||||
+ AC_LINK_IFELSE([int main(void) {return 0;}],
|
||||
+ [gcc_cv_nopie=yes],
|
||||
+ [gcc_cv_nopie=no])
|
||||
+ LDFLAGS="$saved_LDFLAGS"])
|
||||
+ if test "$gcc_cv_nopie" = "yes"; then
|
||||
+ NO_PIE_FLAG="-nopie"
|
||||
+ fi
|
||||
fi
|
||||
AC_SUBST([NO_PIE_FLAG])
|
||||
|
||||
--
|
||||
2.8.1
|
||||
|
40
gcc-armhf/207-static-pie.patch
Normal file
40
gcc-armhf/207-static-pie.patch
Normal file
|
@ -0,0 +1,40 @@
|
|||
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
|
||||
index b0bf40a..d4b56fe 100644
|
||||
--- a/gcc/config/gnu-user.h
|
||||
+++ b/gcc/config/gnu-user.h
|
||||
@@ -51,10 +51,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#if defined HAVE_LD_PIE
|
||||
#define GNU_USER_TARGET_STARTFILE_SPEC \
|
||||
"%{!shared: %{pg|p|profile:gcrt1.o%s;: \
|
||||
- %{" PIE_SPEC ":Scrt1.o%s} %{" NO_PIE_SPEC ":crt1.o%s}}} \
|
||||
- crti.o%s %{static:crtbeginT.o%s;: %{shared:crtbeginS.o%s} \
|
||||
+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \
|
||||
+ crti.o%s %{shared:crtbeginS.o%s;: \
|
||||
%{" PIE_SPEC ":crtbeginS.o%s} \
|
||||
- %{" NO_PIE_SPEC ":crtbegin.o%s}} \
|
||||
+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \
|
||||
%{fvtable-verify=none:%s; \
|
||||
fvtable-verify=preinit:vtv_start_preinit.o%s; \
|
||||
fvtable-verify=std:vtv_start.o%s} \
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 0208d61..731564e 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -870,7 +870,7 @@ proper position among the other output files. */
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_DEFAULT_PIE
|
||||
-#define NO_PIE_SPEC "no-pie|static"
|
||||
+#define NO_PIE_SPEC "no-pie"
|
||||
#define PIE_SPEC NO_PIE_SPEC "|r|shared:;"
|
||||
#define NO_FPIE1_SPEC "fno-pie"
|
||||
#define FPIE1_SPEC NO_FPIE1_SPEC ":;"
|
||||
@@ -916,7 +916,7 @@ proper position among the other output files. */
|
||||
#ifndef LINK_PIE_SPEC
|
||||
#ifdef HAVE_LD_PIE
|
||||
#ifndef LD_PIE_SPEC
|
||||
-#define LD_PIE_SPEC "-pie"
|
||||
+#define LD_PIE_SPEC "-pie %{static:--no-dynamic-linker -Bsymbolic}"
|
||||
#endif
|
||||
#else
|
||||
#define LD_PIE_SPEC ""
|
32
gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch
Normal file
32
gcc-armhf/300-main-gcc-add-musl-s390x-dynamic-linker.patch
Normal file
|
@ -0,0 +1,32 @@
|
|||
From be841c16dd544553c67faac79bd4cc3cd10a1dc0 Mon Sep 17 00:00:00 2001
|
||||
From: "Tuan M. Hoang" <tmhoang@flatglobe.org>
|
||||
Date: Mon, 21 Nov 2016 01:42:16 +0700
|
||||
Subject: [PATCH] main/gcc: add musl s390x dynamic linker
|
||||
|
||||
---
|
||||
gcc/config/s390/linux.h | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
|
||||
index 1e3ed35..a244214 100644
|
||||
--- a/gcc/config/s390/linux.h
|
||||
+++ b/gcc/config/s390/linux.h
|
||||
@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
|
||||
#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
|
||||
|
||||
+#undef MUSL_DYNAMIC_LINKER
|
||||
+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-s390x.so.1"
|
||||
+#undef MUSL_DYNAMIC_LINKER32
|
||||
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390x.so.1"
|
||||
+#undef MUSL_DYNAMIC_LINKER64
|
||||
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1"
|
||||
+#undef MUSL_DYNAMIC_LINKERX32
|
||||
+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-s390x.so.1"
|
||||
+
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
"%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \
|
||||
--
|
||||
2.10.2
|
||||
|
28
gcc-armhf/310-build-gcj-s390x.patch
Normal file
28
gcc-armhf/310-build-gcj-s390x.patch
Normal file
|
@ -0,0 +1,28 @@
|
|||
From 697a7ba791fce2ffab2ed723d909a89684019e3d Mon Sep 17 00:00:00 2001
|
||||
From: "Tuan M. Hoang" <tmhoang@flatglobe.org>
|
||||
Date: Sun, 19 Feb 2017 17:03:33 +0000
|
||||
Subject: [PATCH] main/gcc : when building gcc-java on s390x, libgcj.so
|
||||
complains about undefined reference to __data_start. Using
|
||||
SEARCH_FOR_DATA_START instead solved it. Credit to Andrew Haley at RedHat.
|
||||
|
||||
---
|
||||
boehm-gc/include/private/gcconfig.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
|
||||
index 4ca6a80..a15fff6 100644
|
||||
--- a/boehm-gc/include/private/gcconfig.h
|
||||
+++ b/boehm-gc/include/private/gcconfig.h
|
||||
@@ -1837,8 +1837,7 @@
|
||||
# define OS_TYPE "LINUX"
|
||||
# define LINUX_STACKBOTTOM
|
||||
# define DYNAMIC_LOADING
|
||||
- extern int __data_start[];
|
||||
-# define DATASTART ((ptr_t)(__data_start))
|
||||
+# define SEARCH_FOR_DATA_START
|
||||
extern int _end[];
|
||||
# define DATAEND (_end)
|
||||
# define CACHE_LINE_SIZE 256
|
||||
--
|
||||
2.11.1
|
||||
|
13
gcc-armhf/320-libffi-gnulinux.patch
Normal file
13
gcc-armhf/320-libffi-gnulinux.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
diff --git a/libffi/closures.c.orig b/libffi/closures.c
|
||||
index 721ff00..22a699c 100644
|
||||
--- a/libffi/src/closures.c.orig
|
||||
+++ b/libffi/src/closures.c
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <ffi_common.h>
|
||||
|
||||
#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE
|
||||
-# if __gnu_linux__ && !defined(__ANDROID__)
|
||||
+# if __linux__ && !defined(__ANDROID__)
|
||||
/* This macro indicates it may be forbidden to map anonymous memory
|
||||
with both write and execute permission. Code compiled when this
|
||||
option is defined will attempt to map such pages once, but if it
|
649
gcc-armhf/APKBUILD
Normal file
649
gcc-armhf/APKBUILD
Normal file
|
@ -0,0 +1,649 @@
|
|||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen gcc-armhf
|
||||
# Based on: main/gcc
|
||||
|
||||
CTARGET_ARCH=armhf
|
||||
CTARGET="$(arch_to_hostspec ${CTARGET_ARCH})"
|
||||
CBUILDROOT="/usr/$CTARGET"
|
||||
LANG_OBJC=false
|
||||
LANG_JAVA=false
|
||||
LANG_GO=false
|
||||
LANG_FORTRAN=false
|
||||
LANG_ADA=false
|
||||
options="!strip !tracedeps"
|
||||
|
||||
pkgname="gcc-armhf"
|
||||
pkgver=6.3.0
|
||||
_pkgbase=6.3.0
|
||||
[ "$BOOTSTRAP" = "nolibc" ] && pkgname="gcc-pass2"
|
||||
[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross=""
|
||||
[ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target=""
|
||||
|
||||
pkgname="gcc-armhf"
|
||||
pkgrel=4
|
||||
pkgdesc="Stage2 cross-compiler for armhf"
|
||||
url="http://gcc.gnu.org"
|
||||
arch="all"
|
||||
license="GPL LGPL"
|
||||
_gccrel=$pkgver-r$pkgrel
|
||||
depends="isl binutils-armhf"
|
||||
makedepends_build="gcc g++ paxmark bison flex texinfo gawk zip gmp-dev mpfr-dev mpc1-dev zlib-dev"
|
||||
makedepends_host="linux-headers gmp-dev mpfr-dev mpc1-dev isl-dev zlib-dev musl-dev-armhf binutils-armhf"
|
||||
subpackages=""
|
||||
[ "$CHOST" = "$CTARGET" ] && subpackages="gcc-doc$_target"
|
||||
replaces="libstdc++ binutils"
|
||||
|
||||
: ${LANG_CXX:=true}
|
||||
: ${LANG_OBJC:=true}
|
||||
: ${LANG_JAVA:=true}
|
||||
: ${LANG_GO:=true}
|
||||
: ${LANG_FORTRAN:=true}
|
||||
: ${LANG_ADA:=true}
|
||||
|
||||
LIBGOMP="false"
|
||||
LIBGCC="false"
|
||||
LIBATOMIC="false"
|
||||
LIBITM="false"
|
||||
|
||||
# omit-frame-pointner will break libgcc on aarch64
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71951
|
||||
if [ "$CARCH" = aarch64 ]; then
|
||||
export CFLAGS=${CFLAGS//-fomit-frame-pointer/}
|
||||
export CXXFLAGS=${CXXFLAGS//-fomit-frame-pointer/}
|
||||
export CPPFLAGS=${CPPFLAGS//-fomit-frame-pointer/}
|
||||
fi
|
||||
|
||||
if [ "$CHOST" != "$CTARGET" ]; then
|
||||
if [ "$BOOTSTRAP" = nolibc ]; then
|
||||
LANG_CXX=false
|
||||
LANG_ADA=false
|
||||
LIBGCC=false
|
||||
_builddir="$srcdir/build-cross-pass2"
|
||||
else
|
||||
_builddir="$srcdir/build-cross-final"
|
||||
fi
|
||||
LANG_OBJC=false
|
||||
LANG_JAVA=false
|
||||
LANG_GO=false
|
||||
LANG_FORTRAN=false
|
||||
LIBGOMP=false
|
||||
LIBATOMIC=false
|
||||
LIBITM=false
|
||||
|
||||
# reset target flags (should be set in crosscreate abuild)
|
||||
# fixup flags. seems gcc treats CPPFLAGS as global without
|
||||
# _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS.
|
||||
export CFLAGS="$CPPFLAGS $CFLAGS"
|
||||
export CXXFLAGS="$CPPFLAGS $CXXFLAGS"
|
||||
unset CPPFLAGS
|
||||
export CFLAGS_FOR_TARGET=" "
|
||||
export CXXFLAGS_FOR_TARGET=" "
|
||||
export LDFLAGS_FOR_TARGET=" "
|
||||
|
||||
STRIP_FOR_TARGET="$CTARGET-strip"
|
||||
elif [ "$CBUILD" != "$CHOST" ]; then
|
||||
# fixup flags. seems gcc treats CPPFLAGS as global without
|
||||
# _FOR_xxx variants. wrap it in CFLAGS and CXXFLAGS.
|
||||
export CFLAGS="$CPPFLAGS $CFLAGS"
|
||||
export CXXFLAGS="$CPPFLAGS $CXXFLAGS"
|
||||
unset CPPFLAGS
|
||||
|
||||
# reset flags and cc for build
|
||||
export CC_FOR_BUILD="gcc"
|
||||
export CXX_FOR_BUILD="g++"
|
||||
export CFLAGS_FOR_BUILD=" "
|
||||
export CXXFLAGS_FOR_BUILD=" "
|
||||
export LDFLAGS_FOR_BUILD=" "
|
||||
export CFLAGS_FOR_TARGET=" "
|
||||
export CXXFLAGS_FOR_TARGET=" "
|
||||
export LDFLAGS_FOR_TARGET=" "
|
||||
|
||||
# Languages that do not need bootstrapping
|
||||
LANG_OBJC=false
|
||||
LANG_JAVA=false
|
||||
LANG_GO=false
|
||||
LANG_FORTRAN=false
|
||||
|
||||
STRIP_FOR_TARGET=${CROSS_COMPILE}strip
|
||||
_builddir="$srcdir/build-cross-native"
|
||||
else
|
||||
STRIP_FOR_TARGET=${CROSS_COMPILE}strip
|
||||
_builddir="$srcdir/build"
|
||||
fi
|
||||
|
||||
# Go needs {set,make,swap}context, unimplemented in musl
|
||||
[ "$CTARGET_LIBC" = musl ] && LANG_GO=false
|
||||
|
||||
# libitm has TEXTRELs in ARM build, so disable for now
|
||||
case "$CTARGET_ARCH" in
|
||||
arm*) LIBITM=false ;;
|
||||
esac
|
||||
|
||||
# Fortran uses libquadmath if toolchain has __float128
|
||||
# currently on x86, x86_64 and ia64
|
||||
LIBQUADMATH=$LANG_FORTRAN
|
||||
case "$CTARGET_ARCH" in
|
||||
x86 | x86_64) LIBQUADMATH=$LANG_FORTRAN ;;
|
||||
*) LIBQUADMATH=false ;;
|
||||
esac
|
||||
|
||||
# libatomic is a dependency for openvswitch
|
||||
$LIBATOMIC && subpackages="$subpackages libatomic::$CTARGET_ARCH"
|
||||
$LIBGCC && subpackages="$subpackages libgcc::$CTARGET_ARCH"
|
||||
$LIBQUADMATH && subpackages="$subpackages libquadmath::$CTARGET_ARCH"
|
||||
if $LIBGOMP; then
|
||||
depends="$depends libgomp=$_gccrel"
|
||||
subpackages="$subpackages libgomp::$CTARGET_ARCH"
|
||||
fi
|
||||
|
||||
_languages=c
|
||||
if $LANG_CXX; then
|
||||
subpackages="$subpackages g++$_target:gpp"
|
||||
_languages="$_languages,c++"
|
||||
fi
|
||||
if $LANG_OBJC; then
|
||||
subpackages="$subpackages libobjc::$CTARGET_ARCH gcc-objc$_target:objc"
|
||||
_languages="$_languages,objc"
|
||||
fi
|
||||
if $LANG_JAVA; then
|
||||
subpackages="$subpackages libgcj::$CTARGET_ARCH gcc-java$_target:java"
|
||||
_languages="$_languages,java"
|
||||
fi
|
||||
if $LANG_GO; then
|
||||
subpackages="$subpackages libgo::$CTARGET_ARCH gcc-go$_target:go"
|
||||
_languages="$_languages,go"
|
||||
fi
|
||||
if $LANG_FORTRAN; then
|
||||
subpackages="$subpackages libgfortran::$CTARGET_ARCH gfortran$_target:gfortran"
|
||||
_languages="$_languages,fortran"
|
||||
fi
|
||||
if $LANG_ADA; then
|
||||
subpackages="$subpackages libgnat::$CTARGET_ARCH gcc-gnat$_target:gnat"
|
||||
_languages="$_languages,ada"
|
||||
makedepends_build="$makedepends_build gcc-gnat$_cross"
|
||||
fi
|
||||
makedepends="$makedepends_build $makedepends_host"
|
||||
|
||||
source="ftp://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkgbase:-$pkgver}.tar.bz2
|
||||
ftp://sourceware.org/pub/java/ecj-4.9.jar
|
||||
|
||||
001_all_default-ssp-strong.patch
|
||||
002_all_default-relro.patch
|
||||
003_all_default-fortify-source.patch
|
||||
005_all_default-as-needed.patch
|
||||
011_all_default-warn-format-security.patch
|
||||
012_all_default-warn-trampolines.patch
|
||||
020_all_msgfmt-libstdc++-link.patch
|
||||
050_all_libiberty-asprintf.patch
|
||||
051_all_libiberty-pic.patch
|
||||
053_all_libitm-no-fortify-source.patch
|
||||
067_all_gcc-poison-system-directories.patch
|
||||
090_all_pr55930-dependency-tracking.patch
|
||||
|
||||
201-cilkrts.patch
|
||||
202-posix_memalign.patch
|
||||
203-libgcc_s.patch
|
||||
204-linux_libc_has_function.patch
|
||||
205-nopie.patch
|
||||
207-static-pie.patch
|
||||
|
||||
libgcc-always-build-gcceh.a.patch
|
||||
libada-cross-shared.patch
|
||||
gcc-4.9-musl-fortify.patch
|
||||
gcc-6.1-musl-libssp.patch
|
||||
boehm-gc-musl.patch
|
||||
gcc-pure64.patch
|
||||
fix-gcj-stdgnu14-link.patch
|
||||
fix-gcj-musl.patch
|
||||
fix-gcj-iconv-musl.patch
|
||||
|
||||
gcc-4.8-build-args.patch
|
||||
fix-cxxflags-passing.patch
|
||||
ada-fixes.patch
|
||||
ada-shared.patch
|
||||
ada-musl.patch
|
||||
|
||||
300-main-gcc-add-musl-s390x-dynamic-linker.patch
|
||||
310-build-gcj-s390x.patch
|
||||
320-libffi-gnulinux.patch
|
||||
|
||||
fix-rs6000-pie.patch
|
||||
"
|
||||
|
||||
# we build out-of-tree
|
||||
_gccdir="$srcdir"/gcc-${_pkgbase:-$pkgver}
|
||||
_gcclibdir=/usr/lib/gcc/${CTARGET}/$pkgver
|
||||
_gcclibexec=/usr/libexec/gcc/${CTARGET}/$pkgver
|
||||
|
||||
prepare() {
|
||||
cd "$_gccdir"
|
||||
|
||||
_err=
|
||||
for i in $source; do
|
||||
case "$i" in
|
||||
*.patch)
|
||||
msg "Applying $i"
|
||||
patch -p1 -F3 -i "$srcdir"/$i || _err="$_err $i"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -n "$_err" ]; then
|
||||
error "The following patches failed:"
|
||||
for i in $_err; do
|
||||
echo " $i"
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
|
||||
# see http://gcc.gnu.org/ml/java/2008-04/msg00027.html
|
||||
mv "$srcdir"/ecj-*.jar ecj.jar
|
||||
|
||||
echo ${pkgver} > gcc/BASE-VER
|
||||
}
|
||||
|
||||
build() {
|
||||
local _arch_configure=
|
||||
local _libc_configure=
|
||||
local _cross_configure=
|
||||
local _bootstrap_configure=
|
||||
local _symvers=
|
||||
|
||||
cd "$_gccdir"
|
||||
|
||||
# temp disable boostrap for aarch64 see bug:
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71989
|
||||
case "$CTARGET" in
|
||||
aarch64-*-*-*) _arch_configure="--with-arch=armv8-a --with-abi=lp64 --disable-bootstrap";;
|
||||
armv6-*-*-*eabihf) _arch_configure="--with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-abi=aapcs-linux";;
|
||||
armv7-*-*-*eabihf) _arch_configure="--with-arch=armv7-a --with-tune=generic-armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-abi=aapcs-linux --with-mode=thumb";;
|
||||
mipsel-*-*-*) _arch_configure="--with-arch-32=mips2 --with-tune-32=mips32 --with-fp-32=32 --with-mips-plt --with-float=hard --with-abi=32";;
|
||||
powerpc-*-*-*) _arch_configure="--enable-secureplt --enable-decimal-float=no";;
|
||||
powerpc64*-*-*-*) _arch_configure="--with-abi=elfv2 --enable-secureplt --enable-decimal-float=no --enable-targets=powerpcle-linux";;
|
||||
i486-*-*-*) _arch_configure="--with-arch=i486 --with-tune=generic --enable-cld";;
|
||||
i586-*-*-*) _arch_configure="--with-arch=i586 --with-tune=generic --enable-cld";;
|
||||
s390x-*-*-*) _arch_configure="--with-arch=z196 --with-tune=zEC12 --with-zarch --with-long-double-128 --enable-decimal-float";;
|
||||
esac
|
||||
|
||||
case "$CTARGET_LIBC" in
|
||||
musl)
|
||||
# musl does not support mudflap, or libsanitizer
|
||||
# libmpx uses secure_getenv and struct _libc_fpstate not present in musl
|
||||
# alpine musl provides libssp_nonshared.a, so we don't need libssp either
|
||||
_libc_configure="--disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer"
|
||||
_symvers="--disable-symvers"
|
||||
export libat_cv_have_ifunc=no
|
||||
;;
|
||||
esac
|
||||
|
||||
[ "$CBUILD" != "$CHOST" ] && _cross_configure="--disable-bootstrap"
|
||||
[ "$CHOST" != "$CTARGET" ] && _cross_configure="--disable-bootstrap --with-sysroot=$CBUILDROOT"
|
||||
|
||||
case "$BOOTSTRAP" in
|
||||
nolibc) _bootstrap_configure="--with-newlib --disable-shared --enable-threads=no" ;;
|
||||
*) _bootstrap_configure="--enable-shared --enable-threads --enable-tls" ;;
|
||||
esac
|
||||
|
||||
$LIBGOMP || _bootstrap_configure="$_bootstrap_configure --disable-libgomp"
|
||||
$LIBATOMIC || _bootstrap_configure="$_bootstrap_configure --disable-libatomic"
|
||||
$LIBITM || _bootstrap_configure="$_bootstrap_configure --disable-libitm"
|
||||
$LIBQUADMATH || _arch_configure="$_arch_configure --disable-libquadmath"
|
||||
|
||||
msg "Building the following:"
|
||||
echo ""
|
||||
echo " CBUILD=$CBUILD"
|
||||
echo " CHOST=$CHOST"
|
||||
echo " CTARGET=$CTARGET"
|
||||
echo " CTARGET_ARCH=$CTARGET_ARCH"
|
||||
echo " CTARGET_LIBC=$CTARGET_LIBC"
|
||||
echo " languages=$_languages"
|
||||
echo " arch_configure=$_arch_configure"
|
||||
echo " libc_configure=$_libc_configure"
|
||||
echo " cross_configure=$_cross_configure"
|
||||
echo " bootstrap_configure=$_bootstrap_configure"
|
||||
echo ""
|
||||
|
||||
mkdir -p "$_builddir"
|
||||
cd "$_builddir"
|
||||
"$_gccdir"/configure --prefix=/usr \
|
||||
--mandir=/usr/share/man \
|
||||
--infodir=/usr/share/info \
|
||||
--build=${CBUILD} \
|
||||
--host=${CHOST} \
|
||||
--target=${CTARGET} \
|
||||
--with-pkgversion="Alpine ${pkgver}" \
|
||||
--enable-checking=release \
|
||||
--disable-fixed-point \
|
||||
--disable-libstdcxx-pch \
|
||||
--disable-multilib \
|
||||
--disable-nls \
|
||||
--disable-werror \
|
||||
$_symvers \
|
||||
--enable-__cxa_atexit \
|
||||
--enable-default-pie \
|
||||
--enable-cloog-backend \
|
||||
--enable-languages=$_languages \
|
||||
$_arch_configure \
|
||||
$_libc_configure \
|
||||
$_cross_configure \
|
||||
$_bootstrap_configure \
|
||||
--with-system-zlib \
|
||||
--with-linker-hash-style=gnu
|
||||
make
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$_builddir"
|
||||
make -j1 DESTDIR="${pkgdir}" install
|
||||
|
||||
ln -s gcc "$pkgdir"/usr/bin/cc
|
||||
|
||||
# we dont support gcj -static
|
||||
# and saving 35MB is not bad.
|
||||
find "$pkgdir" -name libgcj.a -o -name libgtkpeer.a \
|
||||
-o -name libgjsmalsa.a -o -name libgcj-tools.a \
|
||||
-o -name libjvm.a -o -name libgij.a -o -name libgcj_bc.a \
|
||||
-o -name libjavamath.a \
|
||||
| xargs rm -f
|
||||
|
||||
# strip debug info from some static libs
|
||||
${STRIP_FOR_TARGET} -g `find "$pkgdir" \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \
|
||||
-o -name libmudflap.a -o -name libmudflapth.a \
|
||||
-o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \
|
||||
-o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \
|
||||
-o -name libatomic.a -o -name libasan.a -o -name libtsan.a \) \
|
||||
-a -type f`
|
||||
|
||||
if $LANG_JAVA; then
|
||||
sed -i -e 's/lib: /&%{static:%eJava programs cannot be linked statically}/' \
|
||||
"$pkgdir"/usr/lib/libgcj.spec
|
||||
fi
|
||||
|
||||
if $LIBGOMP; then
|
||||
mv "$pkgdir"/usr/lib/libgomp.spec "$pkgdir"/$_gcclibdir
|
||||
fi
|
||||
if $LIBITM; then
|
||||
mv "$pkgdir"/usr/lib/libitm.spec "$pkgdir"/$_gcclibdir
|
||||
fi
|
||||
|
||||
# remove ffi
|
||||
rm -f "$pkgdir"/usr/lib/libffi* "$pkgdir"/usr/share/man/man3/ffi*
|
||||
find "$pkgdir" -name 'ffi*.h' | xargs rm -f
|
||||
|
||||
mkdir -p "$pkgdir"/usr/share/gdb/python/auto-load/usr/lib
|
||||
|
||||
paxmark -pmrs "$pkgdir"/$_gcclibexec/cc1
|
||||
|
||||
# move ada runtime libs
|
||||
if $LANG_ADA; then
|
||||
for i in $(find "$pkgdir"/$_gcclibdir/adalib/ -type f -maxdepth 1 -name "libgna*.so"); do
|
||||
mv "$i" "$pkgdir"/usr/lib/
|
||||
ln -s ../../../../${i##*/} $i
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$CHOST" != "$CTARGET" ]; then
|
||||
# cross-gcc: remove any files that would conflict with the
|
||||
# native gcc package
|
||||
rm -rf "$pkgdir"/usr/bin/cc "$pkgdir"/usr/include "$pkgdir"/usr/share
|
||||
# libcc1 does not depend on target, don't ship it
|
||||
rm -rf "$pkgdir"/usr/lib/libcc1.so*
|
||||
|
||||
# fixup gcc library symlinks to be linker scripts so
|
||||
# linker finds the libs from relocated sysroot
|
||||
for so in "$pkgdir"/usr/$CTARGET/lib/*.so; do
|
||||
if [ -h "$so" ]; then
|
||||
local _real=$(basename $(readlink "$so"))
|
||||
rm -f "$so"
|
||||
echo "GROUP ($_real)" > "$so"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
libatomic() {
|
||||
pkgdesc="GCC Atomic library"
|
||||
depends=
|
||||
replaces="gcc"
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libatomic.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
libcxx() {
|
||||
pkgdesc="GNU C++ standard runtime library"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libstdc++.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
gpp() {
|
||||
pkgdesc="GNU C++ standard library and compiler"
|
||||
depends="libstdc++=$_gccrel gcc=$_gccrel libc-dev"
|
||||
mkdir -p "$subpkgdir/$_gcclibexec" \
|
||||
"$subpkgdir"/usr/bin \
|
||||
"$subpkgdir"/usr/${_target:+$CTARGET/}include \
|
||||
"$subpkgdir"/usr/${_target:+$CTARGET/}lib \
|
||||
|
||||
mv "$pkgdir/$_gcclibexec/cc1plus" "$subpkgdir/$_gcclibexec/"
|
||||
paxmark -pmrs "$subpkgdir/$_gcclibexec/cc1plus"
|
||||
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/*++* "$subpkgdir"/usr/${_target:+$CTARGET/}lib/
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}include/c++ "$subpkgdir"/usr/${_target:+$CTARGET/}include/
|
||||
mv "$pkgdir"/usr/bin/*++ "$subpkgdir"/usr/bin/
|
||||
}
|
||||
|
||||
libobjc() {
|
||||
pkgdesc="GNU Objective-C runtime"
|
||||
replaces="objc"
|
||||
depends=
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libobjc.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
objc() {
|
||||
pkgdesc="GNU Objective-C"
|
||||
replaces="gcc"
|
||||
depends="libc-dev gcc=$_gccrel libobjc=$_gccrel"
|
||||
|
||||
mkdir -p "$subpkgdir"/$_gcclibdir/include \
|
||||
"$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/$_gcclibdir/include/objc "$subpkgdir"/$_gcclibdir/include/
|
||||
mv "$pkgdir"/usr/lib/libobjc.so "$pkgdir"/usr/lib/libobjc.a \
|
||||
"$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
libgcc() {
|
||||
pkgdesc="GNU C compiler runtime libraries"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgcc_s.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
libgomp() {
|
||||
pkgdesc="GCC shared-memory parallel programming API library"
|
||||
depends=
|
||||
replaces="gcc"
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/${_target:+$CTARGET/}lib/libgomp.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
java() {
|
||||
pkgdesc="Java support for GCC"
|
||||
depends="zlib-dev gcc=$_gccrel libgcj=$_gccrel"
|
||||
|
||||
paxmark -pm "$pkgdir"/$_gcclibexec/ecj1
|
||||
mkdir -p "$subpkgdir"/usr/bin "$subpkgdir"/usr/lib "$subpkgdir"/$_gcclibdir/
|
||||
cd "$pkgdir"/usr/bin
|
||||
mv gcj gcj-dbtool gjavah gcjh jcf-dump "$subpkgdir"/usr/bin/
|
||||
cd "$pkgdir"
|
||||
for i in $(find usr/ -name ecj1 -o -name jc1 -o -name jvgenmain); do
|
||||
mkdir -p "$subpkgdir"/${i%/*}
|
||||
mv "$pkgdir"/$i "$subpkgdir"/$i
|
||||
done
|
||||
for i in "$pkgdir"/usr/lib/libgcj*.so; do
|
||||
if [ -L "$i" ]; then
|
||||
mv "$i" "$subpkgdir"/usr/lib/
|
||||
fi
|
||||
done
|
||||
mv "$pkgdir"/usr/lib/libgij.so "$subpkgdir"/usr/lib/
|
||||
mv "$pkgdir"/usr/lib/libgcj.spec "$subpkgdir"/$_gcclibdir/
|
||||
}
|
||||
|
||||
libgcj() {
|
||||
pkgdesc="Java runtime library for gcc"
|
||||
# libgcj_bc.so moved from gcc-java to libgcj
|
||||
replaces="gcc-java"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/bin
|
||||
cd "$pkgdir"/usr/bin
|
||||
paxmark -pmse "$pkgdir"/usr/bin/gij
|
||||
mv aot-compile gappletviewer gc-analyze gij gjar gjarsigner gkeytool\
|
||||
gnative2ascii gorbd grmic grmid grmiregistry gserialver \
|
||||
gtnameserv jv-convert rebuild-gcj-db \
|
||||
"$subpkgdir"/usr/bin/
|
||||
cd "$pkgdir"
|
||||
for i in $(find usr/lib -name jc1 -o -name jvgenmain); do
|
||||
mkdir -p "$subpkgdir"/${i%/*}
|
||||
mv "$pkgdir"/$i "$subpkgdir"/$i
|
||||
done
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/lib/gcj-* \
|
||||
"$pkgdir"/usr/lib/libgcj_bc.so \
|
||||
"$pkgdir"/usr/lib/libgcj*.so.* \
|
||||
"$pkgdir"/usr/lib/libgij.so.* \
|
||||
"$pkgdir"/usr/lib/logging.properties \
|
||||
"$pkgdir"/usr/lib/security \
|
||||
"$subpkgdir"/usr/lib/
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/share/
|
||||
mv "$pkgdir"/usr/share/java "$subpkgdir"/usr/share/
|
||||
}
|
||||
|
||||
libgo() {
|
||||
pkgdesc="Go runtime library for GCC"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/lib/libgo.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
go() {
|
||||
pkgdesc="Go support for GCC"
|
||||
depends="gcc=$_gccrel libgo=$_gccrel"
|
||||
|
||||
mkdir -p "$subpkgdir"/$_gcclibexec \
|
||||
"$subpkgdir"/usr/lib \
|
||||
"$subpkgdir"/usr/bin
|
||||
mv "$pkgdir"/usr/lib/go "$subpkgdir"/usr/lib/
|
||||
mv "$pkgdir"/usr/bin/*gccgo "$subpkgdir"/usr/bin/
|
||||
mv "$pkgdir"/$_gcclibexec/go1 "$subpkgdir"/$_gcclibexec/
|
||||
mv "$pkgdir"/usr/lib/libgo.a \
|
||||
"$pkgdir"/usr/lib/libgo.so \
|
||||
"$pkgdir"/usr/lib/libgobegin.a \
|
||||
"$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
libgfortran() {
|
||||
pkgdesc="Fortran runtime library for GCC"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/lib/libgfortran.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
libquadmath() {
|
||||
replaces="gcc"
|
||||
pkgdesc="128-bit math library for GCC"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/lib/libquadmath.so.* "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
gfortran() {
|
||||
pkgdesc="GNU Fortran Compiler"
|
||||
depends="gcc=$_gccrel libgfortran=$_gccrel"
|
||||
$LIBQUADMATH && depends="$depends libquadmath=$_gccrel"
|
||||
replaces="gcc"
|
||||
|
||||
mkdir -p "$subpkgdir"/$_gcclibexec \
|
||||
"$subpkgdir"/$_gcclibdir \
|
||||
"$subpkgdir"/usr/lib \
|
||||
"$subpkgdir"/usr/bin
|
||||
mv "$pkgdir"/usr/bin/*gfortran "$subpkgdir"/usr/bin/
|
||||
mv "$pkgdir"/usr/lib/libgfortran.a \
|
||||
"$pkgdir"/usr/lib/libgfortran.so \
|
||||
"$subpkgdir"/usr/lib/
|
||||
if $LIBQUADMATH; then
|
||||
mv "$pkgdir"/usr/lib/libquadmath.a \
|
||||
"$pkgdir"/usr/lib/libquadmath.so \
|
||||
"$subpkgdir"/usr/lib/
|
||||
fi
|
||||
mv "$pkgdir"/$_gcclibexec/f951 "$subpkgdir"/$_gcclibexec
|
||||
mv "$pkgdir"/usr/lib/libgfortran.spec "$subpkgdir"/$_gcclibdir
|
||||
}
|
||||
|
||||
libgnat() {
|
||||
pkgdesc="GNU Ada runtime shared libraries"
|
||||
depends=
|
||||
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/usr/lib/libgna*.so "$subpkgdir"/usr/lib/
|
||||
}
|
||||
|
||||
gnat() {
|
||||
pkgdesc="Ada support for GCC"
|
||||
depends="gcc=$_gccrel"
|
||||
[ "$CHOST" = "$CTARGET" ] && depends="$depends libgnat=$_gccrel"
|
||||
|
||||
mkdir -p "$subpkgdir"/$_gcclibexec \
|
||||
"$subpkgdir"/$_gcclibdir \
|
||||
"$subpkgdir"/usr/bin
|
||||
mv "$pkgdir"/$_gcclibexec/*gnat* "$subpkgdir"/$_gcclibexec/
|
||||
mv "$pkgdir"/$_gcclibdir/*ada* "$subpkgdir"/$_gcclibdir/
|
||||
mv "$pkgdir"/usr/bin/*gnat* "$subpkgdir"/usr/bin/
|
||||
}
|
||||
|
||||
sha512sums="234dd9b1bdc9a9c6e352216a7ef4ccadc6c07f156006a59759c5e0e6a69f0abcdc14630eff11e3826dd6ba5933a8faa43043f3d1d62df6bd5ab1e82862f9bf78 gcc-6.3.0.tar.bz2
|
||||
28f8c6fdbcb19e950b1d0bafb3bcc7a8cba87bc673aa6027cece116599cdee80f0cf5e95a1440544890239f5c754e8a93ab46d9daedd937faef445d7ea33b226 ecj-4.9.jar
|
||||
a1335adc2fbee98e36c4437ff2587771b98ed4180726779020f65039498235626a411cdb0100dbd20cd19d12f0d94f9a21af179ff624676c28cead9d60598b5d 001_all_default-ssp-strong.patch
|
||||
e36e95b81489163abd6fe9d58f7867bdca43e61143afacbfb17f4698c0b16ec5fd0061d8fab7b2ae615540bebd721c2e2227f80401b4e7fc253da9da62e6b513 002_all_default-relro.patch
|
||||
f86466c62b8291fac46f9c250c7ad8fa5ab7b1cce2504442fd07ddc4543665b317ae28951f244e39aba29aeaf3fff252ec4f6a147aa16adb2b7aed747dd89188 003_all_default-fortify-source.patch
|
||||
51282fea54c7e616367bbeb2479ba13fec6f24eb47bd04e2071907b3b36273b2ff24676f46ef8d22f241c8ab4857307861eee076eab66797c3a50a8ecaa1809a 005_all_default-as-needed.patch
|
||||
3398386dd1e079d6545dd9799adc799c6b80e3984fac6899d0e1a7ee21b66d0c7e53cddf17a65d590c883db750f9f79aaedd857355a8b9f7fb9476c906237919 011_all_default-warn-format-security.patch
|
||||
9adb0d2b9b67dd957df6c609b8714c7c078efb52cd88770905c37c67827be8fc83d1125037b9c29d77db21ce78756aa2bb0bacdb0b98d869ac126da76a298e21 012_all_default-warn-trampolines.patch
|
||||
d35a3ac7e13a4446921a90e1ff3eec1079840c845f9d523c868e24ae21f94cf69ba041de5341ebef96432a6f57598e223381d4286e8fb8baaa25906707f29fbd 020_all_msgfmt-libstdc++-link.patch
|
||||
840070a3c423e6206aaa6e63e1d9a0fcd6efd53626cd1240a193f0b60aa5d84216acc4a2a4fa8bce74549b07e6a316b01d638f20cea13dc62473491a302fb3d6 050_all_libiberty-asprintf.patch
|
||||
0a0bc72b9366158f5d23fff1928e756fdd212433bac6ab1f00d632f241382820db8db5d475ddf11ea020eaf7e2e71b12fb9b1c3c870cf84adf6c2b16f15aabca 051_all_libiberty-pic.patch
|
||||
e7a2eb1b1870e199d6fd753d065781575656fa12baa264f96c5d179689d88c31b8a3f92a5dae96088c05e96aa2bda138364ad7dbcc79e1819a102f192cbb7bab 053_all_libitm-no-fortify-source.patch
|
||||
e87da18aa7ab92b02b06168658c63b42a6c73a08fad2a30f81ef6296100fdbe3c3a91548fd0cb24eaf591e862bb08e4b67249bc4b977b07da33523aee0c686bc 067_all_gcc-poison-system-directories.patch
|
||||
4a328d1e1a56c20166307edcfa322068915784d9c08025b7f81cf69714da48fc266b6d34f77b9135c2f10da830d9df408276a1b78d1fd218637c2823506593c2 090_all_pr55930-dependency-tracking.patch
|
||||
ef052d0c3c9642fcb5ed570069c5a49c8ef523c47ac8ce3f201a801766f72ae4ff7c3725a70ee66e52c0fb559621e35fe0cf5b88b901d71ceadd381f49653a08 201-cilkrts.patch
|
||||
40b7f2fc44fbe8125027c424f9ef3e6b89129ee4c6d47f3f3075f28979bcece2a3bc0ddd17df6bae77960db773f48fba2eb252923063ac81788340e7ec575d99 202-posix_memalign.patch
|
||||
808e206f5e107084156fba333d4e091dcbd62f5d7756142bc292d4b0a52619f8c2aaca3617defc2f5b6552ba0439aebd33f4141329d88eab6ddf2dd637d92c08 203-libgcc_s.patch
|
||||
fc0de05b36613b732a0222ea005c90653c6a40d6761b6894af2419272f4e74875f37e26af33a9b9940669ef89269c44c46d17ca5bcd54b5cd1176e5eaf2992c1 204-linux_libc_has_function.patch
|
||||
98473bcaa77903a223ca9b0d2087c0921b287a2816d308cc32c8fe009e6cbf5dd1ae7fba27794ab8d9c09e117fe534413d91a464d1218474fc123ce0adfdc2c1 205-nopie.patch
|
||||
3287d5b443bea8ec64132bcabe869c738ae98ea8f1a86df1c5d18c927f8816edbfcefeefc47792dbbb2bcacf50319af00e01b3735d34525913b64350770ad453 207-static-pie.patch
|
||||
d08d7ead2de0429e5c9055d5b029ec2be9a8c821d22cecaf9b51f633652c493333f98963d9267fa2fa63850c50ae5eefd5f59e5910ec10d20044dac082182a8b libgcc-always-build-gcceh.a.patch
|
||||
497e73650b4e7ac1cc92158b993f543b1506d3af4f9df9cb1e9504af4db657a9fc6e4429b4cb2bf5b3c1c8c06a5cec5d8b19bc958fd57b92d7b4d5e58b34554c libada-cross-shared.patch
|
||||
600fe5098dc54edaa9808fd5717af9dec058953f9ad37d49cfba1db4f7e9a7a8f02019342f75157fc575946fa693259422184de27b7ecc8386d9f3ecc0f7cc5d gcc-4.9-musl-fortify.patch
|
||||
dbe0ee917fc7668571722364ab7c806731e3a31e8bfa30b4941b28b16b877d2a32b4a3897ef533399a28f82d43cac9b28e92de0493f0e779046db56584e07fa4 gcc-6.1-musl-libssp.patch
|
||||
bda845a6aa1854d2c883910b115f79ccfa93dfc2b5eac69a3a236d83eb34cadc140731d616ffc24698c7abc8878dd15f231bcc5119f1860e575a120b311706c7 boehm-gc-musl.patch
|
||||
fa62556719449caec6b2b434355bfbcaa5ae55ffe017b3e1f827f66a2aae21b79c571ee7a4ce723ea69169bc3a6447e73650991a200cc372adf2f102677518d7 gcc-pure64.patch
|
||||
2253941f3d19b6d08801d3782f5f5ed56c3b73fbc9d3561a8f01c702963ac4fab91599c686076e7081eb6a80c37ccd33591ae978996d6eee1dc0ce0f1c50259a fix-gcj-stdgnu14-link.patch
|
||||
f89ddeb21bc8f97e6a850a6b70b4501a8f3e49a4bc8cc82897488decda5d98ad01cb7f6c8b392d452e9579924a523bc75da6e0648c1c976d42e40af48b10343b fix-gcj-musl.patch
|
||||
54d67cc008b735e47771314171930c5d8b8f5f5dc97fcf4214824c105c808f3e75d22d5a4fdf5068ed0457fa0d46c60cfb442e276259a4a5e9b8722a027d18e6 fix-gcj-iconv-musl.patch
|
||||
abe9aaf9aa956058d0386a4396a511d176a46bb3906b90e952383646cdc158cbeb0a5dc616a1ccb1ca7d49fd0b5e351532aa15a3b13362abbf1ca4266f54a687 gcc-4.8-build-args.patch
|
||||
35d6d59f0b7b968f282f56767c9e0823a7bdc5aa0d450aca50fbd802649a7ca608b47671244a3faa208a9b0d6832cabb5a22724157dc817b2c0ad63d09f93282 fix-cxxflags-passing.patch
|
||||
9016b257abd8fa981de44a49512e35db814d1cbb47c1a87cd31c12d4ae20b13e9e149fe41691a7ec3c95bbcfde8a79194a8d2eaf547ceade3a246fad67c47dd8 ada-fixes.patch
|
||||
3f5bc334d9f73d06f5f7c876738d02356acdd08958bea0e4d2095ebf15c2c2ec4e411abdae0297505ae9a1699ca01b17338e853184e84663203b192b0d35fc19 ada-shared.patch
|
||||
631d4bdef6d8bde34df7978bb53ec28c3c909cf1f87139e5f148138d0f09adc58b41ecf0148bbf50fb4bc916c411e9bf8a2b6c046c75c0e77d754d8c35bcd4d7 ada-musl.patch
|
||||
4b4a0ff306a8ef34ff6e3284fbfca869012164a47ba7cb099085c1dd03e6ca0cdd462f82710e08c9a02895adc7484e4c5eef17b5aa264cf5d978fe8ad78eea93 300-main-gcc-add-musl-s390x-dynamic-linker.patch
|
||||
385bc2fa50204f678964e5148c6170f572701dab920fbec8301f505bda34d182cde0adb7da042fee71719e12fb59f59181897f9b1bb4f4716ff59aad46ca1998 310-build-gcj-s390x.patch
|
||||
f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181 320-libffi-gnulinux.patch
|
||||
01c71cd5881fc07ea3b9b980697e89b3ca0fe98502958ceafc3fca18b2604c844e2f457feab711baf8e03f00a5383b0e38aac7eb954034e306f43d4a37f165ed fix-rs6000-pie.patch"
|
35
gcc-armhf/ada-fixes.patch
Normal file
35
gcc-armhf/ada-fixes.patch
Normal file
|
@ -0,0 +1,35 @@
|
|||
--- gcc-6.1.0.orig/gcc/ada/cal.c
|
||||
+++ gcc-6.1.0/gcc/ada/cal.c
|
||||
@@ -49,6 +49,7 @@
|
||||
#include <time.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
+#include <time.h>
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
--- gcc-6.1.0.orig/gcc/ada/terminals.c
|
||||
+++ gcc-6.1.0/gcc/ada/terminals.c
|
||||
@@ -1068,13 +1068,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
-/* On some system termio is either absent or including it will disable termios
|
||||
- (HP-UX) */
|
||||
-#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \
|
||||
- && !defined (__rtems__)
|
||||
-# include <termio.h>
|
||||
-#endif
|
||||
-
|
||||
#include <sys/ioctl.h>
|
||||
#include <termios.h>
|
||||
#include <fcntl.h>
|
||||
@@ -1169,7 +1162,7 @@
|
||||
char *slave_name = NULL;
|
||||
|
||||
#ifdef USE_GETPT
|
||||
- master_fd = getpt ();
|
||||
+ master_fd = posix_openpt (O_RDWR);
|
||||
#elif defined (USE_OPENPTY)
|
||||
status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL);
|
||||
#elif defined (USE_CLONE_DEVICE)
|
137
gcc-armhf/ada-musl.patch
Normal file
137
gcc-armhf/ada-musl.patch
Normal file
|
@ -0,0 +1,137 @@
|
|||
diff -rup gcc-5.1.0/gcc.orig/ada/adaint.c gcc-5.1.0/gcc/ada/adaint.c
|
||||
--- gcc-5.1.0/gcc.orig/ada/adaint.c 2015-02-20 11:48:57.000000000 +0000
|
||||
+++ gcc-5.1.0/gcc/ada/adaint.c 2015-06-02 10:47:51.672767476 +0000
|
||||
@@ -70,6 +70,11 @@
|
||||
#include <sys/param.h>
|
||||
#include <sys/pstat.h>
|
||||
#endif
|
||||
+
|
||||
+#if defined (linux)
|
||||
+#define _GNU_SOURCE 1
|
||||
+#include <sched.h>
|
||||
+#endif
|
||||
|
||||
#ifdef __PikeOS__
|
||||
#define __BSD_VISIBLE 1
|
||||
@@ -3057,8 +3062,6 @@ __gnat_lwp_self (void)
|
||||
return (void *) syscall (__NR_gettid);
|
||||
}
|
||||
|
||||
-#include <sched.h>
|
||||
-
|
||||
/* glibc versions earlier than 2.7 do not define the routines to handle
|
||||
dynamically allocated CPU sets. For these targets, we use the static
|
||||
versions. */
|
||||
@@ -3067,7 +3070,7 @@ __gnat_lwp_self (void)
|
||||
|
||||
/* Dynamic cpu sets */
|
||||
|
||||
-cpu_set_t *
|
||||
+void *
|
||||
__gnat_cpu_alloc (size_t count)
|
||||
{
|
||||
return CPU_ALLOC (count);
|
||||
@@ -3080,33 +3083,33 @@ __gnat_cpu_alloc_size (size_t count)
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_free (cpu_set_t *set)
|
||||
+__gnat_cpu_free (void *set)
|
||||
{
|
||||
- CPU_FREE (set);
|
||||
+ CPU_FREE ((cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_zero (size_t count, cpu_set_t *set)
|
||||
+__gnat_cpu_zero (size_t count, void *set)
|
||||
{
|
||||
- CPU_ZERO_S (count, set);
|
||||
+ CPU_ZERO_S (count, (cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set)
|
||||
+__gnat_cpu_set (int cpu, size_t count, void *set)
|
||||
{
|
||||
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
||||
CPU by a 0, so we need to adjust. */
|
||||
- CPU_SET_S (cpu - 1, count, set);
|
||||
+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set);
|
||||
}
|
||||
|
||||
#else /* !CPU_ALLOC */
|
||||
|
||||
/* Static cpu sets */
|
||||
|
||||
-cpu_set_t *
|
||||
+void *
|
||||
__gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED)
|
||||
{
|
||||
- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t));
|
||||
+ return xmalloc (sizeof (cpu_set_t));
|
||||
}
|
||||
|
||||
size_t
|
||||
@@ -3116,23 +3119,23 @@ __gnat_cpu_alloc_size (size_t count ATTR
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_free (cpu_set_t *set)
|
||||
+__gnat_cpu_free (void *set)
|
||||
{
|
||||
free (set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
||||
+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set)
|
||||
{
|
||||
- CPU_ZERO (set);
|
||||
+ CPU_ZERO ((cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
||||
+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set)
|
||||
{
|
||||
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
||||
CPU by a 0, so we need to adjust. */
|
||||
- CPU_SET (cpu - 1, set);
|
||||
+ CPU_SET (cpu - 1, (cpu_set_t *) set);
|
||||
}
|
||||
#endif /* !CPU_ALLOC */
|
||||
#endif /* linux */
|
||||
diff -rup gcc-5.1.0/gcc.orig/ada/adaint.h gcc-5.1.0/gcc/ada/adaint.h
|
||||
--- gcc-5.1.0/gcc.orig/ada/adaint.h 2015-01-27 17:20:27.000000000 +0000
|
||||
+++ gcc-5.1.0/gcc/ada/adaint.h 2015-06-02 10:47:23.188910894 +0000
|
||||
@@ -287,13 +287,11 @@ extern void *__gnat_lwp_self (voi
|
||||
|
||||
/* Routines for interface to required CPU set primitives */
|
||||
|
||||
-#include <sched.h>
|
||||
-
|
||||
-extern cpu_set_t *__gnat_cpu_alloc (size_t);
|
||||
+extern void * __gnat_cpu_alloc (size_t);
|
||||
extern size_t __gnat_cpu_alloc_size (size_t);
|
||||
-extern void __gnat_cpu_free (cpu_set_t *);
|
||||
-extern void __gnat_cpu_zero (size_t, cpu_set_t *);
|
||||
-extern void __gnat_cpu_set (int, size_t, cpu_set_t *);
|
||||
+extern void __gnat_cpu_free (void *);
|
||||
+extern void __gnat_cpu_zero (size_t, void *);
|
||||
+extern void __gnat_cpu_set (int, size_t, void *);
|
||||
#endif
|
||||
|
||||
#if defined (_WIN32)
|
||||
diff -rup gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in
|
||||
--- gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in 2015-04-09 20:29:28.000000000 +0000
|
||||
+++ gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in 2015-06-02 10:47:23.188910894 +0000
|
||||
@@ -1910,7 +1910,7 @@ ifeq ($(strip $(filter-out powerpc% linu
|
||||
endif
|
||||
|
||||
# ARM linux, GNU eabi
|
||||
-ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
|
||||
+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),)
|
||||
LIBGNAT_TARGET_PAIRS = \
|
||||
a-intnam.ads<a-intnam-linux.ads \
|
||||
s-inmaop.adb<s-inmaop-posix.adb \
|
30
gcc-armhf/ada-shared.patch
Normal file
30
gcc-armhf/ada-shared.patch
Normal file
|
@ -0,0 +1,30 @@
|
|||
Index: b/gcc/ada/link.c
|
||||
===================================================================
|
||||
--- a/gcc/ada/link.c
|
||||
+++ b/gcc/ada/link.c
|
||||
@@ -105,9 +105,9 @@
|
||||
|
||||
#elif defined (__FreeBSD__)
|
||||
const char *__gnat_object_file_option = "-Wl,@";
|
||||
-const char *__gnat_run_path_option = "-Wl,-rpath,";
|
||||
-char __gnat_shared_libgnat_default = STATIC;
|
||||
-char __gnat_shared_libgcc_default = STATIC;
|
||||
+const char *__gnat_run_path_option = "";
|
||||
+char __gnat_shared_libgnat_default = SHARED;
|
||||
+char __gnat_shared_libgcc_default = SHARED;
|
||||
int __gnat_link_max = 8192;
|
||||
unsigned char __gnat_objlist_file_supported = 1;
|
||||
const char *__gnat_object_library_extension = ".a";
|
||||
@@ -127,9 +127,9 @@
|
||||
|
||||
#elif defined (linux) || defined(__GLIBC__)
|
||||
const char *__gnat_object_file_option = "-Wl,@";
|
||||
-const char *__gnat_run_path_option = "-Wl,-rpath,";
|
||||
-char __gnat_shared_libgnat_default = STATIC;
|
||||
-char __gnat_shared_libgcc_default = STATIC;
|
||||
+const char *__gnat_run_path_option = "";
|
||||
+char __gnat_shared_libgnat_default = SHARED;
|
||||
+char __gnat_shared_libgcc_default = SHARED;
|
||||
int __gnat_link_max = 8192;
|
||||
unsigned char __gnat_objlist_file_supported = 1;
|
||||
const char *__gnat_object_library_extension = ".a";
|
62
gcc-armhf/boehm-gc-musl.patch
Normal file
62
gcc-armhf/boehm-gc-musl.patch
Normal file
|
@ -0,0 +1,62 @@
|
|||
--- gcc-4.8.1/boehm-gc/os_dep.c.orig 2013-09-17 07:46:00.969884340 +0000
|
||||
+++ gcc-4.8.1/boehm-gc/os_dep.c 2013-09-17 06:53:53.629884946 +0000
|
||||
@@ -26,7 +26,7 @@
|
||||
# define __KERNEL__
|
||||
# include <asm/signal.h>
|
||||
# undef __KERNEL__
|
||||
-# else
|
||||
+# elif defined(__GLIBC__)
|
||||
/* Kernels prior to 2.1.1 defined struct sigcontext_struct instead of */
|
||||
/* struct sigcontext. libc6 (glibc2) uses "struct sigcontext" in */
|
||||
/* prototypes, so we have to include the top-level sigcontext.h to */
|
||||
--- gcc-4.8.2/boehm-gc/dyn_load.c.orig 2014-02-17 14:13:09.519850231 +0200
|
||||
+++ gcc-4.8.2/boehm-gc/dyn_load.c 2014-02-17 14:14:27.906093514 +0200
|
||||
@@ -459,9 +459,7 @@
|
||||
/* For glibc 2.2.4+. Unfortunately, it doesn't work for older */
|
||||
/* versions. Thanks to Jakub Jelinek for most of the code. */
|
||||
|
||||
-# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \
|
||||
- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
|
||||
- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
|
||||
+# if (defined(LINUX) || defined (__GLIBC__))
|
||||
|
||||
/* We have the header files for a glibc that includes dl_iterate_phdr. */
|
||||
/* It may still not be available in the library on the target system. */
|
||||
--- gcc-4.8.2/boehm-gc/include/private/gcconfig.h.orig 2014-02-17 14:14:36.026049422 +0200
|
||||
+++ gcc-4.8.2/boehm-gc/include/private/gcconfig.h 2014-02-17 14:17:11.345207887 +0200
|
||||
@@ -684,7 +684,7 @@
|
||||
# ifdef __ELF__
|
||||
# define DYNAMIC_LOADING
|
||||
# include <features.h>
|
||||
-# if defined(__GLIBC__)&& __GLIBC__>=2
|
||||
+# if 1
|
||||
# define SEARCH_FOR_DATA_START
|
||||
# else /* !GLIBC2 */
|
||||
extern char **__environ;
|
||||
@@ -1147,7 +1147,7 @@
|
||||
# define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff))
|
||||
# endif
|
||||
# include <features.h>
|
||||
-# if defined(__GLIBC__) && __GLIBC__ >= 2
|
||||
+# if 1
|
||||
# define SEARCH_FOR_DATA_START
|
||||
# else
|
||||
extern char **__environ;
|
||||
@@ -1367,7 +1367,7 @@
|
||||
# define HBLKSIZE 4096
|
||||
# endif
|
||||
# define USE_GENERIC_PUSH_REGS
|
||||
-# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2
|
||||
+# if 1
|
||||
# define LINUX_STACKBOTTOM
|
||||
# else
|
||||
# define STACKBOTTOM 0x80000000
|
||||
@@ -1858,7 +1858,7 @@
|
||||
# ifdef __ELF__
|
||||
# define DYNAMIC_LOADING
|
||||
# include <features.h>
|
||||
-# if defined(__GLIBC__) && __GLIBC__ >= 2
|
||||
+# if 1
|
||||
# define SEARCH_FOR_DATA_START
|
||||
# else
|
||||
extern char **__environ;
|
10
gcc-armhf/fix-cxxflags-passing.patch
Normal file
10
gcc-armhf/fix-cxxflags-passing.patch
Normal file
|
@ -0,0 +1,10 @@
|
|||
--- gcc-4.8.1/Makefile.in.orig
|
||||
+++ gcc-4.8.1/Makefile.in
|
||||
@@ -169,6 +169,7 @@
|
||||
# built for the build system to override those in BASE_FLAGS_TO_PASSS.
|
||||
EXTRA_BUILD_FLAGS = \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)" \
|
||||
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
|
||||
LDFLAGS="$(LDFLAGS_FOR_BUILD)"
|
||||
|
||||
# This is the list of directories to built for the host system.
|
120
gcc-armhf/fix-gcj-iconv-musl.patch
Normal file
120
gcc-armhf/fix-gcj-iconv-musl.patch
Normal file
|
@ -0,0 +1,120 @@
|
|||
--- gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc.orig 2014-02-18 18:46:14.897880526 +0200
|
||||
+++ gcc-4.8.2/libjava/gnu/gcj/convert/natIconv.cc 2014-02-18 18:50:08.766613550 +0200
|
||||
@@ -24,6 +24,13 @@
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
#include <iconv.h>
|
||||
+#include <endian.h>
|
||||
+
|
||||
+#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
+#define UCS2_CHARSET "UCS-2BE"
|
||||
+#else
|
||||
+#define UCS2_CHARSET "UCS-2LE"
|
||||
+#endif
|
||||
|
||||
template<typename T>
|
||||
static inline size_t
|
||||
@@ -45,7 +52,7 @@
|
||||
_Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
|
||||
buffer[len] = '\0';
|
||||
|
||||
- iconv_t h = iconv_open ("UCS-2", buffer);
|
||||
+ iconv_t h = iconv_open (UCS2_CHARSET, buffer);
|
||||
if (h == (iconv_t) -1)
|
||||
throw new ::java::io::UnsupportedEncodingException (encoding);
|
||||
|
||||
@@ -99,18 +106,6 @@
|
||||
throw new ::java::io::CharConversionException ();
|
||||
}
|
||||
|
||||
- if (iconv_byte_swap)
|
||||
- {
|
||||
- size_t max = (old_out - outavail) / sizeof (jchar);
|
||||
- for (size_t i = 0; i < max; ++i)
|
||||
- {
|
||||
- // Byte swap.
|
||||
- jchar c = (((out[outpos + i] & 0xff) << 8)
|
||||
- | ((out[outpos + i] >> 8) & 0xff));
|
||||
- outbuf[i] = c;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
inpos += old_in - inavail;
|
||||
return (old_out - outavail) / sizeof (jchar);
|
||||
#else /* HAVE_ICONV */
|
||||
@@ -145,7 +140,7 @@
|
||||
_Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
|
||||
buffer[len] = '\0';
|
||||
|
||||
- iconv_t h = iconv_open (buffer, "UCS-2");
|
||||
+ iconv_t h = iconv_open (buffer, UCS2_CHARSET);
|
||||
if (h == (iconv_t) -1)
|
||||
throw new ::java::io::UnsupportedEncodingException (encoding);
|
||||
|
||||
@@ -187,20 +182,6 @@
|
||||
char *inbuf = (char *) &chars[inpos];
|
||||
char *outbuf = (char *) &out[count];
|
||||
|
||||
- if (iconv_byte_swap)
|
||||
- {
|
||||
- // Ugly performance penalty -- don't use losing systems!
|
||||
- temp_buffer = (jchar *) _Jv_Malloc (inlength * sizeof (jchar));
|
||||
- for (int i = 0; i < inlength; ++i)
|
||||
- {
|
||||
- // Byte swap.
|
||||
- jchar c = (((chars[inpos + i] & 0xff) << 8)
|
||||
- | ((chars[inpos + i] >> 8) & 0xff));
|
||||
- temp_buffer[i] = c;
|
||||
- }
|
||||
- inbuf = (char *) temp_buffer;
|
||||
- }
|
||||
-
|
||||
size_t loop_old_in = old_in;
|
||||
while (1)
|
||||
{
|
||||
@@ -252,44 +233,7 @@
|
||||
jboolean
|
||||
gnu::gcj::convert::IOConverter::iconv_init (void)
|
||||
{
|
||||
- // Some versions of iconv() always return their UCS-2 results in
|
||||
- // big-endian order, and they also require UCS-2 inputs to be in
|
||||
- // big-endian order. For instance, glibc 2.1.3 does this. If the
|
||||
- // UTF-8=>UCS-2 iconv converter has this feature, then we assume
|
||||
- // that all UCS-2 converters do. (This might not be the best
|
||||
- // heuristic, but is is all we've got.)
|
||||
- jboolean result = false;
|
||||
-#ifdef HAVE_ICONV
|
||||
- iconv_t handle = iconv_open ("UCS-2", "UTF-8");
|
||||
- if (handle != (iconv_t) -1)
|
||||
- {
|
||||
- jchar c;
|
||||
- unsigned char in[4];
|
||||
- char *inp, *outp;
|
||||
- size_t inc, outc, r;
|
||||
-
|
||||
- // This is the UTF-8 encoding of \ufeff. At least Tru64 UNIX libiconv
|
||||
- // needs the trailing NUL byte, otherwise iconv fails with EINVAL.
|
||||
- in[0] = 0xef;
|
||||
- in[1] = 0xbb;
|
||||
- in[2] = 0xbf;
|
||||
- in[3] = 0x00;
|
||||
-
|
||||
- inp = (char *) in;
|
||||
- inc = 4;
|
||||
- outp = (char *) &c;
|
||||
- outc = 2;
|
||||
-
|
||||
- r = iconv_adapter (iconv, handle, &inp, &inc, &outp, &outc);
|
||||
- // Conversion must be complete for us to use the result.
|
||||
- if (r != (size_t) -1 && inc == 0 && outc == 0)
|
||||
- result = (c != 0xfeff);
|
||||
-
|
||||
- // Release iconv handle.
|
||||
- iconv_close (handle);
|
||||
- }
|
||||
-#endif /* HAVE_ICONV */
|
||||
- return result;
|
||||
+ return false;
|
||||
}
|
||||
|
||||
void
|
49
gcc-armhf/fix-gcj-musl.patch
Normal file
49
gcc-armhf/fix-gcj-musl.patch
Normal file
|
@ -0,0 +1,49 @@
|
|||
--- gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc.orig 2014-02-18 10:55:08.617678779 +0200
|
||||
+++ gcc-4.8.2/libjava/gnu/classpath/natSystemProperties.cc 2014-02-18 10:56:31.927227453 +0200
|
||||
@@ -289,7 +289,7 @@
|
||||
// just default to `en_US'.
|
||||
setlocale (LC_ALL, "");
|
||||
char *locale = setlocale (LC_MESSAGES, "");
|
||||
- if (locale && strlen (locale) >= 2)
|
||||
+ if (locale && strlen (locale) >= 2 && (locale[2] == '\0' || locale[2] == '_'))
|
||||
{
|
||||
char buf[3];
|
||||
buf[2] = '\0';
|
||||
--- gcc-4.8.2/libjava/posix-threads.cc.orig 2014-02-18 13:22:01.789933726 +0200
|
||||
+++ gcc-4.8.2/libjava/posix-threads.cc 2014-02-18 13:29:50.924058875 +0200
|
||||
@@ -657,6 +657,7 @@
|
||||
struct sched_param param;
|
||||
pthread_attr_t attr;
|
||||
struct starter *info;
|
||||
+ size_t ss;
|
||||
|
||||
if (data->flags & FLAG_START)
|
||||
return;
|
||||
@@ -675,8 +676,25 @@
|
||||
// Set stack size if -Xss option was given.
|
||||
if (gcj::stack_size > 0)
|
||||
{
|
||||
- int e = pthread_attr_setstacksize (&attr, gcj::stack_size);
|
||||
+ ss = gcj::stack_size;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ int e = pthread_attr_getstacksize (&attr, &ss);
|
||||
+ if (e != 0)
|
||||
+ JvFail (strerror (e));
|
||||
+
|
||||
+ // Request at least 1meg of stack
|
||||
+ if (ss >= 1024 * 1024)
|
||||
+ ss = 0;
|
||||
+ else
|
||||
+ ss = 1024 * 1024;
|
||||
+ }
|
||||
+
|
||||
+ if (ss)
|
||||
+ {
|
||||
+ int e = pthread_attr_setstacksize (&attr, ss);
|
||||
if (e != 0)
|
||||
JvFail (strerror (e));
|
||||
}
|
||||
|
||||
info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter));
|
35
gcc-armhf/fix-gcj-stdgnu14-link.patch
Normal file
35
gcc-armhf/fix-gcj-stdgnu14-link.patch
Normal file
|
@ -0,0 +1,35 @@
|
|||
--- gcc-6.1.0/libjava/Makefile.am
|
||||
+++ gcc-6.1.0/libjava/Makefile.am
|
||||
@@ -488,10 +488,14 @@
|
||||
nat_files = $(nat_source_files:.cc=.lo)
|
||||
xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
|
||||
|
||||
+libgcj_la_CPPFLAGS = \
|
||||
+ $(AM_CPPFLAGS) \
|
||||
+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
|
||||
+
|
||||
# Include THREADLIBS here to ensure that the correct version of
|
||||
# certain linuxthread functions get linked:
|
||||
## The mysterious backslash in the grep pattern is consumed by make.
|
||||
-libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \
|
||||
+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \
|
||||
$(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL)
|
||||
--- gcc-6.1.0/libjava/Makefile.in
|
||||
+++ gcc-6.1.0/libjava/Makefile.in
|
||||
@@ -1103,9 +1103,13 @@
|
||||
nat_files = $(nat_source_files:.cc=.lo)
|
||||
xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)
|
||||
|
||||
+libgcj_la_CPPFLAGS = \
|
||||
+ $(AM_CPPFLAGS) \
|
||||
+ $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
|
||||
+
|
||||
# Include THREADLIBS here to ensure that the correct version of
|
||||
# certain linuxthread functions get linked:
|
||||
-libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \
|
||||
+libgcj_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \
|
||||
$(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
|
||||
-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
|
||||
$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL)
|
59
gcc-armhf/fix-rs6000-pie.patch
Normal file
59
gcc-armhf/fix-rs6000-pie.patch
Normal file
|
@ -0,0 +1,59 @@
|
|||
--- gcc-6.3.0.orig/gcc/config/rs6000/sysv4.h
|
||||
+++ gcc-6.3.0/gcc/config/rs6000/sysv4.h
|
||||
@@ -753,23 +753,42 @@
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LD_PIE
|
||||
-#define STARTFILE_LINUX_SPEC "\
|
||||
-%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} \
|
||||
-%{mnewlib:ecrti.o%s;:crti.o%s} \
|
||||
-%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
|
||||
-" CRTOFFLOADBEGIN
|
||||
+#define STARTFILE_LINUX_SPEC \
|
||||
+ "%{!shared: %{pg|p|profile:gcrt1.o%s;: \
|
||||
+ %{" PIE_SPEC ":%{static:rcrt1.o%s;:Scrt1.o%s}} %{" NO_PIE_SPEC ":crt1.o%s}}} \
|
||||
+ crti.o%s %{shared:crtbeginS.o%s;: \
|
||||
+ %{" PIE_SPEC ":crtbeginS.o%s} \
|
||||
+ %{" NO_PIE_SPEC ":%{static:crtbeginT.o%s;:crtbegin.o%s}}} \
|
||||
+ %{fvtable-verify=none:%s; \
|
||||
+ fvtable-verify=preinit:vtv_start_preinit.o%s; \
|
||||
+ fvtable-verify=std:vtv_start.o%s} \
|
||||
+ " CRTOFFLOADBEGIN
|
||||
#else
|
||||
-#define STARTFILE_LINUX_SPEC "\
|
||||
-%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
|
||||
-%{mnewlib:ecrti.o%s;:crti.o%s} \
|
||||
-%{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
|
||||
-" CRTOFFLOADBEGIN
|
||||
+#define STARTFILE_LINUX_SPEC \
|
||||
+ "%{!shared: %{pg|p|profile:gcrt1.o%s;:crt1.o%s}} \
|
||||
+ crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} \
|
||||
+ %{fvtable-verify=none:%s; \
|
||||
+ fvtable-verify=preinit:vtv_start_preinit.o%s; \
|
||||
+ fvtable-verify=std:vtv_start.o%s} \
|
||||
+ " CRTOFFLOADBEGIN
|
||||
#endif
|
||||
|
||||
-#define ENDFILE_LINUX_SPEC "\
|
||||
-%{shared|pie:crtendS.o%s;:crtend.o%s} \
|
||||
-%{mnewlib:ecrtn.o%s;:crtn.o%s} \
|
||||
-" CRTOFFLOADEND
|
||||
+#ifdef HAVE_LD_PIE
|
||||
+#define ENDFILE_LINUX_SPEC \
|
||||
+ "%{fvtable-verify=none:%s; \
|
||||
+ fvtable-verify=preinit:vtv_end_preinit.o%s; \
|
||||
+ fvtable-verify=std:vtv_end.o%s} \
|
||||
+ %{shared:crtendS.o%s;: %{" PIE_SPEC ":crtendS.o%s} \
|
||||
+ %{" NO_PIE_SPEC ":crtend.o%s}} crtn.o%s \
|
||||
+ " CRTOFFLOADEND
|
||||
+#else
|
||||
+#define ENDFILE_LINUX_SPEC \
|
||||
+ "%{fvtable-verify=none:%s; \
|
||||
+ fvtable-verify=preinit:vtv_end_preinit.o%s; \
|
||||
+ fvtable-verify=std:vtv_end.o%s} \
|
||||
+ %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s \
|
||||
+ " CRTOFFLOADEND
|
||||
+#endif
|
||||
|
||||
#define LINK_START_LINUX_SPEC ""
|
||||
|
41
gcc-armhf/gcc-4.8-build-args.patch
Normal file
41
gcc-armhf/gcc-4.8-build-args.patch
Normal file
|
@ -0,0 +1,41 @@
|
|||
When cross compiling a target gcc, target flags may be used on the host
|
||||
|
||||
Configure identifies a number of warning flags (WARN_CFLAGS and
|
||||
WARN_CXXFLAGS) from the $CC value. The cross compiler may be different
|
||||
from the host compiler and may not support the same set of flags. This
|
||||
leads to problems such as:
|
||||
|
||||
cc1plus: error: unrecognized command line option "-Wno-narrowing"
|
||||
cc1plus: error: unrecognized command line option "-Wno-overlength-strings"
|
||||
|
||||
Work around this problem by removing the warning flags from the
|
||||
BUILD_CXXFLAGS value, in a way similar to the BUILD_CFLAGS.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
|
||||
Index: gcc-4.8.0/gcc/configure
|
||||
===================================================================
|
||||
--- gcc-4.8.0.orig/gcc/configure
|
||||
+++ gcc-4.8.0/gcc/configure
|
||||
@@ -11720,6 +10581,7 @@ STMP_FIXINC=stmp-fixinc
|
||||
if test x$build != x$host || test "x$coverage_flags" != x
|
||||
then
|
||||
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
|
||||
fi
|
||||
|
||||
Index: gcc-4.8.0/gcc/configure.ac
|
||||
===================================================================
|
||||
--- gcc-4.8.0.orig/gcc/configure.ac
|
||||
+++ gcc-4.8.0/gcc/configure.ac
|
||||
@@ -1901,6 +1901,7 @@ STMP_FIXINC=stmp-fixinc AC_SUBST(STMP_F
|
||||
if test x$build != x$host || test "x$coverage_flags" != x
|
||||
then
|
||||
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
|
||||
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
|
||||
fi
|
||||
|
11
gcc-armhf/gcc-4.9-musl-fortify.patch
Normal file
11
gcc-armhf/gcc-4.9-musl-fortify.patch
Normal file
|
@ -0,0 +1,11 @@
|
|||
--- gcc-4.9.2/gcc/config/linux.h.orig 2015-03-09 13:27:13.289736710 +0000
|
||||
+++ gcc-4.9.2/gcc/config/linux.h 2015-03-09 13:29:32.295625046 +0000
|
||||
@@ -146,6 +146,8 @@
|
||||
|
||||
#ifdef NATIVE_SYSTEM_HEADER_DIR
|
||||
#define INCLUDE_DEFAULTS_MUSL_NATIVE \
|
||||
+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \
|
||||
+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \
|
||||
{ NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
|
||||
{ NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
|
||||
#else
|
20
gcc-armhf/gcc-6.1-musl-libssp.patch
Normal file
20
gcc-armhf/gcc-6.1-musl-libssp.patch
Normal file
|
@ -0,0 +1,20 @@
|
|||
Author: Timo Teräs <timo.teras@iki.fi>
|
||||
|
||||
Alpine musl package provides libssp_nonshared.a. We link to it unconditionally,
|
||||
as otherwise we get link failures if some objects are -fstack-protector built
|
||||
and final link happens with -fno-stack-protector. This seems to be the common
|
||||
case when bootstrapping gcc, the piepatches do not seem to fully fix the
|
||||
crosstoolchain and bootstrap sequence wrt. stack-protector flag usage.
|
||||
|
||||
--- gcc-6.1.0/gcc/gcc.c.orig
|
||||
+++ gcc-6.1.0/gcc/gcc.c
|
||||
@@ -870,8 +870,7 @@
|
||||
|
||||
#ifndef LINK_SSP_SPEC
|
||||
#ifdef TARGET_LIBC_PROVIDES_SSP
|
||||
-#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
- "|fstack-protector-strong|fstack-protector-explicit:}"
|
||||
+#define LINK_SSP_SPEC "-lssp_nonshared"
|
||||
#else
|
||||
#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
"|fstack-protector-strong|fstack-protector-explicit" \
|
89
gcc-armhf/gcc-pure64.patch
Normal file
89
gcc-armhf/gcc-pure64.patch
Normal file
|
@ -0,0 +1,89 @@
|
|||
--- ./gcc/config/i386/t-linux64.orig 2013-01-14 16:32:37.000000000 +0000
|
||||
+++ ./gcc/config/i386/t-linux64 2013-04-22 06:12:32.984439677 +0000
|
||||
@@ -34,6 +34,6 @@
|
||||
comma=,
|
||||
MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
|
||||
MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
|
||||
-MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
|
||||
--- ./gcc/config/aarch64/t-aarch64-linux.orig
|
||||
+++ ./gcc/config/aarch64/t-aarch64-linux
|
||||
@@ -22,7 +22,7 @@
|
||||
LIB1ASMFUNCS = _aarch64_sync_cache_range
|
||||
|
||||
AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
|
||||
-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = mabi.lp64=../lib
|
||||
MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
|
||||
|
||||
MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32
|
||||
--- ./gcc/config/s390/t-linux64.orig
|
||||
+++ ./gcc/config/s390/t-linux64
|
||||
@@ -7,5 +7,5 @@
|
||||
MULTILIB_OPTIONS = m64/m31
|
||||
MULTILIB_DIRNAMES = 64 32
|
||||
-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
|
||||
--- ./gcc/config/rs6000/t-linux.orig
|
||||
+++ ./gcc/config/rs6000/t-linux
|
||||
@@ -2,7 +2,8 @@
|
||||
# or soft-float.
|
||||
ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)))
|
||||
ifneq (,$(findstring powerpc64,$(target)))
|
||||
-MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
else
|
||||
ifneq (,$(findstring spe,$(target)))
|
||||
MULTIARCH_DIRNAME := powerpc-linux-gnuspe$(if $(findstring 8548,$(with_cpu)),,v1)
|
||||
@@ -14,7 +15,8 @@
|
||||
MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME))
|
||||
endif
|
||||
ifneq (,$(findstring powerpc64le,$(target)))
|
||||
-MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
endif
|
||||
endif
|
||||
|
||||
--- ./gcc/config/rs6000/t-linux64.orig
|
||||
+++ ./gcc/config/rs6000/t-linux64
|
||||
@@ -28,8 +28,8 @@
|
||||
MULTILIB_OPTIONS := m64/m32
|
||||
MULTILIB_DIRNAMES := 64 32
|
||||
MULTILIB_EXTRA_OPTS :=
|
||||
-MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
|
||||
rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c
|
||||
$(COMPILE) $<
|
||||
--- ./gcc/config/rs6000/t-linux64bele.orig
|
||||
+++ ./gcc/config/rs6000/t-linux64bele
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
MULTILIB_OPTIONS += mlittle
|
||||
MULTILIB_DIRNAMES += le
|
||||
-MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))))))
|
||||
-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES)))
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
|
||||
--- ./gcc/config/rs6000/t-linux64lebe.orig
|
||||
+++ ./gcc/config/rs6000/t-linux64lebe
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
MULTILIB_OPTIONS += mbig
|
||||
MULTILIB_DIRNAMES += be
|
||||
-MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES))))))
|
||||
-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES)))
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
|
22
gcc-armhf/libada-cross-shared.patch
Normal file
22
gcc-armhf/libada-cross-shared.patch
Normal file
|
@ -0,0 +1,22 @@
|
|||
--- gcc-4.8.2/libada/configure.ac.orig 2013-01-14 22:15:04.000000000 +0400
|
||||
+++ gcc-4.8.2/libada/configure.ac 2014-01-21 06:53:04.254453731 +0400
|
||||
@@ -127,7 +127,7 @@
|
||||
AC_PROG_LN_S
|
||||
|
||||
# Determine what to build for 'gnatlib'
|
||||
-if test $build = $target \
|
||||
+if true \
|
||||
&& test ${enable_shared} = yes ; then
|
||||
# Note that build=target is almost certainly the wrong test; FIXME
|
||||
default_gnatlib_target="gnatlib-shared"
|
||||
--- gcc-4.8.2/libada/configure.orig 2013-10-16 11:27:58.000000000 +0400
|
||||
+++ gcc-4.8.2/libada/configure 2014-01-21 06:53:26.727581207 +0400
|
||||
@@ -2951,7 +2951,7 @@
|
||||
|
||||
|
||||
# Determine what to build for 'gnatlib'
|
||||
-if test $build = $target \
|
||||
+if true \
|
||||
&& test ${enable_shared} = yes ; then
|
||||
# Note that build=target is almost certainly the wrong test; FIXME
|
||||
default_gnatlib_target="gnatlib-shared"
|
39
gcc-armhf/libgcc-always-build-gcceh.a.patch
Normal file
39
gcc-armhf/libgcc-always-build-gcceh.a.patch
Normal file
|
@ -0,0 +1,39 @@
|
|||
Highly inspired by:
|
||||
http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch
|
||||
|
||||
diff -durN gcc-4.6.0.orig/libgcc/Makefile.in gcc-4.6.0/libgcc/Makefile.in
|
||||
--- gcc-4.6.0.orig/libgcc/Makefile.in 2011-01-26 05:19:58.000000000 +0100
|
||||
+++ gcc-4.6.0/libgcc/Makefile.in 2011-09-12 18:17:12.743718974 +0200
|
||||
@@ -772,8 +772,9 @@
|
||||
libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
|
||||
endif
|
||||
|
||||
+all: libgcc_eh.a
|
||||
ifeq ($(enable_shared),yes)
|
||||
-all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
|
||||
+all: libgcc_s$(SHLIB_EXT)
|
||||
ifneq ($(LIBUNWIND),)
|
||||
all: libunwind$(SHLIB_EXT)
|
||||
endif
|
||||
@@ -950,10 +951,6 @@
|
||||
install-shared:
|
||||
$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
|
||||
|
||||
- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
|
||||
- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
-
|
||||
$(subst @multilib_dir@,$(MULTIDIR),$(subst \
|
||||
@shlib_base_name@,libgcc_s,$(subst \
|
||||
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
|
||||
@@ -968,6 +965,10 @@
|
||||
chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
|
||||
$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
|
||||
|
||||
+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
|
||||
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
+
|
||||
parts="$(INSTALL_PARTS)"; \
|
||||
for file in $$parts; do \
|
||||
rm -f $(DESTDIR)$(inst_libdir)/$$file; \
|
28
gcc-cross-wrappers/APKBUILD
Normal file
28
gcc-cross-wrappers/APKBUILD
Normal file
|
@ -0,0 +1,28 @@
|
|||
pkgname=gcc-cross-wrappers
|
||||
pkgver=1
|
||||
pkgrel=1
|
||||
pkgdesc="GCC wrappers pointing to cross-compilers (for distcc + ccache)"
|
||||
url="https://github.com/postmarketOS"
|
||||
arch="noarch"
|
||||
license="GPL3+"
|
||||
depends=""
|
||||
makedepends=""
|
||||
source=""
|
||||
options="!check"
|
||||
|
||||
package() {
|
||||
local _archs="armhf aarch64"
|
||||
local _bins="c++ cc cpp g++ gcc"
|
||||
for _arch in $_archs; do
|
||||
_bindir="$pkgdir/usr/lib/gcc-cross-wrappers/$_arch/bin"
|
||||
_hostspec="$(arch_to_hostspec $_arch)"
|
||||
mkdir -p "$_bindir"
|
||||
for _bin in $_bins; do
|
||||
{
|
||||
echo "#!/bin/sh"
|
||||
echo "${_hostspec}-${_bin} \"\$@\""
|
||||
} > $_bindir/$_bin
|
||||
chmod +x $_bindir/$_bin
|
||||
done
|
||||
done
|
||||
}
|
37
heimdall/APKBUILD
Normal file
37
heimdall/APKBUILD
Normal file
|
@ -0,0 +1,37 @@
|
|||
pkgname=heimdall
|
||||
pkgver=1.4.1
|
||||
pkgrel=4
|
||||
pkgdesc="Flasher for Samsung Galaxy S devices"
|
||||
url="https://github.com/Benjamin-Dobell/Heimdall"
|
||||
arch="all"
|
||||
license="MIT"
|
||||
depends=""
|
||||
makedepends="libusb-dev"
|
||||
subpackages=""
|
||||
source="$pkgname-$pkgver.tar.gz::https://github.com/Benjamin-Dobell/Heimdall/archive/v${pkgver}.tar.gz
|
||||
heimdall_flash_kernel.sh heimdall_wait_for_device.sh"
|
||||
options="!check"
|
||||
|
||||
_builddir="$srcdir"/Heimdall-$pkgver
|
||||
build() {
|
||||
cd $_builddir
|
||||
cd libpit/
|
||||
./configure --prefix=/usr
|
||||
make || return 1
|
||||
|
||||
cd ../heimdall/
|
||||
./configure --prefix=/usr
|
||||
make || return 1
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$_builddir/heimdall"
|
||||
make PREFIX=/usr DESTDIR="$pkgdir/" install || return 1
|
||||
for i in heimdall_flash_kernel.sh heimdall_wait_for_device.sh; do
|
||||
install -Dm755 "$srcdir"/"$i" "$pkgdir"/usr/bin/"$i"
|
||||
done
|
||||
}
|
||||
|
||||
sha512sums="2f1f49b0ad7bd5f4359893359b26024fe0cce84afed3878e42d902eb4dee487a44e351247d57e4af143ad728abd6c664df688246fcf7b96b9f3841cd16594296 heimdall-1.4.1.tar.gz
|
||||
a75677d4c5559bf8233a48d1b38bf91e4125717a85e1ea6d283d2d1e052c2a96228818a71f8b90adbda049b6d5b5065f7265ffc2e05cafd2ce9717bfc8ac8716 heimdall_flash_kernel.sh
|
||||
45e742bb3a8c8d0bc6806a4e9f860b04f255cad72a8602c04759178284c66e0a90d3ea22249b5fa69de1dd1d6ecd6221adaa63d611aa20d2a54aa20868e86a9f heimdall_wait_for_device.sh"
|
33
heimdall/heimdall_flash_kernel.sh
Normal file
33
heimdall/heimdall_flash_kernel.sh
Normal file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
usage()
|
||||
{
|
||||
echo "Flash an initramfs file to the recovery partition, and flash a kernel."
|
||||
echo "The kernel needs to have its own minimal initramfs, that loads the"
|
||||
echo "real initramfs from the recovery partition (\"isorec\")."
|
||||
echo ""
|
||||
echo "Usage: $(basename "$0") <initramfs> <kernel>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Sanity checks
|
||||
[ "$#" != 2 ] && usage
|
||||
INITRAMFS="$1"
|
||||
KERNEL="$2"
|
||||
for file in "$INITRAMFS" "$KERNEL"; do
|
||||
[ -e "$file" ] && continue
|
||||
echo "ERROR: File $file does not exist!"
|
||||
exit 1
|
||||
done
|
||||
|
||||
echo "(1/2) flash initramfs to recovery partition (isorec-style)"
|
||||
heimdall_wait_for_device.sh
|
||||
gunzip -c "$INITRAMFS" | lzop > /tmp/initramfs.lzo
|
||||
heimdall flash --RECOVERY /tmp/initramfs.lzo
|
||||
rm /tmp/initramfs.lzo
|
||||
|
||||
sleep 20
|
||||
echo "(2/2) flash kernel (hit ^C if you only wanted to flash initramfs)"
|
||||
heimdall_wait_for_device.sh
|
||||
heimdall flash --KERNEL "$KERNEL"
|
7
heimdall/heimdall_wait_for_device.sh
Normal file
7
heimdall/heimdall_wait_for_device.sh
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
# Simple wrapper, that makes heimdall behave more like fastboot
|
||||
|
||||
echo "< wait for any device >"
|
||||
while ! heimdall detect > /dev/null 2>&1; do
|
||||
sleep 1
|
||||
done
|
31
hello-world/APKBUILD
Normal file
31
hello-world/APKBUILD
Normal file
|
@ -0,0 +1,31 @@
|
|||
pkgname=hello-world
|
||||
pkgver=1
|
||||
pkgrel=2
|
||||
pkgdesc="hello world program to be built in the testsuite"
|
||||
url="https://en.wikipedia.org/wiki/%22Hello,_World!%22_program"
|
||||
arch="all"
|
||||
license="MIT"
|
||||
depends=""
|
||||
makedepends=""
|
||||
subpackages=""
|
||||
source="main.c Makefile"
|
||||
options=""
|
||||
|
||||
build() {
|
||||
cd "$srcdir"
|
||||
make
|
||||
}
|
||||
|
||||
check() {
|
||||
cd "$srcdir"
|
||||
printf 'hello, world!\n' > expected
|
||||
./hello-world > real
|
||||
diff -q expected real
|
||||
}
|
||||
|
||||
package() {
|
||||
install -D -m755 "$srcdir"/hello-world \
|
||||
"$pkgdir"/usr/bin/hello-world || return 1
|
||||
}
|
||||
sha512sums="d5ad91600d9be3e53be4cb6e5846b0757786c947b2c0d10f612f67262fc91c148e8d73621623e259ca9dcd5e2c8ec7069cebec44165e203ea8c0133669d3382d main.c
|
||||
80c32948d3254f5e4f9084d73754824e7d7d7d117770b041a1a13baf056773de265153fe518cc3e735db55b638411aa6fbd0e17b5b674dfc89e69a9391fbd3bb Makefile"
|
5
hello-world/Makefile
Executable file
5
hello-world/Makefile
Executable file
|
@ -0,0 +1,5 @@
|
|||
hello-world: hello-world.o
|
||||
$(CC) -o hello-world hello-world.o
|
||||
|
||||
hello-world.o: main.c
|
||||
$(CC) -o hello-world.o -c main.c
|
7
hello-world/main.c
Normal file
7
hello-world/main.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("hello, world!\n");
|
||||
return 0;
|
||||
}
|
107
linux-lg-mako/APKBUILD
Normal file
107
linux-lg-mako/APKBUILD
Normal file
|
@ -0,0 +1,107 @@
|
|||
# APKBUILD based on linux-vanilla aport. Changes:
|
||||
# - disabled module installation
|
||||
# - add !check !tracedeps
|
||||
# - package: just install zimage and kernel.release, because the kernel config
|
||||
# does not generate modules or dtb files
|
||||
# - do not create -dev subpackage (makes no sense without module support)
|
||||
#
|
||||
# Kernel config based on: arch/arm/configs/lineageos_mako_defconfig
|
||||
# Changes:
|
||||
# - enable devtmpfs (needed for udev -> touch support in weston)
|
||||
|
||||
_vendor=lge
|
||||
_flavor=lg-mako
|
||||
_hash="1495bfcf93f9e0e896331f29e1850387c31d6714"
|
||||
_config="config-${_flavor}.armhf"
|
||||
|
||||
pkgname=linux-${_flavor}
|
||||
pkgver=3.4.0
|
||||
case $pkgver in
|
||||
*.*.*) _kernver=${pkgver%.*};;
|
||||
*.*) _kernver=$pkgver;;
|
||||
esac
|
||||
pkgrel=3
|
||||
arch="armhf"
|
||||
pkgdesc="Nexus 4 kernel from LineageOS"
|
||||
url="https://github.com/LineageOS/lge-kernel-mako"
|
||||
depends="postmarketos-mkinitfs"
|
||||
makedepends="perl sed installkernel bash gmp-dev bc linux-headers elfutils-dev"
|
||||
options="!strip !check !tracedeps"
|
||||
install=
|
||||
source="
|
||||
https://github.com/LineageOS/${_vendor}-kernel-mako/archive/${_hash}.zip
|
||||
$_config
|
||||
compiler-gcc6.h
|
||||
gpu-msm-fix-gcc5-compile.patch
|
||||
"
|
||||
subpackages=""
|
||||
license="GPL2"
|
||||
|
||||
_abi_release=${pkgver}
|
||||
_carch="arm"
|
||||
HOSTCC="${CC:-gcc}"
|
||||
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"
|
||||
|
||||
ksrcdir="$srcdir/${_vendor}-kernel-mako-${_hash}"
|
||||
|
||||
prepare() {
|
||||
local _patch_failed=
|
||||
cd "$ksrcdir"
|
||||
|
||||
# first apply patches in specified order
|
||||
for i in $source; do
|
||||
case $i in
|
||||
*.patch)
|
||||
msg "Applying $i..."
|
||||
if ! patch -s -p1 -N -i "$srcdir"/$i; then
|
||||
echo $i >>failed
|
||||
_patch_failed=1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if ! [ -z "$_patch_failed" ]; then
|
||||
error "The following patches failed:"
|
||||
cat failed
|
||||
return 1
|
||||
fi
|
||||
|
||||
# gcc6 support
|
||||
cp -v "$srcdir/compiler-gcc6.h" "$ksrcdir/include/linux/"
|
||||
|
||||
mkdir -p "$srcdir"/build
|
||||
cp "$srcdir"/$_config "$srcdir"/build/.config || return 1
|
||||
make -C "$ksrcdir" O="$srcdir"/build ARCH="$_carch" HOSTCC="$HOSTCC" \
|
||||
silentoldconfig
|
||||
}
|
||||
|
||||
|
||||
|
||||
# this is so we can do: 'abuild menuconfig' to reconfigure kernel
|
||||
menuconfig() {
|
||||
cd "$srcdir"/build || return 1
|
||||
make ARCH="$_carch" menuconfig
|
||||
cp .config "$startdir"/$_config
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir"/build
|
||||
unset LDFLAGS
|
||||
make ARCH="$_carch" CC="${CC:-gcc}" \
|
||||
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
package() {
|
||||
install -Dm644 "$srcdir/build/arch/arm/boot/zImage" \
|
||||
"$pkgdir/boot/vmlinuz-$_flavor"
|
||||
|
||||
install -D "$srcdir/build/include/config/kernel.release" \
|
||||
"$pkgdir/usr/share/kernel/$_flavor/kernel.release"
|
||||
}
|
||||
|
||||
sha512sums="5a1636374ea0d2b219de5b501035e8b03935c9cf31a5c1aaa831805318d9ff780b0e13f11c73343c63c74a026c4846215ec7954a1b23740bb690b9723d5d9e11 1495bfcf93f9e0e896331f29e1850387c31d6714.zip
|
||||
091f0a6d604653098e3d06a834fa3d4a9c34cbdb4b742c949950bada118e58cc858dce817e763023fe7ac5dd7ae17930ef7a3de765e5b7d84b1971572dbf37a1 config-lg-mako.armhf
|
||||
d80980e9474c82ba0ef1a6903b434d8bd1b092c40367ba543e72d2c119301c8b2d05265740e4104ca1ac5d15f6c4aa49e8776cb44264a9a28dc551e0d1850dcc compiler-gcc6.h
|
||||
7be03a9e78b7ac330a54b1f00509caa0621a95c0c55901878ad757f9dd69cc05ba2c8b5ea987063ae1224f92c4d090d515fa5d369e7755181a4871b0d0f82881 gpu-msm-fix-gcc5-compile.patch"
|
69
linux-lg-mako/compiler-gcc6.h
Normal file
69
linux-lg-mako/compiler-gcc6.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
// SOURCE:
|
||||
// https://github.com/NextThingCo/CHIP-u-boot/issues/10#issuecomment-287515505
|
||||
|
||||
#ifndef __LINUX_COMPILER_H
|
||||
#error "Please don't include <linux/compiler-gcc6.h> directly, include <linux/compiler.h> instead."
|
||||
#endif
|
||||
|
||||
#define __used __attribute__((__used__))
|
||||
#define __must_check __attribute__((warn_unused_result))
|
||||
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
|
||||
|
||||
/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
to them will be unlikely. This means a lot of manual unlikely()s
|
||||
are unnecessary now for any paths leading to the usual suspects
|
||||
like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
older compilers]
|
||||
|
||||
Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
in the preprocessor, but we can live with this because they're unreleased.
|
||||
Maketime probing would be overkill here.
|
||||
|
||||
gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
a special section, but I don't see any sense in this right now in
|
||||
the kernel context */
|
||||
#define __cold __attribute__((__cold__))
|
||||
|
||||
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
|
||||
#ifndef __CHECKER__
|
||||
# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
# define __compiletime_error(message) __attribute__((error(message)))
|
||||
#endif /* __CHECKER__ */
|
||||
|
||||
/*
|
||||
* Mark a position in code as unreachable. This can be used to
|
||||
* suppress control flow warnings after asm blocks that transfer
|
||||
* control elsewhere.
|
||||
*
|
||||
* Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
* this in the preprocessor, but we can live with this because they're
|
||||
* unreleased. Really, we need to have autoconf for the kernel.
|
||||
*/
|
||||
#define unreachable() __builtin_unreachable()
|
||||
|
||||
/* Mark a function definition as prohibited from being cloned. */
|
||||
#define __noclone __attribute__((__noclone__))
|
||||
|
||||
/*
|
||||
* Tell the optimizer that something else uses this function or variable.
|
||||
*/
|
||||
#define __visible __attribute__((externally_visible))
|
||||
|
||||
/*
|
||||
* GCC 'asm goto' miscompiles certain code sequences:
|
||||
*
|
||||
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
*
|
||||
* Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
*
|
||||
* (asm goto is automatically volatile - the naming reflects this.)
|
||||
*/
|
||||
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
|
||||
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
#define __HAVE_BUILTIN_BSWAP32__
|
||||
#define __HAVE_BUILTIN_BSWAP64__
|
||||
#define __HAVE_BUILTIN_BSWAP16__
|
||||
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
|
3439
linux-lg-mako/config-lg-mako.armhf
Normal file
3439
linux-lg-mako/config-lg-mako.armhf
Normal file
File diff suppressed because it is too large
Load diff
33
linux-lg-mako/gpu-msm-fix-gcc5-compile.patch
Normal file
33
linux-lg-mako/gpu-msm-fix-gcc5-compile.patch
Normal file
|
@ -0,0 +1,33 @@
|
|||
source:
|
||||
https://github.com/ShinySide/HispAsian_Lollipop_G6/commit/b7756b6fc4bb728722b14d2dfdbaf1dc843812e9
|
||||
|
||||
* These need to be static to avoid these errors:
|
||||
|
||||
drivers/built-in.o: In function `.LANCHOR1':
|
||||
msm_iommu_sec.c:(.data+0x9298): undefined reference to `kgsl_iommu_sync_lock'
|
||||
msm_iommu_sec.c:(.data+0x929c): undefined reference to `kgsl_iommu_sync_unlock'
|
||||
Makefile:877: recipe for target '.tmp_vmlinux1' failed
|
||||
make: *** [.tmp_vmlinux1] Error 1
|
||||
|
||||
Signed-off-by: Chet Kener <Cl3Kener@gmail.com>
|
||||
|
||||
--- a/drivers/gpu/msm/kgsl_iommu.c
|
||||
+++ b/drivers/gpu/msm/kgsl_iommu.c
|
||||
@@ -1010,7 +1010,7 @@ static int kgsl_iommu_init_sync_lock(struct kgsl_mmu *mmu)
|
||||
*
|
||||
* Return - int - number of commands.
|
||||
*/
|
||||
-inline unsigned int kgsl_iommu_sync_lock(struct kgsl_mmu *mmu,
|
||||
+static inline unsigned int kgsl_iommu_sync_lock(struct kgsl_mmu *mmu,
|
||||
unsigned int *cmds)
|
||||
{
|
||||
struct kgsl_device *device = mmu->device;
|
||||
@@ -1080,7 +1080,7 @@ inline unsigned int kgsl_iommu_sync_lock(struct kgsl_mmu *mmu,
|
||||
*
|
||||
* Return - int - number of commands.
|
||||
*/
|
||||
-inline unsigned int kgsl_iommu_sync_unlock(struct kgsl_mmu *mmu,
|
||||
+static inline unsigned int kgsl_iommu_sync_unlock(struct kgsl_mmu *mmu,
|
||||
unsigned int *cmds)
|
||||
{
|
||||
struct kgsl_device *device = mmu->device;
|
131
linux-samsung-i9100/APKBUILD
Normal file
131
linux-samsung-i9100/APKBUILD
Normal file
|
@ -0,0 +1,131 @@
|
|||
# Based on linux-lg-mako. Changes:
|
||||
# - add findutils makedepend (necessary for the initramfs)
|
||||
# - it builds an initramfs - do not use ramdisk.cpio and
|
||||
# ramdisk-recovery-device.cpio, in there, always use the
|
||||
# initramfs from the recovery partition ("isorec")
|
||||
# - directly boot to that initramfs, not only when the recovery
|
||||
# key combination was pressed.
|
||||
# - use Alpine's busybox-static instead of the pre-compiled
|
||||
# binary, that comes with the source
|
||||
#
|
||||
# Kernel config changes, based on: arch/arm/configs/i9100_defconfig
|
||||
# - enable devtmpfs (needed for udev -> touch support in weston)
|
||||
# - change compression from CONFIG_KERNEL_LZMA=y to
|
||||
# CONFIG_KERNEL_GZIP=y (so it works with busybox)
|
||||
|
||||
# This must be built in the target chroot, so busybox.static can
|
||||
# be used.
|
||||
_pmb_build_in_native_chroot="false"
|
||||
|
||||
_vendor=samsung
|
||||
_flavor=samsung-i9100
|
||||
_hash="349a3e91e76d17e67ef6213e1f6712e700695631"
|
||||
_config="config-${_flavor}.armhf"
|
||||
|
||||
pkgname=linux-${_flavor}
|
||||
pkgver=3.0.101
|
||||
case $pkgver in
|
||||
*.*.*) _kernver=${pkgver%.*};;
|
||||
*.*) _kernver=$pkgver;;
|
||||
esac
|
||||
pkgrel=5
|
||||
arch="armhf"
|
||||
pkgdesc="Samsung Galaxy SII kernel from LineageOS"
|
||||
url="https://github.com/LineageOS/android_kernel_samsung_smdk4412"
|
||||
depends="postmarketos-mkinitfs"
|
||||
makedepends="perl sed installkernel bash gmp-dev bc linux-headers elfutils-dev
|
||||
findutils busybox-static"
|
||||
options="!strip !check !tracedeps"
|
||||
install=
|
||||
source="
|
||||
https://github.com/LineageOS/android_kernel_samsung_smdk4412/archive/${_hash}.zip
|
||||
$_config
|
||||
compiler-gcc6.h
|
||||
init
|
||||
"
|
||||
subpackages=""
|
||||
license="GPL2"
|
||||
|
||||
_abi_release=${pkgver}
|
||||
_carch="arm"
|
||||
HOSTCC="${CC:-gcc}"
|
||||
HOSTCC="${HOSTCC#${CROSS_COMPILE}}"
|
||||
|
||||
ksrcdir="$srcdir/android_kernel_samsung_smdk4412-${_hash}"
|
||||
|
||||
prepare() {
|
||||
local _patch_failed=
|
||||
cd "$ksrcdir"
|
||||
|
||||
# first apply patches in specified order
|
||||
for i in $source; do
|
||||
case $i in
|
||||
*.patch)
|
||||
msg "Applying $i..."
|
||||
if ! patch -s -p1 -N -i "$srcdir"/$i; then
|
||||
echo $i >>failed
|
||||
_patch_failed=1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if ! [ -z "$_patch_failed" ]; then
|
||||
error "The following patches failed:"
|
||||
cat failed
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Use Alpine's busybox.static instead of the pre-compiled busybox shipped
|
||||
# with the source
|
||||
cp -v /bin/busybox.static "$ksrcdir"/usr/galaxys2_initramfs_files/busybox
|
||||
|
||||
# do not use ramdisk.cpio and ramdisk-recovery-device.cpio, always use
|
||||
# the initramfs from the recovery partition ("isorec"), so we can build
|
||||
# it later and independently from the kernel. also directly boot that
|
||||
# partition, not only when the recovery key combination was used.
|
||||
cd "$ksrcdir"/usr/
|
||||
mv galaxys2_initramfs.list galaxys2_initramfs.list_old
|
||||
grep -v "../../ramdisk" galaxys2_initramfs.list_old > galaxys2_initramfs.list \
|
||||
|| return 1
|
||||
cp -v "$srcdir"/init "$ksrcdir"/usr/galaxys2_initramfs_files/init || return 1
|
||||
|
||||
# gcc6 support
|
||||
cp -v "$srcdir/compiler-gcc6.h" "$ksrcdir/include/linux/" || return 1
|
||||
|
||||
mkdir -p "$srcdir"/build
|
||||
cp "$srcdir"/$_config "$srcdir"/build/.config || return 1
|
||||
make -C "$ksrcdir" O="$srcdir"/build ARCH="$_carch" HOSTCC="$HOSTCC" \
|
||||
silentoldconfig
|
||||
}
|
||||
|
||||
|
||||
|
||||
# this is so we can do: 'abuild menuconfig' to reconfigure kernel
|
||||
menuconfig() {
|
||||
cd "$srcdir"/build || return 1
|
||||
make ARCH="$_carch" menuconfig
|
||||
cp .config "$startdir"/$_config
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir"/build
|
||||
unset LDFLAGS
|
||||
|
||||
make ARCH="$_carch" CC="${CC:-gcc}" \
|
||||
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
package() {
|
||||
install -Dm644 "$srcdir/build/arch/arm/boot/zImage" \
|
||||
"$pkgdir/boot/vmlinuz-$_flavor"
|
||||
|
||||
install -D "$srcdir/build/include/config/kernel.release" \
|
||||
"$pkgdir/usr/share/kernel/$_flavor/kernel.release"
|
||||
}
|
||||
|
||||
sha512sums="28198b1312d66a1af28e112f3252aa9fbbbee8bf373776c556cdbc1c75517072a1eec6522717df0b2bc4f6b5f06b9ce07d2cb29a2de07fc56c4ea072f4d46c82 349a3e91e76d17e67ef6213e1f6712e700695631.zip
|
||||
7ce82e81ca8d472f01f8097e3a434fe0130d66b16b29ed3d4c5ce94870fb4efe3b5e79523802b078fcdc737e5a1ee6351bc8427d1271a098eab8e9f35b95e6b1 config-samsung-i9100.armhf
|
||||
d80980e9474c82ba0ef1a6903b434d8bd1b092c40367ba543e72d2c119301c8b2d05265740e4104ca1ac5d15f6c4aa49e8776cb44264a9a28dc551e0d1850dcc compiler-gcc6.h
|
||||
dd4094d5f4ec281d32f12af88cb22a782e497c8e52f69cf60b73ac7d6171fc95f1f8040b3d0ad2ff3f016d22ac1d91c5b522e5d03203534a76742bc55a082af5 init"
|
69
linux-samsung-i9100/compiler-gcc6.h
Normal file
69
linux-samsung-i9100/compiler-gcc6.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
// SOURCE:
|
||||
// https://github.com/NextThingCo/CHIP-u-boot/issues/10#issuecomment-287515505
|
||||
|
||||
#ifndef __LINUX_COMPILER_H
|
||||
#error "Please don't include <linux/compiler-gcc6.h> directly, include <linux/compiler.h> instead."
|
||||
#endif
|
||||
|
||||
#define __used __attribute__((__used__))
|
||||
#define __must_check __attribute__((warn_unused_result))
|
||||
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
|
||||
|
||||
/* Mark functions as cold. gcc will assume any path leading to a call
|
||||
to them will be unlikely. This means a lot of manual unlikely()s
|
||||
are unnecessary now for any paths leading to the usual suspects
|
||||
like BUG(), printk(), panic() etc. [but let's keep them for now for
|
||||
older compilers]
|
||||
|
||||
Early snapshots of gcc 4.3 don't support this and we can't detect this
|
||||
in the preprocessor, but we can live with this because they're unreleased.
|
||||
Maketime probing would be overkill here.
|
||||
|
||||
gcc also has a __attribute__((__hot__)) to move hot functions into
|
||||
a special section, but I don't see any sense in this right now in
|
||||
the kernel context */
|
||||
#define __cold __attribute__((__cold__))
|
||||
|
||||
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
||||
|
||||
#ifndef __CHECKER__
|
||||
# define __compiletime_warning(message) __attribute__((warning(message)))
|
||||
# define __compiletime_error(message) __attribute__((error(message)))
|
||||
#endif /* __CHECKER__ */
|
||||
|
||||
/*
|
||||
* Mark a position in code as unreachable. This can be used to
|
||||
* suppress control flow warnings after asm blocks that transfer
|
||||
* control elsewhere.
|
||||
*
|
||||
* Early snapshots of gcc 4.5 don't support this and we can't detect
|
||||
* this in the preprocessor, but we can live with this because they're
|
||||
* unreleased. Really, we need to have autoconf for the kernel.
|
||||
*/
|
||||
#define unreachable() __builtin_unreachable()
|
||||
|
||||
/* Mark a function definition as prohibited from being cloned. */
|
||||
#define __noclone __attribute__((__noclone__))
|
||||
|
||||
/*
|
||||
* Tell the optimizer that something else uses this function or variable.
|
||||
*/
|
||||
#define __visible __attribute__((externally_visible))
|
||||
|
||||
/*
|
||||
* GCC 'asm goto' miscompiles certain code sequences:
|
||||
*
|
||||
* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
|
||||
*
|
||||
* Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
|
||||
*
|
||||
* (asm goto is automatically volatile - the naming reflects this.)
|
||||
*/
|
||||
#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
|
||||
|
||||
#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
|
||||
#define __HAVE_BUILTIN_BSWAP32__
|
||||
#define __HAVE_BUILTIN_BSWAP64__
|
||||
#define __HAVE_BUILTIN_BSWAP16__
|
||||
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
|
||||
|
3243
linux-samsung-i9100/config-samsung-i9100.armhf
Normal file
3243
linux-samsung-i9100/config-samsung-i9100.armhf
Normal file
File diff suppressed because it is too large
Load diff
29
linux-samsung-i9100/init
Normal file
29
linux-samsung-i9100/init
Normal file
|
@ -0,0 +1,29 @@
|
|||
#!/stage1/busybox sh
|
||||
|
||||
# Samsung kernels come with their own initramfs, which extract and load another
|
||||
# initramfs. Usually that depends on the recovery key combination being pressed
|
||||
# or not. For simplicity, we always boot the recovery image (from the recovery
|
||||
# partition) here.
|
||||
|
||||
_PATH="$PATH"
|
||||
export PATH=/stage1
|
||||
|
||||
busybox cd /
|
||||
busybox date >>boot.txt
|
||||
exec >>boot.txt 2>&1
|
||||
busybox rm init
|
||||
busybox mount -t proc proc /proc
|
||||
busybox mount -t sysfs sysfs /sys
|
||||
|
||||
# always use the "isorec"-style lzop compressed initramfs
|
||||
# from the recovery partition
|
||||
load_image=/stage1/isorec.cpio
|
||||
busybox lzop -dc /dev/block/mmcblk0p6 > ${load_image}
|
||||
busybox cpio -i < ${load_image}
|
||||
|
||||
busybox umount /sys
|
||||
busybox umount /proc
|
||||
busybox date >>boot.txt
|
||||
busybox rm -fr /stage1 /dev/*
|
||||
export PATH="${_PATH}"
|
||||
exec /init
|
22
mkbootimg/APKBUILD
Normal file
22
mkbootimg/APKBUILD
Normal file
|
@ -0,0 +1,22 @@
|
|||
pkgname=mkbootimg
|
||||
pkgver="7.1.2_r6"
|
||||
pkgrel=1
|
||||
pkgdesc="Android bootimg (zimage + initramfs) creation tool"
|
||||
url="https://android.googlesource.com"
|
||||
arch="noarch"
|
||||
license="APACHE2"
|
||||
depends="python3"
|
||||
subpackages=""
|
||||
source="$pkgname-$pkgver.py.base64::https://android.googlesource.com/platform/system/core/+/android-${pkgver}/${pkgname}/${pkgname}?format=TEXT"
|
||||
options="!check"
|
||||
|
||||
build() {
|
||||
base64 -d $srcdir/$pkgname-$pkgver.py.base64 > $srcdir/$pkgname
|
||||
sed -i -e 's./usr/bin/env python./usr/bin/env python3.' $srcdir/$pkgname
|
||||
}
|
||||
|
||||
package() {
|
||||
install -Dm755 $srcdir/$pkgname $pkgdir/usr/bin/$pkgname
|
||||
}
|
||||
|
||||
sha512sums="7aac61bf55e0c3627e71a1247ebd5636bc475919b50e34e289639745a051a4e1b31de273bfc75aaecc2e059007721e729c277199b4b4cec514541865a59e3312 mkbootimg-7.1.2_r6.py.base64"
|
50
musl-armhf/APKBUILD
Normal file
50
musl-armhf/APKBUILD
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen musl-armhf
|
||||
|
||||
pkgname=musl-armhf
|
||||
pkgver=1.1.16
|
||||
pkgrel=9
|
||||
subpackages="musl-dev-armhf:package_dev"
|
||||
|
||||
_arch="armhf"
|
||||
_mirror="https://mirror1.hs-esslingen.de/pub/Mirrors/alpine/"
|
||||
|
||||
url="https://musl-libc.org"
|
||||
license="MIT"
|
||||
arch="all"
|
||||
options="!check !strip"
|
||||
pkgdesc="the musl library (lib c) implementation for $_arch"
|
||||
|
||||
_target="$(arch_to_hostspec $_arch)"
|
||||
|
||||
source="
|
||||
musl-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-$pkgver-r$pkgrel.apk
|
||||
musl-dev-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/musl-dev-$pkgver-r$pkgrel.apk
|
||||
"
|
||||
|
||||
package() {
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/musl-$pkgver-r$pkgrel-$_arch.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
}
|
||||
package_dev() {
|
||||
mkdir -p "$subpkgdir/usr/$_target"
|
||||
cd "$subpkgdir/usr/$_target"
|
||||
tar -xf $srcdir/musl-dev-$pkgver-r$pkgrel-$_arch.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
|
||||
# symlink everything from /usr/$_target/usr/* to /usr/$_target/*
|
||||
# so the cross-compiler gcc does not fail to build.
|
||||
for _dir in include lib; do
|
||||
mkdir -p "$subpkgdir/usr/$_target/$_dir"
|
||||
cd "$subpkgdir/usr/$_target/usr/$_dir"
|
||||
for i in *; do
|
||||
cd "$subpkgdir/usr/$_target/$_dir"
|
||||
ln -s /usr/$_target/usr/$_dir/$i $i
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
sha512sums="865478e9ed9b97e8cedbe18cecb72611fd777c0fa45eebc67eae818084d0a3a5a85c6f37be5a874f48a8dcbb8c51ed4ceef6b33257215358e30ecddbb415c4b8 musl-1.1.16-r9-armhf.apk
|
||||
b6db9a9697b7bca35052cf5a247f2250d4e134f259584d98a48157c996c319e1e3d682b0cd68b90a86f5ea04eff4c2134f79be7aaff3d1b077934d4e45164e1d musl-dev-1.1.16-r9-armhf.apk"
|
26
postmarketos-base/APKBUILD
Normal file
26
postmarketos-base/APKBUILD
Normal file
|
@ -0,0 +1,26 @@
|
|||
pkgname=postmarketos-base
|
||||
pkgver=1
|
||||
pkgrel=6
|
||||
pkgdesc="Meta package for minimal postmarketos base"
|
||||
url="https://github.com/postmarketOS"
|
||||
arch="noarch"
|
||||
license="GPL3+"
|
||||
depends="alpine-base haveged cryptsetup wpa_supplicant iw openssh mosh
|
||||
tmux htop nano postmarketos-mkinitfs eudev sudo"
|
||||
makedepends=""
|
||||
install="$pkgname.post-install"
|
||||
subpackages=""
|
||||
source="profile.sh weston.ini sudoers"
|
||||
options="!check"
|
||||
|
||||
package() {
|
||||
install -D -m644 "$srcdir"/profile.sh \
|
||||
"$pkgdir"/etc/profile.d/postmarketos.sh || return 1
|
||||
install -D -m644 "$srcdir"/weston.ini \
|
||||
"$pkgdir"/etc/xdg/weston/weston.ini
|
||||
install -D -m644 "$srcdir"/sudoers \
|
||||
"$pkgdir"/etc/sudoers.d/postmarketos
|
||||
}
|
||||
sha512sums="d763c73c42795c05d28eeebfb6ef21e2c9706849331c485dbbf1ec7ea4f95cbeed4f6f615f5815f5a7acb9e0d30232cc7fe38c982ce1c7c4c8dfe8fabfe783ca profile.sh
|
||||
0f4dcb493503081e0045b768bc81bb41096fdb5a340c4b5f23e7954f2bac7fd723ee00470bef400786725ab143bcc53e51607f28370c0c2533cbba623a5d9b13 weston.ini
|
||||
c6de3b44bc45b9f9c641a7e34c69a481ee39b99ac0251cd28f2b3aae49c1a8d1ca448f4936b7942b1a8b8f7c18a5415c938098765ed8cf08456543800160e64b sudoers"
|
27
postmarketos-base/postmarketos-base.post-install
Normal file
27
postmarketos-base/postmarketos-base.post-install
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Enable OpenRC services
|
||||
for service in devfs dmesg; do
|
||||
rc-update -q add $service sysinit
|
||||
done
|
||||
for service in hwclock modules sysctl hostname bootmisc wpa_supplicant wifi-handler; do
|
||||
rc-update -q add $service boot
|
||||
done
|
||||
for service in haveged sshd udev; do
|
||||
rc-update -q add $service default
|
||||
done
|
||||
for service in mount-ro killprocs savecache; do
|
||||
rc-update -q add $service shutdown
|
||||
done
|
||||
|
||||
# Add user account
|
||||
adduser -u 1000 -D -h /home/user -G users user 2>/dev/null
|
||||
|
||||
# Autologin on tty1, disable tty 3-5
|
||||
autologin="root"
|
||||
for i in 1 3 4 5 6; do
|
||||
old="^tty$i::respawn:/sbin/getty 38400 tty$i"
|
||||
new="# tty$i::respawn:/sbin/getty 38400 tty$i"
|
||||
[ "$i" == "1" ] && new="tty1::respawn:/bin/login -f $autologin"
|
||||
sed -i -e "s.$old.$new.g" /etc/inittab
|
||||
done
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue