public inbox for archer@sourceware.org
 help / color / mirror / Atom feed
* [1/2][RFA][7.0] Rename Python files to be 8.3 safe
@ 2009-08-03  1:56 Thiago Jung Bauermann
  2009-08-03 17:35 ` Tom Tromey
  2009-08-09 14:17 ` Thiago Jung Bauermann
  0 siblings, 2 replies; 11+ messages in thread
From: Thiago Jung Bauermann @ 2009-08-03  1:56 UTC (permalink / raw)
  To: archer

[-- Attachment #1: Type: text/plain, Size: 3185 bytes --]

Hi,

I own this action item from the 7.0 wiki page:

- Rename python source code and testcase files to avoid 8.3 limitations. 

So I came up with a couple of patches. The first for the actual source code, 
the second for the testsuite files.

The first patch is so trivial that I will only post the Makefile.in part further 
below. The first pHere's the summary:

#	modified:   Makefile.in
#	renamed:    python/python-block.c -> python/block.c
#	renamed:    python/python-breakpoint.c -> python/breakpoint.c
#	renamed:    python/python-cmd.c -> python/cmd.c
#	renamed:    python/python-frame.c -> python/frame.c
#	renamed:    python/python-function.c -> python/function.c
#	renamed:    python/python-hooks.c -> python/hooks.c
#	renamed:    python/python-inferior.c -> python/inferior.c
#	renamed:    python/python-infthread.c -> python/infthread.c
#	renamed:    python/python-membuf.c -> python/membuf.c
#	renamed:    python/python-objfile.c -> python/objfile.c
#	renamed:    python/python-param.c -> python/param.c
#	renamed:    python/python-prettyprint.c -> python/prettyprint.c
#	renamed:    python/python-symbol.c -> python/symbol.c
#	renamed:    python/python-symtab.c -> python/symtab.c
#	renamed:    python/python-type.c -> python/type.c
#	renamed:    python/python-utils.c -> python/utils.c
#	renamed:    python/python-value.c -> python/value.c

This will generate the following .o files in the build directory:

% ls -1 py*
py-block.o
py-breakpoint.o
py-cmd.o
py-frame.o
py-function.o
py-hooks.o
py-inferior.o
py-infthread.o
py-objfile.o
py-param.o
py-prettyprint.o
py-symbol.o
py-symtab.o
python.o
py-type.o
py-utils.o
py-value.o

Which in DOS would be mangled to (not all names have the extension here, but 
you get the idea):

% ls -1 py* | cut -c-8
py-block
py-break
py-cmd.o
py-frame
py-funct
py-hooks
py-infer
py-infth
py-objfi
py-param
py-prett
py-symbo
py-symta
python.o
py-type.
py-utils
py-value

Ok to push this commit to the branch, and then post the patch upstream as RFA?
-- 
[]'s
Thiago Jung Bauermann

2009-08-02  Thiago Jung Bauermann  <thiago.bauermann@gmail.com>

	Rename Python source code to be friendlier to 8.3 mangling.
	* Makefile.in: Adapt to new filenames for the python module.
	Rename python-foo.o targets to py-foo.o.  Adjust where necessary.
	* (python/python-block.c): Rename to block.c.
	* (python/python-breakpoint.c): Rename to python/breakpoint.c.
	* (python/python-cmd.c): Rename to python/cmd.c.
	* (python/python-frame.c): Rename to python/frame.c.
	* (python/python-function.c): Rename to python/function.c.
	* (python/python-hooks.c): Rename to python/hooks.c.
	* (python/python-inferior.c): Rename to python/inferior.c.
	* (python/python-infthread.c): Rename to python/infthread.c.
	* (python/python-objfile.c): Rename to python/objfile.c.
	* (python/python-param.c): Rename to python/param.c.
	* (python/python-prettyprint.c): Rename to python/prettyprint.c.
	* (python/python-symbol.c): Rename to python/symbol.c.
	* (python/python-symtab.c): Rename to python/symtab.c.
	* (python/python-type.c): Rename to python/type.c.
	* (python/python-utils.c): Rename to python/utils.c.
	* (python/python-value.c): Rename to python/value.c.


[-- Attachment #2: python-rename.diff --]
[-- Type: text/x-patch, Size: 5560 bytes --]

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index a30cfdc..86c4bfe 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -271,40 +271,40 @@ SUBDIR_TUI_CFLAGS= \
 #
 SUBDIR_PYTHON_OBS = \
 	python.o \
-	python-block.o \
-	python-breakpoint.o \
-	python-cmd.o \
-	python-frame.o \
-	python-function.o \
-	python-hooks.o \
-	python-inferior.o \
-	python-infthread.o \
-	python-objfile.o \
-	python-param.o \
-	python-prettyprint.o \
-	python-symbol.o \
-	python-symtab.o \
-	python-type.o \
-	python-utils.o \
-	python-value.o
+	py-block.o \
+	py-breakpoint.o \
+	py-cmd.o \
+	py-frame.o \
+	py-function.o \
+	py-hooks.o \
+	py-inferior.o \
+	py-infthread.o \
+	py-objfile.o \
+	py-param.o \
+	py-prettyprint.o \
+	py-symbol.o \
+	py-symtab.o \
+	py-type.o \
+	py-utils.o \
+	py-value.o
 SUBDIR_PYTHON_SRCS = \
 	python/python.c \
-	python/python-block.c \
-	python/python-breakpoint.c \
-	python/python-cmd.c \
-	python/python-frame.c \
-	python/python-function.c \
-	python/python-hooks.c \
-	python/python-inferior.c \
-	python/python-infthread.c \
-	python/python-objfile.c \
-	python/python-param.c \
-	python/python-prettyprint.c \
-	python/python-symbol.c \
-	python/python-symtab.c \
-	python/python-type.c \
-	python/python-utils.c \
-	python/python-value.c
+	python/block.c \
+	python/breakpoint.c \
+	python/cmd.c \
+	python/frame.c \
+	python/function.c \
+	python/hooks.c \
+	python/inferior.c \
+	python/infthread.c \
+	python/objfile.c \
+	python/param.c \
+	python/prettyprint.c \
+	python/symbol.c \
+	python/symtab.c \
+	python/type.c \
+	python/utils.c \
+	python/value.c
 SUBDIR_PYTHON_DEPS =
 SUBDIR_PYTHON_LDFLAGS=
 SUBDIR_PYTHON_CFLAGS=
@@ -1894,68 +1894,68 @@ python.o: $(srcdir)/python/python.c
 	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python.c
 	$(POSTCOMPILE)
 
-python-block.o: $(srcdir)/python/python-block.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-block.c
+py-block.o: $(srcdir)/python/block.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/block.c
 	$(POSTCOMPILE)
 
-python-breakpoint.o: $(srcdir)/python/python-breakpoint.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-breakpoint.c
+py-breakpoint.o: $(srcdir)/python/breakpoint.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/breakpoint.c
 	$(POSTCOMPILE)
 
-python-cmd.o: $(srcdir)/python/python-cmd.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-cmd.c
+py-cmd.o: $(srcdir)/python/cmd.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/cmd.c
 	$(POSTCOMPILE)
 
-python-frame.o: $(srcdir)/python/python-frame.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-frame.c
+py-frame.o: $(srcdir)/python/frame.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/frame.c
 	$(POSTCOMPILE)
 
-python-function.o: $(srcdir)/python/python-function.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-function.c
+py-function.o: $(srcdir)/python/function.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/function.c
 	$(POSTCOMPILE)
 
-python-hooks.o: $(srcdir)/python/python-hooks.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-hooks.c
+py-hooks.o: $(srcdir)/python/hooks.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/hooks.c
 	$(POSTCOMPILE)
 
-python-inferior.o: $(srcdir)/python/python-inferior.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-inferior.c
+py-inferior.o: $(srcdir)/python/inferior.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/inferior.c
 	$(POSTCOMPILE)
 
-python-infthread.o: $(srcdir)/python/python-infthread.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-infthread.c
+py-infthread.o: $(srcdir)/python/infthread.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/infthread.c
 	$(POSTCOMPILE)
 
-python-objfile.o: $(srcdir)/python/python-objfile.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-objfile.c
+py-objfile.o: $(srcdir)/python/objfile.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/objfile.c
 	$(POSTCOMPILE)
 
-python-param.o: $(srcdir)/python/python-param.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-param.c
+py-param.o: $(srcdir)/python/param.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/param.c
 	$(POSTCOMPILE)
 
-python-prettyprint.o: $(srcdir)/python/python-prettyprint.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-prettyprint.c
+py-prettyprint.o: $(srcdir)/python/prettyprint.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/prettyprint.c
 	$(POSTCOMPILE)
 
-python-symbol.o: $(srcdir)/python/python-symbol.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-symbol.c
+py-symbol.o: $(srcdir)/python/symbol.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/symbol.c
 	$(POSTCOMPILE)
 
-python-symtab.o: $(srcdir)/python/python-symtab.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-symtab.c
+py-symtab.o: $(srcdir)/python/symtab.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/symtab.c
 	$(POSTCOMPILE)
 
-python-type.o: $(srcdir)/python/python-type.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-type.c
+py-type.o: $(srcdir)/python/type.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/type.c
 	$(POSTCOMPILE)
 
-python-utils.o: $(srcdir)/python/python-utils.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-utils.c
+py-utils.o: $(srcdir)/python/utils.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/utils.c
 	$(POSTCOMPILE)
 
-python-value.o: $(srcdir)/python/python-value.c
-	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/python-value.c
+py-value.o: $(srcdir)/python/value.c
+	$(COMPILE) $(PYTHON_CFLAGS) $(srcdir)/python/value.c
 	$(POSTCOMPILE)
 
 # All python library files, with the "python/lib" stripped off.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03  1:56 [1/2][RFA][7.0] Rename Python files to be 8.3 safe Thiago Jung Bauermann
@ 2009-08-03 17:35 ` Tom Tromey
  2009-08-03 17:54   ` Thiago Jung Bauermann
  2009-08-09 14:17 ` Thiago Jung Bauermann
  1 sibling, 1 reply; 11+ messages in thread
From: Tom Tromey @ 2009-08-03 17:35 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: archer

>>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com> writes:

Thiago> #	renamed:    python/python-block.c -> python/block.c

I thought that, back at the very beginning of the Python project, Daniel
requested unique source file names for all source files -- I assume to
avoid ambiguity for "break block.c:150".  (Of course, gdb should be
smarter here!  But it isn't right now.)

Am I misremembering?  My recollection is that we had names like this
originally and renamed them due by request.

Maybe python/py-block.c.


Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.

Tom

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 17:35 ` Tom Tromey
@ 2009-08-03 17:54   ` Thiago Jung Bauermann
  2009-08-03 18:04     ` Daniel Jacobowitz
                       ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Thiago Jung Bauermann @ 2009-08-03 17:54 UTC (permalink / raw)
  To: Tom Tromey; +Cc: archer

Em Segunda-feira 03 Agosto 2009 14:35:14 Tom Tromey escreveu:
> >>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com>
> >>>>> writes:
>
> Thiago> #	renamed:    python/python-block.c -> python/block.c
>
> I thought that, back at the very beginning of the Python project, Daniel
> requested unique source file names for all source files -- I assume to
> avoid ambiguity for "break block.c:150".  (Of course, gdb should be
> smarter here!  But it isn't right now.)

Yes, I'm going back to how I originally named those files. That's why I decided 
to work on this.

IIRC Daniel's reason was because of the build process. He didn't want to have 
.o files named differently from their .c files. I suppose we'll have that 
discussion when I post this upstream, unless Daniel reads the archer list.

Regarding the break command, I agree with you in that GDB should be smarter 
here. I can volunteer to make GDB smarter if that's an issue in this 
discussion...

> Am I misremembering?  My recollection is that we had names like this
> originally and renamed them due by request.

One of us is misremembering Daniel's reason to request that the .c names be 
changed.

> Maybe python/py-block.c.

If we use py-block.c, then we might as well keep the current python-block.c 
name.

> Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.

Agreed. That's not why I'm doing these patches. ;-)
-- 
[]'s
Thiago Jung Bauermann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 17:54   ` Thiago Jung Bauermann
@ 2009-08-03 18:04     ` Daniel Jacobowitz
  2009-08-03 18:27       ` Thiago Jung Bauermann
  2009-08-03 18:26     ` Tom Tromey
  2009-08-03 18:33     ` Tom Tromey
  2 siblings, 1 reply; 11+ messages in thread
From: Daniel Jacobowitz @ 2009-08-03 18:04 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: Tom Tromey, archer

On Mon, Aug 03, 2009 at 02:55:13PM -0300, Thiago Jung Bauermann wrote:
> IIRC Daniel's reason was because of the build process. He didn't want to have 
> .o files named differently from their .c files. I suppose we'll have that 
> discussion when I post this upstream, unless Daniel reads the archer list.

See AC_PROG_CC_C_O in the autoconf manual also.  There are portability
concerns.

> > Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.
> 
> Agreed. That's not why I'm doing these patches. ;-)

Then why are you doing it?  If it's just for 8.3, why not use fnchange.lst?

-- 
Daniel Jacobowitz
CodeSourcery

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 17:54   ` Thiago Jung Bauermann
  2009-08-03 18:04     ` Daniel Jacobowitz
@ 2009-08-03 18:26     ` Tom Tromey
  2009-08-04 21:01       ` Thiago Jung Bauermann
  2009-08-03 18:33     ` Tom Tromey
  2 siblings, 1 reply; 11+ messages in thread
From: Tom Tromey @ 2009-08-03 18:26 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: archer

>>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com> writes:

Thiago> If we use py-block.c, then we might as well keep the current
Thiago> python-block.c name.

>> Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.

Thiago> Agreed. That's not why I'm doing these patches. ;-)

Oh, I must have misunderstood.

I thought the issue was 8.3 conformance.
py-something.c is less likely to clash.

But, it sounds like this isn't it -- so I don't know the motivation.

Tom

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 18:04     ` Daniel Jacobowitz
@ 2009-08-03 18:27       ` Thiago Jung Bauermann
  0 siblings, 0 replies; 11+ messages in thread
From: Thiago Jung Bauermann @ 2009-08-03 18:27 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Tom Tromey, archer

Em Segunda-feira 03 Agosto 2009 15:04:14 Daniel Jacobowitz escreveu:
> On Mon, Aug 03, 2009 at 02:55:13PM -0300, Thiago Jung Bauermann wrote:
> > IIRC Daniel's reason was because of the build process. He didn't want to
> > have .o files named differently from their .c files. I suppose we'll have
> > that discussion when I post this upstream, unless Daniel reads the archer
> > list.
>
> See AC_PROG_CC_C_O in the autoconf manual also.  There are portability
> concerns.

Ok, I'll have a look at that...

> > > Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.
> >
> > Agreed. That's not why I'm doing these patches. ;-)
>
> Then why are you doing it?

Because I like my original naming better! Enough so that I was eager to write 
these patches. :-) But not strongly enough to fight about the issue.

> If it's just for 8.3, why not use fnchange.lst?

Because I didn't know about fnchange.lst. I'll see what I can learn about it.
-- 
[]'s
Thiago Jung Bauermann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 17:54   ` Thiago Jung Bauermann
  2009-08-03 18:04     ` Daniel Jacobowitz
  2009-08-03 18:26     ` Tom Tromey
@ 2009-08-03 18:33     ` Tom Tromey
  2009-08-03 18:45       ` Jan Kratochvil
  2 siblings, 1 reply; 11+ messages in thread
From: Tom Tromey @ 2009-08-03 18:33 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: archer

>>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com> writes:

Thiago> Regarding the break command, I agree with you in that GDB should
Thiago> be smarter here. I can volunteer to make GDB smarter if that's
Thiago> an issue in this discussion...

I wish it weren't and issue, but it is.  Well, at least, it is for Emacs
users like me -- Emacs sends file:line breakpoint commands, and IME gdb
regularly picks the "wrong" file when there is a basename clash.  (It
might also be an issue for other-front-end users, but I don't know.)

A long time ago I tried to fix this problem, but I don't remember what
happened.  As I recall, I needed changes to both gdb and Emacs.

Tom

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 18:33     ` Tom Tromey
@ 2009-08-03 18:45       ` Jan Kratochvil
  0 siblings, 0 replies; 11+ messages in thread
From: Jan Kratochvil @ 2009-08-03 18:45 UTC (permalink / raw)
  To: Tom Tromey; +Cc: Thiago Jung Bauermann, archer

On Mon, 03 Aug 2009 20:33:13 +0200, Tom Tromey wrote:
> >>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com> writes:
> 
> Thiago> Regarding the break command, I agree with you in that GDB should
> Thiago> be smarter here. I can volunteer to make GDB smarter if that's
> Thiago> an issue in this discussion...
> 
> I wish it weren't and issue, but it is.  Well, at least, it is for Emacs
> users like me -- Emacs sends file:line breakpoint commands, and IME gdb
> regularly picks the "wrong" file when there is a basename clash.  (It
> might also be an issue for other-front-end users, but I don't know.)
> 
> A long time ago I tried to fix this problem, but I don't remember what
> happened.  As I recall, I needed changes to both gdb and Emacs.

There was a patch upstream:
	http://sourceware.org/ml/gdb-patches/2009-05/msg00529.html

and I have some former work which I do not remember now the state of, attached
(it would need a split etc.).  (part of RH-internal Bug 499176)


Regards,
Jan


commit 51253e4f12dc722e0de4827622768fb8109714ca
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon May 18 23:13:08 2009 +0200

    Fix multiple same basenames.
    
    gdb/
    	* dwarf2read.c (dwarf2_create_include_psymtab): Initialize FROM.DIRNAME.
    	* source.c (symtab_from_concat, symtab_from_matches): New functions.
    	* source.h (symtab_from_matches): New prototype.
    	* symtab.c (append_exact_match_to_sals): Change the FILENAME parameter
    	for MATCH_SYMTAB_FROM.  Use symtab_from_matches for the comparison.
    	(expand_line_sal): Use symtab_from_matches for the comparison.
    
    gdb/testsuite/
    	* gdb.base/mb-dirname-invalid.c, gdb.base/mb-dirname.c,
    	gdb.base/mb-dirname.exp, gdb.base/mb-dirname.h-dist,
    	gdb.base/mb-dirname/mb-dirname.h-dist, gdb.base/mb-dirname/valid.c,
    	gdb.base/mb-dirname/valid2.c: New.

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 90fa435..3ad2810 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1439,6 +1439,8 @@ dwarf2_create_include_psymtab (char *name, struct partial_symtab *pst,
 {
   struct partial_symtab *subpst = allocate_psymtab (name, objfile);
 
+  subpst->from.dirname = pst->from.dirname;
+
   subpst->section_offsets = pst->section_offsets;
   subpst->textlow = 0;
   subpst->texthigh = 0;
diff --git a/gdb/source.c b/gdb/source.c
index 6ead875..58afe4e 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -1068,6 +1068,54 @@ symtab_from_to_fullname (struct symtab_from *from)
 
   return NULL;
 }
+
+/* Return "DIRNAME/FILENAME" string or just original FILENAME (if no DIRNAME is
+   present there).  The possibly new string is allocated by xmalloc and in such
+   case also a cleanup xfree function gets registered.  */
+
+static char *
+symtab_from_concat (struct symtab_from *from)
+{
+  char *retval;
+
+  if (from->dirname == NULL)
+    return from->filename;
+
+  retval = concat (from->dirname, "/", from->filename, NULL);
+  make_cleanup (xfree, retval);
+
+  return retval;
+}
+
+/* Return non-zero if FROM1 and FROM2 point to the same source file.
+   symtab_from_to_fullname must be already called for both FROM1 and FROM2
+   before calling this function.  */
+
+int
+symtab_from_matches (struct symtab_from *from1, struct symtab_from *from2)
+{
+  struct cleanup *back_to;
+  char *concat1, *concat2;
+  int retval;
+
+  if (from1->fullname && from2->fullname)
+    return FILENAME_CMP (from1->fullname, from2->fullname) == 0;
+
+  /* If the source file does not exist GDB should be still able in most cases
+     to match the symbol files (such as to find multiple compiled instances of
+     the same source line).  Still such match can be fooled as it cannot use
+     the xfullpath resolving like FULLNAME has.  */
+
+  back_to = make_cleanup (null_cleanup, 0);
+
+  concat1 = symtab_from_concat (from1);
+  concat2 = symtab_from_concat (from2);
+  retval = (FILENAME_CMP (concat1, concat2) == 0);
+
+  do_cleanups (back_to);
+
+  return retval;
+}
 \f
 /* Create and initialize the table S->line_charpos that records
    the positions of the lines in the source file, which is assumed
diff --git a/gdb/source.h b/gdb/source.h
index 577e30d..4e3c402 100644
--- a/gdb/source.h
+++ b/gdb/source.h
@@ -27,6 +27,9 @@ extern int open_source_file (struct symtab *s);
 
 extern char *symtab_from_to_fullname (struct symtab_from *from);
 
+extern int symtab_from_matches (struct symtab_from *from1,
+				struct symtab_from *from2);
+
 /* Create and initialize the table S->line_charpos that records the
    positions of the lines in the source file, which is assumed to be
    open on descriptor DESC.  All set S->nlines to the number of such
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 1290719..0f319bf 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4466,7 +4466,7 @@ append_expanded_sal (struct symtabs_and_lines *sal,
    return 0, and return the best choice in BEST_ITEM and BEST_SYMTAB.  */
 
 static int
-append_exact_match_to_sals (char *filename, int lineno,
+append_exact_match_to_sals (struct symtab_from *match_symtab_from, int lineno,
 			    struct symtabs_and_lines *ret,
 			    struct linetable_entry **best_item,
 			    struct symtab **best_symtab)
@@ -4475,13 +4475,18 @@ append_exact_match_to_sals (char *filename, int lineno,
   struct symtab *symtab;
   int exact = 0;
   int j;
+
+  symtab_from_to_fullname (match_symtab_from);
   *best_item = 0;
   *best_symtab = 0;
-  
+
   ALL_SYMTABS (objfile, symtab)
     {
-      if (strcmp (filename, symtab->from.filename) == 0)
-	{
+      if (match_symtab_from->fullname)
+	symtab_from_to_fullname (&symtab->from);
+
+      if (symtab_from_matches (match_symtab_from, &symtab->from))
+      	{
 	  struct linetable *l;
 	  int len;
 	  l = LINETABLE (symtab);
@@ -4559,20 +4564,23 @@ expand_line_sal (struct symtab_and_line sal)
 	 the right name.  Then, we iterate over symtabs, knowing
 	 that all symtabs we're interested in are loaded.  */
 
+      symtab_from_to_fullname (&sal.symtab->from);
       ALL_PSYMTABS (objfile, psymtab)
 	{
-	  if (strcmp (sal.symtab->from.filename,
-		      psymtab->from.filename) == 0)
+	  if (sal.symtab->from.fullname)
+	    symtab_from_to_fullname (&psymtab->from);
+
+	  if (symtab_from_matches (&sal.symtab->from, &psymtab->from))
 	    PSYMTAB_TO_SYMTAB (psymtab);
 	}
 
       /* Now search the symtab for exact matches and append them.  If
 	 none is found, append the best_item and all its exact
 	 matches.  */
-      exact = append_exact_match_to_sals (sal.symtab->from.filename, lineno,
+      exact = append_exact_match_to_sals (&sal.symtab->from, lineno,
 					  &ret, &best_item, &best_symtab);
       if (!exact && best_item)
-	append_exact_match_to_sals (best_symtab->from.filename, best_item->line,
+	append_exact_match_to_sals (&best_symtab->from, best_item->line,
 				    &ret, &best_item, &best_symtab);
     }
 
diff --git a/gdb/testsuite/gdb.base/mb-dirname-invalid.c b/gdb/testsuite/gdb.base/mb-dirname-invalid.c
new file mode 100644
index 0000000..5ee82ed
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname-invalid.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "mb-dirname.h"
+
+void
+invalid (void)
+{
+  func ();
+}
diff --git a/gdb/testsuite/gdb.base/mb-dirname.c b/gdb/testsuite/gdb.base/mb-dirname.c
new file mode 100644
index 0000000..5e40341
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname.c
@@ -0,0 +1,40 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "mb-dirname/mb-dirname.h"
+
+extern void valid (void);
+extern void valid2 (void);
+extern void invalid (void);
+
+int
+main (void)
+{
+  /* `valid' calls the same static `func' function as `main'.  */
+  valid ();
+  func ();
+
+  /* Modified `mb-dirname.h' name to get recognized only when the original
+     source files exist (and xfullpath gets used).  */
+  valid2 ();
+
+  /* `invalid' calls a different (located in a file with different full
+     pathname) static function.  */
+  invalid ();
+
+  return 0;	/* break-exit */
+}
diff --git a/gdb/testsuite/gdb.base/mb-dirname.exp b/gdb/testsuite/gdb.base/mb-dirname.exp
new file mode 100644
index 0000000..f7d4ec2
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname.exp
@@ -0,0 +1,105 @@
+# Copyright 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test referencing the same file from various compilation directories, test
+# also referencing a different file just coincidentally having the same
+# basename.  Never test the filenames reported by GDB - the pathnames reporting
+# will probably change in the future.
+
+set binfile ${objdir}/${subdir}/mb-dirname-bin
+
+file mkdir $objdir/$subdir/mb-dirname
+foreach filesrc {mb-dirname/valid.c mb-dirname/mb-dirname.h-dist mb-dirname.h-dist mb-dirname-invalid.c mb-dirname.c} {
+    regsub -- {-dist$} $filesrc "" filedst
+    if {$filesrc != $filedst || $srcdir != $objdir} {
+	file copy -force $srcdir/$subdir/$filesrc $objdir/$subdir/$filedst
+    }
+}
+
+set pwd [pwd]
+cd $objdir/$subdir/mb-dirname
+set err1 [gdb_compile "valid.c" "../mb-dirname-valid.o" object {debug}]
+set err2 [gdb_compile "valid2.c" "../mb-dirname-valid2.o" object {debug}]
+cd ..
+set err3 [gdb_compile "mb-dirname-invalid.c" "mb-dirname-invalid.o" object {debug}]
+set err4 [gdb_compile "mb-dirname.c" "mb-dirname.o" object {debug}]
+cd $pwd
+
+if { "$err1" != "" || "$err2" != "" || "$err3" != "" || "$err4" != ""
+      || [gdb_compile "$objdir/$subdir/mb-dirname-valid.o $objdir/$subdir/mb-dirname-valid2.o $objdir/$subdir/mb-dirname-invalid.o $objdir/$subdir/mb-dirname.o" "${binfile}" executable {debug}] != "" } {
+    untested "Couldn't compile test program"
+    return -1
+}
+
+gdb_exit
+gdb_start
+
+# Do not call common `gdb_reinitialize_dir $srcdir/$subdir' as it would break
+# our tests - it prefers $srcdir/$subdir before $cdir therefore forcing lookup
+# of `mb-dirname/mb-dirname.h' to be matched with plain (different)
+# `mb-dirname.h'.  Also gdb_reinitialize_dir makes no sense on DWARF which
+# stores the full pathname to the sources and with correct pathnames stored by
+# GCC as this testcases uses no precompiled debug info.
+
+gdb_load ${binfile}
+
+if { ! [runto_main] } then {
+    untested "Couldn't run test program"
+    return -1
+}
+
+proc part1 {name} {
+    global pf_prefix
+    set old_prefix $pf_prefix
+    lappend pf_prefix "$name:"
+
+    # Break first in `valid' to possibly find `func' also from the `../invalid.c'
+    # file as both `func' share the basename of `mb-dirname.h'
+
+    gdb_breakpoint "valid"
+    gdb_continue_to_breakpoint "get to valid" "valid.c:.*"
+
+    gdb_breakpoint "func"
+
+    gdb_continue_to_breakpoint "func in valid"
+    gdb_test "bt" "#0 \[^\n\]* func \[^\n\]*\r\n#1 \[^\n\]* valid .*" "bt in valid"
+
+    gdb_continue_to_breakpoint "func in main"
+    gdb_test "bt" "#0 \[^\n\]* func \[^\n\]*\r\n#1 \[^\n\]* main .*" "bt in main"
+
+    set pf_prefix $old_prefix
+}
+
+part1 "xfullpath"
+
+gdb_continue_to_breakpoint "func in valid2"
+gdb_test "bt" "#0 \[^\n\]* func \[^\n\]*\r\n#1 \[^\n\]* valid2 .*" "bt in valid2"
+
+gdb_continue_to_end "invalid not reached"
+
+# Now test the behavior if we delete the source files.  symtab_from_matches
+# will no longer be able to rely on xfullpath resolving and therefore it will
+# not resolve FIXME.
+
+file delete -force $objdir/$subdir/mb-dirname/mb-dirname.h $objdir/$subdir/mb-dirname.h
+
+gdb_test "dir" "Source directories searched: \\\$cdir:\\\$cwd" "reset pathname cache" \
+         "Reinitialize source path to empty.*y or n. " "y"
+
+runto_main
+
+part1 "deleted"
+
+gdb_continue_to_end "valid2 not reached"
diff --git a/gdb/testsuite/gdb.base/mb-dirname.h-dist b/gdb/testsuite/gdb.base/mb-dirname.h-dist
new file mode 100644
index 0000000..0684278
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname.h-dist
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+static void
+func (void)
+{
+  volatile int invalid = 0;
+
+  invalid++;
+}
diff --git a/gdb/testsuite/gdb.base/mb-dirname/mb-dirname.h-dist b/gdb/testsuite/gdb.base/mb-dirname/mb-dirname.h-dist
new file mode 100644
index 0000000..4d537d6
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname/mb-dirname.h-dist
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+static void
+func (void)
+{
+  volatile int var = 0;
+
+  var++;
+}
diff --git a/gdb/testsuite/gdb.base/mb-dirname/valid.c b/gdb/testsuite/gdb.base/mb-dirname/valid.c
new file mode 100644
index 0000000..2c0d29e
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname/valid.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "mb-dirname.h"
+
+void
+valid (void)
+{
+  func ();
+}
diff --git a/gdb/testsuite/gdb.base/mb-dirname/valid2.c b/gdb/testsuite/gdb.base/mb-dirname/valid2.c
new file mode 100644
index 0000000..e386f17
--- /dev/null
+++ b/gdb/testsuite/gdb.base/mb-dirname/valid2.c
@@ -0,0 +1,27 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2009 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Use a bit different name so that symtab_from_matches will fail in its code
+   path for missing FULLNAMEs - in the case `mb-dirname.h' got deleted.  */
+
+#include "./mb-dirname.h"
+
+void
+valid2 (void)
+{
+  func ();
+}

commit 80fea8d2445f40b75e2083e68bb5b214cdacf61e
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon May 18 00:50:25 2009 +0200

    unify to symtab_from_to_fullname

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 8b3b795..a99fa6b 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -9839,7 +9839,7 @@ is_known_support_routine (struct frame_info *frame)
      for the user.  This should also take care of case such as VxWorks
      where the kernel has some debugging info provided for a few units.  */
 
-  if (symtab_to_fullname (sal.symtab) == NULL)
+  if (symtab_from_to_fullname (&sal.symtab->from) == NULL)
     return 1;
 
   /* Check the unit filename againt the Ada runtime file naming.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 47a969d..783f083 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3474,7 +3474,7 @@ static void print_breakpoint_location (struct breakpoint *b,
       if (ui_out_is_mi_like_p (uiout))
 	{
 	  struct symtab_and_line sal = find_pc_line (loc->address, 0);
-	  char *fullname = symtab_to_fullname (sal.symtab);
+	  char *fullname = symtab_from_to_fullname (&sal.symtab->from);
 	  
 	  if (fullname)
 	    ui_out_field_string (uiout, "fullname", fullname);
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index e49c5ad..42d73ee 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -699,7 +699,7 @@ edit_command (char *arg, int from_tty)
      source file, find it now.  */
   if (!sal.symtab->from.fullname)
     {
-      fn = symtab_to_fullname (sal.symtab);
+      fn = symtab_from_to_fullname (&sal.symtab->from);
       if (!fn)
 	fn = "unknown";
     }
diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c
index 32da68a..7e724fe 100644
--- a/gdb/mi/mi-cmd-file.c
+++ b/gdb/mi/mi-cmd-file.c
@@ -50,7 +50,7 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
     error (_("mi_cmd_file_list_exec_source_file: No symtab"));
 
   /* Extract the fullname if it is not known yet */
-  symtab_to_fullname (st.symtab);
+  symtab_from_to_fullname (&st.symtab->from);
 
   /* Print to the user the line, filename and fullname */
   ui_out_field_int (uiout, "line", st.line);
@@ -84,7 +84,7 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
     ui_out_field_string (uiout, "file", s->from.filename);
 
     /* Extract the fullname if it is not known yet */
-    symtab_to_fullname (s);
+    symtab_from_to_fullname (&s->from);
 
     if (s->from.fullname)
       ui_out_field_string (uiout, "fullname", s->from.fullname);
@@ -102,7 +102,7 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
 	ui_out_field_string (uiout, "file", ps->from.filename);
 
 	/* Extract the fullname if it is not known yet */
-	psymtab_to_fullname (ps);
+	symtab_from_to_fullname (&ps->from);
 
 	if (ps->from.fullname)
 	  ui_out_field_string (uiout, "fullname", ps->from.fullname);
diff --git a/gdb/source.c b/gdb/source.c
index 5721b61..6ead875 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -918,11 +918,9 @@ rewrite_source_path (const char *path)
 }
 
 /* This function is capable of finding the absolute path to a
-   source file, and opening it, provided you give it an 
-   OBJFILE and FILENAME. Both the DIRNAME and FULLNAME are only
-   added suggestions on where to find the file. 
+   source file, and opening it, provided you give it a FILENAME.  Both the
+   DIRNAME and FULLNAME are only added suggestions on where to find the file. 
 
-   OBJFILE should be the objfile associated with a psymtab or symtab. 
    FILENAME should be the filename to open.
    DIRNAME is the compilation directory of a particular source file.
            Only some debug formats provide this info.
@@ -940,8 +938,7 @@ rewrite_source_path (const char *path)
      FULLNAME is set to NULL.  */
 
 static int
-find_and_open_source (struct objfile *objfile,
-		      const char *filename,
+find_and_open_source (const char *filename,
 		      const char *dirname,
 		      char **fullname)
 {
@@ -1040,63 +1037,33 @@ open_source_file (struct symtab *s)
   if (!s)
     return -1;
 
-  return find_and_open_source (s->objfile, s->from.filename, s->from.dirname,
+  return find_and_open_source (s->from.filename, s->from.dirname,
 			       &s->from.fullname);
 }
 
-/* Finds the fullname that a symtab represents.
+/* Finds the fullname that a symtab or partial_symtab represents.
 
-   If this functions finds the fullname, it will save it in s->fullname
+   If this functions finds the fullname, it will save it in from->fullname
    and it will also return the value.
 
    If this function fails to find the file that this symtab represents,
-   NULL will be returned and s->fullname will be set to NULL.  */
+   NULL will be returned and from->fullname will be set to NULL.  */
 char *
-symtab_to_fullname (struct symtab *s)
+symtab_from_to_fullname (struct symtab_from *from)
 {
   int r;
 
-  if (!s)
-    return NULL;
-
-  /* Don't check s->fullname here, the file could have been 
-     deleted/moved/..., look for it again */
-  r = find_and_open_source (s->objfile, s->from.filename, s->from.dirname,
-			    &s->from.fullname);
-
-  if (r >= 0)
-    {
-      close (r);
-      return s->from.fullname;
-    }
-
-  return NULL;
-}
-
-/* Finds the fullname that a partial_symtab represents.
-
-   If this functions finds the fullname, it will save it in ps->fullname
-   and it will also return the value.
-
-   If this function fails to find the file that this partial_symtab represents,
-   NULL will be returned and ps->fullname will be set to NULL.  */
-char *
-psymtab_to_fullname (struct partial_symtab *ps)
-{
-  int r;
-
-  if (!ps)
+  if (!from)
     return NULL;
 
-  /* Don't check ps->fullname here, the file could have been
+  /* Don't check from->fullname here, the file could have been 
      deleted/moved/..., look for it again */
-  r = find_and_open_source (ps->objfile, ps->from.filename, ps->from.dirname,
-			    &ps->from.fullname);
+  r = find_and_open_source (from->filename, from->dirname, &from->fullname);
 
   if (r >= 0)
     {
       close (r);
-      return ps->from.fullname;
+      return from->fullname;
     }
 
   return NULL;
diff --git a/gdb/source.h b/gdb/source.h
index 72271fe..577e30d 100644
--- a/gdb/source.h
+++ b/gdb/source.h
@@ -25,8 +25,7 @@ struct symtab;
    negative number for error.  */
 extern int open_source_file (struct symtab *s);
 
-extern char* psymtab_to_fullname (struct partial_symtab *ps);
-extern char* symtab_to_fullname (struct symtab *s);
+extern char *symtab_from_to_fullname (struct symtab_from *from);
 
 /* Create and initialize the table S->line_charpos that records the
    positions of the lines in the source file, which is assumed to be
diff --git a/gdb/stack.c b/gdb/stack.c
index 4622096..80fabf9 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -796,7 +796,7 @@ print_frame (struct frame_info *frame, int print_level,
       ui_out_field_string (uiout, "file", sal.symtab->from.filename);
       if (ui_out_is_mi_like_p (uiout))
 	{
-	  const char *fullname = symtab_to_fullname (sal.symtab);
+	  const char *fullname = symtab_from_to_fullname (&sal.symtab->from);
 	  if (fullname != NULL)
 	    ui_out_field_string (uiout, "fullname", fullname);
 	}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 53fe5c4..1290719 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -194,7 +194,7 @@ got_symtab:
 
     if (full_path != NULL)
       {
-        const char *fp = symtab_to_fullname (s);
+        const char *fp = symtab_from_to_fullname (&s->from);
         if (fp != NULL && FILENAME_CMP (full_path, fp) == 0)
           {
             return s;
@@ -203,7 +203,7 @@ got_symtab:
 
     if (real_path != NULL)
       {
-        char *fullname = symtab_to_fullname (s);
+        char *fullname = symtab_from_to_fullname (&s->from);
         if (fullname != NULL)
           {
             char *rp = gdb_realpath (fullname);
@@ -285,7 +285,7 @@ lookup_partial_symtab (const char *name)
        this symtab and use its absolute path.  */
     if (full_path != NULL)
       {
-	psymtab_to_fullname (pst);
+	symtab_from_to_fullname (&pst->from);
 	if (pst->from.fullname != NULL
 	    && FILENAME_CMP (full_path, pst->from.fullname) == 0)
 	  {
@@ -296,7 +296,7 @@ lookup_partial_symtab (const char *name)
     if (real_path != NULL)
       {
         char *rp = NULL;
-	psymtab_to_fullname (pst);
+	symtab_from_to_fullname (&pst->from);
         if (pst->from.fullname != NULL)
           {
             rp = gdb_realpath (pst->from.fullname);
@@ -2884,7 +2884,7 @@ sources_info (char *ignore, int from_tty)
   first = 1;
   ALL_SYMTABS (objfile, s)
   {
-    const char *fullname = symtab_to_fullname (s);
+    const char *fullname = symtab_from_to_fullname (&s->from);
     output_source_filename (fullname ? fullname : s->from.filename, &first);
   }
   printf_filtered ("\n\n");
@@ -2896,7 +2896,7 @@ sources_info (char *ignore, int from_tty)
   {
     if (!ps->readin)
       {
-	const char *fullname = psymtab_to_fullname (ps);
+	const char *fullname = symtab_from_to_fullname (&ps->from);
 	output_source_filename (fullname ? fullname : ps->from.filename, &first);
       }
   }

commit 8478793f72cc9453ce1e8ebaa632a67cbc94178c
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon May 18 00:41:49 2009 +0200

    move to `from'.

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index f8d68c1..8b3b795 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -3270,7 +3270,7 @@ See set/show multiple-symbol."));
 	  else
 	    printf_unfiltered (_("[%d] %s at %s:%d\n"), i + first_choice,
 			       SYMBOL_PRINT_NAME (syms[i].sym),
-			       sal.symtab->filename, sal.line);
+			       sal.symtab->from.filename, sal.line);
           continue;
         }
       else
