aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAric Belsito <lluixhi@gmail.com>2017-04-06 15:04:26 -0700
committerAric Belsito <lluixhi@gmail.com>2017-04-06 15:04:26 -0700
commit1e9fa4be730271d32f38376cbab2691500efb94e (patch)
treea8d88c2b8eb9afa08df33ea364af3a21f3a1bef4 /app-editors
parentapp-editors/emacs: sync with tree (diff)
downloadmusl-1e9fa4be730271d32f38376cbab2691500efb94e.tar.gz
musl-1e9fa4be730271d32f38376cbab2691500efb94e.tar.bz2
musl-1e9fa4be730271d32f38376cbab2691500efb94e.zip
app-editors/emacs: restore preload hack
Diffstat (limited to 'app-editors')
-rw-r--r--app-editors/emacs/Manifest3
-rw-r--r--app-editors/emacs/emacs-24.5-r3.ebuild3
-rw-r--r--app-editors/emacs/files/preload.c88
3 files changed, 93 insertions, 1 deletions
diff --git a/app-editors/emacs/Manifest b/app-editors/emacs/Manifest
index de94e079..f72390d5 100644
--- a/app-editors/emacs/Manifest
+++ b/app-editors/emacs/Manifest
@@ -3,7 +3,8 @@ AUX emacs-24.3-stderr.patch 278 SHA256 ca8f431a822b0ae6e82e1600e5943a150ff18b0bf
AUX emacs-24.4-configure.patch 334 SHA256 696710ea84e88a364bd89c9c66393b01b2b8782d2bd0fc08166e64b67b24b0fe SHA512 d75df3a772713e08b45759b58c92944a1719ce291069f111d296b15c7de86f7a9a89d023fa3ccd191390d8a79a671d0a60116f039cf6f57ebeeb7baa14f7af29 WHIRLPOOL 6420f6a5f8009096aa71f2e64d920dec6a1436bbb83c26c2a0d4180555b6e251ebfa92be801ddcf70bd840cb9afd56f99a84ad50be7361289baefe83e35ca52b
AUX emacs-24.4-lisp.patch 421 SHA256 da45d30d4e305ba5220749d3ac884aaeac395bc896839a5e7a24fb112912cbff SHA512 7dda7632f7af4207c94bf2b4384d07bb13ef4562ade02393c668b35ff48d7b64d95a9c05d8700c2ba272abf69e8b9c38a690b10afa86b8857a2ba34cb344f3a3 WHIRLPOOL 28e3346a1b47f8421d56ec37005a806828f1f6995cd4dc213ac8a6011457a7d1d0524f8418a2801e176c5ea09cb5910cd6432a55c592d679f7752c3df23ca339
AUX emacs-24.4-preload-hack.patch 343 SHA256 289febdc960bee609514fe5291fb3d60cc9b505345853370aa94b9bd9ccb5fd2 SHA512 ee765cc9f3a84b48c00a0c8a36934af6da737fa6b9f9d993e0e5e1c8b9f05cf7b1f96c260daba10e4b4df149abcf8ea125cf8d6ebbe5e2c0d508007e381ecd6b WHIRLPOOL f5c1c6313392325949edc955d9f1b3dc74395ff18cd214f5bef6f8f77ce1975233c870101a03d5218da007a61f3107474ef461d129313b00b07da762970b749a
+AUX preload.c 1868 SHA256 3498abf641e809c06bf6a265d54880e93ee31f7abf81210856b6dbef7d267129 SHA512 6268255b7afa8455ad7ce63ef6f01a7d114b53fbb3dc557b187de0ee6514b33b3419d70b8d7984dc289f5eed075a30b508133147821f77c4345df5cbd62e616e WHIRLPOOL 0c72d97de94cf5e1cf6a8ee4f8f42800d63f35465ea22f8c409857620ecc37e304ff6c2c4670659a063e5f275488fcdd1b45226d9d0130c4506480df7708bff6
DIST emacs-24.5-patches-3.tar.xz 12500 SHA256 4927e037141c0c242d0d6d3aa7dfde140faae361aa556e6ded64b7ab26819f07 SHA512 9bddca3d4a67b57ca03c26fbca378def345592a95c40e868fc47fd9944ed0f750bc30f3a4d588a8a0b4c90daa6c9ed63b56182e8d2d87b4c8d849bf834ead1cc WHIRLPOOL c16cbfda1040b205ced4c1ed120aad6f65285fb315ce89dc936e6a357fbc8f9215fb178b696d2a914c53c6869384f0b1b56fcb6b84c5438f026101b4989de6c5
DIST emacs-24.5.tar.xz 39759804 SHA256 dd47d71dd2a526cf6b47cb49af793ec2e26af69a0951cc40e43ae290eacfc34e SHA512 89dee4c3aadb6e505c523f84c65b5e40e5bf28a586cc8a4518a59581c22972f942bb6f3c772df0d5b2685c3e78247c545c6bb2576e981d1ef0f9298c18ad1677 WHIRLPOOL 3d9f8fb840f4c846246e642369f967ba0ec357c7cf718ed865523a3cd39605ba14b8c15fc9ae3f076c27e5b6e41fcb681d15f1c6ffc5934430c0a2bf47c233a3
-EBUILD emacs-24.5-r3.ebuild 11297 SHA256 9c0a7e05ebd9cb5995f3baad0d14d906c9b80d83d4277c9d8594796e29aec495 SHA512 4f63e74f1fdb760e54b5fd874772872c25b2d4a8486d25223f651e814d37090e4b63731fe2a7ea9afc8e23e1b6941f26ab88886df35b26bcb87fef6c1e9376e0 WHIRLPOOL 330dd385d43183b74f94894499566920ea22c6a858ac7971ceb5f9f1eb33d3047563135f68a7a90cfe690c9a07738a1aef6a059f9a06213b432d4e3a3b641129
+EBUILD emacs-24.5-r3.ebuild 11394 SHA256 3cacb6d7d80c231fbf91672bec23459e926b11055fe060fda90d471cc3a67380 SHA512 686c87909c5f7381da890f8fd3fb89b320584ee498fbe0afdd2565d17e99fb4c7e5ec4884e0752d06befa8739434d170e894a3c4b634d5d34a3803b70778201b WHIRLPOOL a9b17e5391e6c9a03a8c912b8e7177bac316b6111b5834d77d8b79ff61e3a84e5afde3a670099169cd11413e1d7ef66bf913c282ec722d9f1776947088ed69aa
MISC metadata.xml 2576 SHA256 2ea79bae728183789a3619b7d1e02422125237513dcc8ab2c7e3580011d4ff59 SHA512 e1af4c39ed9ff2ccad79bb0401809ed433fb30836270ddc76937bffcc3688b32e5d8dc29f23c0c01facdcaa069acf73fa0b75e33f26dc075cd79afb49f46c37c WHIRLPOOL 3dce181c54e30d66ed75abad7ced29949105a435f0b1f669c95f267466d97d6da92b3f3d200c4d711c7633dcadef1a5fb2e8d9a71288999db693fcb669c724dd
diff --git a/app-editors/emacs/emacs-24.5-r3.ebuild b/app-editors/emacs/emacs-24.5-r3.ebuild
index a83f805c..41e240d3 100644
--- a/app-editors/emacs/emacs-24.5-r3.ebuild
+++ b/app-editors/emacs/emacs-24.5-r3.ebuild
@@ -212,6 +212,9 @@ src_configure() {
}
src_compile() {
+ # compile preload hack
+ $(tc-getCC) -shared -fPIC -o preload.so "${FILESDIR}/preload.c" || die
+
export SANDBOX_ON=0 # for the unbelievers, see Bug #131505
emake
}
diff --git a/app-editors/emacs/files/preload.c b/app-editors/emacs/files/preload.c
new file mode 100644
index 00000000..65cdceff
--- /dev/null
+++ b/app-editors/emacs/files/preload.c
@@ -0,0 +1,88 @@
+// http://www.openwall.com/lists/musl/2015/02/03/1
+#include <pthread.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdio.h>
+
+static void *(*real_malloc)(size_t);
+static void *initial_brk;
+
+static pthread_once_t once_control[1];
+static void once_func()
+{
+ real_malloc = dlsym(RTLD_NEXT, "malloc");
+ initial_brk = sbrk(0);
+}
+
+static int cmp(const void *a, const void *b)
+{
+ void *aa = *(void **)a, *bb = *(void **)b;
+ return aa < bb ? -1 : aa > bb ? 1 : 0;
+}
+
+void *malloc(size_t n)
+{
+ size_t i, j, k;
+ pthread_once(once_control, once_func);
+ if (n < 100000 || n > (size_t)-1/2) {
+ void *p;
+ do p = real_malloc(n);
+ while (p > sbrk(0) || (p && p < initial_brk));
+ return p;
+ }
+ size_t cnt = n/16384;
+ void **list = real_malloc(sizeof *list * cnt);
+ if (!list) return 0;
+ for (i=0; i<cnt; i++) list[i] = 0;
+ for (i=0; i<cnt; i++) {
+ list[i] = real_malloc(65536 - 2*sizeof(size_t));
+ if (!list[i]) goto fail;
+ if (i<cnt/4) continue;
+ size_t base = 0;
+ qsort(list, i+1, sizeof(void *), cmp);
+ for (j=0; j<i; j++) {
+ char *p = list[base];
+ char *s = list[j];
+ char *z = list[j+1];
+ if (z-s > 65536) {
+ base = j+1;
+ continue;
+ }
+ if (z-p < n+64) {
+ continue;
+ }
+ for (k=0; k<base; k++) free(list[k]);
+ *(size_t *)(p-sizeof(size_t)) = z-p | 1;
+ *(size_t *)(z-2*sizeof(size_t)) = z-p | 1;
+ for (k=j+1; k<i+1; k++) free(list[k]);
+ free(list);
+ return p;
+ }
+ }
+fail:
+ for (i=0; i<cnt; i++) free(list[i]);
+ free(list);
+ return 0;
+}
+
+void *calloc(size_t n, size_t m)
+{
+ if ((size_t)-1/n <= m) n *= m;
+ else n = (size_t)-1;
+ void *p = malloc(n);
+ if (p) memset(p, 0, n);
+ return p;
+}
+
+void *realloc(void *p, size_t n)
+{
+ void *q = malloc(n);
+ if (!q) return 0;
+ size_t l = *(size_t *)((char *)p - sizeof(size_t)) & -8;
+ memcpy(q, p, l<n ? l : n);
+ free(p);
+ return q;
+}