diff --git a/src/fd_control.h b/src/fd_control.h
index a20b092d1ca48258c1c4908ddb23ca474b1f8326..21cf3951724cb2c9ee74b2a5a79f8103f6acc25f 100644
--- a/src/fd_control.h
+++ b/src/fd_control.h
@@ -5,15 +5,15 @@
 \*/
 
 /*
- * $Id: fd_control.h,v 1.5 2000/05/20 18:58:29 grubba Exp $
+ * $Id: fd_control.h,v 1.6 2000/12/16 05:24:40 marcus Exp $
  */
 #ifndef FD_CONTROL_H
 #define FD_CONTROL_H
 
 /* Prototypes begin here */
-int set_nonblocking(int fd,int which);
-int query_nonblocking(int fd);
-int set_close_on_exec(int fd, int which);
+PMOD_EXPORT int set_nonblocking(int fd,int which);
+PMOD_EXPORT int query_nonblocking(int fd);
+PMOD_EXPORT int set_close_on_exec(int fd, int which);
 
 #ifdef HAVE_BROKEN_F_SETFD
 void do_close_on_exec(void);
diff --git a/src/gc.h b/src/gc.h
index db753c3c50b3366340c3a8c85382c7efc5cd61ba..6971f3e03bea593c3ac4b0eaae49e203bb7d32c0 100644
--- a/src/gc.h
+++ b/src/gc.h
@@ -1,5 +1,5 @@
 /*
- * $Id: gc.h,v 1.72 2000/12/14 07:25:16 mast Exp $
+ * $Id: gc.h,v 1.73 2000/12/16 05:24:40 marcus Exp $
  */
 #ifndef GC_H
 #define GC_H
@@ -13,7 +13,7 @@ extern struct pike_queue gc_mark_queue;
 extern INT32 num_objects;
 extern INT32 num_allocs;
 extern ptrdiff_t alloc_threshold;
-extern int Pike_in_gc;
+PMOD_EXPORT extern int Pike_in_gc;
 extern int gc_debug;
 
 extern struct callback *gc_evaluator_callback;
@@ -169,7 +169,7 @@ void describe_something(void *a, int t, int indent, int depth, int flags);
 PMOD_EXPORT void describe(void *x);
 void debug_describe_svalue(struct svalue *s);
 void debug_gc_touch(void *a);
-INT32 real_gc_check(void *a);
+PMOD_EXPORT INT32 real_gc_check(void *a);
 INT32 real_gc_check_weak(void *a);
 void locate_references(void *a);
 void gc_add_extra_ref(void *a);
@@ -180,7 +180,7 @@ void debug_really_free_gc_frame(struct gc_frame *l);
 int gc_do_weak_free(void *a);
 void gc_delayed_free(void *a);
 int gc_mark(void *a);
-void gc_cycle_enqueue(gc_cycle_check_cb *checkfn, void *data, int weak);
+PMOD_EXPORT void gc_cycle_enqueue(gc_cycle_check_cb *checkfn, void *data, int weak);
 void gc_cycle_run_queue();
 int gc_cycle_push(void *x, struct marker *m, int weak);
 void do_gc_recurse_svalues(struct svalue *s, int num);
diff --git a/src/main.h b/src/main.h
index 868d058c0fe387a1a5cf06272952adae3a7d545d..d19101d8ecc56e2819b953220093b15d9bb7cf56 100644
--- a/src/main.h
+++ b/src/main.h
@@ -5,16 +5,16 @@
 \*/
 
 /*
- * $Id: main.h,v 1.14 2000/11/06 17:03:32 grubba Exp $
+ * $Id: main.h,v 1.15 2000/12/16 05:24:40 marcus Exp $
  */
 #ifndef MAIN_H
 #define MAIN_H
 
 #include "callback.h"
 
-extern int d_flag, t_flag, a_flag, l_flag, c_flag, p_flag;
-extern int debug_options, runtime_options;
-extern int default_t_flag;
+PMOD_EXPORT extern int d_flag, t_flag, a_flag, l_flag, c_flag, p_flag;
+PMOD_EXPORT extern int debug_options, runtime_options;
+PMOD_EXPORT extern int default_t_flag;
 
 #ifdef TRY_USE_MMX
 extern int try_use_mmx;
