Commit Graph

186 Commits

Author SHA1 Message Date
pierre
874e69bcf8 * revert wrong commits
git-svn-id: trunk@15762 -
2010-08-10 11:33:38 +00:00
pierre
d27278faac * Add external linker possibility for windows x86_64 compiler
git-svn-id: trunk@15761 -
2010-08-10 11:28:31 +00:00
Jonas Maebe
57bd6d2685 + merged nestedprocvars branch
+ support for nested procedural variables:
    o activate using {$modeswitch nestedprocvars} (compatible with all
      regular syntax modes, enabled by default for MacPas mode)
    o activating this mode switch changes the way the frame pointer is
      passed to nested routines into the same way that Delphi uses (always
      passed via the stack, and if necessary removed from the stack by
      the caller) -- Todo: possibly also allow using this parameter
      passing convention without enabling nested procvars, maybe even
      by default in Delphi mode, see mantis #9432
    o both global and nested routines can be passed to/assigned to a
      nested procvar (and called via them). Note that converting global
      *procvars* to nested procvars is intentionally not supported, so
      that this functionality can also be implemented via compile-time
      generated trampolines if necessary (e.g. for LLVM or CIL backends
      as long as they don't support the aforementioned parameter passing
      convention)
    o a nested procvar can both be declared using a Mac/ISO Pascal style
      "inline" type declaration as a parameter type, or as a stand-alone
      type (in the latter case, add "is nested" at the end in analogy to
      "of object" for method pointers -- note that using variables of
      such a type is dangerous, because if you call them once the enclosing
      stack frame no longer exists on the stack, the results are
      undefined; this is however allowed for Metaware Pascal compatibility)

git-svn-id: trunk@15694 -
2010-08-02 22:20:36 +00:00
Jonas Maebe
daef2efa69 - removed tstoreddef.reset() and overrides, and the associated
reset_used_unit_defs()/reset_all_defs() calls:
    o removed resetting tprocdef.procstarttai/procendtai and
      instead check in the debug writers whether the def is
      in the current unit or not to determine whether we should
      write debug info for it
    o use the collected defs in the wpoinfo structure to reset
      the wpo flags in the defs, instead of iterating over all
      defs in the program and resetting them that way
  - removed now unused "is_reset" flag from tmodule

git-svn-id: trunk@15501 -
2010-06-30 19:00:40 +00:00
Jonas Maebe
356026f849 * use new_section() instead of tai_section.create() everywhere
- sort of reverted r14134, which is no longer required after the above
    change (new_section() inserts the alignment itself)
  * made the tai_section.create() constructor private so it cannot be
    called directly anymore

git-svn-id: trunk@15482 -
2010-06-26 10:50:14 +00:00
Jonas Maebe
39adedb12a * fixed writing debug info for string constants that are exactly 255 chars
* fixed debug info for floating point constants whose size is <
    sizeof(bestreal)

git-svn-id: trunk@15411 -
2010-06-12 07:09:42 +00:00
Jonas Maebe
3019d3e560 * do not generate DW_AT_allocated info for dynarrays/ansi/unicodestrings
(it means that if the pointer is nil, the value is invalid; that's not the
     case here, it just means that they are empty)
  * generate upper bound of -1 (for dynarrays) or 0 (for ansi/unicodestrings)
    if they are not allocated, so gdb can calculate their length as 0
   (all based on tips by Jan Kratochvil)

git-svn-id: trunk@15288 -
2010-05-16 21:39:41 +00:00
pierre
11d6509a56 Attempt to fix missing stabs definitions problem
git-svn-id: trunk@15238 -
2010-05-06 22:53:26 +00:00
joost
95620e8774 * Do not write the DWARF abbrev sections direclty, but use a searchtree to
search for an existing section with the same content first. This reduces the
   generated executable size, compilation time and memory usage of the compiler

git-svn-id: trunk@15103 -
2010-04-01 09:13:27 +00:00
paul
1b614b526a compiler:
- add own symbol table for enumeration to store enumeration elements
  - reimplement enumeration member traverse using symbol table instead of firstenum/nextenum - that members are removed
  - implement TEnum.Element access syntax - element is searched in the enumeration symtable in this case instead of global/local symtables
  - implement {$SCOPEDENUM ON/OFF} local switch
  + tests

git-svn-id: trunk@15051 -
2010-03-25 05:46:53 +00:00
joost
520c5fe962 * Since Dwarf 3 the length of a DW_FORM_ref_addr is dependent on the used debug-format (32 or 64 bit), not on the target platform pointer size.
git-svn-id: trunk@15038 -
2010-03-23 12:11:19 +00:00
Jonas Maebe
025ec34e4d + "CExtended" type that is the same as "extended", but conforming to the
properties/behaviour of the equivalent of Extended in C (i.e., to
    "long double" on i386 and x86_64 platforms that support a 10 byte
    long double, and to "double" elsewhere)

git-svn-id: trunk@14912 -
2010-02-14 13:45:58 +00:00
florian
c1f3d8dcaa * unified names of system_*/systems_* sets
git-svn-id: trunk@14566 -
2010-01-07 18:16:20 +00:00
Jonas Maebe
80b651f79c * fixed (harmless) class cast error
git-svn-id: trunk@14546 -
2010-01-05 17:57:16 +00:00
Jonas Maebe
2515ad6c35 * don't write debug info for absolute varsyms referring to a field or array
element of a parameter that's passed by reference (indirections with
    offsets aren't supported yet) (mantis #15379)

git-svn-id: trunk@14451 -
2009-12-18 16:29:35 +00:00
Jonas Maebe
c0bdcf62e0 * don't call the "self" parameter of class methods 'this' in the debug info,
because the 'this' parameter was not used by gdb in that case for anything
    anyway, and as of gdb 7.0 you get an error in gdb because the 'this'
    parameter is not an aggregate in that case (but rather a pointer to the
    vmt) (mantis #15362)

git-svn-id: trunk@14446 -
2009-12-17 14:43:22 +00:00
Jonas Maebe
82b2a1d48f * fixed endless loop when generating debug info for empty string constants
after r14366

git-svn-id: trunk@14369 -
2009-12-08 19:13:07 +00:00
Jonas Maebe
a9c025cd6a * fixed 32 bit -> 64 bit cross compilation
git-svn-id: trunk@14366 -
2009-12-08 16:06:28 +00:00
Jonas Maebe
8f3b1e42c0 + -godwarfmethodclassprefix option to prefix method names in the DWARF debug
info with the classname, like is done for Stabs. Not done by default
    because otherwise once calling methods from the debugger is implemented,
    this would require typing classinstance.classname__methodname

git-svn-id: trunk@14337 -
2009-12-05 22:21:52 +00:00
Jonas Maebe
3a8f889179 * fixed printing formal constants with DWARF:
a) use DW_TAG_variable instead of DW_TAG_constant in combination with a
      DW_AT_constant_value, since that way gdb does support formal constants
   b) store constant strings as either a shortstring or a longstring rather
      than using DW_FORM_string, since gdb's Pascal printer doesn't support
      gdb's generic STRING type yet for output

git-svn-id: trunk@14336 -
2009-12-05 21:54:27 +00:00
Jonas Maebe
fa044d05e0 * fixed shortstring size information
git-svn-id: trunk@14335 -
2009-12-05 19:26:25 +00:00
Jonas Maebe
4838ebe73b * renamed mark_InlineStart/mark_InlineEnd to mark_NoLineinfoStart/
mark_NoLineinfoEnd
  * add "no line info" markers for try/except and try/finally internal cleanup
    code, so the debugger doesn't jump back and forth between the end and start
    of exception blocks when you arrive at the end
  * honour "no line info" markers in dbgdwarf.pas

git-svn-id: trunk@14327 -
2009-12-04 19:37:22 +00:00
Jonas Maebe
3bd7f55f92 * write debug info for Variant with the name "Variant" instead of TVARDATA
so they can be distinguished by debugger frontends

git-svn-id: trunk@14298 -
2009-12-03 14:34:47 +00:00
Jonas Maebe
559e284bd0 * merged r13762-14047 from trunk
git-svn-id: branches/objc@14048 -
2009-11-04 15:50:26 +00:00
Jonas Maebe
2723c55403 * fixed DWARF info for some methods after r13833: reset the debuginfo for
procdefs after writing it, so that it can be written multiple times in
    different units. It was only written once now, namely the first time it
    was used. If this occurred before the implementation had been parsed, then
    no info about low/high pc was written for this procdef.
  * checking whether procstarttai is assigned is not a good way to determine
    whether or not a procdef is defined in the current unit (it can also be
    set if we are in the middle of parsing a uses clause, since all procdefs
    are only reset afterwards). Check whether the parent static/globalsymtable
    "iscurrentunit" instead.

git-svn-id: trunk@13912 -
2009-10-19 20:03:37 +00:00
Jonas Maebe
dce9b3849b * fixed mantis #14729:
o add accessibility info for fields and methods (public/protected/private)
    o write method type info for methods not implemented in the current module
      (for tf_dwarf_only_local_labels systems)

git-svn-id: trunk@13833 -
2009-10-10 10:53:18 +00:00
Jonas Maebe
341708b95d * write all parameters using the order of procdef.paras, eliminates the
special treatment required to put self as the first parameter in the
    debug info
  + added Apple-specific Objective-C related DWARF attributes
  * properly emit debug information for Objective-C classes and methods
  * fixed some typos in comments
  * properly mark "absolute" local variables mapped to parameters as
    variables in the debug info rather than as parameters (gdb expects one
    parameter to be passed when calling functions from inside gdb per
    parameter mentioned in the debug info, even if multiple parameters
    have the same stack address) 

git-svn-id: branches/objc@13723 -
2009-09-16 18:46:15 +00:00
Jonas Maebe
ed9656d1e6 Merged revisions 13627-13631,13637-13638,13640,13642-13648,13650-13653,13656-13658,13660,13664-13667,13672-13675,13680,13682,13687 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk

git-svn-id: branches/objc@13697 -
2009-09-12 12:42:38 +00:00
joost
2f7875fb12 * Place stride in subrange-entry of array
git-svn-id: trunk@13680 -
2009-09-08 17:00:55 +00:00
Jonas Maebe
a149674a75 Merged revisions 13458-13596 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk

git-svn-id: branches/objc@13598 -
2009-08-25 19:47:36 +00:00
Jonas Maebe
f2691c4ebf * fixed indentation
git-svn-id: trunk@13575 -
2009-08-22 20:13:57 +00:00
Jonas Maebe
335e159c11 Merged revisions 13351-13373,13376-13457 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk

git-svn-id: branches/objc@13458 -
2009-07-26 14:31:50 +00:00
Jonas Maebe
8103a3b39c * always generate a DW_TAG_typedef entry when usng a type (not only for
Darwin anymore), because otherwise if unit A is compiled without debug
    info and unit B uses one of its types, the debug info will contain no
    DW_TAG_typedef for that type and hence gdb will not recognise it as
    a type definition that's part of the program.

git-svn-id: trunk@13424 -
2009-07-22 19:44:29 +00:00
Jonas Maebe
5a2ccfff52 --WARNING: start build process with FPC 2.2.4; won't work when
starting with a previous 2.3.1 or compiler built from the objc branch
  + added basic objcprotocol support (only for external protocols
    currently)
     o use in type declaration: "type xp = objcprotocol ... end;"
     o when defining a root class that implements it:
       "type yc = objcclass(xp) ... end" (note: no support yet
       for something like "objcclass(id,xp)" or so)
     o when defining a non-root class that implements a protocol:
       "type zc = objcclass(nsobject,xp) ... end"
     o includes support for "required" and "optional" sections
     o no support yet for the objcprotocol(<protocol>) expression
       that enables getting a class instance representing the
       protocol (e.g., for use with "conformsToProtocol:")
     o message names have to specified in protocol declarations,
       but if an objcclass implements a protocol, the message names do
       not have to be repeated (but if they are, they have to match;
       the same goes when overriding inherited methods)
  + allow specifying the external name of Objective-C classes and
    protocols, since classes and protocols can have the same name
    (and you cannot use the same Pascal identifier in such caseq)
  + added NSObject protocol, and make the NSObject class use it
  + added missing NSObject class methods that have the same name
    as instance methods (added "class" name prefix to avoid clashes)
  * fixed several cases where the compiler did not treat Objective-C
    classes/protocols the same as Object Pascal classes/interfaces
    (a.o., forward declarations, alignment, regvars, several type
     conversions, ...)
  * allow "override" directive in objcclass declarations, and print
    a hint if it's forgotten in an external declaration (because it
    doesn't really matter there, and may make automated header
    conversion harder than necessary) and an error if will be used in
    a non-external declaration (because it is not possible to start
    a new vmt entry-tree in Objective-C, you can only override parent
    methods)
  * reject objcclasses/protocols as parameters to typeof()
  * don't try to test VMT validity of objcclasses/protocols

git-svn-id: branches/objc@13375 -
2009-07-09 20:48:28 +00:00
Jonas Maebe
92de010fe1 Merged revisions 13218-13347 via svnmerge from
svn+ssh://jonas@svn.freepascal.org/FPC/svn/fpc/trunk

