Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Pierre Muller <muller@cerbere.u-strasbg.fr>
To: adam.oldham@marconi.com
Cc: gdb@sources.redhat.com, core@freepascal.org, gpc@gnu.de
Subject: GDB scope does not work quite right for Pascal
Date: Fri, 12 Oct 2001 08:29:00 -0000	[thread overview]
Message-ID: <4.2.0.58.20011012170241.01770100@ics.u-strasbg.fr> (raw)
Message-ID: <20011012082900.VdThuPuvVu_iqXmEu86lTv7vTYvSHI_Ll7wtg5_HNWY@z> (raw)
In-Reply-To: <20011012124403.21432.qmail@sourceware.cygnus.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3015 bytes --]

At 14:44 12/10/01 , vous avez écrit:

> >Number:         222
> >Category:       gdb
> >Synopsis:       GDB scope does not work quite right for Pascal
> >Confidential:   no
> >Severity:       non-critical
> >Priority:       medium
> >Responsible:    unassigned
> >State:          open
> >Class:          sw-bug
> >Submitter-Id:   net
> >Arrival-Date:   Fri Oct 12 05:48:01 PDT 2001
> >Closed-Date:
> >Last-Modified:
> >Originator:     Adam Oldham
> >Release:        gdb 20010813
> >Organization:
> >Environment:
>Mandrake 8.1, Kernel 2.4.8, glibc 2.2, Intel Platform
> >Description:
>Source is compiled with FPC (Free Pascal Compiler).  This can happen with 
>any source of pascal.  When you declare nested functions, gdb's scope does 
>not allow the viewing of the variables that are from the parent function 
>that should be within the scope.
> >How-To-Repeat:
>The simple program attached will produce the problem.  When compiled and 
>run, the correct output is displayed, but if you run GDB on it, and break 
>on function test2 and print out int1 which is a global variable for the 
>function test1, you receive:
>"No symbol "INT1" in current context."

   There are several remarks to that bug report:
   1) I don't know at all how nested functions work in C
Are they allowed? Do they also use a paremt fram pushing method ?
If yes, can locals from the calling function be found in C?
Maybe someone from the gdb mailing list can answer that question.
If this is already implemented for C its probably easier to just take
the same method.

   2) There is a solution, I implemented it in the IDE for Free Pascal
but it is rather complicated.
   Let me try to explain this solution to everyone.
   Nested functions in pascal get a hidden parameter that contains the
frame pointer (ebp value for i386 cpu) of the calling function. This allows the
program to access correctly local variable of the function that called the 
nested
function. This value is searched in the backtrace at the location where
the frame pointer are usually saved ( i.e. at offset 0 of the local ebp 
value for i386)
If we find the corresponding frame (which is not always the first frame 
above the current one)
then we can try if we find the unfound local symbol in that frame).

    To ease this search, I inserted a pseudo-parameter to the function called
parent_ebp (in lower case, while normal Free Pascal symbols are uppercased)
that indicate the location of this parnt frame pointer.

3)  As maintainer of the pascal language specific part of GDB,
I am of course willing to introduce this into the gdb sources, but I would
really like to get first some feedback from the gpc list.
    Does gpc do anything about this calling frame hidden parameter ?
Could we agree to use the same method for both compiler
in order to get better support for Pascal ?



Pierre Muller
Institut Charles Sadron
6,rue Boussingault
F 67083 STRASBOURG CEDEX (France)
mailto:muller@ics.u-strasbg.fr
Phone : (33)-3-88-41-40-07  Fax : (33)-3-88-41-40-99


       reply	other threads:[~2001-10-12  8:29 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20011012124403.21432.qmail@sourceware.cygnus.com>
2002-02-01  4:29 ` levi [this message]
2001-10-12  8:29   ` Pierre Muller
2001-10-12  9:58   ` Maurice Lombardi
2002-02-01  4:29     ` levi
2002-02-01  4:29     ` levi
2001-10-12 10:16       ` Daniel Jacobowitz
2002-02-01  4:29       ` levi
2001-10-12 10:40         ` Andrew Cagney
     [not found] <A3E34B558F5CD211B4980008C7A4A99003883EC6@sparrow.gso.mcs.m arconi.com>
2002-02-01  4:29 ` levi
2001-10-12 16:38   ` Pierre Muller
2001-10-12 11:21 Oldham, Adam
2002-02-01  4:29 ` levi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4.2.0.58.20011012170241.01770100@ics.u-strasbg.fr \
    --to=muller@cerbere.u-strasbg.fr \
    --cc=adam.oldham@marconi.com \
    --cc=core@freepascal.org \
    --cc=gdb@sources.redhat.com \
    --cc=gpc@gnu.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox