소스 검색

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 -

florian 14 년 전
부모
커밋
1c5a3b6bf0
6개의 변경된 파일141개의 추가작업 그리고 75개의 파일을 삭제
  1. 69 6
      compiler/dbgdwarf.pas
  2. 1 0
      compiler/msg/errore.msg
  3. 1 1
      compiler/msgidx.inc
  4. 67 66
      compiler/msgtxt.inc
  5. 2 1
      compiler/options.pas
  6. 1 1
      compiler/systems.pas

+ 69 - 6
compiler/dbgdwarf.pas

@@ -79,6 +79,14 @@ interface
         DW_TAG_namespace := $39,DW_TAG_imported_module := $3a,
         DW_TAG_unspecified_type := $3b,DW_TAG_partial_unit := $3c,
         DW_TAG_imported_unit := $3d,
+        DW_TAG_condition := $3f,
+        DW_TAG_shared_type := $40,
+
+        { DWARF 4 }
+        DW_TAG_type_unit := $41,
+        DW_TAG_rvalue_reference_type := $42,
+        DW_TAG_template_alias := $43,
+
 
         { SGI/MIPS Extensions.   }
         DW_TAG_MIPS_loop := $4081,
@@ -99,7 +107,8 @@ interface
 
         { PGI (STMicroelectronics) extensions.  No documentation available.   }
         DW_TAG_PGI_kanji_type := $A000,
-        DW_TAG_PGI_interface_block := $A020);
+        DW_TAG_PGI_interface_block := $A020
+      );
 
 {$notes off}
       { Attribute names and codes.   }
@@ -142,6 +151,30 @@ interface
         DW_AT_extension := $54,DW_AT_ranges := $55,
         DW_AT_trampoline := $56,DW_AT_call_column := $57,
         DW_AT_call_file := $58,DW_AT_call_line := $59,
+        DW_AT_description := $5a,     { string }
+        DW_AT_binary_scale := $5b,    { constant }
+        DW_AT_decimal_scale := $5c,   { constant }
+        DW_AT_small := $5d,           { reference }
+        DW_AT_decimal_sign := $5e,    { constant }
+        DW_AT_digit_count := $5f,     { constant }
+        DW_AT_picture_string := $60,  { string }
+        DW_AT_mutable := $61,         { flag }
+        DW_AT_threads_scaled := $62,  { flag }
+        DW_AT_explicit := $63,        { flag }
+        DW_AT_object_pointer := $64,  { reference }
+        DW_AT_endianity := $65,       { constant }
+        DW_AT_elemental := $66,       { flag }
+        DW_AT_pure := $67,            { flag }
+        DW_AT_recursive := $68,       { flag }
+
+        { DWARF 4 values }
+        DW_AT_signature := $69,       { reference }
+        DW_AT_main_subprogram := $6a, { flag }
+        DW_AT_data_bit_offset := $6b, { constant }
+        DW_AT_const_expr := $6c,      { flag }
+        DW_AT_enum_class := $6d,      { flag }
+        DW_AT_linkage_name := $6e,    { string }
+
 
         { SGI/MIPS extensions.   }
         DW_AT_MIPS_fde := $2001,DW_AT_MIPS_loop_begin := $2002,
@@ -179,10 +212,10 @@ interface
         DW_AT_PGI_soffset := $3a01,DW_AT_PGI_lstride := $3a02,
 
         { Apple extensions }
-        DW_AT_APPLE_optimized = $3fe1,
-        DW_AT_APPLE_flags = $3fe2,
-        DW_AT_APPLE_major_runtime_vers = $3fe5,
-        DW_AT_APPLE_runtime_class = $3fe6
+        DW_AT_APPLE_optimized := $3fe1,
+        DW_AT_APPLE_flags := $3fe2,
+        DW_AT_APPLE_major_runtime_vers := $3fe5,
+        DW_AT_APPLE_runtime_class := $3fe6
       );
 {$notes on}
 
