This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RE: [RFC] pascal: also handle Free Pascal longjump function.
- From: "Pierre Muller" <pierre dot muller at ics-cnrs dot unistra dot fr>
- To: "'Tom Tromey'" <tromey at redhat dot com>
- Cc: <gdb-patches at sourceware dot org>
- Date: Tue, 17 Dec 2013 00:11:48 +0100
- Subject: RE: [RFC] pascal: also handle Free Pascal longjump function.
- Authentication-results: sourceware.org; auth=none
- References: <37888 dot 8297280811$1386971648 at news dot gmane dot org> <87mwk0pix6 dot fsf at fleche dot redhat dot com>
> -----Message d'origine-----
> De : gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] De la part de Tom Tromey
> Envoyé : lundi 16 décembre 2013 22:48
> À : Pierre Muller
> Cc : gdb-patches@sourceware.org
> Objet : Re: [RFC] pascal: also handle Free Pascal longjump function.
>
> >>>>> "Pierre" == Pierre Muller <pierre.muller@ics-cnrs.unistra.fr>
> writes:
>
> Pierre> - Where is this internal long jump breakpoint really used in
> the code?
>
> Search infrun.c for BPSTAT_WHAT_SET_LONGJMP_RESUME.
Thanks for the information.
> Pierre> - Is this kind of patch likely to be accepted?
>
> Sure.
OK, great!
> Pierre> I would perfectly understand that it would be not acceptable as
> is,
> Pierre> but maybe some language specific version of the
> Pierre> longjmp name would be useful, no?
>
> I don't think it makes sense to be language-dependent here, because
> then this makes mixed-language debugging harder.
>
> I do wonder whether gdb will really be able to understand this function.
> Does it make jmp_bufs compatible with the arch support already in gdb?
I checked the i386 case, which seems indeed quite bad:
1) the fpc_setjmp fpc_longjmp function seem to use the register call ABI...
So the jump buffer is passed in register eax.
By the way, did Jonas Maebe attempt to add i386 register call convention
to dwarf standard complete?
2) the jump buffer is much smaller than the cygwin case for instance...
The buffer only saves the registers that are preserved on function calls
according to that ABI, i.e. ebx, esi and edi, the stack registers esp and
ebp
and the return pc address.
This put the return address at offset 20 inside the jump buffer.
I suspect that it would at least require some init_abi function
to set this... But then the question is, how do we recognize
such executables...
> What about PC mangling?
I am not sure what you mean here...
There is no operation on pc value.
> What defines fpc_longjmp
It is defined in the Free Pascal RTL (Run Time Library)
which can be considered as a pascal base library.
It is used internally by the compiler to generate the long jumps.
> and why is it not just
> a simple wrapper for the C library longjmp?
Because, by default, Free Pascal compiler generates code that is
independent of any library (static code on Linux for instance)
with only direct calls to System Calls.
Pierre