@@ -29,10 +29,10 @@ extern int try_use_mmx;
 #define RUNTIME_STRICT_TYPES 2
 
 /* Prototypes begin here */
-struct callback *add_post_master_callback(callback_func call,
+PMOD_EXPORT struct callback *add_post_master_callback(callback_func call,
 					  void *arg,
 					  callback_func free_func);
-struct callback *add_exit_callback(callback_func call,
+PMOD_EXPORT struct callback *add_exit_callback(callback_func call,
 				   void *arg,
 				   callback_func free_func);
 int dbm_main(int argc, char **argv);
diff --git a/src/mapping.h b/src/mapping.h
index 8dd2f81e75a23a3d06b508225ff09313d42ef748..56cd243e3d1ee0f91cff503d62a976bf1df9e740 100644
--- a/src/mapping.h
+++ b/src/mapping.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: mapping.h,v 1.32 2000/12/14 07:23:04 mast Exp $
+ * $Id: mapping.h,v 1.33 2000/12/16 05:24:41 marcus Exp $
  */
 #ifndef MAPPING_H
 #define MAPPING_H
@@ -84,70 +84,70 @@ PMOD_PROTO void really_free_mapping(struct mapping *md);
 /* Prototypes begin here */
 BLOCK_ALLOC(mapping, 511)
 
-struct mapping *debug_allocate_mapping(int size);
-void really_free_mapping_data(struct mapping_data *md);
-void do_free_mapping(struct mapping *m);
+PMOD_EXPORT struct mapping *debug_allocate_mapping(int size);
+PMOD_EXPORT void really_free_mapping_data(struct mapping_data *md);
+PMOD_EXPORT void do_free_mapping(struct mapping *m);
 struct mapping_data *copy_mapping_data(struct mapping_data *md);
-void mapping_fix_type_field(struct mapping *m);
-void mapping_set_flags(struct mapping *m, int flags);
-void low_mapping_insert(struct mapping *m,
+PMOD_EXPORT void mapping_fix_type_field(struct mapping *m);
+PMOD_EXPORT void mapping_set_flags(struct mapping *m, int flags);
+PMOD_EXPORT void low_mapping_insert(struct mapping *m,
 			struct svalue *key,
 			struct svalue *val,
 			int overwrite);
-void mapping_insert(struct mapping *m,
+PMOD_EXPORT void mapping_insert(struct mapping *m,
 		    struct svalue *key,
 		    struct svalue *val);
-union anything *mapping_get_item_ptr(struct mapping *m,
+PMOD_EXPORT union anything *mapping_get_item_ptr(struct mapping *m,
 				     struct svalue *key,
 				     TYPE_T t);
-void map_delete_no_free(struct mapping *m,
+PMOD_EXPORT void map_delete_no_free(struct mapping *m,
 			struct svalue *key,
 			struct svalue *to);
-void check_mapping_for_destruct(struct mapping *m);
-struct svalue *low_mapping_lookup(struct mapping *m,
+PMOD_EXPORT void check_mapping_for_destruct(struct mapping *m);
+PMOD_EXPORT struct svalue *low_mapping_lookup(struct mapping *m,
 				  struct svalue *key);
-struct svalue *low_mapping_string_lookup(struct mapping *m,
+PMOD_EXPORT struct svalue *low_mapping_string_lookup(struct mapping *m,
 					 struct pike_string *p);
-void mapping_string_insert(struct mapping *m,
+PMOD_EXPORT void mapping_string_insert(struct mapping *m,
 			   struct pike_string *p,
 			   struct svalue *val);
-void mapping_string_insert_string(struct mapping *m,
+PMOD_EXPORT void mapping_string_insert_string(struct mapping *m,
 				  struct pike_string *p,
 				  struct pike_string *val);
-struct svalue *simple_mapping_string_lookup(struct mapping *m,
+PMOD_EXPORT struct svalue *simple_mapping_string_lookup(struct mapping *m,
 					    char *p);
-struct svalue *mapping_mapping_lookup(struct mapping *m,
+PMOD_EXPORT struct svalue *mapping_mapping_lookup(struct mapping *m,
 				      struct svalue *key1,
 				      struct svalue *key2,
 				      int create);
-struct svalue *mapping_mapping_string_lookup(struct mapping *m,
+PMOD_EXPORT struct svalue *mapping_mapping_string_lookup(struct mapping *m,
 				      struct pike_string *key1,
 				      struct pike_string *key2,
 				      int create);
-void mapping_index_no_free(struct svalue *dest,
+PMOD_EXPORT void mapping_index_no_free(struct svalue *dest,
 			   struct mapping *m,
 			   struct svalue *key);
-struct array *mapping_indices(struct mapping *m);
-struct array *mapping_values(struct mapping *m);
-struct array *mapping_to_array(struct mapping *m);
-void mapping_replace(struct mapping *m,struct svalue *from, struct svalue *to);
-struct mapping *mkmapping(struct array *ind, struct array *val);
-struct mapping *copy_mapping(struct mapping *m);
-struct mapping *copy_mapping(struct mapping *m);
-struct mapping *merge_mappings(struct mapping *a, struct mapping *b, INT32 op);
-struct mapping *merge_mapping_array_ordered(struct mapping *a, 
+PMOD_EXPORT struct array *mapping_indices(struct mapping *m);
+PMOD_EXPORT struct array *mapping_values(struct mapping *m);
+PMOD_EXPORT struct array *mapping_to_array(struct mapping *m);
+PMOD_EXPORT void mapping_replace(struct mapping *m,struct svalue *from, struct svalue *to);
+PMOD_EXPORT struct mapping *mkmapping(struct array *ind, struct array *val);
+PMOD_EXPORT struct mapping *copy_mapping(struct mapping *m);
+PMOD_EXPORT struct mapping *copy_mapping(struct mapping *m);
+PMOD_EXPORT struct mapping *merge_mappings(struct mapping *a, struct mapping *b, INT32 op);
+PMOD_EXPORT struct mapping *merge_mapping_array_ordered(struct mapping *a, 
 					    struct array *b, INT32 op);
-struct mapping *merge_mapping_array_unordered(struct mapping *a, 
+PMOD_EXPORT struct mapping *merge_mapping_array_unordered(struct mapping *a, 
 					      struct array *b, INT32 op);
-struct mapping *add_mappings(struct svalue *argp, INT32 args);
-int mapping_equal_p(struct mapping *a, struct mapping *b, struct processing *p);
+PMOD_EXPORT struct mapping *add_mappings(struct svalue *argp, INT32 args);
+PMOD_EXPORT int mapping_equal_p(struct mapping *a, struct mapping *b, struct processing *p);
 void describe_mapping(struct mapping *m,struct processing *p,int indent);
 node *make_node_from_mapping(struct mapping *m);
 void f_m_delete(INT32 args);
-void f_aggregate_mapping(INT32 args);
-struct mapping *copy_mapping_recursively(struct mapping *m,
+PMOD_EXPORT void f_aggregate_mapping(INT32 args);
+PMOD_EXPORT struct mapping *copy_mapping_recursively(struct mapping *m,
 					 struct processing *p);
-void mapping_search_no_free(struct svalue *to,
+PMOD_EXPORT void mapping_search_no_free(struct svalue *to,
 			    struct mapping *m,
 			    struct svalue *look_for,
 			    struct svalue *key );
diff --git a/src/multiset.h b/src/multiset.h
index 0ce129a53cdd9bc2d720621e7776582b6f06c783..f73477da3eef92211c8445f6d3507883fc9f83d2 100644
--- a/src/multiset.h
+++ b/src/multiset.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: multiset.h,v 1.15 2000/08/09 12:49:28 grubba Exp $
+ * $Id: multiset.h,v 1.16 2000/12/16 05:24:41 marcus Exp $
  */
 #ifndef MULTISET_H
 #define MULTISET_H
@@ -30,26 +30,26 @@ extern struct multiset *gc_internal_multiset;
 #define l_sizeof(L) ((L)->ind->size)
 
 /* Prototypes begin here */
-int multiset_member(struct multiset *l, struct svalue *ind);
-struct multiset *allocate_multiset(struct array *ind);
-void really_free_multiset(struct multiset *l);
-void do_free_multiset(struct multiset *l);
-void order_multiset(struct multiset *l);
-struct multiset *mkmultiset(struct array *ind);
-void multiset_insert(struct multiset *l,
+PMOD_EXPORT int multiset_member(struct multiset *l, struct svalue *ind);
+PMOD_EXPORT struct multiset *allocate_multiset(struct array *ind);
+PMOD_EXPORT void really_free_multiset(struct multiset *l);
+PMOD_EXPORT void do_free_multiset(struct multiset *l);
+PMOD_EXPORT void order_multiset(struct multiset *l);
+PMOD_EXPORT struct multiset *mkmultiset(struct array *ind);
+PMOD_EXPORT void multiset_insert(struct multiset *l,
 		 struct svalue *ind);
 struct array *multiset_indices(struct multiset *l);
-void multiset_delete(struct multiset *l,struct svalue *ind);
-void check_multiset_for_destruct(struct multiset *l);
-struct multiset *copy_multiset(struct multiset *tmp);
-struct multiset *merge_multisets(struct multiset *a,
+PMOD_EXPORT void multiset_delete(struct multiset *l,struct svalue *ind);
+PMOD_EXPORT void check_multiset_for_destruct(struct multiset *l);
+PMOD_EXPORT struct multiset *copy_multiset(struct multiset *tmp);
+PMOD_EXPORT struct multiset *merge_multisets(struct multiset *a,
 			  struct multiset *b,
 			  INT32 operator);
-struct multiset *add_multisets(struct svalue *argp,INT32 args);
+PMOD_EXPORT struct multiset *add_multisets(struct svalue *argp,INT32 args);
 int multiset_equal_p(struct multiset *a, struct multiset *b, struct processing *p);
 void describe_multiset(struct multiset *l,struct processing *p,int indent);
 node * make_node_from_multiset(struct multiset *l);
-void f_aggregate_multiset(INT32 args);
+PMOD_EXPORT void f_aggregate_multiset(INT32 args);
 struct multiset *copy_multiset_recursively(struct multiset *l,
 				   struct processing *p);
 void gc_mark_multiset_as_referenced(struct multiset *l);
diff --git a/src/object.h b/src/object.h
index cc9ca2bb2bf5dc4e899c34ac1665482edf84b145..1f3017e5806acb491156aae0918eb4a4ec8311a8 100644
--- a/src/object.h
+++ b/src/object.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: object.h,v 1.55 2000/10/01 08:51:54 hubbe Exp $
+ * $Id: object.h,v 1.56 2000/12/16 05:34:04 marcus Exp $
  */
 #ifndef OBJECT_H
 #define OBJECT_H
@@ -35,7 +35,7 @@ struct object
   char *storage;
 };
 
-extern struct object *first_object;
+PMOD_EXPORT extern struct object *first_object;
 extern struct object *gc_internal_object;
 extern struct object *objects_to_destruct;
 extern struct object *master_object;
@@ -55,8 +55,8 @@ extern struct program *magic_set_index_program;
 /* Prototypes begin here */
 BLOCK_ALLOC(object, 511)
 PMOD_EXPORT struct program *get_program_for_object_being_destructed(struct object * o);
-struct object *low_clone(struct program *p);
-void call_c_initializers(struct object *o);
+PMOD_EXPORT struct object *low_clone(struct program *p);
+PMOD_EXPORT void call_c_initializers(struct object *o);
 PMOD_EXPORT void do_free_object(struct object *o);
 PMOD_EXPORT struct object *debug_clone_object(struct program *p, int args);
 PMOD_EXPORT struct object *fast_clone_object(struct program *p, int args);
@@ -72,7 +72,7 @@ static void call_destroy(struct object *o, int foo);
 void low_destruct(struct object *o,int do_free);
 PMOD_EXPORT void destruct(struct object *o);
 PMOD_EXPORT void destruct_objects_to_destruct(void);
-void schedule_really_free_object(struct object *o);
+PMOD_EXPORT void schedule_really_free_object(struct object *o);
 PMOD_EXPORT void low_object_index_no_free(struct svalue *to,
 					  struct object *o,
 					  ptrdiff_t f);
@@ -98,8 +98,8 @@ PMOD_EXPORT int object_equal_p(struct object *a, struct object *b, struct proces
 void cleanup_objects(void);
 PMOD_EXPORT struct array *object_indices(struct object *o);
 PMOD_EXPORT struct array *object_values(struct object *o);
-void gc_mark_object_as_referenced(struct object *o);
-void real_gc_cycle_check_object(struct object *o, int weak);
+PMOD_EXPORT void gc_mark_object_as_referenced(struct object *o);
+PMOD_EXPORT void real_gc_cycle_check_object(struct object *o, int weak);
 unsigned gc_touch_all_objects(void);
 void gc_check_all_objects(void);
 void gc_mark_all_objects(void);
diff --git a/src/opcodes.h b/src/opcodes.h
index 5527fb2ba5115df1a4a5a139a68187cbb107540d..cb4068fe65a103c470371b7a67e2ebda002a7a68 100644
--- a/src/opcodes.h
+++ b/src/opcodes.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: opcodes.h,v 1.8 2000/12/01 03:19:01 hubbe Exp $
+ * $Id: opcodes.h,v 1.9 2000/12/16 05:34:05 marcus Exp $
  */
 #ifndef OPCODES_H
 #define OPCODES_H
@@ -154,9 +154,9 @@ enum Pike_opcodes
 void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind);
 void o_index(void);
 void o_cast(struct pike_string *type, INT32 run_time_type);
-void f_cast(void);
+PMOD_EXPORT void f_cast(void);
 void o_sscanf(INT32 args);
-void f_sscanf(INT32 args);
+PMOD_EXPORT void f_sscanf(INT32 args);
 /* Prototypes end here */
 
 #endif
diff --git a/src/operators.h b/src/operators.h
index 28cc41ec743166b41b7ad372e05159eb9b78cb86..7a0b853642d3950698f217baf7a7849164a68228 100644
--- a/src/operators.h
+++ b/src/operators.h
@@ -5,12 +5,12 @@
 \*/
 
 /*
- * $Id: operators.h,v 1.8 2000/07/28 17:16:55 hubbe Exp $
+ * $Id: operators.h,v 1.9 2000/12/16 05:34:05 marcus Exp $
  */
 #ifndef OPERATORS_H
 #define OPERATORS_H
 
-#define COMPARISON(ID,NAME,X) void ID(INT32 num_arg);
+#define COMPARISON(ID,NAME,X) PMOD_EXPORT void ID(INT32 num_arg);
 
 #include "svalue.h"
 
@@ -22,7 +22,7 @@ struct string_assignment_storage
 };
 
 /* Prototypes begin here */
-void f_ne(INT32 args);
+PMOD_EXPORT void f_ne(INT32 args);
 COMPARISON(f_eq,"`==", is_eq)
 COMPARISON(f_lt,"`<" , is_lt)
 COMPARISON(f_le,"`<=",!is_gt)
diff --git a/src/pike_macros.h b/src/pike_macros.h
index c36b511e7b55b11509acb3a5ac14cfa688e88d36..4a1392fb67dde019833d6f4a544fa77ebdf03d5f 100644
--- a/src/pike_macros.h
+++ b/src/pike_macros.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_macros.h,v 1.22 2000/12/14 07:22:31 mast Exp $
+ * $Id: pike_macros.h,v 1.23 2000/12/16 05:45:44 marcus Exp $
  */
 #ifndef MACROS_H
 #define MACROS_H
@@ -123,6 +123,6 @@
 
 
 /* Needed for fsort_template.h */
-int my_log2(size_t x);
+PMOD_EXPORT int my_log2(size_t x);
 
 #endif
diff --git a/src/pike_types.h b/src/pike_types.h
index 6879fbfd85b7de2beae2bb98dbd0c6ab6664ea90..3319cfa3dedb6792dfea847d005bd774ffd896ac 100644
--- a/src/pike_types.h
+++ b/src/pike_types.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_types.h,v 1.45 2000/09/07 11:33:09 grubba Exp $
+ * $Id: pike_types.h,v 1.46 2000/12/16 05:24:41 marcus Exp $
  */
 #ifndef PIKE_TYPES_H
 #define PIKE_TYPES_H
@@ -82,21 +82,21 @@ extern unsigned char type_stack[PIKE_TYPE_STACK_SIZE];
 extern unsigned char *pike_type_mark_stack[PIKE_TYPE_STACK_SIZE/4];
 
 extern int max_correct_args;
-extern struct pike_string *string_type_string;
-extern struct pike_string *int_type_string;
-extern struct pike_string *float_type_string;
-extern struct pike_string *object_type_string;
-extern struct pike_string *function_type_string;
-extern struct pike_string *program_type_string;
-extern struct pike_string *array_type_string;
-extern struct pike_string *list_type_string;
-extern struct pike_string *mapping_type_string;
-extern struct pike_string *type_type_string;
-extern struct pike_string *mixed_type_string;
-extern struct pike_string *void_type_string;
-extern struct pike_string *zero_type_string;
-extern struct pike_string *any_type_string;
-extern struct pike_string *weak_type_string;
+PMOD_EXPORT extern struct pike_string *string_type_string;
+PMOD_EXPORT extern struct pike_string *int_type_string;
+PMOD_EXPORT extern struct pike_string *float_type_string;
+PMOD_EXPORT extern struct pike_string *object_type_string;
+PMOD_EXPORT extern struct pike_string *function_type_string;
+PMOD_EXPORT extern struct pike_string *program_type_string;
+PMOD_EXPORT extern struct pike_string *array_type_string;
+PMOD_EXPORT extern struct pike_string *list_type_string;
+PMOD_EXPORT extern struct pike_string *mapping_type_string;
+PMOD_EXPORT extern struct pike_string *type_type_string;
+PMOD_EXPORT extern struct pike_string *mixed_type_string;
+PMOD_EXPORT extern struct pike_string *void_type_string;
+PMOD_EXPORT extern struct pike_string *zero_type_string;
+PMOD_EXPORT extern struct pike_string *any_type_string;
+PMOD_EXPORT extern struct pike_string *weak_type_string;
 
 #define CONSTTYPE(X) make_shared_binary_string(X,CONSTANT_STRLEN(X))
 
diff --git a/src/port.h b/src/port.h
index 4791f9104535260ff04ebccd41376bdeb9f52465..d78997e5698f630ec7cc75bfdb7e881e6cc11769 100644
--- a/src/port.h
+++ b/src/port.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: port.h,v 1.31 2000/10/26 01:32:41 hubbe Exp $
+ * $Id: port.h,v 1.32 2000/12/16 05:34:05 marcus Exp $
  */
 #ifndef PORT_H
 #define PORT_H
@@ -61,7 +61,7 @@ time_t TIME(time_t *);
 #endif
 
 long STRTOL(char *str,char **ptr,int base);
-double STRTOD(char * nptr, char **endptr);
+PMOD_EXPORT double STRTOD(char * nptr, char **endptr);
 
 #ifndef HAVE_STRCSPN
 int STRCSPN(const char *s,const char * set);
@@ -70,7 +70,7 @@ int STRCSPN(const char *s,const char * set);
 #endif
 
 #ifndef HAVE_STRCASECMP
-int STRCASECMP(const char *a,const char *b);
+PMOD_EXPORT int STRCASECMP(const char *a,const char *b);
 #else
 #  define STRCASECMP strcasecmp
 #endif
@@ -186,9 +186,9 @@ static INLINE int EXTRACT_CHAR(char *p) { return *p > 0x7f ? *p - 0x100 : *p; }
 #  define EXTRACT_INT(p) (*(INT32 *)(p))
 #else
 #ifdef PIKE_DEBUG
-unsigned INT16 EXTRACT_UWORD_(unsigned char *p);
-INT16 EXTRACT_WORD_(unsigned char *p);
-INT32 EXTRACT_INT_(unsigned char *p);
+PMOD_EXPORT unsigned INT16 EXTRACT_UWORD_(unsigned char *p);
+PMOD_EXPORT INT16 EXTRACT_WORD_(unsigned char *p);
+PMOD_EXPORT INT32 EXTRACT_INT_(unsigned char *p);
 #else
 static INLINE unsigned INT16 EXTRACT_UWORD_(unsigned char *p)
 {
@@ -218,8 +218,8 @@ static INLINE INT32 EXTRACT_INT_(unsigned char *p)
 
 #endif
 
-unsigned long my_rand(void);
-void my_srand(long seed);
+PMOD_EXPORT unsigned long my_rand(void);
+PMOD_EXPORT void my_srand(long seed);
 
 #ifdef OWN_GETHRTIME
 void own_gethrtime_init(void);
diff --git a/src/signal_handler.h b/src/signal_handler.h
index 335fc6509ca7b534467cb6aeb46901f67471b5ec..129031b8443cb703fa5a3d3365c23aa3ee6b4307 100644
--- a/src/signal_handler.h
+++ b/src/signal_handler.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: signal_handler.h,v 1.10 2000/03/22 00:56:14 hubbe Exp $
+ * $Id: signal_handler.h,v 1.11 2000/12/16 05:24:41 marcus Exp $
  */
 #ifndef SIGNAL_H
 #define SIGNAL_H
@@ -15,7 +15,7 @@ typedef RETSIGTYPE (*sigfunctype) (int);
 /* Prototypes begin here */
 struct sigdesc;
 void my_signal(int sig, sigfunctype fun);
-void check_signals(struct callback *foo, void *bar, void *gazonk);
+PMOD_EXPORT void check_signals(struct callback *foo, void *bar, void *gazonk);
 void set_default_signal_handler(int signum, void (*func)(INT32));
 void process_started(pid_t pid);
 void process_done(pid_t pid, char *from);
diff --git a/src/threads.h b/src/threads.h
index d8f651f1dabf8e9bd11b7caa420b67078918266c..7fe8746f2e1b9fd4f6204092972ee2963fe8c78c 100644
--- a/src/threads.h
+++ b/src/threads.h
@@ -1,5 +1,5 @@
 /*
- * $Id: threads.h,v 1.108 2000/12/05 21:08:23 per Exp $
+ * $Id: threads.h,v 1.109 2000/12/16 05:24:41 marcus Exp $
  */
 #ifndef THREADS_H
 #define THREADS_H
@@ -428,7 +428,7 @@ struct thread_state {
 #endif /* VERBOSE_THREADS_DEBUG */
 
 #ifdef THREAD_TRACE
-extern int t_flag;
+PMOD_EXPORT extern int t_flag;
 #define SWAP_OUT_TRACE(_tmp)	do { (_tmp)->status.t_flag = t_flag; } while(0)
 #define SWAP_IN_TRACE(_tmp)	do { t_flag = (_tmp)->status.t_flag; } while(0)
 #else /* !THREAD_TRACE */
@@ -492,7 +492,7 @@ extern int t_flag;
 
 #define THREADSTATE2OBJ(X) ((X)->state.thread_id)
 
-extern int Pike_in_gc;
+PMOD_EXPORT extern int Pike_in_gc;
 #define THREADS_ALLOW() do { \
      struct thread_state *_tmp=OBJ2THREAD(Pike_interpreter.thread_id); \
      DO_IF_DEBUG({ \