@@ -197,7 +230,14 @@ interface
         DW_FORM_ref_addr := $10,DW_FORM_ref1 := $11,
         DW_FORM_ref2 := $12,DW_FORM_ref4 := $13,
         DW_FORM_ref8 := $14,DW_FORM_ref_udata := $15,
-        DW_FORM_indirect := $16);
+        DW_FORM_indirect := $16,
+
+        { DWARF 4 }
+        DW_FORM_sec_offset := $17,   { lineptr, loclistptr, macptr, rangelistptr }
+        DW_FORM_exprloc := $18,      { exprloc }
+        DW_FORM_flag_present := $19, { flag }
+        DW_FORM_ref_sig8 := $20      { reference }
+        );
 
       TDwarfFile = record
         Index: integer;
@@ -378,6 +418,13 @@ interface
         function  dwarf_version: Word; override;
       end;
 
+
+      TDebugInfoDwarf4 = class(TDebugInfoDwarf3)
+      public
+        function  dwarf_version: Word; override;
+      end;
+
+
 implementation
 
     uses
@@ -3955,6 +4002,13 @@ implementation
       end;
 
 
+    { TDebugInfoDwarf4 }
+
+    function TDebugInfoDwarf4.dwarf_version: Word;
+    begin
+      Result:=4;
+    end;
+
 
 {****************************************************************************
 ****************************************************************************}
@@ -3971,7 +4025,16 @@ implementation
            idtxt  : 'DWARF3';
          );
 
+      dbg_dwarf4_info : tdbginfo =
+         (
+           id     : dbg_dwarf4;
+           idtxt  : 'DWARF4';
+         );
+
+
 initialization
   RegisterDebugInfo(dbg_dwarf2_info,TDebugInfoDwarf2);
   RegisterDebugInfo(dbg_dwarf3_info,TDebugInfoDwarf3);
+  RegisterDebugInfo(dbg_dwarf4_info,TDebugInfoDwarf4);
+
 end.

+ 1 - 0
compiler/msg/errore.msg

@@ -3094,6 +3094,7 @@ S*2Aas_Assemble using GNU AS
 *g2gw_Generate DWARFv2 debug information (same as -gw2)
 *g2gw2_Generate DWARFv2 debug information
 *g2gw3_Generate DWARFv3 debug information
+*g2gw4_Generate DWARFv4 debug information (experimental)
 **1i_Information
 **2iD_Return compiler date
 **2iV_Return short compiler version

+ 1 - 1
compiler/msgidx.inc

