]> Shamusworld >> Repos - rmac/blobdiff - sect.c
Fix for #209 - forbid exporting expressions with unresolved symbols
[rmac] / sect.c
diff --git a/sect.c b/sect.c
index 20e6fcb4a32016685d68116e5024272eddcba10a..834df9d9b5d1d58f60e56ac2e030a598a50979d0 100644 (file)
--- a/sect.c
+++ b/sect.c
@@ -462,6 +462,15 @@ int ResolveFixups(int sno)
                        if (evexpr(fup->expr, &eval, &eattr, &esym) != OK)
                                continue;
 
+                       if (esym)
+                               if (!(esym->sattr & DEFINED))
+                               {
+                                       // If our expression still has an undefined symbol at this stage, it's bad news.
+                                       // The linker is never going to resolve the expression, so that's an error.
+                                       error("cannot export complex expression with unresloved symbol '%s'", esym->sname);
+                                       continue;
+                               }
+
                        if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & (DEFINED | REFERENCED | EQUATED)) == (DEFINED | REFERENCED))
                        {
                                error("relocation not allowed when o30 is enabled");