Commit Graph

238 Commits

Author SHA1 Message Date
pierre
6d0c5b234b Avoid unsupported .uleb128 with diff of two sympbols for native solaris assembler
git-svn-id: trunk@32200 -
2015-10-30 13:38:03 +00:00
Jonas Maebe
91be1d0f2d * removed the DWARF label fields from tdef/tobjectdef, and dynamically
allocate them only while necessary
   o also unified the conditions under which we allocate a separate
     struct label

git-svn-id: trunk@32045 -
2015-10-13 15:59:03 +00:00
Jonas Maebe
add015f808 * ensure that the dwarf file table contains an entry if the current unit
contains any code, even if we cannot generate any debug info for that
    code (because the default file is file number 1, and if that table is
    empty some gdb versions crash)

git-svn-id: trunk@31335 -
2015-08-17 08:47:38 +00:00
Jonas Maebe
687bb15299 * renamed getdatalabel() to getglobaldatalabel
git-svn-id: branches/hlcgllvm@30336 -
2015-03-27 21:25:34 +00:00
Jonas Maebe
bd203a5b57 * synchronised with trunk till r30240
git-svn-id: branches/hlcgllvm@30241 -
2015-03-15 19:44:58 +00:00
Jonas Maebe
1e227f78fe * factored out the check for whether we have to generate dotted function
names, and disabled them for ppc64 ELFv2
  * disabling those also disables the function descriptors, so use the
    _CALL_ELF compiler variable to check whether there is in fact a
    function descriptor

git-svn-id: trunk@30196 -
2015-03-14 18:35:25 +00:00
Jonas Maebe
67b8aceaee * synchronized with privatetrunk till r30095
git-svn-id: branches/hlcgllvm@30101 -
2015-03-05 20:32:15 +00:00
pierre
3506767e8d Generate mimnimal DWARF debug information for non-multithreaded thread variables
git-svn-id: trunk@29150 -
2014-11-26 09:59:13 +00:00
joost
7c9d32b3ce * Dwarf: Write zero as line-nr for instructions with no real corresponding
line. This way a debugger will not show invalid line-information in this
   case.
 * Dwarf: Set IsStatement false for line-info for instructions that do not
   correspond to the start of a line/instruction.

git-svn-id: trunk@28824 -
2014-10-15 20:45:33 +00:00
joost
030885727e * Do not use sym.realname but sym.name in the mangledname for the Dwarf-3 debuginfo. This makes it possible to mix Dwarf-2 and Dwarf-3 debug info into one executable.
git-svn-id: trunk@28576 -
2014-09-01 16:55:10 +00:00
Jonas Maebe
b0ff41406a * grouped all tai_real* types into a single tai_realconst type,
to free up space for more ait_* types in taitype (can't have
    more than 32 because they have to fit in a small set)
   o factored out writing of floating point numbers as an array of
     byte in the external assemblers