git-svn-id: branches/objc@13350 -
2009-06-28 16:09:53 +00:00
Jonas Maebe
80864ebf31 * made TDebugInfoDwarf3 inherit from TDebugInfoDwarf2 instead of from
TDebugInfoDwarf, so DWARFv2 and DWARFv3 generators can share protected
    methods.
  * fixed the debug info for sets whose language-level lower bound is not
    equal to the actual set base used when storing the data (e.g., a "set
    of 1..5" is actually stored as a "set of 0..7" or "set of 0..31")
    (mantis #13984)
  + interactive test for the above

git-svn-id: trunk@13302 -
2009-06-20 10:45:04 +00:00
joost
75eaa2cddf * Renamed DW_AT_stride to DW_AT_byte_stride, DWARF-3 compatible
* Use DW_AT_byte_stride when possible, because gdb does not support DW_AT_stride_size
 * Add stride to dynamic-array definitions

git-svn-id: trunk@13280 -
2009-06-15 14:47:28 +00:00
Jonas Maebe
b1b9894ae3 * initial Objective-C 1.0 support:
o support for declaring external Objective-C classes (see
      rtl/inc/objcbase.pas), including derived classes
    o support for converting methods of objcclasses into selectors
      (see tests/test/tobjc1.pp)
    o support for loading from/storing to fields of objcclasses
    o support for calling Objective-C methods using regular
      Object Pascal syntax (see tests/test/tobjc1.pp)
    o some things that are known to be not yet working:
      o automatic conversion from ID to objcclasses and back
      o declaring and implementing new objcclasses/methods in Pascal code
      o debug information (objcclasses are currently plain pointers
        as far as the debugger knows)

git-svn-id: branches/objc@13162 -
2009-05-17 13:42:50 +00:00
Jonas Maebe
74042f791d * completed making debugstart/end labels local for darwin as started
in r13111

git-svn-id: trunk@13112 -
2009-05-07 18:12:30 +00:00
Jonas Maebe
9a8ac8cecc * make the dwarf debugstart/end labels local for Darwin, because the darwin
linker does not like two global labels both pointing at the end of a
    section (causes "atom sorting error" warnings), and this happened for
    units without any code after r13098

git-svn-id: trunk@13111 -
2009-05-07 16:42:46 +00:00
yury
16e19aaef3 * Some cleanup.
git-svn-id: trunk@13099 -
2009-05-04 18:45:08 +00:00
yury
9c9462cd5a * Insert DW_AT_low_pc and DW_AT_high_pc attributes for modules on Windows also. It solves debugging problems on Windows with dwarf debug info.
git-svn-id: trunk@13098 -
2009-05-04 18:36:08 +00:00
Jonas Maebe
b2607e0d83 * refactored append_entry(), so that the code to append a single
attribute is available via the new append_attribute() method
    (to enable easily adding extra attributes)
  * write the definitions of methods as child entries of the
    objectdef, instead of in the global scope
  * only write DW_AT_calling_convention and DW_AT_external attributes
    if their value is different from the DWARF default one
  + write DW_AT_virtuality and DW_AT_vtable_elem_location attributes
    for virtual methods
  * write the debug info for the hidden "self" parameter before all
    other parameters and mark it as "artificial", because that is
    how GDB distinguishes regular methods from static methods

git-svn-id: trunk@13003 -
2009-04-05 16:12:10 +00:00
Jonas Maebe
b45482e979 + provisional DW_CC_GNU_borland_fastcall_i386 constant to identify
Borland's i386 calling convention (its value may still change)
* specify the calling convention of each procedure in the DWARF info
* don't add the function result twice or even thrice to the debug
  info, and don't add it at all to the parameter lists (even if it's
  a hidden parameter, gdb will automatically add it according to the
  ABI rules when calling the function)
-> calling "register" functions/procedures works with my experimental
   gdb patch (methods not yet tested, and probably won't work yet)

git-svn-id: trunk@12995 -
2009-04-02 22:21:27 +00:00
Jonas Maebe
e9dedb7377 * disabled generation of DW_AT_low_pc/DW_AT_high_pc compilation unit
information for Win32, as it doesn't work there due to the way we
    name sections on that platform
   (http://lists.freepascal.org/lists/fpc-devel/2009-March/016591.html)

git-svn-id: trunk@12918 -
2009-03-19 10:02:09 +00:00
Jonas Maebe
173ca78a68 * removed superfluous "end of debug info" marker (zero-byte), about
which objdump complained

git-svn-id: trunk@12910 -
2009-03-17 18:42:00 +00:00
Jonas Maebe
f54089a5e2 * encode the offset of absolute global variables in the symbol instead
of in the DWARF, as it's more efficient and avoids a gdb bug which
    occurs on some platforms (thanks to Jan Kratochvil for the tip,
    http://sourceware.org/ml/gdb/2009-03/msg00094.html )

git-svn-id: trunk@12905 -
2009-03-16 21:14:54 +00:00
Jonas Maebe
2b69768afc + support for properties in DWARF2 where the accessor does not use a function
git-svn-id: trunk@12883 -
2009-03-14 11:12:46 +00:00
Jonas Maebe
4f51aef122 + Support for debug info for absolute variables when using dwarf2.
Needs a fix in gdb when referencing a location relative to a
    global variable (an array element other than the first, a field
    other than the first) on Mac OS X and when using external debug
    info on Linux/Windows.

git-svn-id: trunk@12877 -
2009-03-13 21:16:06 +00:00
Jonas Maebe
31756489a2 * now range check error also fixed for 64 bit targets
git-svn-id: trunk@12712 -
2009-02-07 23:03:29 +00:00