summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Ushakov <uwe@stderr.spb.ru>2016-06-02 03:28:22 +0300
committerValery Ushakov <uwe@stderr.spb.ru>2016-06-02 03:28:22 +0300
commite1c3cf6a753f912738ebb8bbaf48155de353f22f (patch)
treeec2eab9fd4ab889972d2a094720deb1341fc8847
parente947274a77808b1a1a718baeb3a0b11959a85761 (diff)
fns.h should declare "coherence", not define it. Move the definition
to main.c and init it "nofence". This is required because with dynamic linking init/fini code runs before main() has a chance to init it. Since emu provides its own malloc, init/fini code that uses malloc will eventually call coherence() and crash if it's not inited.
-rw-r--r--emu/port/fns.h2
-rw-r--r--emu/port/main.c4
2 files changed, 5 insertions, 1 deletions
diff --git a/emu/port/fns.h b/emu/port/fns.h
index 6a0809c0..36d341b7 100644
--- a/emu/port/fns.h
+++ b/emu/port/fns.h
@@ -20,7 +20,7 @@ Dir* chandirstat(Chan*);
void cinit(void);
char* clipread(void);
int clipwrite(char*);
-void (*coherence)(void);
+extern void (*coherence)(void);
void copen(Chan*);
void cmderror(Cmdbuf*, char*);
Block* concatblock(Block*);
diff --git a/emu/port/main.c b/emu/port/main.c
index 158f6b03..da1aa432 100644
--- a/emu/port/main.c
+++ b/emu/port/main.c
@@ -27,6 +27,10 @@ extern int mflag;
ulong displaychan;
char *cputype;
+/* For dynamic linking init/fini code that needs malloc */
+void (*coherence)(void) = nofence;
+
+
static void
usage(void)
{