Fix link errors with GCC 10 and binutils 2.34 on Fedora
authorJohn Ousterhout <ouster@cs.stanford.edu>
Thu, 26 Mar 2020 18:28:48 +0000 (11:28 -0700)
committerJohn Ousterhout <ouster@cs.stanford.edu>
Thu, 26 Mar 2020 18:28:48 +0000 (11:28 -0700)
Fix the following compile errors:

ld: ... multiple definition of `fs_device'; ... first defined here

and

ld: ... multiple definition of `test_name'; ... first defined here.

These seem to result in a change in how GCC and the linker handle strong
and weak symbols.

Signed-off-by: W. Michael Petullo <mike@flyn.org>
12 files changed:
src/filesys/filesys.h
src/tests/filesys/base/child-syn-read.c
src/tests/filesys/extended/child-syn-rw.c
src/tests/userprog/child-close.c
src/tests/userprog/child-rox.c
src/tests/userprog/child-simple.c
src/tests/userprog/multi-recurse.c
src/tests/userprog/no-vm/multi-oom.c
src/tests/vm/child-linear.c
src/tests/vm/child-qsort-mm.c
src/tests/vm/child-qsort.c
src/tests/vm/child-sort.c

index c1cda84ecc324fbe70b4e9e3e729ed9ade89c24b..455ac7274a08e15abd0749efe3446842d48f8032 100644 (file)
@@ -9,7 +9,7 @@
 #define ROOT_DIR_SECTOR 1       /* Root directory file inode sector. */
 
 /* Block device that contains the file system. */
-struct block *fs_device;
+extern struct block *fs_device;
 
 void filesys_init (bool format);
 void filesys_done (void);
index 77a5e26252f6116cb2b25e2c7add0bb5e9787cb1..27ee59d99d03f36f12d10e01f7ddd16e2889d264 100644 (file)
@@ -11,8 +11,6 @@
 #include "tests/lib.h"
 #include "tests/filesys/base/syn-read.h"
 
-const char *test_name = "child-syn-read";
-
 static char buf[BUF_SIZE];
 
 int
@@ -22,6 +20,7 @@ main (int argc, const char *argv[])
   int fd;
   size_t i;
 
+  test_name = "child-syn-read";
   quiet = true;
   
   CHECK (argc == 2, "argc must be 2, actually %d", argc);
index 0e2217df58da7e4272ffd9ce40a0926d099213d1..d456a3a5ec49991d44530f192fe064230a96b154 100644 (file)
@@ -13,8 +13,6 @@
 #include "tests/filesys/extended/syn-rw.h"
 #include "tests/lib.h"
 
-const char *test_name = "child-syn-rw";
-
 static char buf1[BUF_SIZE];
 static char buf2[BUF_SIZE];
 
@@ -25,6 +23,7 @@ main (int argc, const char *argv[])
   int fd;
   size_t ofs;
 
+  test_name = "child-syn-rw";
   quiet = true;
   
   CHECK (argc == 2, "argc must be 2, actually %d", argc);
index ac948c8efe6978e98960fceda85218b84a3c3415..866e159a87b4293150fc2ee6c9a647f664ef5aa1 100644 (file)
 #include <syscall.h>
 #include "tests/lib.h"
 
