summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-04-22 21:19:51 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-22 21:19:51 +0000
commit8e58d76eb30a50e38c46bd6277186116937ba396 (patch)
tree4ea04c2731b751f8919c90f240660e65b09645f5
parent0ad14266a71c8579cd6bebcaf42f56fae37c988f (diff)
parent8a813f72d21dea87b9e94b686fb35868ad4a88c4 (diff)
downloadart-8e58d76eb30a50e38c46bd6277186116937ba396.zip
art-8e58d76eb30a50e38c46bd6277186116937ba396.tar.gz
art-8e58d76eb30a50e38c46bd6277186116937ba396.tar.bz2
Merge "Do not mention x86 floating point numbers in CFI."
-rw-r--r--compiler/dwarf/register.h1
-rw-r--r--compiler/elf_writer_debug.cc8
2 files changed, 7 insertions, 2 deletions
diff --git a/compiler/dwarf/register.h b/compiler/dwarf/register.h
index fa666df..7045237 100644
--- a/compiler/dwarf/register.h
+++ b/compiler/dwarf/register.h
@@ -33,6 +33,7 @@ class Reg {
// There are ways around this in DWARF but they are complex.
// It would be much simpler to always spill whole D registers.
// Arm64 mapping is correct since we already do this there.
+ // libunwind might struggle with the new mapping as well.
static Reg ArmCore(int num) { return Reg(num); }
static Reg ArmFp(int num) { return Reg(64 + num); } // S0–S31.
diff --git a/compiler/elf_writer_debug.cc b/compiler/elf_writer_debug.cc
index cf0adae..28e6999 100644
--- a/compiler/elf_writer_debug.cc
+++ b/compiler/elf_writer_debug.cc
@@ -99,6 +99,8 @@ static void WriteEhFrameCIE(InstructionSet isa,
return;
}
case kX86: {
+ // FIXME: Add fp registers once libunwind adds support for them. Bug: 20491296
+ constexpr bool generate_opcodes_for_x86_fp = false;
DebugFrameOpCodeWriter<> opcodes;
opcodes.DefCFA(Reg::X86Core(4), 4); // R4(ESP).
opcodes.Offset(Reg::X86Core(8), -4); // R8(EIP).
@@ -113,8 +115,10 @@ static void WriteEhFrameCIE(InstructionSet isa,
}
}
// fp registers.
- for (int reg = 0; reg < 8; reg++) {
- opcodes.Undefined(Reg::X86Fp(reg));
+ if (generate_opcodes_for_x86_fp) {
+ for (int reg = 0; reg < 8; reg++) {
+ opcodes.Undefined(Reg::X86Fp(reg));
+ }
}
auto return_reg = Reg::X86Core(8); // R8(EIP).
WriteEhFrameCIE(is64bit, addr_type, return_reg, opcodes, eh_frame);