@@ -3285,7 +3285,8 @@ See set/show multiple-symbol."));
             printf_unfiltered (_("[%d] %s at %s:%d\n"),
                                i + first_choice,
                                SYMBOL_PRINT_NAME (syms[i].sym),
-                               symtab->filename, SYMBOL_LINE (syms[i].sym));
+			       symtab->from.filename,
+			       SYMBOL_LINE (syms[i].sym));
           else if (is_enumeral
                    && TYPE_NAME (SYMBOL_TYPE (syms[i].sym)) != NULL)
             {
@@ -3301,7 +3302,7 @@ See set/show multiple-symbol."));
                                : _("[%d] %s at %s:?\n"),
                                i + first_choice,
                                SYMBOL_PRINT_NAME (syms[i].sym),
-                               symtab->filename);
+                               symtab->from.filename);
           else
             printf_unfiltered (is_enumeral
                                ? _("[%d] %s (enumeral)\n")
@@ -9849,7 +9850,7 @@ is_known_support_routine (struct frame_info *frame)
   for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
     {
       re_comp (known_runtime_file_name_patterns[i]);
-      if (re_exec (sal.symtab->filename))
+      if (re_exec (sal.symtab->from.filename))
         return 1;
       if (sal.symtab->objfile != NULL
           && re_exec (sal.symtab->objfile->name))
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 3461824..47a969d 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4395,8 +4395,8 @@ set_raw_breakpoint (struct symtab_and_line sal, enum bptype bptype)
   if (sal.symtab == NULL)
     b->source_file = NULL;
   else
-    b->source_file = savestring (sal.symtab->filename,
-				 strlen (sal.symtab->filename));
+    b->source_file = savestring (sal.symtab->from.filename,
+				 strlen (sal.symtab->from.filename));
   b->loc->section = sal.section;
   b->line_number = sal.line;
 
@@ -5889,7 +5889,7 @@ resolve_sal_pc (struct symtab_and_line *sal)
     {
       if (!find_line_pc (sal->symtab, sal->line, &pc))
 	error (_("No line %d in file \"%s\"."),
-	       sal->line, sal->symtab->filename);
+	       sal->line, sal->symtab->from.filename);
       sal->pc = pc;
 
       /* If this SAL corresponds to a breakpoint inserted using
@@ -6970,7 +6970,8 @@ clear_command (char *arg, int from_tty)
 		  int line_match = ((default_match || (0 == sal.pc))
 				    && b->source_file != NULL
 				    && sal.symtab != NULL
-				    && strcmp (b->source_file, sal.symtab->filename) == 0
+				    && strcmp (b->source_file,
+					       sal.symtab->from.filename) == 0
 				    && b->line_number == sal.line);
 		  if (pc_match || line_match)
 		    {
@@ -7493,8 +7494,8 @@ update_breakpoint_locations (struct breakpoint *b,
 	b->source_file = NULL;
       else
 	b->source_file =
-	  savestring (sals.sals[i].symtab->filename,
-		      strlen (sals.sals[i].symtab->filename));
+	  savestring (sals.sals[i].symtab->from.filename,
+		      strlen (sals.sals[i].symtab->from.filename));
 
       if (b->line_number == 0)
 	b->line_number = sals.sals[i].line;
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 6de817f..458cfdd 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -1078,14 +1078,14 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
 	  if (subfile->dirname)
 	    {
 	      /* Reallocate the dirname on the symbol obstack */
-	      symtab->dirname = (char *)
+	      symtab->from.dirname = (char *)
 		obstack_alloc (&objfile->objfile_obstack,
 			       strlen (subfile->dirname) + 1);
-	      strcpy (symtab->dirname, subfile->dirname);
+	      strcpy (symtab->from.dirname, subfile->dirname);
 	    }
 	  else
 	    {
-	      symtab->dirname = NULL;
+	      symtab->from.dirname = NULL;
 	    }
 	  symtab->free_code = free_linetable;
 	  symtab->free_func = NULL;
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 18d34bf..e49c5ad 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -678,11 +678,11 @@ edit_command (char *arg, int from_tty)
           sym = find_pc_function (sal.pc);
           if (sym)
 	    printf_filtered ("%s is in %s (%s:%d).\n", paddress (sal.pc),
-			     SYMBOL_PRINT_NAME (sym), sal.symtab->filename,
+			     SYMBOL_PRINT_NAME (sym), sal.symtab->from.filename,
 			     sal.line);
           else
 	    printf_filtered ("%s is at %s:%d.\n", paddress (sal.pc),
-			     sal.symtab->filename, sal.line);
+			     sal.symtab->from.filename, sal.line);
         }
 
       /* If what was given does not imply a symtab, it must be an undebuggable
@@ -697,14 +697,14 @@ edit_command (char *arg, int from_tty)
 
   /* If we don't already know the full absolute file name of the
      source file, find it now.  */
