Fix typo.
[deliverable/binutils-gdb.git] / ld / ldexp.c
index 3335e37dc37e3b8fd2223bc07c8970bf4f9228df..b194bec468c096f1f0f29d630cf5bba6fb265bfd 100644 (file)
@@ -50,6 +50,9 @@ struct exp_data_seg exp_data_seg;
 
 segment_type *segments;
 
+/* Principally used for diagnostics.  */
+static bfd_boolean assigning_to_dot = FALSE;
+
 /* Print the string representation of the given token.  Surround it
    with spaces if INFIX_P is TRUE.  */
 
@@ -596,7 +599,8 @@ fold_name (etree_type *tree,
                    }
                }
            }
-         else if (allocation_done == lang_final_phase_enum)
+         else if (allocation_done == lang_final_phase_enum
+                  || assigning_to_dot)
            einfo (_("%F%S: undefined symbol `%s' referenced in expression\n"),
                   tree->name.name);
          else if (h->type == bfd_link_hash_new)
@@ -695,7 +699,7 @@ exp_fold_tree (etree_type *tree,
 
   if (tree == NULL)
     {
-      result.valid_p = FALSE;
+      memset (&result, 0, sizeof (result));
       return result;
     }
 
@@ -707,7 +711,7 @@ exp_fold_tree (etree_type *tree,
 
     case etree_rel:
       if (allocation_done != lang_final_phase_enum)
-       result.valid_p = FALSE;
+       memset (&result, 0, sizeof (result));
       else
        result = new_rel ((tree->rel.value
                           + tree->rel.section->output_section->vma
@@ -720,12 +724,8 @@ exp_fold_tree (etree_type *tree,
       result = exp_fold_tree (tree->assert_s.child,
                              current_section,
                              allocation_done, dot, dotp);
-      if (result.valid_p)
-       {
-         if (! result.value)
-           einfo ("%X%P: %s\n", tree->assert_s.message);
-         return result;
-       }
+      if (result.valid_p && !result.value)
+       einfo ("%X%P: %s\n", tree->assert_s.message);
       break;
 
     case etree_unary:
@@ -755,10 +755,13 @@ exp_fold_tree (etree_type *tree,
              || (allocation_done == lang_final_phase_enum
                  && current_section == abs_output_section))
            {
+             /* Notify the folder that this is an assignment to dot.  */
+             assigning_to_dot = TRUE;
              result = exp_fold_tree (tree->assign.src,
                                      current_section,
-                                     allocation_done, dot,
-                                     dotp);
+                                     allocation_done, dot, dotp);
+             assigning_to_dot = FALSE;
+
              if (! result.valid_p)
                einfo (_("%F%S invalid assignment to location counter\n"));
              else
@@ -780,6 +783,8 @@ exp_fold_tree (etree_type *tree,
                    }
                }
            }
+         else
+           memset (&result, 0, sizeof (result));
        }
       else
        {
@@ -832,6 +837,7 @@ exp_fold_tree (etree_type *tree,
 
     default:
       FAIL ();
+      memset (&result, 0, sizeof (result));
       break;
     }
 
@@ -1108,7 +1114,7 @@ exp_get_fill (etree_type *tree,
       fill = xmalloc ((len + 1) / 2 + sizeof (*fill) - 1);
       fill->size = (len + 1) / 2;
       dst = fill->data;
-      s = r.str;
+      s = (unsigned char *) r.str;
       val = 0;
       do
        {
This page took 0.028121 seconds and 4 git commands to generate.