@@ -870,7 +870,7 @@ const
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 57751;
+  MsgTxtSize = 57808;
 
   MsgIdxMax : array[1..20] of longint=(
     24,88,297,97,82,54,111,22,202,63,

+ 67 - 66
compiler/msgtxt.inc

@@ -1168,99 +1168,100 @@ const msgtxt : array[0..000240,1..240] of char=(
   '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
   '*g2gw2_Generate DWARFv2 debug information'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
+  '*g2gw4_Generate DWARFv4 debug information (','experimental)'#010+
   '**1i_Information'#010+
-  '**2iD_Return compiler date',#010+
+  '**2iD_Return compiler date'#010+
   '**2iV_Return short compiler version'#010+
   '**2iW_Return full compiler version'#010+
   '**2iSO_Return compiler OS'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iTO_Return target OS'#010+
-  '**2iTP_Return target processor'#010+
+  '**2iTP_Return target pr','ocessor'#010+
   '**1I<x>_Add <x> to include path'#010+
-  '**1k<x>_Pass <x> ','to the linker'#010+
+  '**1k<x>_Pass <x> to the linker'#010+
   '**1l_Write logo'#010+
   '**1M<x>_Set language mode to <x>'#010+
   '**2Mfpc_Free Pascal dialect (default)'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
-  '**2Mdelphi_Delphi 7 compatibility mode'#010+
+  '**2Mdelphi_Delphi 7 compatibility m','ode'#010+
   '**2Mtp_TP/BP 7.0 compatibility mode'#010+
-  '**2Mmacpas_Macint','osh Pascal dialects compatibility mode'#010+
+  '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
   '**1n_Do not read the default config files'#010+
   '**1N<x>_Node tree optimizations'#010+
   '**2Nu_Unroll loops'#010+
-  '**1o<x>_Change the name of the executable produced to <x>'#010+
+  '**1o<x>_Change the name of the executable produced ','to <x>'#010+
   '**1O<x>_Optimizations:'#010+
-  '**2O-_Disable optimizations',#010+
+  '**2O-_Disable optimizations'#010+
   '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
   '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
-  '**2Oa<x>=<y>_Set alignment'#010+
-  '**2Oo[NO]<x>_Enable or disable optimization','s, see fpc -i for possibl'+
-  'e values'#010+
+  '**2Oa<x>=<y>_','Set alignment'#010+
+  '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+
+  'values'#010+
   '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+
   #010+
   '**2OW<x>_Generate whole-program optimization feedback for optimization'+
-  ' <x>, see fpc -i for possible values'#010+
-  '**2Ow<x>_Perform whole-progr','am optimization <x>, see fpc -i for poss'+
-  'ible values'#010+
+  ' <x>, se','e fpc -i for possible values'#010+
+  '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+
+  'le values'#010+
   '**2Os_Optimize for size rather than speed'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
-  '**1R<x>_Assembler reading style:'#010+
+  '**1R<x>_Assembler reading sty','le:'#010+
   '**2Rdefault_Use default assembler for target'#010+
-  '3*2Ratt_','Read AT&T style assembler'#010+
+  '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
   '6*2RMOT_Read motorola style assembler'#010+
   '**1S<x>_Syntax options:'#010+
   '**2S2_Same as -Mobjfpc'#010+
-  '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
+  '**2Sc_Support operators like C (*=,','+=,/= and -=)'#010+
   '**2Sa_Turn on assertions'#010+
-  '**2Sd_Same as -Mde','lphi'#010+
+  '**2Sd_Same as -Mdelphi'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
   '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
   '**3*_w : Compiler also halts after warnings'#010+
-  '**3*_n : Compiler also halts after notes'#010+
-  '**3*_h : Compiler also ha','lts after hints'#010+
+  '**3*_n : ','Compiler also halts after notes'#010+
+  '**3*_h : Compiler also halts after hints'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
   '**2Sh_Use ansistrings by default instead of shortstrings'#010+
-  '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
+  '**2Si_Turn on inlining of procedures/functions decl','ared as "inline"'#010+
   '**2Sk_Load fpcylix unit'#010+
-  '**2SI<x>_Set int','erface style to <x>'#010+
+  '**2SI<x>_Set interface style to <x>'#010+
   '**3SIcom_COM compatible interface (default)'#010+
   '**3SIcorba_CORBA compatible interface'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2So_Same as -Mtp'#010+
-  '**2Ss_Constructor name must be init (destructor must be done)'#010+
-  '**2Sx_Enable excepti','on keywords (default in Delphi/ObjFPC modes)'#010+
+  '**2Ss_Constructor name mu','st be init (destructor must be done)'#010+
+  '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
   '**1s_Do not call assembler and linker'#010+
   '**2sh_Generate script to link on host'#010+
   '**2st_Generate script to link on target'#010+
-  '**2sr_Skip register allocation phase (use with -alr)'#010+
-  '**1T<x>_Target operating s','ystem:'#010+
+  '**2sr_Skip register al','location phase (use with -alr)'#010+
+  '**1T<x>_Target operating system:'#010+
   '3*2Tdarwin_Darwin/Mac OS X'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tfreebsd_FreeBSD'#010+
   '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
-  '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
-  'rwin)'#010+
-  '3*2Tlinux_Li','nux'#010+
+  '3*2Tiphonesim_ iPhoneSimulator ','from iOS SDK 3.2+ (older versions: -T'+
+  'darwin)'#010+
+  '3*2Tlinux_Linux'#010+
   '3*2Tnetbsd_NetBSD'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
   '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tsunos_SunOS/Solaris'#010+
-  '3*2Tsymbian_Symbian OS'#010+
+  '3*2Tsym','bian_Symbian OS'#010+
   '3*2Tsolaris_Solaris'#010+
-  '3*2Twatcom_Watcom com','patible DOS extender'#010+
+  '3*2Twatcom_Watcom compatible DOS extender'#010+
   '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twin32_Windows 32 Bit'#010+
   '3*2Twince_Windows CE'#010+
   '4*2Tdarwin_Darwin/Mac OS X'#010+
   '4*2Tlinux_Linux'#010+
   '4*2Twin64_Win64 (64 bit Windows systems)'#010+
-  '6*2Tamiga_Commodore Amiga'#010+
+  '6*2','Tamiga_Commodore Amiga'#010+
   '6*2Tatari_Atari ST/STe/TT'#010+
-  '6*2Tlinu','x_Linux'#010+
+  '6*2Tlinux_Linux'#010+
   '6*2Tpalmos_PalmOS'#010+
   'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
   'A*2Tlinux_Linux'#010+
@@ -1269,86 +1270,86 @@ const msgtxt : array[0..000240,1..240] of char=(
   'P*2Tdarwin_Darwin/Mac OS X'#010+
   'P*2Tlinux_Linux'#010+
   'P*2Tmacos_Mac OS (classic)'#010+
-  'P*2Tmorphos_MorphOS'#010+
+  'P','*2Tmorphos_MorphOS'#010+
   'S*2Tsolaris_Solaris'#010+
   'S*2Tlinux_Linux'#010+
-  '**','1u<x>_Undefines the symbol <x>'#010+
+  '**1u<x>_Undefines the symbol <x>'#010+
   '**1U_Unit options:'#010+
   '**2Un_Do not check where the unit name matches the file name'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
-  '**2Us_Compile a system unit'#010+
-  '**1v<x>_Be verbose. <x> is a combi','nation of the following letters:'#010+
+  '**2Us','_Compile a system unit'#010+
+  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
   '**2*_e : Show errors (default)       0 : Show nothing (except errors)'#010+
   '**2*_w : Show warnings               u : Show unit info'#010+
-  '**2*_n : Show notes                  t : Show tried/used files'#010+
-  '**2*_h : Show hint','s                  c : Show conditionals'#010+
+  '**2*_n : Show notes     ','             t : Show tried/used files'#010+
+  '**2*_h : Show hints                  c : Show conditionals'#010+
   '**2*_i : Show general info           d : Show debug info'#010+
   '**2*_l : Show linenumbers            r : Rhide/GCC compatibility mode'#010+
-  '**2*_s : Show time stamps            q : Show message numbers'#010+
-  '**2*_a : S','how everything             x : Executable info (Win32 only'+
-  ')'#010+
+  '**2*_s : Show t','ime stamps            q : Show message numbers'#010+
+  '**2*_a : Show everything             x : Executable info (Win32 only)'#010+
   '**2*_b : Write file names messages   p : Write tree.log with parse tre'+
   'e'#010+
-  '**2*_    with full path              v : Write fpcdebug.txt with'#010+
-  '**2*_                                    lo','ts of debugging info'#010+
+  '**2*_    with full path              v : Write fpcd','ebug.txt with'#010+
+  '**2*_                                    lots of debugging info'#010+
   '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+
   '3*1W<x>_Target-specific options (targets)'#010+
   'A*1W<x>_Target-specific options (targets)'#010+
-  'P*1W<x>_Target-specific options (targets)'#010+
-  'p*1W<x>_Target-specific options (tar','gets)'#010+
+  'P*1W<x>_Target-specif','ic options (targets)'#010+
+  'p*1W<x>_Target-specific options (targets)'#010+
   '3*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'P*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
-  '3*2WB_Create a relocatable image (Windows)'#010+
-  'A*2WB_Create a relocatable image (W','indows, Symbian)'#010+
+  '3*2WB_Create a reloca','table image (Windows)'#010+
+  'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
   '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
   'A*2WC_Specify console type application (Windows)'#010+
   'P*2WC_Specify console type application (Classic Mac OS)'#010+
-  '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windo','ws)'#010+
+  '3','*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
   'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
   '3*2We_Use external resources (Darwin)'#010+
   '4*2We_Use external resources (Darwin)'#010+
   'A*2We_Use external resources (Darwin)'#010+
-  'P*2We_Use external resources (Darwin)'#010+
-  'p*2We_Use external res','ources (Darwin)'#010+
+  'P*2','We_Use external resources (Darwin)'#010+
+  'p*2We_Use external resources (Darwin)'#010+
   '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
   'A*2WG_Specify graphic type application (Windows)'#010+
-  'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
-  '3*2W','i_Use internal resources (Darwin)'#010+
+  'P*2','WG_Specify graphic type application (Classic Mac OS)'#010+
+  '3*2Wi_Use internal resources (Darwin)'#010+
   'P*2Wi_Use internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
   '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
-  'A*2WN_Do not generate relocation code, needed for debugging ','(Windows'+
+  'A*2','WN_Do not generate relocation code, needed for debugging (Windows'+
   ')'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
   'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
-  '3*2WX_Enable executable stack (Linux)'#010+
+  '3*2WX_Enable executable stack (Lin','ux)'#010+
   'A*2WX_Enable executable stack (Linux)'#010+
-  'p*2WX_Enable ex','ecutable stack (Linux)'#010+
+  'p*2WX_Enable executable stack (Linux)'#010+
   'P*2WX_Enable executable stack (Linux)'#010+
   '**1X_Executable options:'#010+
   '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
   'ux)'#010+
-  '**2Xd_Do not use standard library search path (needed for cross compil'+
-  'e)'#010+
-  '**2Xe_U','se external linker'#010+
+  '**2Xd_Do not use standa','rd library search path (needed for cross comp'+
+  'ile)'#010+
+  '**2Xe_Use external linker'#010+
   '**2Xg_Create debuginfo in a separate file and add a debuglink section '+
   'to executable'#010+
   '**2XD_Try to link units dynamically      (defines FPC_LINK_DYNAMIC)'#010+
-  '**2Xi_Use internal linker'#010+
+  '**2Xi_Use in','ternal linker'#010+
   '**2Xm_Generate link map'#010+
-  '**2XM<x>_Set the na','me of the '#039'main'#039' program routine (default'+
-  ' is '#039'main'#039')'#010+
+  '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
+  's '#039'main'#039')'#010+
   '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
   '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
-  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
-  '**2XR<','x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeB'+
-  'SD, Linux, Mac OS, Solaris)'#010+
+  'ile, see',' the ld manual for more information) (BeOS, Linux)'#010+
+  '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
+  ', Linux, Mac OS, Solaris)'#010+
   '**2Xs_Strip all symbols from executable'#010+
-  '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+
-  '**2Xt_Link with static libraries (-stati','c is passed to linker)'#010+
+  '**2XS_Try to link units statically (default, defines ','FPC_LINK_STATIC'+
+  ')'#010+
+  '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**1*_'#010+
   '**1?_Show this help'#010+

+ 2 - 1
compiler/options.pas

@@ -1043,11 +1043,12 @@ begin
                        end;
                      'w' :
                        begin
-                         if (j<length(more)) and (more[j+1] in ['2','3']) then
+                         if (j<length(more)) and (more[j+1] in ['2','3','4']) then
                            begin
                              case more[j+1] of
                                '2': paratargetdbg:=dbg_dwarf2;
                                '3': paratargetdbg:=dbg_dwarf3;
+                               '4': paratargetdbg:=dbg_dwarf4;
                              end;
                              inc(j);
                            end

+ 1 - 1
compiler/systems.pas

@@ -204,7 +204,7 @@ interface
             ,res_single_file);
 
        tdbg = (dbg_none
-            ,dbg_stabs,dbg_dwarf2,dbg_dwarf3
+            ,dbg_stabs,dbg_dwarf2,dbg_dwarf3,dbg_dwarf4
        );
 
        tscripttype = (script_none