-  if (!sal.symtab->fullname)
+  if (!sal.symtab->from.fullname)
     {
       fn = symtab_to_fullname (sal.symtab);
       if (!fn)
 	fn = "unknown";
     }
   else
-    fn = sal.symtab->fullname;
+    fn = sal.symtab->from.fullname;
 
   /* Quote the file name, in case it has whitespace or other special
      characters.  */
@@ -839,10 +839,10 @@ list_command (char *arg, int from_tty)
       if (sym)
 	printf_filtered ("%s is in %s (%s:%d).\n",
 			 paddress (sal.pc), SYMBOL_PRINT_NAME (sym),
-			 sal.symtab->filename, sal.line);
+			 sal.symtab->from.filename, sal.line);
       else
 	printf_filtered ("%s is at %s:%d.\n", paddress (sal.pc),
-			 sal.symtab->filename, sal.line);
+			 sal.symtab->from.filename, sal.line);
     }
 
   /* If line was not specified by just a line number,
@@ -1106,7 +1106,7 @@ ambiguous_line_spec (struct symtabs_and_lines *sals)
 
   for (i = 0; i < sals->nelts; ++i)
     printf_filtered (_("file: \"%s\", line number: %d\n"),
-		     sals->sals[i].symtab->filename, sals->sals[i].line);
+		     sals->sals[i].symtab->from.filename, sals->sals[i].line);
 }
 
 static void
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 6059d68..ae133c9 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -403,7 +403,7 @@ coff_end_symtab (struct objfile *objfile)
   symtab = end_symtab (current_source_end_addr, objfile, SECT_OFF_TEXT (objfile));
 
   if (symtab != NULL)
-    free_named_symtabs (symtab->filename);
+    free_named_symtabs (symtab->from.filename);
 
   /* Reinitialize for beginning of new file. */
   last_source_file = NULL;
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index c6c5617..7d4d30b 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -608,7 +608,7 @@ initialize_namespace_symtab (struct objfile *objfile)
   namespace_symtab = allocate_symtab ("<<C++-namespaces>>", objfile);
   namespace_symtab->language = language_cplus;
   namespace_symtab->free_code = free_nothing;
-  namespace_symtab->dirname = NULL;
+  namespace_symtab->from.dirname = NULL;
 
   bv = obstack_alloc (&objfile->objfile_obstack,
 		      sizeof (struct blockvector)
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index be73769..d726d8a 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1546,7 +1546,7 @@ read_dbx_symtab (struct objfile *objfile)
 				     first_so_symnum * symbol_size,
 				     objfile->global_psymbols.next,
 				     objfile->static_psymbols.next);
-		pst->dirname = dirname_nso;
+		pst->from.dirname = dirname_nso;
 		dirname_nso = NULL;
 	      }
 	    continue;
@@ -1615,7 +1615,7 @@ pos %d"),
 	       things like "break c-exp.y:435" need to work (I
 	       suppose the psymtab_include_list could be hashed or put
 	       in a binary tree, if profiling shows this is a major hog).  */
-	    if (pst && strcmp (namestring, pst->filename) == 0)
+	    if (pst && strcmp (namestring, pst->from.filename) == 0)
 	      continue;
 	    {
 	      int i;
@@ -1882,7 +1882,7 @@ pos %d"),
 		{
 		  CORE_ADDR minsym_valu = 
 		    find_stab_function_addr (namestring, 
-					     pst ? pst->filename : NULL, 
+					     pst ? pst->from.filename : NULL,
 					     objfile);
 		  /* find_stab_function_addr will return 0 if the minimal
 		     symbol wasn't found.  (Unfortunately, this might also
@@ -1950,7 +1950,7 @@ pos %d"),
 		{
 		  CORE_ADDR minsym_valu = 
 		    find_stab_function_addr (namestring, 
-					     pst ? pst->filename : NULL, 
+					     pst ? pst->from.filename : NULL,
 					     objfile);
 		  /* find_stab_function_addr will return 0 if the minimal
 		     symbol wasn't found.  (Unfortunately, this might also
@@ -2260,7 +2260,7 @@ end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
       strncpy (p, last_function_name, n);
       p[n] = 0;
 
-      minsym = lookup_minimal_symbol (p, pst->filename, objfile);
+      minsym = lookup_minimal_symbol (p, pst->from.filename, objfile);
       if (minsym == NULL)
 	{
 	  /* Sun Fortran appends an underscore to the minimal symbol name,
@@ -2268,7 +2268,7 @@ end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
 	     was not found.  */
 	  p[n] = '_';
 	  p[n + 1] = 0;
-	  minsym = lookup_minimal_symbol (p, pst->filename, objfile);
+	  minsym = lookup_minimal_symbol (p, pst->from.filename, objfile);
 	}
 
       if (minsym)
@@ -2363,7 +2363,7 @@ end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
   /* If there is already a psymtab or symtab for a file of this name, remove it.
      (If there is a symtab, more drastic things also happen.)
      This happens in VxWorks.  */
-  free_named_symtabs (pst->filename);
+  free_named_symtabs (pst->from.filename);
 
   if (num_includes == 0
       && number_dependencies == 0
@@ -2400,7 +2400,7 @@ dbx_psymtab_to_symtab_1 (struct partial_symtab *pst)
     {
       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  \
 Shouldn't happen.\n",
-			  pst->filename);
+			  pst->from.filename);
       return;
     }
 
@@ -2415,7 +2415,7 @@ Shouldn't happen.\n",
 	    wrap_here ("");
 	    fputs_filtered ("and ", gdb_stdout);
 	    wrap_here ("");
-	    printf_filtered ("%s...", pst->dependencies[i]->filename);
+	    printf_filtered ("%s...", pst->dependencies[i]->from.filename);
 	    wrap_here ("");	/* Flush output */
 	    gdb_flush (gdb_stdout);
 	  }
@@ -2457,7 +2457,7 @@ dbx_psymtab_to_symtab (struct partial_symtab *pst)
     {
       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  \
 Shouldn't happen.\n",
-			  pst->filename);
+			  pst->from.filename);
       return;
     }
 
@@ -2467,7 +2467,7 @@ Shouldn't happen.\n",
          to avoid disconcerting pauses.  */
       if (info_verbose)
 	{
-	  printf_filtered ("Reading in symbols for %s...", pst->filename);
+	  printf_filtered ("Reading in symbols for %s...", pst->from.filename);
 	  gdb_flush (gdb_stdout);
 	}
 
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 6ddaecd..90fa435 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1587,9 +1587,9 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline)
 				  objfile->static_psymbols.next);
 
       if (comp_unit_die.dirname)
-	pst->dirname = obsavestring (comp_unit_die.dirname,
-				     strlen (comp_unit_die.dirname),
-				     &objfile->objfile_obstack);
+	pst->from.dirname = obsavestring (comp_unit_die.dirname,
+					  strlen (comp_unit_die.dirname),
+					  &objfile->objfile_obstack);
 
       pst->read_symtab_private = (char *) this_cu;
 
@@ -1674,7 +1674,7 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline)
       /* If there is already a psymtab or symtab for a file of this
          name, remove it. (If there is a symtab, more drastic things
          also happen.) This happens in VxWorks.  */
-      free_named_symtabs (pst->filename);
+      free_named_symtabs (pst->from.filename);
 
       info_ptr = beg_of_comp_unit + cu.header.length
                                   + cu.header.initial_length_size;
@@ -2527,13 +2527,15 @@ dwarf2_psymtab_to_symtab (struct partial_symtab *pst)
     {
       if (pst->readin)
 	{
-	  warning (_("bug: psymtab for %s is already read in."), pst->filename);
+	  warning (_("bug: psymtab for %s is already read in."),
+		   pst->from.filename);
 	}
       else
 	{
 	  if (info_verbose)
 	    {
-	      printf_filtered (_("Reading in symbols for %s..."), pst->filename);
+	      printf_filtered (_("Reading in symbols for %s..."),
+			       pst->from.filename);
 	      gdb_flush (gdb_stdout);
 	    }
 
@@ -2647,7 +2649,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst)
             wrap_here ("");
             fputs_filtered ("and ", gdb_stdout);
             wrap_here ("");
-            printf_filtered ("%s...", pst->dependencies[i]->filename);
+            printf_filtered ("%s...", pst->dependencies[i]->from.filename);
             wrap_here ("");     /* Flush output */
             gdb_flush (gdb_stdout);
           }
@@ -7483,7 +7485,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
             const struct file_entry fe = lh->file_names [file_index];
             char *include_name = fe.name;
             char *dir_name = NULL;
-            char *pst_filename = pst->filename;
+            char *pst_filename = pst->from.filename;
 
             if (fe.dir_index)
               dir_name = lh->include_dirs[fe.dir_index - 1];
@@ -7495,9 +7497,9 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
                 make_cleanup (xfree, include_name);
               }
 
