commit:     1e9fa4be730271d32f38376cbab2691500efb94e
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Thu Apr  6 22:04:26 2017 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Thu Apr  6 22:04:26 2017 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=1e9fa4be

app-editors/emacs: restore preload hack

 app-editors/emacs/Manifest             |  3 +-
 app-editors/emacs/emacs-24.5-r3.ebuild |  3 ++
 app-editors/emacs/files/preload.c      | 88 ++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 1 deletion(-)

diff --git a/app-editors/emacs/Manifest b/app-editors/emacs/Manifest
index de94e07..f72390d 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 a83f805..41e240d 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 0000000..65cdcef
--- /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;
+}

Reply via email to