+ -go<x> switch for debugging options (some global switches could be

moved to it)
  + -go[no]dwarfsets switch to [disable]/enable generation of dwarf set
    information, as this breaks gdb < 6.5 (used to be disabled in the
    compiler by an ifdef, still off by default)

git-svn-id: trunk@8414 -
This commit is contained in:
Jonas Maebe 2007-09-09 09:27:49 +00:00
parent 9888e674cc
commit 488cfa3c32
7 changed files with 160 additions and 87 deletions

View File

@ -2779,35 +2779,37 @@ implementation
procedure TDebugInfoDwarf2.appenddef_set(def: tsetdef);
begin
{$ifdef GDB_SUPPORTS_DWARF_SETS}
{ current (20070704 -- patch was committed on 20060513) gdb cvs supports set types }
if (ds_dwarf_sets in current_settings.debugswitches) then
begin
{ current (20070704 -- patch was committed on 20060513) gdb cvs supports set types }
if assigned(def.typesym) then
append_entry(DW_TAG_set_type,false,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_data2,def.size
])
if assigned(def.typesym) then
append_entry(DW_TAG_set_type,false,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_data2,def.size
])
else
append_entry(DW_TAG_set_type,false,[
DW_AT_byte_size,DW_FORM_data2,def.size
]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef));
end
else
append_entry(DW_TAG_set_type,false,[
DW_AT_byte_size,DW_FORM_data2,def.size
]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef));
{$else GDB_SUPPORTS_DWARF_SETS}
{ at least gdb up to 6.4 doesn't support sets in dwarf, there is a patch available to fix this:
http://sources.redhat.com/ml/gdb-patches/2005-05/msg00278.html (FK) }
if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data2,def.size
])
else
append_entry(DW_TAG_base_type,false,[
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data2,def.size
]);
{$endif GDB_SUPPORTS_DWARF_SETS}
begin
{ gdb versions which don't support sets refuse to load the debug }
{ info of modules that contain set tags }
if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data2,def.size
])
else
append_entry(DW_TAG_base_type,false,[
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data2,def.size
]);
end;
finish_entry;
end;

View File

@ -110,6 +110,7 @@ interface
localswitches : tlocalswitches;
modeswitches : tmodeswitches;
optimizerswitches : toptimizerswitches;
debugswitches : tdebugswitches;
{ 0: old behaviour for sets <=256 elements
>0: round to this size }
setalloc,
@ -335,6 +336,7 @@ interface
function SetFpuType(const s:string;var a:tfputype):boolean;
function UpdateAlignmentStr(s:string;var a:talignmentinfo):boolean;
function UpdateOptimizerStr(s:string;var a:toptimizerswitches):boolean;
function UpdateDebugStr(s:string;var a:tdebugswitches):boolean;
function IncludeFeature(const s : string) : boolean;
function SetMinFPConstPrec(const s: string; var a: tfloattype) : boolean;
@ -971,6 +973,48 @@ implementation
end;
function UpdateDebugStr(s:string;var a:tdebugswitches):boolean;
var
tok : string;
doset,
found : boolean;
opt : tdebugswitch;
begin
result:=true;
uppervar(s);
repeat
tok:=GetToken(s,',');
if tok='' then
break;
if Copy(tok,1,2)='NO' then
begin
delete(tok,1,2);
doset:=false;
end
else
doset:=true;
found:=false;
for opt:=low(tdebugswitch) to high(tdebugswitch) do
begin
if DebugSwitchStr[opt]=tok then
begin
found:=true;
break;
end;
end;
if found then
begin
if doset then
include(a,opt)
else
exclude(a,opt);
end
else
result:=false;
until false;
end;
function IncludeFeature(const s : string) : boolean;
var
i : tfeature;
@ -1170,6 +1214,7 @@ implementation
init_settings.moduleswitches:=[cs_extsyntax,cs_implicit_exceptions];
init_settings.globalswitches:=[cs_check_unit_name,cs_link_static];
init_settings.optimizerswitches:=[];
init_settings.debugswitches:=[];
init_settings.sourcecodepage:='8859-1';
init_settings.packenum:=4;
init_settings.setalloc:=0;

View File

@ -133,6 +133,16 @@ interface
);
tglobalswitches = set of tglobalswitch;
{ global switches specific to debug information }
tdebugswitch = (ds_none,
{ enable set support in dwarf debug info, breaks gdb versions }
{ without support for that tag (they refuse to parse the rest }
{ of the debug information) }
ds_dwarf_sets
);
tdebugswitches = set of tdebugswitch;
{ adding a new entry here requires also adding the appropriate define in
systemh.inc (FK)
}
@ -161,6 +171,9 @@ interface
'PEEPHOLE','ASMCSE','LOOPUNROLL','TAILREC','CSE','DFA'
);
DebugSwitchStr : array[tdebugswitch] of string[9] = ('',
'DWARFSETS');
{ switches being applied to all CPUs at the given level }
genericlevel1optimizerswitches = [cs_opt_level1];
genericlevel2optimizerswitches = [cs_opt_level2];