-            if (!IS_ABSOLUTE_PATH (pst_filename) && pst->dirname != NULL)
+            if (!IS_ABSOLUTE_PATH (pst_filename) && pst->from.dirname != NULL)
               {
-                pst_filename = concat (pst->dirname, SLASH_STRING,
+                pst_filename = concat (pst->from.dirname, SLASH_STRING,
 				       pst_filename, (char *)NULL);
                 make_cleanup (xfree, pst_filename);
               }
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 6e79d4a..84b321f 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -820,7 +820,7 @@ elf_symfile_init (struct objfile *objfile)
 void
 elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
 {
-  char *filename = pst->filename;
+  char *filename = pst->from.filename;
   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
   struct stab_section_info *maybe = dbx->stab_section_info;
   struct stab_section_info *questionable = 0;
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 6579d42..2eb9f31 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -396,14 +396,14 @@ build_canonical_line_spec (struct symtab_and_line *sal, char *symname,
   struct symtab *s = sal->symtab;
 
   if (s == (struct symtab *) NULL
-      || s->filename == (char *) NULL
+      || s->from.filename == (char *) NULL
       || canonical == (char ***) NULL)
     return;
 
   canonical_arr = (char **) xmalloc (sizeof (char *));
   *canonical = canonical_arr;
 
-  filename = s->filename;
+  filename = s->from.filename;
   if (symname != NULL)
     {
       canonical_name = xmalloc (strlen (filename) + strlen (symname) + 2);
@@ -538,7 +538,7 @@ See set/show multiple-symbol."));
                 printf_unfiltered ("[%d] %s at %s:%d\n",
                                    (i + 2),
                                    SYMBOL_PRINT_NAME (sym_arr[i]),
-                                   values.sals[i].symtab->filename,
+                                   values.sals[i].symtab->from.filename,
                                    values.sals[i].line);
               else
                 printf_unfiltered (_("[%d] %s at ?FILE:%d [No symtab? Probably broken debug info...]\n"),
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index a020743..3e2b8ae 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -517,12 +517,12 @@ info_forks_command (char *arg, int from_tty)
       sal = find_pc_line (pc, 0);
       if (sal.symtab)
 	{
-	  char *tmp = strrchr (sal.symtab->filename, '/');
+	  char *tmp = strrchr (sal.symtab->from.filename, '/');
 
 	  if (tmp)
 	    printf_filtered (_(", file %s"), tmp + 1);
 	  else
-	    printf_filtered (_(", file %s"), sal.symtab->filename);
+	    printf_filtered (_(", file %s"), sal.symtab->from.filename);
 	}
       if (sal.line)
 	printf_filtered (_(", line %d"), sal.line);
diff --git a/gdb/macroscope.c b/gdb/macroscope.c
index 1885261..0a130cd 100644
--- a/gdb/macroscope.c
+++ b/gdb/macroscope.c
@@ -48,7 +48,7 @@ sal_macro_scope (struct symtab_and_line sal)
   ms = (struct macro_scope *) xmalloc (sizeof (*ms));
 
   main_file = macro_main (sal.symtab->macro_table);
-  inclusion = macro_lookup_inclusion (main_file, sal.symtab->filename);
+  inclusion = macro_lookup_inclusion (main_file, sal.symtab->from.filename);
 
   if (inclusion)
     {
@@ -77,7 +77,7 @@ sal_macro_scope (struct symtab_and_line sal)
       complaint (&symfile_complaints,
                  _("symtab found for `%s', but that file\n"
                  "is not covered in the compilation unit's macro information"),
-                 sal.symtab->filename);
+                 sal.symtab->from.filename);
     }
 
   return ms;
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 7cbcc59..2ecad9d 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -304,13 +304,13 @@ mdebug_psymtab_to_symtab (struct partial_symtab *pst)
 
   if (info_verbose)
     {
-      printf_filtered (_("Reading in symbols for %s..."), pst->filename);
+      printf_filtered (_("Reading in symbols for %s..."), pst->from.filename);
       gdb_flush (gdb_stdout);
     }
 
   next_symbol_text_func = mdebug_next_symbol_text;
 
-  psymtab_to_symtab_1 (pst, pst->filename);
+  psymtab_to_symtab_1 (pst, pst->from.filename);
 
   /* Match with global symbols.  This only needs to be done once,
      after all of the symtabs and dependencies have been read in.   */
@@ -2923,7 +2923,7 @@ parse_partial_symbols (struct objfile *objfile)
 			 things like "break c-exp.y:435" need to work (I
 			 suppose the psymtab_include_list could be hashed or put
 			 in a binary tree, if profiling shows this is a major hog).  */
-		      if (pst && strcmp (namestring, pst->filename) == 0)
+		      if (pst && strcmp (namestring, pst->from.filename) == 0)
 			continue;
 		      {
 			int i;
@@ -3808,13 +3808,13 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
 	    fputs_filtered ("and ", gdb_stdout);
 	    wrap_here ("");
 	    printf_filtered ("%s...",
-			     pst->dependencies[i]->filename);
+			     pst->dependencies[i]->from.filename);
 	    wrap_here ("");	/* Flush output */
 	    gdb_flush (gdb_stdout);
 	  }
 	/* We only pass the filename for debug purposes */
 	psymtab_to_symtab_1 (pst->dependencies[i],
-			     pst->dependencies[i]->filename);
+			     pst->dependencies[i]->from.filename);
       }
 
   /* Do nothing if this is a dummy psymtab.  */
@@ -4033,7 +4033,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
       else
 	{
 	  maxlines = 2 * fh->cline;
-	  st = new_symtab (pst->filename, maxlines, pst->objfile);
+	  st = new_symtab (pst->from.filename, maxlines, pst->objfile);
 
 	  /* The proper language was already determined when building
 	     the psymtab, use it.  */
@@ -4147,7 +4147,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst, char *filename)
       if (info_verbose && n_undef_symbols)
 	{
 	  printf_filtered (_("File %s contains %d unresolved references:"),
-			   st->filename, n_undef_symbols);
+			   st->from.filename, n_undef_symbols);
 	  printf_filtered ("\n\t%4d variables\n\t%4d procedures\n\t%4d labels\n",
 			   n_undef_vars, n_undef_procs, n_undef_labels);
 	  n_undef_symbols = n_undef_labels = n_undef_vars = n_undef_procs = 0;
diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c
index 4fdf8c7..32da68a 100644
--- a/gdb/mi/mi-cmd-file.c
+++ b/gdb/mi/mi-cmd-file.c
@@ -54,11 +54,11 @@ mi_cmd_file_list_exec_source_file (char *command, char **argv, int argc)
 
   /* Print to the user the line, filename and fullname */
   ui_out_field_int (uiout, "line", st.line);
-  ui_out_field_string (uiout, "file", st.symtab->filename);
+  ui_out_field_string (uiout, "file", st.symtab->from.filename);
 
   /* We may not be able to open the file (not available). */
-  if (st.symtab->fullname)
-  ui_out_field_string (uiout, "fullname", st.symtab->fullname);
+  if (st.symtab->from.fullname)
+  ui_out_field_string (uiout, "fullname", st.symtab->from.fullname);
 
   ui_out_field_int (uiout, "macro-info", st.symtab->macro_table ? 1 : 0);
 }
@@ -81,13 +81,13 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
   {
     ui_out_begin (uiout, ui_out_type_tuple, NULL);
 
-    ui_out_field_string (uiout, "file", s->filename);
+    ui_out_field_string (uiout, "file", s->from.filename);
 
     /* Extract the fullname if it is not known yet */
     symtab_to_fullname (s);
 
-    if (s->fullname)
-      ui_out_field_string (uiout, "fullname", s->fullname);
+    if (s->from.fullname)
+      ui_out_field_string (uiout, "fullname", s->from.fullname);
 
     ui_out_end (uiout, ui_out_type_tuple);
   }
@@ -99,13 +99,13 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc)
       {
 	ui_out_begin (uiout, ui_out_type_tuple, NULL);
 
-	ui_out_field_string (uiout, "file", ps->filename);
+	ui_out_field_string (uiout, "file", ps->from.filename);
 
 	/* Extract the fullname if it is not known yet */
 	psymtab_to_fullname (ps);
 
-	if (ps->fullname)
-	  ui_out_field_string (uiout, "fullname", ps->fullname);
+	if (ps->from.fullname)
+	  ui_out_field_string (uiout, "fullname", ps->from.fullname);
 
 	ui_out_end (uiout, ui_out_type_tuple);
       }
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 8403d5f..dc4734b 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -689,7 +689,7 @@ build_address_symbolic (CORE_ADDR addr,  /* IN */
 
       if (sal.symtab)
 	{
-	  *filename = xstrdup (sal.symtab->filename);
+	  *filename = xstrdup (sal.symtab->from.filename);
 	  *line = sal.line;
 	}
     }
diff --git a/gdb/scm-lang.c b/gdb/scm-lang.c
index e2568c8..d349429 100644
--- a/gdb/scm-lang.c
+++ b/gdb/scm-lang.c
@@ -132,9 +132,9 @@ in_eval_c (void)
 {
   struct symtab_and_line cursal = get_current_source_symtab_and_line ();
   
-  if (cursal.symtab && cursal.symtab->filename)
+  if (cursal.symtab && cursal.symtab->from.filename)
     {
-      char *filename = cursal.symtab->filename;
+      char *filename = cursal.symtab->from.filename;
       int len = strlen (filename);
       if (len >= 6 && strcmp (filename + len - 6, "eval.c") == 0)
 	return 1;
diff --git a/gdb/source.c b/gdb/source.c
index 50f3510..5721b61 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -259,7 +259,7 @@ select_source_symtab (struct symtab *s)
     {
       for (s = ofp->symtabs; s; s = s->next)
 	{
-	  const char *name = s->filename;
+	  const char *name = s->from.filename;
 	  int len = strlen (name);
 	  if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
 	      || strcmp (name, "<<C++-namespaces>>") == 0)))
@@ -275,7 +275,7 @@ select_source_symtab (struct symtab *s)
     {
       for (ps = ofp->psymtabs; ps != NULL; ps = ps->next)
 	{
-	  const char *name = ps->filename;
+	  const char *name = ps->from.filename;
 	  int len = strlen (name);
 	  if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
 	      || strcmp (name, "<<C++-namespaces>>") == 0)))
@@ -329,19 +329,19 @@ forget_cached_source_info (void)
 	      xfree (s->line_charpos);
 	      s->line_charpos = NULL;
 	    }
-	  if (s->fullname != NULL)
+	  if (s->from.fullname != NULL)
 	    {
-	      xfree (s->fullname);
-	      s->fullname = NULL;
+	      xfree (s->from.fullname);
+	      s->from.fullname = NULL;
 	    }
 	}
 
       ALL_OBJFILE_PSYMTABS (objfile, pst)
       {
-	if (pst->fullname != NULL)
+	if (pst->from.fullname != NULL)
 	  {
-	    xfree (pst->fullname);
-	    pst->fullname = NULL;
+	    xfree (pst->from.fullname);
+	    pst->from.fullname = NULL;
 	  }
       }
     }
@@ -623,11 +623,11 @@ source_info (char *ignore, int from_tty)
       printf_filtered (_("No current source file.\n"));
       return;
     }
-  printf_filtered (_("Current source file is %s\n"), s->filename);
-  if (s->dirname)
-    printf_filtered (_("Compilation directory is %s\n"), s->dirname);
-  if (s->fullname)
-    printf_filtered (_("Located in %s\n"), s->fullname);
+  printf_filtered (_("Current source file is %s\n"), s->from.filename);
+  if (s->from.dirname)
+    printf_filtered (_("Compilation directory is %s\n"), s->from.dirname);
+  if (s->from.fullname)
+    printf_filtered (_("Located in %s\n"), s->from.fullname);
   if (s->nlines)
     printf_filtered (_("Contains %d line%s.\n"), s->nlines,
 		     s->nlines == 1 ? "" : "s");
@@ -1040,8 +1040,8 @@ open_source_file (struct symtab *s)
   if (!s)
     return -1;
 
-  return find_and_open_source (s->objfile, s->filename, s->dirname, 
-			       &s->fullname);
+  return find_and_open_source (s->objfile, s->from.filename, s->from.dirname,
+			       &s->from.fullname);
 }
 
 /* Finds the fullname that a symtab represents.
@@ -1061,13 +1061,13 @@ symtab_to_fullname (struct symtab *s)
 
   /* Don't check s->fullname here, the file could have been 
      deleted/moved/..., look for it again */
-  r = find_and_open_source (s->objfile, s->filename, s->dirname,
-			    &s->fullname);
+  r = find_and_open_source (s->objfile, s->from.filename, s->from.dirname,
+			    &s->from.fullname);
 
   if (r >= 0)
     {
       close (r);
-      return s->fullname;
+      return s->from.fullname;
     }
 
   return NULL;
@@ -1090,13 +1090,13 @@ psymtab_to_fullname (struct partial_symtab *ps)
 
   /* Don't check ps->fullname here, the file could have been
      deleted/moved/..., look for it again */
-  r = find_and_open_source (ps->objfile, ps->filename, ps->dirname,
-			    &ps->fullname);
+  r = find_and_open_source (ps->objfile, ps->from.filename, ps->from.dirname,
+			    &ps->from.fullname);
 
   if (r >= 0)
     {
       close (r);
-      return ps->fullname;
+      return ps->from.fullname;
     }
 
   return NULL;
@@ -1121,7 +1121,7 @@ find_source_lines (struct symtab *s, int desc)
   gdb_assert (s);
   line_charpos = (int *) xmalloc (lines_allocated * sizeof (int));
   if (fstat (desc, &st) < 0)
-    perror_with_name (s->filename);
+    perror_with_name (s->from.filename);
 
   if (s->objfile && s->objfile->obfd)
     mtime = s->objfile->mtime;
@@ -1170,7 +1170,7 @@ find_source_lines (struct symtab *s, int desc)
     /* Reassign `size' to result of read for systems where \r\n -> \n.  */
     size = myread (desc, data, size);
     if (size < 0)
-      perror_with_name (s->filename);
+      perror_with_name (s->from.filename);
     end = data + size;
     p = data;
     line_charpos[0] = 0;
@@ -1262,7 +1262,7 @@ get_filename_and_charpos (struct symtab *s, char **fullname)
     }
   cleanups = make_cleanup_close (desc);
   if (fullname)
-    *fullname = s->fullname;
+    *fullname = s->from.fullname;
   if (s->line_charpos == 0)
     linenums_changed = 1;
   if (linenums_changed)
@@ -1286,12 +1286,12 @@ identify_source_line (struct symtab *s, int line, int mid_statement,
 {
   if (s->line_charpos == 0)
     get_filename_and_charpos (s, (char **) NULL);
-  if (s->fullname == 0)
+  if (s->from.fullname == 0)
     return 0;
   if (line > s->nlines)
     /* Don't index off the end of the line_charpos array.  */
     return 0;
-  annotate_source (s->fullname, line, s->line_charpos[line - 1],
+  annotate_source (s->from.fullname, line, s->line_charpos[line - 1],
 		   mid_statement, pc);
 
   current_source_line = line;
@@ -1348,14 +1348,14 @@ print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
 
       if (!noerror)
 	{
-	  char *name = alloca (strlen (s->filename) + 100);
-	  sprintf (name, "%d\t%s", line, s->filename);
+	  char *name = alloca (strlen (s->from.filename) + 100);
+	  sprintf (name, "%d\t%s", line, s->from.filename);
 	  print_sys_errmsg (name, errno);
 	}
       else
 	ui_out_field_int (uiout, "line", line);
       ui_out_text (uiout, "\tin ");
-      ui_out_field_string (uiout, "file", s->filename);
+      ui_out_field_string (uiout, "file", s->from.filename);
       ui_out_text (uiout, "\n");
 
       return;
@@ -1370,13 +1370,13 @@ print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
     {
       close (desc);
       error (_("Line number %d out of range; %s has %d lines."),
-	     line, s->filename, s->nlines);
+	     line, s->from.filename, s->nlines);
     }
 
   if (lseek (desc, s->line_charpos[line - 1], 0) < 0)
     {
       close (desc);
-      perror_with_name (s->filename);
+      perror_with_name (s->from.filename);
     }
 
   stream = fdopen (desc, FDOPEN_MODE);
@@ -1491,7 +1491,7 @@ line_info (char *arg, int from_tty)
 	  if (start_pc == end_pc)
 	    {
 	      printf_filtered ("Line %d of \"%s\"",
-			       sal.line, sal.symtab->filename);
+			       sal.line, sal.symtab->from.filename);
 	      wrap_here ("  ");
 	      printf_filtered (" is at address ");
 	      print_address (start_pc, gdb_stdout);
@@ -1501,7 +1501,7 @@ line_info (char *arg, int from_tty)
 	  else
 	    {
 	      printf_filtered ("Line %d of \"%s\"",
-			       sal.line, sal.symtab->filename);
+			       sal.line, sal.symtab->from.filename);
 	      wrap_here ("  ");
 	      printf_filtered (" starts at address ");
 	      print_address (start_pc, gdb_stdout);
@@ -1527,7 +1527,7 @@ line_info (char *arg, int from_tty)
 	   which the user would want to see?  If we have debugging symbols
 	   and no line numbers?  */
 	printf_filtered (_("Line number %d is out of range for \"%s\".\n"),
-			 sal.line, sal.symtab->filename);
+			 sal.line, sal.symtab->from.filename);
     }
   xfree (sals.sals);
 }
@@ -1555,7 +1555,7 @@ forward_search_command (char *regex, int from_tty)
 
   desc = open_source_file (current_source_symtab);
   if (desc < 0)
-    perror_with_name (current_source_symtab->filename);
+    perror_with_name (current_source_symtab->from.filename);
   cleanups = make_cleanup_close (desc);
 
   if (current_source_symtab->line_charpos == 0)
@@ -1565,7 +1565,7 @@ forward_search_command (char *regex, int from_tty)
     error (_("Expression not found"));
 
   if (lseek (desc, current_source_symtab->line_charpos[line - 1], 0) < 0)
-    perror_with_name (current_source_symtab->filename);
+    perror_with_name (current_source_symtab->from.filename);
 
   discard_cleanups (cleanups);
   stream = fdopen (desc, FDOPEN_MODE);
@@ -1646,7 +1646,7 @@ reverse_search_command (char *regex, int from_tty)
 
   desc = open_source_file (current_source_symtab);
   if (desc < 0)
-    perror_with_name (current_source_symtab->filename);
+    perror_with_name (current_source_symtab->from.filename);
   cleanups = make_cleanup_close (desc);
 
   if (current_source_symtab->line_charpos == 0)
@@ -1656,7 +1656,7 @@ reverse_search_command (char *regex, int from_tty)
     error (_("Expression not found"));
 
   if (lseek (desc, current_source_symtab->line_charpos[line - 1], 0) < 0)
-    perror_with_name (current_source_symtab->filename);
+    perror_with_name (current_source_symtab->from.filename);
 
   discard_cleanups (cleanups);
   stream = fdopen (desc, FDOPEN_MODE);
@@ -1702,7 +1702,7 @@ reverse_search_command (char *regex, int from_tty)
       if (fseek (stream, current_source_symtab->line_charpos[line - 1], 0) < 0)
 	{
 	  fclose (stream);
-	  perror_with_name (current_source_symtab->filename);
+	  perror_with_name (current_source_symtab->from.filename);
 	}
     }
 
diff --git a/gdb/stack.c b/gdb/stack.c
index 3b2b12c..4622096 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -787,13 +787,13 @@ print_frame (struct frame_info *frame, int print_level,
       QUIT;
     }
   ui_out_text (uiout, ")");
-  if (sal.symtab && sal.symtab->filename)
+  if (sal.symtab && sal.symtab->from.filename)
     {
       annotate_frame_source_begin ();
       ui_out_wrap_hint (uiout, "   ");
       ui_out_text (uiout, " at ");
       annotate_frame_source_file ();
-      ui_out_field_string (uiout, "file", sal.symtab->filename);
+      ui_out_field_string (uiout, "file", sal.symtab->from.filename);
       if (ui_out_is_mi_like_p (uiout))
 	{
 	  const char *fullname = symtab_to_fullname (sal.symtab);
@@ -807,7 +807,7 @@ print_frame (struct frame_info *frame, int print_level,
       annotate_frame_source_end ();
     }
 
-  if (!funname || (!sal.symtab || !sal.symtab->filename))
+  if (!funname || (!sal.symtab || !sal.symtab->from.filename))
     {
 #ifdef PC_SOLIB
       char *lib = PC_SOLIB (get_frame_pc (frame));
@@ -1054,7 +1054,7 @@ frame_info (char *addr_exp, int from_tty)
     }
   wrap_here ("   ");
   if (sal.symtab)
-    printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
+    printf_filtered (" (%s:%d)", sal.symtab->from.filename, sal.line);
   puts_filtered ("; ");
   wrap_here ("    ");
   printf_filtered ("saved %s ", pc_regname);
@@ -1500,7 +1500,7 @@ print_block_frame_labels (struct block *b, int *have_default,
 	      fputs_filtered (paddress (SYMBOL_VALUE_ADDRESS (sym)), stream);
 	    }
 	  fprintf_filtered (stream, " in file %s, line %d\n",
-			    sal.symtab->filename, sal.line);
+			    sal.symtab->from.filename, sal.line);
 	}
     }
 
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 774101d..81629de 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1533,8 +1533,8 @@ set_initial_language (void)
   pst = find_main_psymtab ();
   if (pst != NULL)
     {
-      if (pst->filename != NULL)
-	lang = deduce_language_from_filename (pst->filename);
+      if (pst->from.filename != NULL)
+	lang = deduce_language_from_filename (pst->from.filename);
 
       if (lang == language_unknown)
 	{
@@ -2710,9 +2710,9 @@ allocate_symtab (char *filename, struct objfile *objfile)
   symtab = (struct symtab *)
     obstack_alloc (&objfile->objfile_obstack, sizeof (struct symtab));
   memset (symtab, 0, sizeof (*symtab));
-  symtab->filename = obsavestring (filename, strlen (filename),
-				   &objfile->objfile_obstack);
-  symtab->fullname = NULL;
+  symtab->from.filename = obsavestring (filename, strlen (filename),
+					&objfile->objfile_obstack);
+  symtab->from.fullname = NULL;
   symtab->language = deduce_language_from_filename (filename);
   symtab->debugformat = obsavestring ("unknown", 7,
 				      &objfile->objfile_obstack);
@@ -2742,8 +2742,8 @@ allocate_psymtab (char *filename, struct objfile *objfile)
 		     sizeof (struct partial_symtab));
 
   memset (psymtab, 0, sizeof (struct partial_symtab));
-  psymtab->filename = obsavestring (filename, strlen (filename),
-				    &objfile->objfile_obstack);
+  psymtab->from.filename = obsavestring (filename, strlen (filename),
+					 &objfile->objfile_obstack);
   psymtab->symtab = NULL;
 
   /* Prepend it to the psymtab list for the objfile it belongs to.
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 2e25c89..8dc7385 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -118,8 +118,8 @@ free_symtab (struct symtab *s)
   /* Free source-related stuff */
   if (s->line_charpos != NULL)
     xfree (s->line_charpos);
-  if (s->fullname != NULL)
-    xfree (s->fullname);
+  if (s->from.fullname != NULL)
+    xfree (s->from.fullname);
   if (s->debugformat != NULL)
     xfree (s->debugformat);
   xfree (s);
@@ -224,7 +224,7 @@ dump_objfile (struct objfile *objfile)
 	   psymtab = psymtab->next)
 	{
 	  printf_filtered ("%s at ",
-			   psymtab->filename);
+			   psymtab->from.filename);
 	  gdb_print_host_address (psymtab, gdb_stdout);
 	  printf_filtered (", ");
 	  if (psymtab->objfile != objfile)
@@ -243,7 +243,7 @@ dump_objfile (struct objfile *objfile)
 	   symtab != NULL;
 	   symtab = symtab->next)
 	{
-	  printf_filtered ("%s at ", symtab->filename);
+	  printf_filtered ("%s at ", symtab->from.filename);
 	  gdb_print_host_address (symtab, gdb_stdout);
 	  printf_filtered (", ");
 	  if (symtab->objfile != objfile)
@@ -340,7 +340,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
   int i;
 
   fprintf_filtered (outfile, "\nPartial symtab for source file %s ",
-		    psymtab->filename);
+		    psymtab->from.filename);
   fprintf_filtered (outfile, "(object ");
   gdb_print_host_address (psymtab, outfile);
   fprintf_filtered (outfile, ")\n\n");
@@ -382,7 +382,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
       fprintf_filtered (outfile, "    %d ", i);
       gdb_print_host_address (psymtab->dependencies[i], outfile);
       fprintf_filtered (outfile, " %s\n",
-			psymtab->dependencies[i]->filename);
+			psymtab->dependencies[i]->from.filename);
     }
   if (psymtab->n_global_syms > 0)
     {
@@ -412,10 +412,10 @@ dump_symtab_1 (struct objfile *objfile, struct symtab *symtab,
   struct block *b;
   int depth;
 
-  fprintf_filtered (outfile, "\nSymtab for file %s\n", symtab->filename);
-  if (symtab->dirname)
+  fprintf_filtered (outfile, "\nSymtab for file %s\n", symtab->from.filename);
+  if (symtab->from.dirname)
     fprintf_filtered (outfile, "Compilation directory is %s\n",
-		      symtab->dirname);
+		      symtab->from.dirname);
   fprintf_filtered (outfile, "Read from object file %s (", objfile->name);
   gdb_print_host_address (objfile, outfile);
   fprintf_filtered (outfile, ")\n");
@@ -549,7 +549,7 @@ Arguments missing: an output file name and an optional symbol file name"));
 
   immediate_quit++;
   ALL_SYMTABS (objfile, s)
-    if (symname == NULL || strcmp (symname, s->filename) == 0)
+    if (symname == NULL || strcmp (symname, s->from.filename) == 0)
     dump_symtab (objfile, s, outfile);
   immediate_quit--;
   do_cleanups (cleanups);
@@ -759,7 +759,7 @@ maintenance_print_psymbols (char *args, int from_tty)
 
   immediate_quit++;
   ALL_PSYMTABS (objfile, ps)
-    if (symname == NULL || strcmp (symname, ps->filename) == 0)
+    if (symname == NULL || strcmp (symname, ps->from.filename) == 0)
     dump_psymtab (objfile, ps, outfile);
   immediate_quit--;
   do_cleanups (cleanups);
@@ -942,7 +942,7 @@ maintenance_info_symtabs (char *regexp, int from_tty)
 	  QUIT;
 
 	  if (! regexp
-	      || re_exec (symtab->filename))
+	      || re_exec (symtab->from.filename))
 	    {
 	      if (! printed_objfile_start)
 		{
@@ -953,14 +953,16 @@ maintenance_info_symtabs (char *regexp, int from_tty)
 		  printed_objfile_start = 1;
 		}
 
-	      printf_filtered ("	{ symtab %s ", symtab->filename);
+	      printf_filtered ("	{ symtab %s ", symtab->from.filename);
 	      wrap_here ("    ");
 	      printf_filtered ("((struct symtab *) %s)\n", 
 			       host_address_to_string (symtab));
 	      printf_filtered ("	  dirname %s\n",
-			       symtab->dirname ? symtab->dirname : "(null)");
+			       symtab->from.dirname ? symtab->from.dirname
+						    : "(null)");
 	      printf_filtered ("	  fullname %s\n",
-			       symtab->fullname ? symtab->fullname : "(null)");
+			       symtab->from.fullname ? symtab->from.fullname
+						     : "(null)");
 	      printf_filtered ("	  blockvector ((struct blockvector *) %s)%s\n",
 			       host_address_to_string (symtab->blockvector),
 			       symtab->primary ? " (primary)" : "");
@@ -999,7 +1001,7 @@ maintenance_info_psymtabs (char *regexp, int from_tty)
 	  QUIT;
 
 	  if (! regexp
-	      || re_exec (psymtab->filename))
+	      || re_exec (psymtab->from.filename))
 	    {
 	      if (! printed_objfile_start)
 		{
@@ -1010,7 +1012,7 @@ maintenance_info_psymtabs (char *regexp, int from_tty)
 		  printed_objfile_start = 1;
 		}
 
-	      printf_filtered ("  { psymtab %s ", psymtab->filename);
+	      printf_filtered ("  { psymtab %s ", psymtab->from.filename);
 	      wrap_here ("    ");
 	      printf_filtered ("((struct partial_symtab *) %s)\n", 
 			       host_address_to_string (psymtab));
@@ -1018,7 +1020,8 @@ maintenance_info_psymtabs (char *regexp, int from_tty)
 	      printf_filtered ("    readin %s\n",
 			       psymtab->readin ? "yes" : "no");
 	      printf_filtered ("    fullname %s\n",
-			       psymtab->fullname ? psymtab->fullname : "(null)");
+			       psymtab->from.fullname ? psymtab->from.fullname
+						      : "(null)");
 	      printf_filtered ("    text addresses ");
 	      fputs_filtered (paddress (psymtab->textlow), gdb_stdout);
 	      printf_filtered (" -- ");
@@ -1057,7 +1060,7 @@ maintenance_info_psymtabs (char *regexp, int from_tty)
 		      /* Note the string concatenation there --- no comma.  */
 		      printf_filtered ("      psymtab %s "
 				       "((struct partial_symtab *) %s)\n",
-				       dep->filename, 
+				       dep->from.filename, 
 				       host_address_to_string (dep));
 		    }
 		  printf_filtered ("    }\n");
@@ -1106,7 +1109,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
 	    printf_filtered ("Static symbol `");
 	    puts_filtered (SYMBOL_LINKAGE_NAME (*psym));
 	    printf_filtered ("' only found in ");
-	    puts_filtered (ps->filename);
+	    puts_filtered (ps->from.filename);
 	    printf_filtered (" psymtab\n");
 	  }
 	psym++;
@@ -1123,7 +1126,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
 	    printf_filtered ("Global symbol `");
 	    puts_filtered (SYMBOL_LINKAGE_NAME (*psym));
 	    printf_filtered ("' only found in ");
-	    puts_filtered (ps->filename);
+	    puts_filtered (ps->from.filename);
 	    printf_filtered (" psymtab\n");
 	  }
 	psym++;
