Trivial patch to remove dependency on host unsigned long type
[deliverable/binutils-gdb.git] / gdb / symfile.c
index d1e024f1e718fab736d8049be471cbd1c72ac7f8..04988867845719950fe697e8bf816289a1697a6c 100644 (file)
@@ -1679,7 +1679,7 @@ symfile_bfd_open (char *name)
   name = tilde_expand (name);  /* Returns 1st new malloc'd copy.  */
 
   /* Look down path for it, allocate 2nd new malloc'd copy.  */
-  desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name,
+  desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, name,
                O_RDONLY | O_BINARY, &absolute_name);
 #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
   if (desc < 0)
@@ -1687,8 +1687,8 @@ symfile_bfd_open (char *name)
       char *exename = alloca (strlen (name) + 5);
 
       strcat (strcpy (exename, name), ".exe");
-      desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename,
-                   O_RDONLY | O_BINARY, &absolute_name);
+      desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
+                   exename, O_RDONLY | O_BINARY, &absolute_name);
     }
 #endif
   if (desc < 0)
@@ -2214,63 +2214,54 @@ add_symbol_file_command (char *args, int from_tty)
          filename = tilde_expand (arg);
          make_cleanup (xfree, filename);
        }
+      else if (argcnt == 1)
+       {
+         /* The second argument is always the text address at which
+            to load the program.  */
+         sect_opts[section_index].name = ".text";
+         sect_opts[section_index].value = arg;
+         if (++section_index >= num_sect_opts)
+           {
+             num_sect_opts *= 2;
+             sect_opts = ((struct sect_opt *)
+                          xrealloc (sect_opts,
+                                    num_sect_opts
+                                    * sizeof (struct sect_opt)));
+           }
+       }
       else
-       if (argcnt == 1)
-         {
-           /* The second argument is always the text address at which
-               to load the program.  */
-           sect_opts[section_index].name = ".text";
-           sect_opts[section_index].value = arg;
-           if (++section_index >= num_sect_opts)
-             {
-               num_sect_opts *= 2;
-               sect_opts = ((struct sect_opt *)
-                            xrealloc (sect_opts,
-                                      num_sect_opts
-                                      * sizeof (struct sect_opt)));
-             }
-         }
-       else
-         {
-           /* It's an option (starting with '-') or it's an argument
-              to an option.  */
-
-           if (*arg == '-')
-             {
-               if (strcmp (arg, "-readnow") == 0)
-                 flags |= OBJF_READNOW;
-               else if (strcmp (arg, "-s") == 0)
-                 {
-                   expecting_sec_name = 1;
-                   expecting_sec_addr = 1;
-                 }
-             }
-           else
-             {
-               if (expecting_sec_name)
-                 {
-                   sect_opts[section_index].name = arg;
-                   expecting_sec_name = 0;
-                 }
-               else
-                 if (expecting_sec_addr)
-                   {
-                     sect_opts[section_index].value = arg;
-                     expecting_sec_addr = 0;
-                     if (++section_index >= num_sect_opts)
-                       {
-                         num_sect_opts *= 2;
-                         sect_opts = ((struct sect_opt *)
-                                      xrealloc (sect_opts,
-                                                num_sect_opts
-                                                * sizeof (struct sect_opt)));
-                       }
-                   }
-                 else
-                   error (_("USAGE: add-symbol-file <filename> <textaddress>"
-                            " [-readnow] [-s <secname> <addr>]*"));
-             }
-         }
+       {
+         /* It's an option (starting with '-') or it's an argument
+            to an option.  */
+         if (expecting_sec_name)
+           {
+             sect_opts[section_index].name = arg;
+             expecting_sec_name = 0;
+           }
+         else if (expecting_sec_addr)
+           {
+             sect_opts[section_index].value = arg;
+             expecting_sec_addr = 0;
+             if (++section_index >= num_sect_opts)
+               {
+                 num_sect_opts *= 2;
+                 sect_opts = ((struct sect_opt *)
+                              xrealloc (sect_opts,
+                                        num_sect_opts
+                                        * sizeof (struct sect_opt)));
+               }
+           }
+         else if (strcmp (arg, "-readnow") == 0)
+           flags |= OBJF_READNOW;
+         else if (strcmp (arg, "-s") == 0)
+           {
+             expecting_sec_name = 1;
+             expecting_sec_addr = 1;
+           }
+         else
+           error (_("USAGE: add-symbol-file <filename> <textaddress>"
+                    " [-readnow] [-s <secname> <addr>]*"));
+       }
     }
 
   /* This command takes at least two arguments.  The first one is a
@@ -2504,6 +2495,12 @@ reread_symbols (void)
             empty.  We could use obstack_specify_allocation but
             gdb_obstack.h specifies the alloc/dealloc functions.  */
          obstack_init (&objfile->objfile_obstack);
+
+         /* Reset the sym_fns pointer.  The ELF reader can change it
+            based on whether .gdb_index is present, and we need it to
+            start over.  PR symtab/15885  */
+         objfile->sf = find_sym_fns (objfile->obfd);
+
          build_objfile_section_table (objfile);
          terminate_minimal_symbol_table (objfile);
 
This page took 0.029693 seconds and 4 git commands to generate.