Skip to content

Commit 4149ab2

Browse files
committed
Merge from mainline.
Provide correct DWARF register numbering for debug information emission on x86-32/Darwin. This should fix bunch of issues. llvm-svn: 46698
1 parent 23177b1 commit 4149ab2

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,15 @@ int X86RegisterInfo::getDwarfRegNum(unsigned RegNo, bool isEH) const {
6464
unsigned Flavour = DWARFFlavour::X86_64;
6565
if (!Subtarget->is64Bit()) {
6666
if (Subtarget->isTargetDarwin()) {
67-
Flavour = DWARFFlavour::X86_32_Darwin;
67+
if (isEH)
68+
Flavour = DWARFFlavour::X86_32_DarwinEH;
69+
else
70+
Flavour = DWARFFlavour::X86_32_Generic;
6871
} else if (Subtarget->isTargetCygMing()) {
6972
// Unsupported by now, just quick fallback
70-
Flavour = DWARFFlavour::X86_32_ELF;
73+
Flavour = DWARFFlavour::X86_32_Generic;
7174
} else {
72-
Flavour = DWARFFlavour::X86_32_ELF;
75+
Flavour = DWARFFlavour::X86_32_Generic;
7376
}
7477
}
7578

llvm/lib/Target/X86/X86RegisterInfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace N86 {
3636
///
3737
namespace DWARFFlavour {
3838
enum {
39-
X86_64 = 0, X86_32_Darwin = 1, X86_32_ELF = 2
39+
X86_64 = 0, X86_32_DarwinEH = 1, X86_32_Generic = 2
4040
};
4141
}
4242

llvm/lib/Target/X86/X86RegisterInfo.td

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,8 @@ let Namespace = "X86" in {
2525

2626
// Dwarf numbering is different for 32-bit and 64-bit, and there are
2727
// variations by target as well. Currently the first entry is for X86-64,
28-
// second - for X86-32/Darwin and third for X86-32/Linux
29-
30-
// FIXME: Comments in gcc indicate that Darwin uses different numbering
31-
// for debug info and exception handling info:( The numbering here is
32-
// for exception handling.
28+
// second - for EH on X86-32/Darwin and third is 'generic' one (X86-32/Linux
29+
// and debug information on X86-32/Darwin)
3330

3431
// 8-bit registers
3532
// Low registers

0 commit comments

Comments
 (0)