aboutsummaryrefslogtreecommitdiffstats
path: root/main/apk-tools
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-05-13 06:01:33 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2014-05-13 06:03:28 +0000
commit835f41e1544de53c62d05b3af4a7917dac9aad70 (patch)
tree2572e635491c3a98e9eb65cf04adc63c4b033023 /main/apk-tools
parent2eb5dec338d1b1d183bf228aea632dc13049a70d (diff)
downloadaports-835f41e1544de53c62d05b3af4a7917dac9aad70.tar.bz2
aports-835f41e1544de53c62d05b3af4a7917dac9aad70.tar.xz
main/apk-tools: backport pie fix
Diffstat (limited to 'main/apk-tools')
-rw-r--r--main/apk-tools/0001-finally-fix-building-PIE-binaries.patch146
-rw-r--r--main/apk-tools/APKBUILD12
2 files changed, 154 insertions, 4 deletions
diff --git a/main/apk-tools/0001-finally-fix-building-PIE-binaries.patch b/main/apk-tools/0001-finally-fix-building-PIE-binaries.patch
new file mode 100644
index 0000000000..b1316f682e
--- /dev/null
+++ b/main/apk-tools/0001-finally-fix-building-PIE-binaries.patch
@@ -0,0 +1,146 @@
+From 1e36692a8aee88564b19e6855febd91b4feea5eb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Mon, 12 May 2014 19:42:32 +0300
+Subject: [PATCH] finally fix building PIE binaries
+
+the dynamic applet registration never worked with PIE, and as
+a temporary hack -nopie was added to default link flags in 2008.
+
+this commit reworks the applet registration mechanism to something
+that is compatible with PIE, and removes the hack. finally!
+---
+ src/Makefile | 4 ++--
+ src/apk.c | 38 +++++++++++++++++++++++++++++---------
+ src/apk_applet.h | 9 ++++++---
+ 3 files changed, 37 insertions(+), 14 deletions(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 4487007..8fdaf4b 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -62,8 +62,8 @@ progs-$(STATIC) += apk.static
+ apk.static-objs := $(filter-out apk.o,$(apk-objs)) apk-static.o
+ LDFLAGS_apk.static := -static
+ LIBS_apk.static := -Wl,--as-needed -ldl -Wl,--no-as-needed
+-LDFLAGS_apk += -nopie -L$(obj)
+-LDFLAGS_apk-test += -nopie -L$(obj)
++LDFLAGS_apk += -L$(obj)
++LDFLAGS_apk-test += -L$(obj)
+
+ CFLAGS_ALL += $(shell $(PKG_CONFIG) --cflags $(PKGDEPS))
+ LIBS := -Wl,--as-needed \
+diff --git a/src/apk.c b/src/apk.c
+index 6cd01de..daf4d7f 100644
+--- a/src/apk.c
++++ b/src/apk.c
+@@ -33,6 +33,9 @@
+ #include "apk_print.h"
+ #include "apk_io.h"
+
++static struct list_head apk_applet_list;
++#define foreach_applet(iter) list_for_each_entry(iter, &apk_applet_list, node)
++
+ char **apk_argv;
+
+ static struct apk_option generic_options[] = {
+@@ -150,17 +153,16 @@ static int usage(struct apk_applet *applet)
+ {
+ version();
+ if (applet == NULL) {
+- struct apk_applet **a;
++ struct apk_applet *a;
+
+ print_usage("COMMAND", "[ARGS]...",
+ ARRAY_SIZE(generic_options), generic_options);
+
+ printf("\nThe following commands are available:\n");
+- for (a = &__start_apkapplets; a < &__stop_apkapplets; a++) {
++ foreach_applet(a) {
+ struct apk_indent indent = { .indent = 12 };
+-
+- indent.x = printf(" %-*s", indent.indent - 3, (*a)->name);
+- apk_print_indented_words(&indent, (*a)->help);
++ indent.x = printf(" %-*s", indent.indent - 3, a->name);
++ apk_print_indented_words(&indent, a->help);
+ printf("\n");
+ }
+ } else {
+@@ -186,11 +188,11 @@ static int usage(struct apk_applet *applet)
+
+ static struct apk_applet *find_applet(const char *name)
+ {
+- struct apk_applet **a;
++ struct apk_applet *a;
+
+- for (a = &__start_apkapplets; a < &__stop_apkapplets; a++) {
+- if (strcmp(name, (*a)->name) == 0)
+- return *a;
++ foreach_applet(a) {
++ if (strcmp(name, a->name) == 0)
++ return a;
+ }
+
+ return NULL;
+@@ -289,6 +291,22 @@ static void setup_automatic_flags(void)
+ apk_flags |= APK_INTERACTIVE;
+ }
+
++void apk_applet_register(struct apk_applet *applet)
++{
++ list_init(&applet->node);
++ list_add_tail(&applet->node, &apk_applet_list);
++}
++
++static void apk_applet_register_builtin(void)
++{
++ extern apk_init_func_t __start_initapplets[], __stop_initapplets[];
++ apk_init_func_t *p;
++
++ list_init(&apk_applet_list);
++ for (p = __start_initapplets; p < __stop_initapplets; p++)
++ (*p)();
++}
++
+ int main(int argc, char **argv)
+ {
+ struct apk_applet *applet;
+@@ -309,6 +327,8 @@ int main(int argc, char **argv)
+ apk_string_array_init(&test_repos);
+ #endif
+
++ apk_applet_register_builtin();
++
+ apk_argv = malloc(sizeof(char*[argc+2]));
+ memcpy(apk_argv, argv, sizeof(char*[argc]));
+ apk_argv[argc] = NULL;
+diff --git a/src/apk_applet.h b/src/apk_applet.h
+index fa690fc..d11c259 100644
+--- a/src/apk_applet.h
++++ b/src/apk_applet.h
+@@ -25,6 +25,8 @@ struct apk_option {
+ };
+
+ struct apk_applet {
++ struct list_head node;
++
+ const char *name;
+ const char *arguments;
+ const char *help;
+@@ -39,10 +41,11 @@ struct apk_applet {
+ int (*main)(void *ctx, struct apk_database *db, struct apk_string_array *args);
+ };
+
+-extern struct apk_applet *__start_apkapplets, *__stop_apkapplets;
++void apk_applet_register(struct apk_applet *);
++typedef void (*apk_init_func_t)(void);
+
+ #define APK_DEFINE_APPLET(x) \
+- static struct apk_applet *__applet_##x \
+- __attribute__((__section__("apkapplets"))) __attribute((used)) = &x;
++static void __register_##x(void) { apk_applet_register(&x); } \
++static apk_init_func_t __regfunc_##x __attribute__((__section__("initapplets"))) __attribute((used)) = __register_##x;
+
+ #endif
+--
+1.9.2
+
diff --git a/main/apk-tools/APKBUILD b/main/apk-tools/APKBUILD
index 4258c906a4..a1bd73b2ff 100644
--- a/main/apk-tools/APKBUILD
+++ b/main/apk-tools/APKBUILD
@@ -1,7 +1,7 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=apk-tools
pkgver=2.4.3
-pkgrel=1
+pkgrel=2
pkgdesc="Alpine Package Keeper - package manager for alpine"
subpackages="$pkgname-static"
depends=
@@ -14,6 +14,7 @@ if [ "$CBUILD" == "$CHOST" ]; then
fi
source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$pkgver.tar.xz
0001-db-allow-replacing-files-of-origin-package-is-same.patch
+ 0001-finally-fix-building-PIE-binaries.patch
"
url="http://git.alpinelinux.org/cgit/apk-tools/"
@@ -84,8 +85,11 @@ luaapk() {
}
md5sums="40e287741880f8a24ddaca5fe9f545b7 apk-tools-2.4.3.tar.xz
-cd234f5f9c5963a519332a99d9b73547 0001-db-allow-replacing-files-of-origin-package-is-same.patch"
+cd234f5f9c5963a519332a99d9b73547 0001-db-allow-replacing-files-of-origin-package-is-same.patch
+3294eec1ff1d75a4e87f910636eaf7e2 0001-finally-fix-building-PIE-binaries.patch"
sha256sums="3198d3cdb718116665e609b5d3842a05f528f37fcbb6c52a2e9d46bfd2646288 apk-tools-2.4.3.tar.xz
-8810c75716c32e875a46143d371c15e954d81e2fe95a9097bfd849c5aebcca57 0001-db-allow-replacing-files-of-origin-package-is-same.patch"
+8810c75716c32e875a46143d371c15e954d81e2fe95a9097bfd849c5aebcca57 0001-db-allow-replacing-files-of-origin-package-is-same.patch
+1eaaa65b790013add87c3f6b458a842a42852f1c4207687adccc2f25caa11347 0001-finally-fix-building-PIE-binaries.patch"
sha512sums="327ca4bd19b35c521edddb4b1f56ac3f68e212c9b5be5a18219416048489a536bf948f6e4a0443456d42026aed71fd6255d2c73ff178e0726b392a5553e6680e apk-tools-2.4.3.tar.xz
-03d8e95ed2f53126bc40494a5335b4b550edb532b1d1e90cd757b4b8a10efcf84fb030b913ba924ba42cc1ef38becef4c55b05383eb71c194c587b6212b49a52 0001-db-allow-replacing-files-of-origin-package-is-same.patch"
+03d8e95ed2f53126bc40494a5335b4b550edb532b1d1e90cd757b4b8a10efcf84fb030b913ba924ba42cc1ef38becef4c55b05383eb71c194c587b6212b49a52 0001-db-allow-replacing-files-of-origin-package-is-same.patch
+3cca632d4ec459ca6d5647c4b7712ffabbcda668987f7b305f3c21e3c1e852a4d943ccc957cefaefafebb5e35e5a56c97717a047207c741721899453ad875a8d 0001-finally-fix-building-PIE-binaries.patch"