Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
aports
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakub Panek
aports
Commits
835f41e1
Commit
835f41e1
authored
10 years ago
by
Natanael Copa
Browse files
Options
Downloads
Patches
Plain Diff
main/apk-tools: backport pie fix
parent
2eb5dec3
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
main/apk-tools/0001-finally-fix-building-PIE-binaries.patch
+146
-0
146 additions, 0 deletions
main/apk-tools/0001-finally-fix-building-PIE-binaries.patch
main/apk-tools/APKBUILD
+8
-4
8 additions, 4 deletions
main/apk-tools/APKBUILD
with
154 additions
and
4 deletions
main/apk-tools/0001-finally-fix-building-PIE-binaries.patch
0 → 100644
+
146
−
0
View file @
835f41e1
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
This diff is collapsed.
Click to expand it.
main/apk-tools/APKBUILD
+
8
−
4
View file @
835f41e1
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname
=
apk-tools
pkgname
=
apk-tools
pkgver
=
2.4.3
pkgver
=
2.4.3
pkgrel
=
1
pkgrel
=
2
pkgdesc
=
"Alpine Package Keeper - package manager for alpine"
pkgdesc
=
"Alpine Package Keeper - package manager for alpine"
subpackages
=
"
$pkgname
-static"
subpackages
=
"
$pkgname
-static"
depends
=
depends
=
...
@@ -14,6 +14,7 @@ if [ "$CBUILD" == "$CHOST" ]; then
...
@@ -14,6 +14,7 @@ if [ "$CBUILD" == "$CHOST" ]; then
fi
fi
source
=
"http://dev.alpinelinux.org/archive/
$pkgname
/
$pkgname
-
$pkgver
.tar.xz
source
=
"http://dev.alpinelinux.org/archive/
$pkgname
/
$pkgname
-
$pkgver
.tar.xz
0001-db-allow-replacing-files-of-origin-package-is-same.patch
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/"
url
=
"http://git.alpinelinux.org/cgit/apk-tools/"
...
@@ -84,8 +85,11 @@ luaapk() {
...
@@ -84,8 +85,11 @@ luaapk() {
}
}
md5sums
=
"40e287741880f8a24ddaca5fe9f545b7 apk-tools-2.4.3.tar.xz
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
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
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"
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment