diff --git a/tools/wrc/CHANGES b/tools/wrc/CHANGES
index 30700f0a6656c356bdb3257360e8999e694c02d4..6f3bc3676c0d2fdbf6ab7aee38c2ac0ae10c14c7 100644
--- a/tools/wrc/CHANGES
+++ b/tools/wrc/CHANGES
@@ -1,3 +1,9 @@
+---------------------------------------------------------------------------
+Version 1.0.4 (10-Dec-1998)
+- Added a global label for elf-dll linking and a long with the resource
+  size and a long with the directory size.
+- Killed an annoying warning since version 1.0.0 in parser.y about a
+  var being used before init.
 
 ---------------------------------------------------------------------------
 Version 1.0.3 (02-Nov-1998)
diff --git a/tools/wrc/parser.y b/tools/wrc/parser.y
index 494d0067e00c7ac2a721c188b83c186f1410b553..7f5d87798ecd1e429b3230e8dd202a5cd00e3408 100644
--- a/tools/wrc/parser.y
+++ b/tools/wrc/parser.y
@@ -1847,7 +1847,7 @@ event_t *add_event(int key, int id, int flags, event_t *prev)
 
 event_t *add_string_event(string_t *key, int id, int flags, event_t *prev)
 {
-	int keycode;
+	int keycode = 0;
 	event_t *ev = new_event();
 
 	if(key->type != str_char)
diff --git a/tools/wrc/wrc.h b/tools/wrc/wrc.h
index 2985c2b467fb115b7b961c33040381ba590e8684..1201c6c78230b465b7e8aafb8722e2be0d892077 100644
--- a/tools/wrc/wrc.h
+++ b/tools/wrc/wrc.h
@@ -12,8 +12,8 @@
 #include "wrctypes.h"
 #endif
 
-#define WRC_VERSION	"1.0.3"
-#define WRC_RELEASEDATE	"(02-Nov-1998)"
+#define WRC_VERSION	"1.0.4"
+#define WRC_RELEASEDATE	"(10-Dec-1998)"
 #define WRC_FULLVERSION WRC_VERSION " " WRC_RELEASEDATE
 
 /* Only used in heavy debugging sessions */
diff --git a/tools/wrc/writeres.c b/tools/wrc/writeres.c
index ef02d4ccf968ac0536e082221344ab1699d8c7f6..f02d39f4557e47c53720edfdb0d1dd90ecaefd60 100644
--- a/tools/wrc/writeres.c
+++ b/tools/wrc/writeres.c
@@ -18,6 +18,12 @@
 #include "newstruc.h"
 #include "utils.h"
 
+#ifdef NEED_UNDERSCORE_PREFIX
+char Underscore[] = "_";
+#else
+char Underscore[] = "";
+#endif
+
 char s_file_head_str[] =
 	"#\n"
 	"# This file is generated with wrc version " WRC_FULLVERSION ". Do not edit!\n"
@@ -742,6 +748,10 @@ void write_pe_segment(FILE *fp, resource_t *top)
 		free(typelabel);
 	}
 
+	fprintf(fp, "\t.align\t4\n");
+	fprintf(fp, "%s_ResourceDirectorySize:\n", Underscore);
+	fprintf(fp, "\t.globl\t%s_ResourceDirectorySize\n", Underscore);
+	fprintf(fp, "\t.long\t. - %s%s\n", prefix, _PEResTab);
 }
 
 /*
@@ -970,6 +980,13 @@ void write_s_file(char *outname, resource_t *top)
 
 			fprintf(fo, "\n");
 		}
+
+		if(create_dir)
+		{
+			/* Add the size of the entire resource section for elf-dlls */
+			fprintf(fo, "%s_ResourceSectionSize:\n", Underscore);
+			fprintf(fo, "\t.long\t. - %s%s\n", prefix, _PEResTab);
+		}
 	}
 
 	if(indirect)