Commit Graph

168 Commits

Author SHA1 Message Date
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
Jonas Maebe
1c82b105fa * fixed (harmless) range check error
git-svn-id: trunk@12701 -
2009-02-07 20:43:18 +00:00
Jonas Maebe
2cd1acc77d * element type of ansistrings is cchartype, not u8inttype
git-svn-id: trunk@12446 -
2008-12-27 22:43:45 +00:00
Jonas Maebe
03a7d089b9 + append_block1() to add extra block DW_FORM_block1 attributes to
a dwarf entry
  - (dwarf3) removed stride size from dynamic array entries because
    it's not required there (the stride always equals the element size)
  + (dwarf3) added "allocated" attribute for dynamic arrays 
  + (dwarf3) added generic implementation of string support for dwarf3,
    which no longer depends on the hacked fake record type in gdb's
    Pascal support. Includes support for all string types, except for
    winlike widestrings (because I don't know how to extract the
    length from them)

git-svn-id: trunk@12444 -
2008-12-27 21:43:45 +00:00
Jonas Maebe
a3732f5cfc * changed debuginfo for dynamic arrays in stabs and dwarf2 into a pointer to
the array type, rather than an array type (since they are pointers)
  + fully implemented debug info for dynamic arrays using dwarf3 (as supported
    by the gdb "archer" project with the archer-jankratochvil-vla branch)
    (mantis #12789)

git-svn-id: trunk@12436 -
2008-12-24 19:59:44 +00:00
Jonas Maebe
513b89f961 * fixed commented out dwarf-3 dyn array debug information location
(works with archer/origin/archer-jankratochvil-vla gdb branch,
     see http://people.redhat.com/jkratoch/vla/MOVED)

git-svn-id: trunk@12424 -
2008-12-23 16:52:31 +00:00
peter
a3a66ba74d * split tvisibility from tsymoptions
* replace current_object_option with symtable.currentvisibility

git-svn-id: trunk@12048 -
2008-11-11 09:05:39 +00:00
Jonas Maebe
c0ccf21c28 * fixed range check error when writing const pointers > high(longint)
git-svn-id: trunk@11879 -
2008-10-11 13:39:27 +00:00
yury
2cf240b9af * Suppressed "Values in enumeration types have to be ascending" note.
git-svn-id: trunk@11454 -
2008-07-23 12:55:31 +00:00
yury
491f0fa1d8 * Replaced all user defined warnings by TODO comments to reduce compiler noise.
git-svn-id: trunk@11443 -
2008-07-23 11:00:03 +00:00
Jonas Maebe
c00108009d * insert vmt as hidden field in objectdefs
* don't output hidden fields in the debug info

git-svn-id: trunk@11334 -
2008-07-06 09:41:56 +00:00
Jonas Maebe
42a4684f60 * use global label to refer enum subrange type for setdefs
on systems without tf_dwarf_only_local_labels to avoid
    potential problems when using the set type in a separate
    unit

git-svn-id: trunk@10619 -
2008-04-09 08:03:55 +00:00
Jonas Maebe
07b3e11e2b * fixed "set of enumeration" for gdb 6.7/6.8
git-svn-id: trunk@10603 -
2008-04-05 17:05:34 +00:00
Jonas Maebe
cd28ce9dfc * only write set elementdef information if there is an elementdef
(can be absent for empty sets)

git-svn-id: trunk@10600 -
2008-04-03 19:31:09 +00:00
Jonas Maebe
55bd5cedb4 - removed unused writing_def_dwarf field
git-svn-id: trunk@10585 -
2008-03-29 16:37:41 +00:00
Jonas Maebe
3d97db7976 + support for subrange types in dwarf (allows proper printing of packed
sets of subrange types)

git-svn-id: trunk@10532 -
2008-03-22 11:49:05 +00:00
Jonas Maebe
f36e5411af * split cpu64bit compiler define into
a) cpu64bitaddr, which means that we are generating a compiler which
       will generate code for targets with a 64 bit address space/abi
    b) cpu64bitalu, which means that we are generating a compiler which
       will generate code for a cpu with support for 64 bit integer
       operations (possibly running in a 32 bit address space, depending
       on the cpu64bitaddr define)
   All cpus which had cpu64bit set now have both the above defines set,
   and none of the 32 bit cpus have cpu64bitalu set (and none will
   compile with it currently)
  + pint and puint types, similar to aint/aword (not pword because that
    that conflicts with pword=^word)
  * several changes from aint/aword to pint/pword
  * some changes of tcgsize2size[OS_INT] to sizeof(pint)

git-svn-id: trunk@10320 -
2008-02-13 20:44:00 +00:00
peter
13f6396221 * generalize def and symbol handling
* stabs uses ansistring instead of pchars
  * write procdef in separate loop. this fixes debugging of nested/overloaded procs

git-svn-id: trunk@10189 -
2008-02-03 17:52:30 +00:00
Jonas Maebe
8349cde7db * changed byte/word/longbool to be Delphi-compatible (+ similar changes
for qwordbool) + test:
    o assigning true to such a variable now sets them to $ff/$ffff/$ffffffff
    o these types are now all signed
    o converting an integer type to a byte/word/long/qwordbool using an
      explicit type cast keeps the integer's original value stored in the
      bool, instead of forcing it to ord(true)/ord(false)
    (mantis #10233 and #10613, implemented for all architectures, testsuite
     tested for ppc32, sparc and x86)
  * fixed some places where the rtl depended on longbool(true) having the
    value 1
  * extended several boolean tests (and adapted some to no longer assume
    that byte/word/long/qwordbool(true)=1)
  + support for converting to qwordbool in second_int_to_bool for x86, ppc
    and sparc

git-svn-id: trunk@9898 -
2008-01-24 21:30:55 +00:00