Am 27.08.2004 um 22:57 schrieb Peter Vreman:

At 16:43 26-8-2004, you wrote:
Am 26.08.2004 um 15:45 schrieb Florian Klaempfl:

Dr. Rolf Jansen wrote:

...<SNIP>
The lowercase filename comes into the .stabs of the TestProgram due to the routine TGNUAssembler.WriteFileLineInfo of aggas.pas at line 237 of the fpc compiler. If I change that line from:
AsmWriteLn(#9'.stabs "'+lower(FixFileName(infile.name^))+'",'+
to
AsmWriteLn(#9'.stabs "'+FixFileName(infile.name^)+'",'+
and compile fpc first and then again my TestProgram, then GDB happily accepts the mixed case file name for seting breakpoints, and all the features of Xcode can be

Fixed, Thanks

Peter,

Many thanks for the fix. Unfortunately, I discovered too late, that this enables GDB support on Mac OS X only for the main program file. In unit files it still includes the lowercase filenames into the .stabs.

However, I found the problem and a possible solution. In globals.pas there are three FindFile routines, namely: TSearchPathList.FindFile, FindFile, and FindFilePchar.

All routines contain roughly the same code snippet:

          {
            Search order for case sensitive systems:
             1. lowercase
             2. NormalCase
             3. UPPERCASE
            None case sensitive only lowercase
          }
          FoundFile:=p.Str+Lower(f);
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
{$ifdef UNIX}
          FoundFile:=p.Str+f;
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
          FoundFile:=p.Str+Upper(f);
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
{$endif UNIX}

On Mac OS X and on other none case sensitive file systems the sequence exits always after the first search for the lowercase filename and it returns this lowercase name which then makes its way into the .stab.

I suggest to change the search order as follows:

          {
            Search order for case sensitive systems:
             1. NormalCase
             2. lowercase
             3. UPPERCASE
          }
          FoundFile:=p.Str+f;
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
          FoundFile:=p.Str+Lower(f);
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
{$ifdef UNIX}
          FoundFile:=p.Str+Upper(f);
          If FileExists(FoundFile) then
           begin
             FindFile:=true;
             exit;
           end;
{$endif UNIX}


I changed it that way on my local copy, and now everything works really fine. There should be also a little performance gain on case sensitive file systems by this way, if lots of mixed case filenames are present.



Finally, I am unsure about the effects of the following at line 216 in file assembler.pas in the routine TAssembler.Create


        name:=Lower(current_module.modulename^);

For testing purposes I removed the Lower(), but it made no obvious difference, so I switched it back to the line given above.

Best regards

Rolf


_______________________________________________ fpc-devel maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to