Commit Graph

205 Commits

Author SHA1 Message Date
florian
570f3c4b39 * merges recent class helper fixes by Sven Barth
git-svn-id: trunk@17887 -
2011-06-30 18:54:46 +00:00
florian
d35d1ed357 + initial support for pascal booleans with sizes 2, 4 and 8
git-svn-id: branches/pasboolxx@17836 -
2011-06-26 15:02:37 +00:00
svenbarth
35b47e491c Rebase to revision 17306
git-svn-id: branches/svenbarth/classhelpers@17314 -
2011-04-13 10:04:14 +00:00
florian
4d19f6c532 * patch by Jeppe Johansen to be able to generate debug info if an rtl without variant support is used, resolves #18483
git-svn-id: trunk@17300 -
2011-04-10 21:11:03 +00:00
svenbarth
96116a6c3a Several adjustments because virtual methods in helpers are just normal methods and a VMT isn't generated for them either.
* $CPU/cgcpu.pas: disable the generation of VMT loading code
* dbgstabs.pas, dbgdwarf.pas: treat virtual methods of helpers as normal methods
* ncgcal.pas: don't register virtual helper methods for WPO 
* ncgrtti.pas: write virtual helper methods as normal methods to RTTI
* nobj.pas: correctly handle final and override cases in helpers
* pdecvar.pas: property getters
* rautils.pas: no VMT offset in records

git-svn-id: branches/svenbarth/classhelpers@17150 -
2011-03-20 10:41:45 +00:00
svenbarth
80e6498921 Rebase to revision 17096
git-svn-id: branches/svenbarth/classhelpers@17099 -
2011-03-09 16:29:47 +00:00
florian
26fbfaf5a7 + introduce the usage of asizeint/asizeuint for cpus with sizeof("alu")<>sizeof(pointer)
git-svn-id: trunk@17011 -
2011-02-26 20:10:03 +00:00
joost
1e92e576dd * Use TDebugInfoDwarf2.appenddef_object's DoAppend also for writing the
debuginfo for standard classes in the Dwarf-3 format. (No changes for -gw2
   debuginfo. -gw3 debuginfo is changed)

git-svn-id: trunk@16748 -
2011-01-11 10:28:35 +00:00
joost
d5de153e39 * Refactored TDebugInfoDwarf2.appenddef_object, no functional changes, to easy code-reuse for Dwarf3s appenddef_object
git-svn-id: trunk@16742 -
2011-01-09 12:56:36 +00:00
joost
a03c7cdc69 * Added two more Dwarf-4 constants
git-svn-id: trunk@16739 -
2011-01-08 16:56:36 +00:00
joost
faeb80b55c * Write Dwarf-debug info for class constants
git-svn-id: trunk@16736 -
2011-01-08 14:11:05 +00:00
joost
4bd0f6db7a * Dwarf: Hide the implicit pointer from a function-parameter which is passed
by reference, and dereference the (hidden) pointer in the DW_AT_location
   block. This solves problems with function parameters defined as 'var'

git-svn-id: trunk@16683 -
2011-01-02 14:49:20 +00:00
joost
a7cea8606f * Dwarf3: Classes are not encoded as a pointer to a class-structure, but
as a class-structure directly. Make sure that in this case:
     - The size is the size of the structure, not the size of a pointer
     - The (hidden) pointer is dereferenced
     - The class is marked as unallocated when the (hidden) pointer is nil

git-svn-id: trunk@16674 -
2010-12-31 17:45:58 +00:00
Jonas Maebe
2222f2c44b * renamed is_class_or_interface_or_dispinterface_or_objc() into
is_implicit_pointer_object_type() to better indicate the purpose of
    that routine, and to avoid having to change its name every time
    a new object type with this property is added

git-svn-id: trunk@16664 -
2010-12-30 15:19:54 +00:00
paul
915c412ae3 compiler: generate debug info for record methods:
- extended write_symtable_procdefs to handle record definitions
  - fix stabs info generator to use prefixed symbol names for record methods, also handle records static symbols the same way as for object types
  - fix dwarf info record generation: add visibility info and write methods, also prefix record members the same way as object members

git-svn-id: branches/paul/extended_records@16570 -
2010-12-16 06:12:05 +00:00
paul
17815ce7a2 compiler: implement properties in records:
- rename property_dec from pdecobj to struct_property_dec because pdecl also has property_dec and move it to interface to use by records + allow properties for records
  - use struct_property_dec in record parser
  - change structh type from objectdef to abstractrecorddef in read_property_dec to use by records
  - disallow stored and default modifiers for records because records are not used for streaming
  - fix misuse of search_sym_in_class for records in few places

git-svn-id: branches/paul/extended_records@16548 -
2010-12-11 08:42:26 +00:00
paul
56bf42de57 compiler: implement record methods and class methods:
- rename tprocdef._class to tprocdef.struct and change the type from tobjectdef to tabstractrecorddef because methods can belong not to classes only now but to records too
  - replace in many places use of current_objectdef to current_structdef with typcast where is needed
  - add an argument to comp_expr, expr, factor, sub_expr to notify that we are searching type only symbol to solve the problem with records,objects,classes which contains fields with the same name as previosly declared type (like:
  HWND = type Handle;
  rec = record 
    hWnd: HWND;
  end;)
  - disable check in factor_read_id which was made for object that only static fields can be accessed as TObjectType.FieldName outside the object because it makes SizeOf(TObjectType.FieldName) imposible and since the same method was extended to handle records it also breaks a52 package compilation
  - rename tcallcandidates.collect_overloads_in_class to tcallcandidates.collect_overloads_in_struct and addapt the code to handle overloads in records too
  - fix searchsym_type to search also in object ancestors if we found an object symtable
  - add pd_record, pd_notrecord flags to mark procedure modifies which can or can't be used with records. Disallow the next modifiers for records: abstract, dynamic, export, external, far, far16, final, forward, internconst, internproc, interrupt, message, near, override, public, reintroduce, virtual, weakexternal,
Allow the next modifiers for records: static

git-svn-id: branches/paul/extended_records@16526 -
2010-12-09 02:24:46 +00:00
florian
1c5a3b6bf0 o patch by Graeme Geldenhuys
+ adds the missing DWARF3 values
  + introduces the DWARF4 values
  + basic class and debug info structures for DWARF4 support
  + added DWARF4 compiler parameter (-gw4) support
  + updated parameter description

git-svn-id: trunk@16288 -
2010-11-01 20:41:56 +00:00
mazen
b127fc154a * Fixed spell error revealed by lintian.
git-svn-id: trunk@16094 -
2010-10-06 20:33:57 +00:00
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