@@ -1131,7 +1134,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
     if (ps->texthigh < ps->textlow)
       {
 	printf_filtered ("Psymtab ");
-	puts_filtered (ps->filename);
+	puts_filtered (ps->from.filename);
 	printf_filtered (" covers bad range ");
 	fputs_filtered (paddress (ps->textlow), gdb_stdout);
 	printf_filtered (" - ");
@@ -1144,7 +1147,7 @@ maintenance_check_symtabs (char *ignore, int from_tty)
     if (ps->textlow < BLOCK_START (b) || ps->texthigh > BLOCK_END (b))
       {
 	printf_filtered ("Psymtab ");
-	puts_filtered (ps->filename);
+	puts_filtered (ps->from.filename);
 	printf_filtered (" covers ");
 	fputs_filtered (paddress (ps->textlow), gdb_stdout);
 	printf_filtered (" - ");
diff --git a/gdb/symtab.c b/gdb/symtab.c
index b8a6c31..53fe5c4 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -184,7 +184,7 @@ got_symtab:
 
   ALL_SYMTABS (objfile, s)
   {
-    if (FILENAME_CMP (name, s->filename) == 0)
+    if (FILENAME_CMP (name, s->from.filename) == 0)
       {
 	return s;
       }
@@ -221,7 +221,7 @@ got_symtab:
   if (lbasename (name) == name)
     ALL_SYMTABS (objfile, s)
     {
-      if (FILENAME_CMP (lbasename (s->filename), name) == 0)
+      if (FILENAME_CMP (lbasename (s->from.filename), name) == 0)
 	return s;
     }
 
@@ -234,7 +234,7 @@ got_symtab:
 
   if (ps->readin)
     error (_("Internal: readin %s pst for `%s' found when no symtab found."),
-	   ps->filename, name);
+	   ps->from.filename, name);
 
   s = PSYMTAB_TO_SYMTAB (ps);
 
@@ -276,7 +276,7 @@ lookup_partial_symtab (const char *name)
 
   ALL_PSYMTABS (objfile, pst)
   {
-    if (FILENAME_CMP (name, pst->filename) == 0)
+    if (FILENAME_CMP (name, pst->from.filename) == 0)
       {
 	return (pst);
       }
@@ -286,8 +286,8 @@ lookup_partial_symtab (const char *name)
     if (full_path != NULL)
       {
 	psymtab_to_fullname (pst);
-	if (pst->fullname != NULL
-	    && FILENAME_CMP (full_path, pst->fullname) == 0)
+	if (pst->from.fullname != NULL
+	    && FILENAME_CMP (full_path, pst->from.fullname) == 0)
 	  {
 	    return pst;
 	  }
@@ -297,9 +297,9 @@ lookup_partial_symtab (const char *name)
       {
         char *rp = NULL;
 	psymtab_to_fullname (pst);
-        if (pst->fullname != NULL)
+        if (pst->from.fullname != NULL)
           {
-            rp = gdb_realpath (pst->fullname);
+            rp = gdb_realpath (pst->from.fullname);
             make_cleanup (xfree, rp);
           }
 	if (rp != NULL && FILENAME_CMP (real_path, rp) == 0)
@@ -314,7 +314,7 @@ lookup_partial_symtab (const char *name)
   if (lbasename (name) == name)
     ALL_PSYMTABS (objfile, pst)
     {
-      if (FILENAME_CMP (lbasename (pst->filename), name) == 0)
+      if (FILENAME_CMP (lbasename (pst->from.filename), name) == 0)
 	return (pst);
     }
 
@@ -1561,7 +1561,7 @@ lookup_symbol_aux_psymtabs (int block_index, const char *name,
 	    if (!sym)
 	      error (_("Internal: %s symbol `%s' found in %s psymtab but not in symtab.\n%s may be an inlined function, or may be a template function\n(if a template, try specifying an instantiation: %s<type>)."),
 		     block_index == GLOBAL_BLOCK ? "global" : "static",
-		     name, ps->filename, name, name);
+		     name, ps->from.filename, name, name);
 	  }
 	return fixup_symbol_section (sym, objfile);
       }
@@ -1838,7 +1838,7 @@ basic_lookup_transparent_type (const char *name)
 	      error (_("Internal: global symbol `%s' found in %s psymtab but not in symtab.\n\
 %s may be an inlined function, or may be a template function\n\
 (if a template, try specifying an instantiation: %s<type>)."),
-		     name, ps->filename, name, name);
+		     name, ps->from.filename, name, name);
 	  }
 	if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
 	  return SYMBOL_TYPE (sym);
@@ -1885,7 +1885,7 @@ basic_lookup_transparent_type (const char *name)
 	      error (_("Internal: static symbol `%s' found in %s psymtab but not in symtab.\n\
 %s may be an inlined function, or may be a template function\n\
 (if a template, try specifying an instantiation: %s<type>)."),
-		     name, ps->filename, name, name);
+		     name, ps->from.filename, name, name);
 	  }
 	if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
 	  return SYMBOL_TYPE (sym);
@@ -2410,7 +2410,7 @@ find_line_symtab (struct symtab *symtab, int line, int *index, int *exact_match)
 
       ALL_PSYMTABS (objfile, p)
       {
-        if (strcmp (symtab->filename, p->filename) != 0)
+        if (strcmp (symtab->from.filename, p->from.filename) != 0)
           continue;
         PSYMTAB_TO_SYMTAB (p);
       }
@@ -2420,7 +2420,7 @@ find_line_symtab (struct symtab *symtab, int line, int *index, int *exact_match)
 	struct linetable *l;
 	int ind;
 
-	if (strcmp (symtab->filename, s->filename) != 0)
+	if (strcmp (symtab->from.filename, s->from.filename) != 0)
 	  continue;
 	l = LINETABLE (s);
 	ind = find_line_common (l, line, &exact);
@@ -2885,7 +2885,7 @@ sources_info (char *ignore, int from_tty)
   ALL_SYMTABS (objfile, s)
   {
     const char *fullname = symtab_to_fullname (s);
-    output_source_filename (fullname ? fullname : s->filename, &first);
+    output_source_filename (fullname ? fullname : s->from.filename, &first);
   }
   printf_filtered ("\n\n");
 
@@ -2897,7 +2897,7 @@ sources_info (char *ignore, int from_tty)
     if (!ps->readin)
       {
 	const char *fullname = psymtab_to_fullname (ps);
-	output_source_filename (fullname ? fullname : ps->filename, &first);
+	output_source_filename (fullname ? fullname : ps->from.filename, &first);
       }
   }
   printf_filtered ("\n");
@@ -3134,7 +3134,7 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
 	       what file it really comes from until we have full
 	       symtabs.  The symbol might be in a header file included by
 	       this psymtab.  This only affects Insight.  */
