Both current lld and the next version of ld have an option -pdb, which creates a PDB file which Microsoft's debuggers can use. This patch adds a -gcodeview option, which passes this to the linker.
I do intend to expand this so it also creates the .debug$S and .debug$T sections which would make this useful - I submitted patches for this a while back, but they need to be rewritten to parse the DWARF DIEs rather than using debug_hooks. Clang also has -gcodeview, but AFAICS only uses it for .debug$S and .debug$T, and doesn't use it for linker options (though IMO it probably should). --- gcc/common.opt | 4 ++++ gcc/doc/invoke.texi | 7 +++++++ gcc/gcc.cc | 4 ++++ gcc/opts.cc | 3 +++ 4 files changed, 18 insertions(+) diff --git a/gcc/common.opt b/gcc/common.opt index 8a0dafc522d..77103f961d8 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3253,6 +3253,10 @@ gas-locview-support Common Driver Var(dwarf2out_as_locview_support) Assume assembler support for view in (DWARF2+) .loc directives. +gcodeview +Common Driver JoinedOrMissing +Generate debug information in CodeView format. + gcoff Common Driver WarnRemoved Does nothing. Preserved for backward compatibility. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index ff6c338bedb..2d29fd2611d 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -483,6 +483,7 @@ Objective-C and Objective-C++ Dialects}. -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol -gas-loc-support -gno-as-loc-support @gol -gas-locview-support -gno-as-locview-support @gol +-gcodeview @gol -gcolumn-info -gno-column-info -gdwarf32 -gdwarf64 @gol -gstatement-frontiers -gno-statement-frontiers @gol -gvariable-location-views -gno-variable-location-views @gol @@ -10358,6 +10359,12 @@ assembler (GAS) to fail with an error. Produce debugging information in Alpha/VMS debug format (if that is supported). This is the format used by DEBUG on Alpha/VMS systems. +@item -gcodeview +@opindex gcodeview +Produce debugging information in CodeView debug format (if that is +supported). This is the format used by Microsoft Visual C++ on +Windows. + @item -g@var{level} @itemx -ggdb@var{level} @itemx -gstabs@var{level} diff --git a/gcc/gcc.cc b/gcc/gcc.cc index bb07cc244e3..2820f325282 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -4608,6 +4608,10 @@ driver_handle_option (struct gcc_options *opts, do_save = false; break; + case OPT_gcodeview: + add_infile ("-pdb=", "*"); + break; + default: /* Various driver options need no special processing at this point, having been handled in a prescan above or being diff --git a/gcc/opts.cc b/gcc/opts.cc index 3a89da2dd03..e2633ee5439 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -3089,6 +3089,9 @@ common_handle_option (struct gcc_options *opts, set_debug_level (NO_DEBUG, 2, arg, opts, opts_set, loc); break; + case OPT_gcodeview: + break; + case OPT_gstabs: case OPT_gstabs_: set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg, opts, opts_set, -- 2.37.3