Skip to content

Commit b6ba3c5

Browse files
alokkrsharmabryanpkc
authored andcommitted
Support for DWARF 4/5 and fix of issues related to -gdwarf-X options (#92)
* Support for -gdwarf-5 option in Flang driver. Summary: FLANG driver doesnt pass -gdwarf-4/5 to flang1 in form of xbits, while it passes for -gdwarf-2/3 -gdwarf-2 => -x 120 0x200 -gdwarf-3 => -x 120 0x4000 Due to this -gdwarf-5 is never honored and default option -gdwarf-4 is taken. # flang -gdwarf-5 test.f90 # llvm-dwarfdump a.out | grep version 0x00000000: Compile Unit: length = 0x0000008e version = 0x0004 Now 0x1000000/0x2000000 will be passed for -gdwarf-4/5 -gdwarf-4 => -x 120 0x1000000 -gdwarf-5 => -x 120 0x2000000 Testing: - GNU gdb fortran testsuite - check-llvm - check-debuginfo * Flang doenst choose correct dwarf version when multiple -g/-gdwarfN mentioned Summary: When multiple -g/-gdwarfN options are passed together at compile time, flang chooses the least one. Clang/gfortran etc choose the last one. -gdwarf-5 -gdwarf-3 => flang chooses 5 while clang/gfortran choose 3 -gdwarf-5 -g => flang choses the default while clang/gfortran choose 5 Testing: - check-llvm - check-debuginfo * Default dwarf version should be 4 for -g with flang Currently flang dumps dwarf version 2 for -g and 4 for absence of -g ------------------------- $ flang my.f90 $ llvm-dwarfdump a.out | grep version 0x00000000: Compile Unit: length = 0x0000003d version = 0x0004 abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x00000041) $ flang -g my.f90 $ llvm-dwarfdump a.out | grep version 0x00000000: Compile Unit: length = 0x00000047 version = 0x0002 abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x0000004b) ------------------------- It should be 4 for -g as it is the case with clang.
1 parent af2bc75 commit b6ba3c5

File tree

1 file changed

+24
-18
lines changed

1 file changed

+24
-18
lines changed

clang/lib/Driver/ToolChains/ClassicFlang.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -328,28 +328,34 @@ void ClassicFlang::ConstructJob(Compilation &C, const JobAction &JA,
328328
LowerCmdArgs.push_back("0x8");
329329
}
330330

331-
// -g should produce DWARFv2
332-
for (auto Arg : Args.filtered(options::OPT_g_Flag)) {
333-
Arg->claim();
334-
CommonCmdArgs.push_back("-x");
335-
CommonCmdArgs.push_back("120");
336-
CommonCmdArgs.push_back("0x200");
337-
}
331+
// Last argument of -g/-gdwarfX should be taken.
332+
Arg *GArg = Args.getLastArg(options::OPT_g_Flag);
333+
Arg *GDwarfArg = Args.getLastArg(options::OPT_gdwarf_2,
334+
options::OPT_gdwarf_3,
335+
options::OPT_gdwarf_4,
336+
options::OPT_gdwarf_5);
337+
338+
if (GArg || GDwarfArg) {
339+
340+
for (auto Arg : Args.filtered(options::OPT_g_Flag, options::OPT_gdwarf_2,
341+
options::OPT_gdwarf_3, options::OPT_gdwarf_4,
342+
options::OPT_gdwarf_5)) {
343+
Arg->claim();
344+
}
338345

339-
// -gdwarf-2
340-
for (auto Arg : Args.filtered(options::OPT_gdwarf_2)) {
341-
Arg->claim();
342346
CommonCmdArgs.push_back("-x");
343347
CommonCmdArgs.push_back("120");
344-
CommonCmdArgs.push_back("0x200");
345-
}
346348

347-
// -gdwarf-3
348-
for (auto Arg : Args.filtered(options::OPT_gdwarf_3)) {
349-
Arg->claim();
350-
CommonCmdArgs.push_back("-x");
351-
CommonCmdArgs.push_back("120");
352-
CommonCmdArgs.push_back("0x4000");
349+
if (!GDwarfArg) // -g without -gdwarf-X produces default (DWARFv4)
350+
CommonCmdArgs.push_back("0x1000000");
351+
else if (GDwarfArg->getOption().matches(options::OPT_gdwarf_2)) // -gdwarf-2
352+
CommonCmdArgs.push_back("0x200");
353+
else if (GDwarfArg->getOption().matches(options::OPT_gdwarf_3)) // -gdwarf-3
354+
CommonCmdArgs.push_back("0x4000");
355+
else if (GDwarfArg->getOption().matches(options::OPT_gdwarf_4)) // -gdwarf-4
356+
CommonCmdArgs.push_back("0x1000000");
357+
else if (GDwarfArg->getOption().matches(options::OPT_gdwarf_5)) // -gdwarf-5
358+
CommonCmdArgs.push_back("0x2000000");
353359
}
354360

355361
// -Mipa has no effect

0 commit comments

Comments
 (0)