git-svn-id: branches/hlcgllvm@28105 -
2014-07-01 16:29:58 +00:00
florian
4d5119bf1c * fixes several issues which cause warnings by the dfa code when using it to detect uninitialized variables
git-svn-id: trunk@26161 -
2013-12-01 17:02:08 +00:00
Jonas Maebe
5e0589f0a5 * fixed debug information for strings (index starts from 1, not from 0)
(mantis #25226)

git-svn-id: trunk@26140 -
2013-11-26 19:59:53 +00:00
nickysn
90a092e585 + added enum Tdwarf_addr with the values of DW_AT_address_class (to be used for
the i8086-msdos debug info)

git-svn-id: trunk@25871 -
2013-10-27 18:40:59 +00:00
Jonas Maebe
936bd3c902 * fixed definitions/uses of asmsymbols: always explicitly define local
symbols as local, don't use RefAsmSymbol for symbols that may still
    be defined/used as local symbols later

git-svn-id: trunk@25318 -
2013-08-21 09:49:07 +00:00
florian
38f3448e22 * applied patch by Cyrax to fix #24722, revertes partially r25054 which was wrong
git-svn-id: trunk@25282 -
2013-08-18 16:05:43 +00:00
florian
2cdb4adf39 + tai_const.Create_type_name and tai_const.Create_pint_unaligned
* some locations fixed, where dwarf generated assembler for aligned data accidently

git-svn-id: trunk@25054 -
2013-07-07 15:09:36 +00:00
pierre
d956808080 Fix bug introduced by myself for win32 dwarf info generation Bug #23365 and 23330
git-svn-id: trunk@23046 -
2012-11-22 13:49:21 +00:00
florian
65aa6fb379 * make check for registerhi more usefull
git-svn-id: trunk@22573 -
2012-10-07 18:47:13 +00:00
pierre
a1a171d7e8 Fix problems introduced by unaligned patch rev 22516 for 64bit systems
git-svn-id: trunk@22529 -
2012-10-03 21:11:21 +00:00
pierre
a34c1ff22d Use only unaligned constants in dwarf debug info as specified by standard
git-svn-id: trunk@22516 -
2012-10-02 14:00:03 +00:00
pierre
fcaff0489c * psub.pas : translate tregister for registerhi also
(avoids imaginary register number in "# Var I in register .." assembler comments.
  * dbgdwarf.pas : Support register variables as register pairs.
      Does not yet handle case of changing registers.
  * symsym.pas : add currentregloc field to tabstractnormalvarsym class,
     to be able to track changing registers used for a given variable.
  * aasmtai.pas : Update currentregloc field of tai_varloc.create sym parameter.
  * ncgutil.pas : Only generate a tai_varloc if the new registers are different for the variable.

git-svn-id: trunk@22508 -
2012-10-01 14:21:13 +00:00
Jonas Maebe
1f2578077c * small correction to previous commit: the offset of DW_OP_bregx is signed
(since it's a hardcoded 0, that doesn't matter here in practice though)

git-svn-id: trunk@22177 -
2012-08-22 18:42:35 +00:00
Jonas Maebe
c8986f34fb * fixed debug information for call-by-reference parameters whose address
is located in a register (mantis #22399)

git-svn-id: trunk@22176 -
2012-08-22 18:21:37 +00:00
Jonas Maebe
14cfe770a4 * replaced most (if not all) remaining fields/parameters in the compiler
that deal with paths/filenames with TPathStr (= ansistring) to prevent
    cutting off long paths (no change in speed when compiling the compiler,
    1% extra memory usage)

git-svn-id: trunk@21120 -
2012-04-29 17:36:23 +00:00
Jonas Maebe
aee5380ae0 * merged trunk up to r20882
o support for the new codepage-aware ansistrings in the jvm branch
   o empty ansistrings are now always represented by a nil pointer rather than
     by an empty string, because an empty string also has a code page which
     can confuse code (although this will make ansistrings harder to use
     in Java code)
   o more string helpers code shared between the general and jvm rtl
   o support for indexbyte/word in the jvm rtl (warning: first parameter
     is an open array rather than an untyped parameter there, so
     indexchar(pcharvar^,10,0) will be equivalent to
     indexchar[pcharvar^],10,0) there, which is different from what is
     intended; changing it to an untyped parameter wouldn't help though)
   o default() support is not yet complete
   o calling fpcres is currently broken due to limitations in
     sysutils.executeprocess() regarding handling unix quoting and
     the compiler using the same command lines for scripts and directly
     calling external programs
   o compiling the Java compiler currently requires adding ALLOW_WARNINGS=1
     to the make command line

git-svn-id: branches/jvmbackend@20887 -
2012-04-15 15:54:10 +00:00
joost
bbbc85bbf6 * Use DW_TAG_class_type for classes instead of DW_TAG_structure_type
git-svn-id: trunk@19481 -
2011-10-13 16:21:49 +00:00
joost
853f35757d * Use the same logic for Dwarf-3 and Dwarf-2 output regarding symbol names. Solves problems resolving self in gdb and Dwarf-3.
git-svn-id: trunk@19326 -
2011-10-02 16:08:56 +00:00
joost
cd0b2e5288 * Use DW_OP_deref instead of DW_OP_push_object_deref. The latter is not recognized properly by gdb
git-svn-id: trunk@19325 -
2011-10-02 08:41:57 +00:00
joost
ce01b15c49 * Generate proper Dwarf-debuginfo for DW_AT_vtable_elem_location, containing
a Dwarf-block that evaluates the location of a method within the vmt. 
   The vmtindex as it was used is is only used by older GCC versions and does
   not work with a Pascal VMT.

git-svn-id: trunk@19253 -
2011-09-27 15:48:52 +00:00
Jonas Maebe
67c2c7c166 * renamed cchartype to cansichartype
git-svn-id: branches/jvmbackend@18779 -
2011-08-20 08:35:24 +00:00
Jonas Maebe
28740dce2d - removed extra "fordefinition" parameter again from tprocdef.mangledname(),
since the definition-specific adorning of JVM mangled names is Jasmin-
    specific, and such code has no place in symdef
  * moved code to adorn JVM mangled names for Jasmin definitions to agjasmin

git-svn-id: branches/jvmbackend@18346 -
2011-08-20 07:49:31 +00:00
Jonas Maebe
0ee702b3a2 * tprocdef.mangledname now gets an extra boolean parameter indicating
whether the mangled name is for defining a symbol, or for referencing
    it later (e.g. for a call or load of its address). The reason is that
    on the JVM both cases are different.
  + jvmdef unit to encode types according to the JVM rules
  + tprocdef.jvmmangledname() to encode a procdef's JVM mangled name
    (the common part of defining/referencing it; tprocdef.mangledname
     afterwards adorns it as required)

git-svn-id: branches/jvmbackend@18288 -
2011-08-20 07:22:00 +00:00
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