* ldlang.c (print_assignment): Update print_dot for assignments to ".".
authorRichard Sandiford <rdsandiford@googlemail.com>
Tue, 30 Apr 2002 09:21:27 +0000 (09:21 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Tue, 30 Apr 2002 09:21:27 +0000 (09:21 +0000)
* ldexp.c (exp_print_token): Add "infix_p" argument.
(exp_print_tree): Update accordingly.

ld/ChangeLog
ld/ldexp.c
ld/ldlang.c

index f074b07d5d08c9c1ad98d52b2844acb8ea6ceb16..78c37a50c37a870fbedee9dcf499374da91b8339 100644 (file)
@@ -1,3 +1,9 @@
+2002-04-30  Richard Sandiford  <rsandifo@redhat.com>
+
+       * ldlang.c (print_assignment): Update print_dot for assignments to ".".
+       * ldexp.c (exp_print_token): Add "infix_p" argument.
+       (exp_print_tree): Update accordingly.
+
 2002-04-28  Alan Modra  <amodra@bigpond.net.au>
 
        * Makefile.am (mpw): New maintainer mode rule to make mpw-*.c files.
index c4876a877e30f2d2032b0e85be1eca4974e326b0..d58465176e5123efd258b3ca9d8852ad1b74e888 100644 (file)
@@ -41,7 +41,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "libiberty.h"
 #include "safe-ctype.h"
 
-static void exp_print_token PARAMS ((token_code_type code));
+static void exp_print_token PARAMS ((token_code_type code, int infix_p));
 static void make_abs PARAMS ((etree_value_type *ptr));
 static etree_value_type new_abs PARAMS ((bfd_vma value));
 static void check PARAMS ((lang_output_section_statement_type *os,
@@ -67,9 +67,13 @@ static etree_value_type exp_fold_tree_no_dot
 
 struct exp_data_seg exp_data_seg;
 
+/* Print the string representation of the given token.  Surround it
+   with spaces if INFIX_P is true.  */
+
 static void
-exp_print_token (code)
+exp_print_token (code, infix_p)
      token_code_type code;
+     int infix_p;
 {
   static CONST struct
   {
@@ -122,20 +126,22 @@ exp_print_token (code)
   };
   unsigned int idx;
 
-  for (idx = ARRAY_SIZE (table); idx--;)
-    {
-      if (table[idx].code == code)
-       {
-         fprintf (config.map_file, " %s ", table[idx].name);
-         return;
-       }
-    }
+  for (idx = 0; idx < ARRAY_SIZE (table); idx++)
+    if (table[idx].code == code)
+      break;
 
-  /* Not in table, just print it alone.  */
-  if (code < 127)
-    fprintf (config.map_file, " %c ", code);
+  if (infix_p)
+    fputc (' ', config.map_file);
+
+  if (idx < ARRAY_SIZE (table))
+    fputs (table[idx].name, config.map_file);
+  else if (code < 127)
+    fputc (code, config.map_file);
   else
-    fprintf (config.map_file, " <code %d> ", code);
+    fprintf (config.map_file, "<code %d>", code);
+
+  if (infix_p)
+    fputc (' ', config.map_file);
 }
 
 static void
@@ -955,7 +961,7 @@ exp_print_tree (tree)
        fprintf (config.map_file, "%s (UNDEFINED)", tree->assign.dst->name);
 #endif
       fprintf (config.map_file, "%s", tree->assign.dst);
-      exp_print_token (tree->type.node_code);
+      exp_print_token (tree->type.node_code, true);
       exp_print_tree (tree->assign.src);
       break;
     case etree_provide:
@@ -967,7 +973,7 @@ exp_print_tree (tree)
     case etree_binary:
       fprintf (config.map_file, "(");
       exp_print_tree (tree->binary.lhs);
-      exp_print_token (tree->type.node_code);
+      exp_print_token (tree->type.node_code, true);
       exp_print_tree (tree->binary.rhs);
       fprintf (config.map_file, ")");
       break;
@@ -979,10 +985,10 @@ exp_print_tree (tree)
       exp_print_tree (tree->trinary.rhs);
       break;
     case etree_unary:
-      exp_print_token (tree->unary.type.node_code);
+      exp_print_token (tree->unary.type.node_code, false);
       if (tree->unary.child)
        {
-         fprintf (config.map_file, "(");
+         fprintf (config.map_file, " (");
          exp_print_tree (tree->unary.child);
          fprintf (config.map_file, ")");
        }
@@ -1004,9 +1010,9 @@ exp_print_tree (tree)
        }
       else
        {
-         exp_print_token (tree->type.node_code);
+         exp_print_token (tree->type.node_code, false);
          if (tree->name.name)
-           fprintf (config.map_file, "(%s)", tree->name.name);
+           fprintf (config.map_file, " (%s)", tree->name.name);
        }
       break;
     default:
index afa77e1eabaa7f6e0000c340e39126b4dde3d682..f6b950168c368f02fed7d20e1f2b27ff12364cfe 100644 (file)
@@ -2211,7 +2211,17 @@ print_assignment (assignment, output_section)
   result = exp_fold_tree (assignment->exp->assign.src, output_section,
                          lang_final_phase_enum, print_dot, &print_dot);
   if (result.valid_p)
-    minfo ("0x%V", result.value + result.section->bfd_section->vma);
+    {
+      const char *dst;
+      bfd_vma value;
+
+      value = result.value + result.section->bfd_section->vma;
+      dst = assignment->exp->assign.dst;
+
+      minfo ("0x%V", value);
+      if (dst[0] == '.' && dst[1] == 0)
+       print_dot = value;
+    }
   else
     {
       minfo ("*undef*   ");