break up llvm rt afl init
MODIFY
llvm_mode/afl-llvm-rt.o.c
llvm_mode/afl-llvm-rt.o.c
#include <string.h>
#include <assert.h>
#include <stdint.h>
+#include <stddef.h>
+#include <limits.h>
#include <errno.h>
#include <sys/mman.h>
@@ -848,7 +850,6 @@ void __afl_manual_init(void) {
if (!init_done) {
- __afl_map_shm();
__afl_start_forkserver();
init_done = 1;
@@ -856,20 +857,30 @@ void __afl_manual_init(void) {
}
-/* Proper initialization routine. */
+/* Initialization of the forkserver - latest possible */
-__attribute__((constructor(CONST_PRIO))) void __afl_auto_init(void) {
+__attribute__((constructor())) void __afl_auto_init(void) {
if (getenv("AFL_DISABLE_LLVM_INSTRUMENTATION")) return;
- is_persistent = !!getenv(PERSIST_ENV_VAR);
-
if (getenv(DEFER_ENV_VAR)) return;
__afl_manual_init();
}
+/* Initialization of the shmem - earliest possible because of LTO fixed mem. */
+
+__attribute__((constructor(0))) void __afl_auto_early(void) {
+
+ if (getenv("AFL_DISABLE_LLVM_INSTRUMENTATION")) return;
+
+ is_persistent = !!getenv(PERSIST_ENV_VAR);
+
+ __afl_map_shm();
+
+}
+
/* The following stuff deals with supporting -fsanitize-coverage=trace-pc-guard.
It remains non-operational in the traditional, plugin-backed LLVM mode.
For more info about 'trace-pc-guard', see llvm_mode/README.md.

MODIFY
src/afl-fuzz.c
src/afl-fuzz.c
@@ -1305,7 +1305,7 @@ int main(int argc, char **argv_orig, char **envp) {
OKF("Taint forkserver successfully started");
- const rlim_t kStackSize = 64L * 1024L * 1024L; // min stack size = 64 Mb
+ const rlim_t kStackSize = 256L * 1024L * 1024L; // min stack size = 256 Mb
struct rlimit rl;
rl.rlim_cur = kStackSize;
if (getrlimit(RLIMIT_STACK, &rl) != 0)

break up llvm rt afl init