diff options
author | Valery Ushakov <uwe@stderr.spb.ru> | 2016-06-02 03:28:22 +0300 |
---|---|---|
committer | Valery Ushakov <uwe@stderr.spb.ru> | 2016-06-02 03:28:22 +0300 |
commit | e1c3cf6a753f912738ebb8bbaf48155de353f22f (patch) | |
tree | ec2eab9fd4ab889972d2a094720deb1341fc8847 | |
parent | e947274a77808b1a1a718baeb3a0b11959a85761 (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.h | 2 | ||||
-rw-r--r-- | emu/port/main.c | 4 |
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) { |