-	    if (file_matches (ps->filename, files, nfiles)
+	    if (file_matches (ps->from.filename, files, nfiles)
 		&& ((regexp == NULL
 		     || re_exec (SYMBOL_NATURAL_NAME (*psym)) != 0)
 		    && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (*psym) != LOC_TYPEDEF
@@ -3208,7 +3208,7 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
 	      struct symtab *real_symtab = SYMBOL_SYMTAB (sym);
 	      QUIT;
 
-	      if (file_matches (real_symtab->filename, files, nfiles)
+	      if (file_matches (real_symtab->from.filename, files, nfiles)
 		  && ((regexp == NULL
 		       || re_exec (SYMBOL_NATURAL_NAME (sym)) != 0)
 		      && ((kind == VARIABLES_DOMAIN && SYMBOL_CLASS (sym) != LOC_TYPEDEF
@@ -3309,10 +3309,10 @@ static void
 print_symbol_info (domain_enum kind, struct symtab *s, struct symbol *sym,
 		   int block, char *last)
 {
-  if (last == NULL || strcmp (last, s->filename) != 0)
+  if (last == NULL || strcmp (last, s->from.filename) != 0)
     {
       fputs_filtered ("\nFile ", gdb_stdout);
-      fputs_filtered (s->filename, gdb_stdout);
+      fputs_filtered (s->from.filename, gdb_stdout);
       fputs_filtered (":\n", gdb_stdout);
     }
 
@@ -3402,7 +3402,7 @@ symtab_symbol_info (char *regexp, domain_enum kind, int from_tty)
 			     p->symbol,
 			     p->block,
 			     last_filename);
-	  last_filename = p->symtab->filename;
+	  last_filename = p->symtab->from.filename;
 	}
     }
 
@@ -3450,10 +3450,10 @@ rbreak_command (char *regexp, int from_tty)
     {
       if (p->msymbol == NULL)
 	{
-	  char *string = alloca (strlen (p->symtab->filename)
+	  char *string = alloca (strlen (p->symtab->from.filename)
 				 + strlen (SYMBOL_LINKAGE_NAME (p->symbol))
 				 + 4);
-	  strcpy (string, p->symtab->filename);
+	  strcpy (string, p->symtab->from.filename);
 	  strcat (string, ":'");
 	  strcat (string, SYMBOL_LINKAGE_NAME (p->symbol));
 	  strcat (string, "'");
@@ -3462,7 +3462,7 @@ rbreak_command (char *regexp, int from_tty)
 			     p->symtab,
 			     p->symbol,
 			     p->block,
-			     p->symtab->filename);
+			     p->symtab->from.filename);
 	}
       else
 	{
@@ -4097,19 +4097,19 @@ make_source_files_completion_list (char *text, char *word)
 
   ALL_SYMTABS (objfile, s)
     {
-      if (not_interesting_fname (s->filename))
+      if (not_interesting_fname (s->from.filename))
 	continue;
-      if (!filename_seen (s->filename, 1, &first)
+      if (!filename_seen (s->from.filename, 1, &first)
 #if HAVE_DOS_BASED_FILE_SYSTEM
-	  && strncasecmp (s->filename, text, text_len) == 0
+	  && strncasecmp (s->from.filename, text, text_len) == 0
 #else
-	  && strncmp (s->filename, text, text_len) == 0
+	  && strncmp (s->from.filename, text, text_len) == 0
 #endif
 	  )
 	{
 	  /* This file matches for a completion; add it to the current
 	     list of matches.  */
-	  add_filename_to_list (s->filename, text, word,
+	  add_filename_to_list (s->from.filename, text, word,
 				&list, &list_used, &list_alloced);
 	}
       else
@@ -4118,8 +4118,8 @@ make_source_files_completion_list (char *text, char *word)
 	     debug info records leading directories, but not the other
 	     way around.  This is what subroutines of breakpoint
 	     command do when they parse file names.  */
-	  base_name = lbasename (s->filename);
-	  if (base_name != s->filename
+	  base_name = lbasename (s->from.filename);
+	  if (base_name != s->from.filename
 	      && !filename_seen (base_name, 1, &first)
 #if HAVE_DOS_BASED_FILE_SYSTEM
 	      && strncasecmp (base_name, text, text_len) == 0
@@ -4134,28 +4134,28 @@ make_source_files_completion_list (char *text, char *word)
 
   ALL_PSYMTABS (objfile, ps)
     {
-      if (not_interesting_fname (ps->filename))
+      if (not_interesting_fname (ps->from.filename))
 	continue;
       if (!ps->readin)
 	{
-	  if (!filename_seen (ps->filename, 1, &first)
+	  if (!filename_seen (ps->from.filename, 1, &first)
 #if HAVE_DOS_BASED_FILE_SYSTEM
-	      && strncasecmp (ps->filename, text, text_len) == 0
+	      && strncasecmp (ps->from.filename, text, text_len) == 0
 #else
-	      && strncmp (ps->filename, text, text_len) == 0
+	      && strncmp (ps->from.filename, text, text_len) == 0
 #endif
 	      )
 	    {
 	      /* This file matches for a completion; add it to the
 		 current list of matches.  */
-	      add_filename_to_list (ps->filename, text, word,
+	      add_filename_to_list (ps->from.filename, text, word,
 				    &list, &list_used, &list_alloced);
 
 	    }
 	  else
 	    {
-	      base_name = lbasename (ps->filename);
-	      if (base_name != ps->filename
+	      base_name = lbasename (ps->from.filename);
+	      if (base_name != ps->from.filename
 		  && !filename_seen (base_name, 1, &first)
 #if HAVE_DOS_BASED_FILE_SYSTEM
 		  && strncasecmp (base_name, text, text_len) == 0
@@ -4480,7 +4480,7 @@ append_exact_match_to_sals (char *filename, int lineno,
   
   ALL_SYMTABS (objfile, symtab)
     {
-      if (strcmp (filename, symtab->filename) == 0)
+      if (strcmp (filename, symtab->from.filename) == 0)
 	{
 	  struct linetable *l;
 	  int len;
@@ -4561,18 +4561,18 @@ expand_line_sal (struct symtab_and_line sal)
 
       ALL_PSYMTABS (objfile, psymtab)
 	{
-	  if (strcmp (sal.symtab->filename,
-		      psymtab->filename) == 0)
+	  if (strcmp (sal.symtab->from.filename,
+		      psymtab->from.filename) == 0)
 	    PSYMTAB_TO_SYMTAB (psymtab);
 	}
 
       /* Now search the symtab for exact matches and append them.  If
 	 none is found, append the best_item and all its exact
 	 matches.  */
-      exact = append_exact_match_to_sals (sal.symtab->filename, lineno,
+      exact = append_exact_match_to_sals (sal.symtab->from.filename, lineno,
 					  &ret, &best_item, &best_symtab);
       if (!exact && best_item)
-	append_exact_match_to_sals (best_symtab->filename, best_item->line,
+	append_exact_match_to_sals (best_symtab->from.filename, best_item->line,
 				    &ret, &best_item, &best_symtab);
     }
 
diff --git a/gdb/symtab.h b/gdb/symtab.h
index f7689f6..b6d14eb 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -694,6 +694,23 @@ struct section_offsets
   (sizeof (struct section_offsets) \
    + sizeof (((struct section_offsets *) 0)->offsets) * ((n)-1))
 
+/* Origin where a symtab or partial_symtab was generated from.  */
+
+struct symtab_from
+  {
+    /* Name of the source file which this symtab defines.  It is never NULL.  */
+
+    char *filename;
+
+    /* Full path of the source file.  NULL if not known.  */
+
+    char *fullname;
+
+    /* Directory in which it was compiled, or NULL if we don't know.  */
+
+    char *dirname;
+  };
+
 /* Each source file or header is represented by a struct symtab. 
    These objects are chained through the `next' field.  */
 
@@ -704,6 +721,10 @@ struct symtab
 
   struct symtab *next;
 
+  /* Origin where this symtab was generated from.  */
+
+  struct symtab_from from;
+
   /* List of all symbol scope blocks for this symtab.  May be shared
      between different symtabs (and normally is for all the symtabs
      in a given compilation unit).  */
@@ -731,14 +752,6 @@ struct symtab
      all the symtabs in a given compilation unit.  */
   struct macro_table *macro_table;
 
-  /* Name of this source file.  */
-
-  char *filename;
-
-  /* Directory in which it was compiled, or NULL if we don't know.  */
-
-  char *dirname;
-
   /* This component says how to free the data we point to:
      free_nothing => do nothing; some other symtab will free
      the data this one uses.
@@ -781,12 +794,7 @@ struct symtab
 
   char *producer;
 
-  /* Full name of file as found by searching the source path.
-     NULL if not yet known.  */
-
-  char *fullname;
-
-  /* Object file from which this symbol information was read.  */
+  /* Information about the object file from which symbols should be read.  */
 
   struct objfile *objfile;
 
@@ -814,17 +822,9 @@ struct partial_symtab
 
   struct partial_symtab *next;
 
-  /* Name of the source file which this partial_symtab defines */
-
-  char *filename;
-
-  /* Full path of the source file.  NULL if not known.  */
-
-  char *fullname;
-
-  /* Directory in which it was compiled, or NULL if we don't know.  */
+  /* Origin where this partial_symtab was generated from.  */
 
-  char *dirname;
+  struct symtab_from from;
 
   /* Information about the object file from which symbols should be read.  */
 
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index dece799..3a44ed9 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -285,12 +285,12 @@ set_traceframe_context (struct frame_info *trace_frame)
   /* Save file name as "$trace_file", a debugger variable visible to
      users.  */
   if (traceframe_sal.symtab == NULL ||
-      traceframe_sal.symtab->filename == NULL)
+      traceframe_sal.symtab->from.filename == NULL)
     set_internalvar (lookup_internalvar ("trace_file"),
 		     allocate_value (builtin_type_void));
   else
     {
-      len = strlen (traceframe_sal.symtab->filename);
+      len = strlen (traceframe_sal.symtab->from.filename);
       file_range = create_range_type (file_range,
 				      builtin_type_int32, 0, len - 1);
       file_string = create_array_type (file_string,
@@ -298,7 +298,7 @@ set_traceframe_context (struct frame_info *trace_frame)
       file_val = allocate_value (file_string);
       deprecated_set_value_type (file_val, file_string);
       memcpy (value_contents_raw (file_val),
-	      traceframe_sal.symtab->filename,
+	      traceframe_sal.symtab->from.filename,
 	      len);
       deprecated_set_value_modifiable (file_val, 0);
       set_internalvar (lookup_internalvar ("trace_file"), file_val);
@@ -1724,7 +1724,7 @@ trace_find_line_command (char *args, int from_tty)
 	  if (start_pc == end_pc)
 	    {
 	      printf_filtered ("Line %d of \"%s\"",
-			       sal.line, sal.symtab->filename);
+			       sal.line, sal.symtab->from.filename);
 	      wrap_here ("  ");
 	      printf_filtered (" is at address ");
 	      print_address (start_pc, gdb_stdout);
@@ -1745,7 +1745,7 @@ trace_find_line_command (char *args, int from_tty)
 	   which the user would want to see?  If we have debugging
 	   symbols and no line numbers?  */
 	error (_("Line number %d is out of range for \"%s\"."),
-	       sal.line, sal.symtab->filename);
+	       sal.line, sal.symtab->from.filename);
 
       sprintf_vma (startpc_str, start_pc);
       sprintf_vma (endpc_str, end_pc - 1);
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index 14f0496..aa954f4 100644
--- a/gdb/tui/tui-disasm.c
+++ b/gdb/tui/tui-disasm.c
@@ -311,7 +311,7 @@ tui_show_disassem_and_update_source (CORE_ADDR start_addr)
       if (sal.symtab)
 	{
 	  set_current_source_symtab_and_line (&sal);
-	  tui_update_locator_filename (sal.symtab->filename);
+	  tui_update_locator_filename (sal.symtab->from.filename);
 	}
       else
 	tui_update_locator_filename ("?");
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 5b8000e..fa0d7ee 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -45,7 +45,7 @@ tui_set_source_content (struct symtab *s,
 {
   enum tui_status ret = TUI_FAILURE;
 
-  if (s != (struct symtab *) NULL && s->filename != (char *) NULL)
+  if (s != (struct symtab *) NULL && s->from.filename != (char *) NULL)
     {
       FILE *stream;
       int i, desc, c, line_width, nlines;
@@ -62,8 +62,8 @@ tui_set_source_content (struct symtab *s,
 	    {
 	      if (!noerror)
 		{
-		  char *name = alloca (strlen (s->filename) + 100);
-		  sprintf (name, "%s:%d", s->filename, line_no);
+		  char *name = alloca (strlen (s->from.filename) + 100);
+		  sprintf (name, "%s:%d", s->from.filename, line_no);
 		  print_sys_errmsg (name, errno);
 		}
 	      ret = TUI_FAILURE;
@@ -78,12 +78,12 @@ tui_set_source_content (struct symtab *s,
 		  close (desc);
 		  printf_unfiltered (
 			  "Line number %d out of range; %s has %d lines.\n",
-				      line_no, s->filename, s->nlines);
+				      line_no, s->from.filename, s->nlines);
 		}
 	      else if (lseek (desc, s->line_charpos[line_no - 1], 0) < 0)
 		{
 		  close (desc);
-		  perror_with_name (s->filename);
+		  perror_with_name (s->from.filename);
 		}
 	      else
 		{
@@ -93,11 +93,11 @@ tui_set_source_content (struct symtab *s,
 
                   if (TUI_SRC_WIN->generic.title)
                     xfree (TUI_SRC_WIN->generic.title);
-                  TUI_SRC_WIN->generic.title = xstrdup (s->filename);
+                  TUI_SRC_WIN->generic.title = xstrdup (s->from.filename);
 
                   if (src->filename)
                     xfree (src->filename);
-                  src->filename = xstrdup (s->filename);
+                  src->filename = xstrdup (s->from.filename);
 
 		  /* Determine the threshold for the length of the
                      line and the offset to start the display.  */
@@ -145,7 +145,7 @@ tui_set_source_content (struct symtab *s,
 		      element->which_element.source.is_exec_point =
 			(strcmp (((struct tui_win_element *)
 				  locator->content[0])->which_element.locator.file_name,
-				 s->filename) == 0
+				 s->from.filename) == 0
 			 && cur_line_no == ((struct tui_win_element *)
 					    locator->content[0])->which_element.locator.line_no);
 		      if (c != EOF)
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index ccc9b9f..fbc0de6 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -334,8 +334,8 @@ tui_show_frame_info (struct frame_info *fi)
       find_frame_sal (fi, &sal);
 
       source_already_displayed = sal.symtab != 0
-        && tui_source_is_displayed (sal.symtab->filename);
-      tui_set_locator_info (sal.symtab == 0 ? "??" : sal.symtab->filename,
+        && tui_source_is_displayed (sal.symtab->from.filename);
+      tui_set_locator_info (sal.symtab == 0 ? "??" : sal.symtab->from.filename,
                             tui_get_function_from_frame (fi),
                             sal.line,
                             get_frame_pc (fi));
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 158aa89..af82321 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -57,7 +57,7 @@ tui_display_main (void)
 	  tui_update_source_windows_with_addr (addr);
 	  sal = find_pc_line (addr, 0);
           if (sal.symtab)
-             tui_update_locator_filename (sal.symtab->filename);
+             tui_update_locator_filename (sal.symtab->from.filename);
           else
              tui_update_locator_filename ("??");
 	}
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 9ae929f..f7da574 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -1748,7 +1748,7 @@ xcoff_psymtab_to_symtab_1 (struct partial_symtab *pst)
     {
       fprintf_unfiltered
 	(gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
-	 pst->filename);
+	 pst->from.filename);
       return;
     }
 
@@ -1763,7 +1763,7 @@ xcoff_psymtab_to_symtab_1 (struct partial_symtab *pst)
 	    wrap_here ("");
 	    fputs_filtered ("and ", gdb_stdout);
 	    wrap_here ("");
-	    printf_filtered ("%s...", pst->dependencies[i]->filename);
+	    printf_filtered ("%s...", pst->dependencies[i]->from.filename);
 	    wrap_here ("");	/* Flush output */
 	    gdb_flush (gdb_stdout);
 	  }
@@ -1802,7 +1802,7 @@ xcoff_psymtab_to_symtab (struct partial_symtab *pst)
     {
       fprintf_unfiltered
 	(gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
-	 pst->filename);
+	 pst->from.filename);
       return;
     }
 
@@ -1813,7 +1813,7 @@ xcoff_psymtab_to_symtab (struct partial_symtab *pst)
          to avoid disconcerting pauses.  */
       if (info_verbose)
 	{
-	  printf_filtered ("Reading in symbols for %s...", pst->filename);
+	  printf_filtered ("Reading in symbols for %s...", pst->from.filename);
 	  gdb_flush (gdb_stdout);
 	}
 
@@ -2050,7 +2050,7 @@ xcoff_end_psymtab (struct partial_symtab *pst, char **include_list,
   /* If there is already a psymtab or symtab for a file of this name,
      remove it.  (If there is a symtab, more drastic things also
      happen.)  This happens in VxWorks.  */
-  free_named_symtabs (pst->filename);
+  free_named_symtabs (pst->from.filename);
 
   if (num_includes == 0
       && number_dependencies == 0
@@ -2544,7 +2544,7 @@ scan_xcoff_symtab (struct objfile *objfile)
 	       things like "break c-exp.y:435" need to work (I
 	       suppose the psymtab_include_list could be hashed or put
 	       in a binary tree, if profiling shows this is a major hog).  */
-	    if (pst && strcmp (namestring, pst->filename) == 0)
+	    if (pst && strcmp (namestring, pst->from.filename) == 0)
 	      continue;
 	    {
 	      int i;

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03 18:26     ` Tom Tromey
@ 2009-08-04 21:01       ` Thiago Jung Bauermann
  0 siblings, 0 replies; 11+ messages in thread
From: Thiago Jung Bauermann @ 2009-08-04 21:01 UTC (permalink / raw)
  To: Tom Tromey; +Cc: archer

Em Segunda-feira 03 Agosto 2009 15:26:34 Tom Tromey escreveu:
> >>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com>
> >>>>> writes:
>
> Thiago> If we use py-block.c, then we might as well keep the current
> Thiago> python-block.c name.
>
> >> Oh, yeah, I almost forgot: supporting DOS is a complete waste of time.
>
> Thiago> Agreed. That's not why I'm doing these patches. ;-)
>
> Oh, I must have misunderstood.
>
> I thought the issue was 8.3 conformance.
> py-something.c is less likely to clash.
>
> But, it sounds like this isn't it -- so I don't know the motivation.

I guess I'm sounding more complicated than necessary: the rename was asked by 
Eli because of DOS support. I agreed to do it because of my own aesthetic 
reasons...

Now I'm stuck with doing it because of DOS support, apparently. I'll raise 
this issue upstream to see what can be done. Perhaps renaming to py-foo.c is 
the way to go.
-- 
[]'s
Thiago Jung Bauermann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-03  1:56 [1/2][RFA][7.0] Rename Python files to be 8.3 safe Thiago Jung Bauermann
  2009-08-03 17:35 ` Tom Tromey
@ 2009-08-09 14:17 ` Thiago Jung Bauermann
  2009-08-10 17:24   ` Tom Tromey
  1 sibling, 1 reply; 11+ messages in thread
From: Thiago Jung Bauermann @ 2009-08-09 14:17 UTC (permalink / raw)
  To: archer

Em Domingo 02 Agosto 2009 22:57:07 Thiago Jung Bauermann escreveu:
> I own this action item from the 7.0 wiki page:
>
> - Rename python source code and testcase files to avoid 8.3 limitations.
>
> So I came up with a couple of patches. The first for the actual source
> code, the second for the testsuite files.

I have a new set of patches, very similar but it now changes things
from python-foo.c to py-foo.c, and python-foo.exp to py-foo.exp.

> Ok to push this commit to the branch, and then post the patch upstream as
> RFA?

Ditto. Is that ok? I'll post the actual patches of course if you agree on my 
new "approach".
-- 
[]'s
Thiago Jung Bauermann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [1/2][RFA][7.0] Rename Python files to be 8.3 safe
  2009-08-09 14:17 ` Thiago Jung Bauermann
@ 2009-08-10 17:24   ` Tom Tromey
  0 siblings, 0 replies; 11+ messages in thread
From: Tom Tromey @ 2009-08-10 17:24 UTC (permalink / raw)
  To: Thiago Jung Bauermann; +Cc: archer

>>>>> "Thiago" == Thiago Jung Bauermann <thiago.bauermann@gmail.com> writes:

Thiago> I have a new set of patches, very similar but it now changes things
Thiago> from python-foo.c to py-foo.c, and python-foo.exp to py-foo.exp.

This sounds ok to me.

Tom

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-08-10 17:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-03  1:56 [1/2][RFA][7.0] Rename Python files to be 8.3 safe Thiago Jung Bauermann
2009-08-03 17:35 ` Tom Tromey
2009-08-03 17:54   ` Thiago Jung Bauermann
2009-08-03 18:04     ` Daniel Jacobowitz
2009-08-03 18:27       ` Thiago Jung Bauermann
2009-08-03 18:26     ` Tom Tromey
2009-08-04 21:01       ` Thiago Jung Bauermann
2009-08-03 18:33     ` Tom Tromey
2009-08-03 18:45       ` Jan Kratochvil
2009-08-09 14:17 ` Thiago Jung Bauermann
2009-08-10 17:24   ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).