View File

@ -2544,6 +2544,8 @@ S*2Aas_Assemble using GNU AS
*g2gg_Use gsym
*g2gh_Use heaptrace unit (for memory leak/corruption debugging)
*g2gl_Use line info unit (show more info with backtraces)
*g2go<x>_Set debug information options
*g3godwarfsets_ Enable Dwarf set debug information (breaks gdb < 6.5)
*g2gp_Preserve case in stabs symbol names
*g2gs_Generate stabs debug information
*g2gt_Trash local variables (to detect uninitialized uses)

View File

@ -731,7 +731,7 @@ const
option_info=11024;
option_help_pages=11025;
MsgTxtSize = 45067;
MsgTxtSize = 45176;
MsgIdxMax : array[1..20] of longint=(
24,86,237,83,63,49,107,22,135,60,

View File

@ -1,7 +1,7 @@
{$ifdef Delphi}
const msgtxt : array[0..000187] of string[240]=(
const msgtxt : array[0..000188] of string[240]=(
{$else Delphi}
const msgtxt : array[0..000187,1..240] of char=(
const msgtxt : array[0..000188,1..240] of char=(
{$endif Delphi}
'01000_T_Compiler: $1'#000+
'01001_D_Compiler OS: $1'#000+
@ -921,163 +921,168 @@ const msgtxt : array[0..000187,1..240] of char=(
'*g2gg_Use gsym'#010+
'*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
'*g2gl_Use line info unit (show more info with backtraces)'#010+
'*g2go<x>_Set debug information options'#010+
'*g3godwarfsets_ Enable Dwarf set deb','ug information (breaks gdb < 6.5'+
')'#010+
'*g2gp_Preserve case in stabs symbol names'#010+
'*g2gs_Generate stabs debug inform','ation'#010+
'*g2gs_Generate stabs debug information'#010+
'*g2gt_Trash local variables (to detect uninitialized uses)'#010+
'*g2gv_Generates programs traceable with valgrind'#010+
'*g2gw_Generate dwarf-2 debug information (same as -gw2)'#010+
'*g2gw_Generate dw','arf-2 debug information (same as -gw2)'#010+
'*g2gw2_Generate dwarf-2 debug information'#010+
'*g2gw3_Generate dwarf-3 debu','g information'#010+
'*g2gw3_Generate dwarf-3 debug information'#010+
'**1i_Information'#010+
'**2iD_Return compiler date'#010+
'**2iV_Return short compiler version'#010+
'**2iW_Return full compiler version'#010+
'**2iSO_Return compiler OS'#010+
'**','2iSO_Return compiler OS'#010+
'**2iSP_Return compiler host processor'#010+
'**2iTO_Return target OS'#010+
'**2iTP_Return target pr','ocessor'#010+
'**2iTP_Return target processor'#010+
'**1I<x>_Add <x> to include path'#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+
'**2Mfpc_Fre','e Pascal dialect (default)'#010+
'**2Mobjfpc_FPC mode with Object Pascal support'#010+
'**2Mdelphi_Delphi 7 compatibility m','ode'#010+
'**2Mdelphi_Delphi 7 compatibility mode'#010+
'**2Mtp_TP/BP 7.0 compatibility mode'#010+
'**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
'**1n_Do not read the default config files'#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+
'**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
'**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
'**2O2_Level 2 o','ptimizations (-O1 + quick optimizations)'#010+
'**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
'**2Oa<x>=<y>_','Set alignment'#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+
'**2Op<x>_Set target cpu for optimizing, ','see fpc -i for possible valu'+
'es'#010+
'**2Os_Optimize for size rather than speed'#010+
'**1pg_Generate profile code for gpro','f (defines FPC_PROFILE)'#010+
'**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
'**1R<x>_Assembler reading style:'#010+
'**2Rdefault_Use default assembler for target'#010+
'3*2Ratt_Read AT&T style assembler'#010+
'3*2Ratt_Read AT&T style assem','bler'#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+
'**2S2_Same as -Mobjfpc'#010+
'**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
'**2Sa_Turn on assertions'#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,
'**2Se<x>_Error o','ptions. <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 halts after hints'#010+
'**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
'**2Sh_Use ansistrings by default instead of shortstring','s'#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+
'**2Sk_Load fpcylix unit'#010+
'**2SI<x>_Set interface style to <x>'#010+
'**3SIcom_COM compatible interface (default)'#010+
'*','*3SIcom_COM compatible interface (default)'#010+
'**3SIcorba_CORBA compatible interface'#010+
'**2Sm_Support macros like C ','(global)'#010+
'**2Sm_Support macros like C (global)'#010+
'**2So_Same as -Mtp'#010+
'**2Ss_Constructor name must be init (destructor must be done)'#010+
'**2St_Allow static keyword in objects'#010+
'**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
'**2','Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
'**1s_Do not call assembler and linker'#010+
'**2sh_Gen','erate script to link on host'#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 system:'#010+
'**1T<x>_T','arget operating system:'#010+
'3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
'3*2Tfreebsd_FreeBSD'#010+
'3*2Tgo32v2_Vers','ion 2 of DJ Delorie DOS extender'#010+
'3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
'3*2Tlinux_Linux'#010+
'3*2Tnetbsd_NetBSD'#010+
'3*2Tnetware_Novell Netware Module (clib)'#010+
'3*2Tnetwlibc_Novell Netware Module (libc)'#010+
'3*2Tnetwlibc_Novell Net','ware Module (libc)'#010+
'3*2Topenbsd_OpenBSD'#010+
'3*2Tos2_OS/2 / eComStation'#010+
'3*2Tsunos_SunOS/Solaris'#010+
'3*2Twatcom_Watcom c','ompatible 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*2Tlinux_Linux'#010+
'6*2Tamiga_Commodore Amiga'#010+
'6*2Tamiga_Commodo','re Amiga'#010+
'6*2Tatari_Atari ST/STe/TT'#010+
'6*2Tlinux_Linux/m68k'#010+
'6*2Tmacos_Macintosh m68k (not supported)'#010+
'6*2Tpalmos_P','almOS'#010+
'6*2Tpalmos_PalmOS'#010+
'A*2Tlinux_Linux'#010+
'A*2Twince_Windows CE'#010+
'P*2Tamiga_AmigaOS on PowerPC'#010+
'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+
'P*2Tlinux_Linux on PowerPC'#010+
'P*2Tlinux_Linux o','n PowerPC'#010+
'P*2Tmacos_Mac OS (classic) on PowerPC'#010+
'P*2Tmorphos_MorphOS'#010+
'S*2Tlinux_Linux'#010+
'**1u<x>_undefines the sym','bol <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+
'**2Ur_Generate release unit files (never au','tomatically recompiled)'#010+
'**2Us_Compile a system unit'#010+
'**1v<x>_Be verbose. <x> is a combination of the following',' letters:'#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*_w : Show warnings u : Show unit ','info'#010+
'**2*_n : Show notes t : Show tried/used files'#010+
'**2*_h : Show hints c : ','Show conditionals'#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*_l : Show linenumbers r : Rhide/GCC compa','tibility mod'+
'e'#010+
'**2*_a : Show everything x : Executable info (Win32 only)'#010+
'**2*_b : Write file names',' messages with full path'#010+
'**2*_b : Write file names messages with full path'#010+
'**2*_v : write fpcdebug.txt with p : Write tree.log with parse tre'+
'e'#010+
'**2*_ lots of debugging info'#010+
'3*1W<x>_Target-specific options (targets)'#010+
'3*','1W<x>_Target-specific options (targets)'#010+
'A*1W<x>_Target-specific options (targets)'#010+
'P*1W<x>_Target-specific opt','ions (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+
'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 (Windows, Symbian)'#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+
'A*2WC_Specify console type application (Windo','ws)'#010+
'P*2WC_Specify console type application (Classic Mac OS)'#010+
'3*2WD_Use DEFFILE to export functions of DLL or E','XE (Windows)'#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*2WF_Specify full-screen type application (EMX, OS/2)'#010+
'3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#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+
'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
'3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
'A*2WN_','Do not generate relocation code, needed for debugging (Windows'+
')'#010+
'3*2WR_Generate relocation code (Windows)'#010+
'A*2W','R_Generate relocation code (Windows)'#010+
'A*2WR_Generate relocation code (Windows)'#010+
'P*2WT_Specify MPW tool type application (Classic Mac OS)'#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 comp'+
'ile)'#010+
'**2Xc_Pass -','-shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, L'+
'inux)'#010+
'**2Xd_Do not use standard library search path (needed for cross compil'+
'e)'#010+
'**2Xe_Use external linker'#010+
'**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+
'**2Xi_Use internal linker'#010+
'**2Xi_Use i','nternal linker'#010+
'**2Xm_Generate link map'#010+
'**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+
's '#039'main'#039,')'#010+
's '#039'main'#039')'#010+
'**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
'**2Xr<x>_Set library search path to <x> (needed for cross compile)'#010+
'**2Xs_Strip all symbols from executable'#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 (-static is passed to linker)'#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+
'*','*1?_Show this help'#010+
'**1h_Shows this help without waiting'#000
);

View File

@ -833,6 +833,12 @@ begin
else
include(init_settings.globalswitches,cs_use_lineinfo);
end;
'o' :
begin
if not UpdateDebugStr(copy(more,j+1,length(more)),init_settings.debugswitches) then
IllegalPara(opt);
break;
end;
'p' :
begin
if UnsetBool(More, j) then