-const char *test_name = "child-close";
-
 int
 main (int argc UNUSED, char *argv[]) 
 {
+  test_name = "child-close";
+
   msg ("begin");
   if (!isdigit (*argv[1]))
     fail ("bad command-line arguments");
index aba808bde2b52dde3b559d31fd3e9e75771140da..6fb2fc97a3e05d84c8b2cad62b129bc638f71a9b 100644 (file)
@@ -10,8 +10,6 @@
 #include <syscall.h>
 #include "tests/lib.h"
 
-const char *test_name = "child-rox";
-
 static void
 try_write (void) 
 {
@@ -31,6 +29,8 @@ try_write (void)
 int
 main (int argc UNUSED, char *argv[]) 
 {
+  test_name = "child-rox";
+
   msg ("begin");
   try_write ();
 
index 0d2dacf704f253d352c55288f48156370528c510..06cce89807522854de383ee864d278b2eac88b3a 100644 (file)
@@ -5,11 +5,11 @@
 #include <stdio.h>
 #include "tests/lib.h"
 
-const char *test_name = "child-simple";
-
 int
 main (void) 
 {
+  test_name = "child-simple";
+
   msg ("run");
   return 81;
 }
index 7172ec3cb6ce83c7df082c483cbaa9545f57e8f9..fcd592b1fbb4deeb5baf6fbc65f8d13d6291b810 100644 (file)
@@ -7,13 +7,13 @@
 #include <syscall.h>
 #include "tests/lib.h"
 
-const char *test_name = "multi-recurse";
-
 int
 main (int argc UNUSED, char *argv[]) 
 {
   int n = atoi (argv[1]);
 
+  test_name = "multi-recurse";
+
   msg ("begin %d", n);
   if (n != 0) 
     {
index cd2c939e808aaac822de41c7779530f64045d027..be0668a46d8c6dbbf94ef296abd10dca1296e586 100644 (file)
@@ -27,8 +27,6 @@
 static const int EXPECTED_DEPTH_TO_PASS = 30;
 static const int EXPECTED_REPETITIONS = 10;
 
-const char *test_name = "multi-oom";
-
 enum child_termination_mode { RECURSE, CRASH };
 
 /* Spawn a recursive copy of ourselves, passing along instructions
@@ -107,6 +105,8 @@ main (int argc, char *argv[])
 {
   int n;
 
+  test_name = "multi-oom";
+
   n = argc > 1 ? atoi (argv[1]) : 0;
   bool is_at_root = (n == 0);
   if (is_at_root)
index eca3e3f5a19dac0305319104ae15f5e8cb0e7ea5..cdbe82e897bca71acaf714680275d648e0161c9e 100644 (file)
@@ -7,8 +7,6 @@
 #include "tests/lib.h"
 #include "tests/main.h"
 
-const char *test_name = "child-linear";
-
 #define SIZE (1024 * 1024)
 static char buf[SIZE];
 
@@ -19,6 +17,8 @@ main (int argc, char *argv[])
   struct arc4 arc4;
   size_t i;
 
+  test_name = "child-linear";
+
   /* Encrypt zeros. */
   arc4_init (&arc4, key, strlen (key));
   arc4_crypt (&arc4, buf, SIZE);
index db45499615db12f6bf0c2fb8c081b22c3f7cb3ef..8d9549d3b4a4bbaf9e96ad93e016cccc5b5a671b 100644 (file)
@@ -7,14 +7,13 @@
 #include "tests/main.h"
 #include "tests/vm/qsort.h"
 
-const char *test_name = "child-qsort-mm";
-
 int
 main (int argc UNUSED, char *argv[]) 
 {
   int handle;
   unsigned char *p = (unsigned char *) 0x10000000;
 
+  test_name = "child-qsort-mm";
   quiet = true;
 
   CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);
index 355f4ebfb2b3f5dd62cb8b83575d8296059a852b..e243704c93dc5732f89a52ca18187aa3d5c81e29 100644 (file)
@@ -9,8 +9,6 @@
 #include "tests/main.h"
 #include "tests/vm/qsort.h"
 
-const char *test_name = "child-qsort";
-
 int
 main (int argc UNUSED, char *argv[]) 
 {
@@ -18,6 +16,7 @@ main (int argc UNUSED, char *argv[])
   unsigned char buf[128 * 1024];
   size_t size;
 
+  test_name = "child-qsort";
   quiet = true;
 
   CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);
index dff2c772050167e4227f314e6fdea2e34b5c4437..2b13b6725cf10574774b03d990db3a545cf8b029 100644 (file)
@@ -7,8 +7,6 @@
 #include "tests/lib.h"
 #include "tests/main.h"
 
-const char *test_name = "child-sort";
-
 unsigned char buf[128 * 1024];
 size_t histogram[256];
 
@@ -20,6 +18,7 @@ main (int argc UNUSED, char *argv[])
   size_t size;
   size_t i;
 
+  test_name = "child-sort";
   quiet = true;
 
   CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);