
Summary: These definitions are used to "augment" information received from the remote target with eh/debug frame and "generic" register numbers. Besides being verbose, this information was also incomplete (new registers like xmm16-31 were missing) and sometimes even downright wrong (ymm register numbers). Most of this information is available via llvm's MCRegisterInfo. This patch creates a new class, MCBasedABI, which retrieves the eh and debug frame register numbers this way. The tricky part here is that the llvm class uses all-caps register names, whereas lldb register are lowercase, and sometimes called slightly differently. Therefore this class introduces some hooks to allow a subclass to customize the MC lookup. The subclass also needs to suply the "generic" register numbers, as this is an lldb invention. This patch ports the x86_64 ABI classes to use the new register info mechanism. It also creates a new "ABIx86_64" class which can be used to house code common to x86_64 both ABIs. Right now, this just consists of a single function, but there are plenty of other things that could be moved here too. Reviewers: JDevlieghere, jasonmolenda Subscribers: mgorny, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D74244
27 lines
820 B
C++
27 lines
820 B
C++
//===-- ABITest.cpp -------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Target/ABI.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace lldb_private;
|
|
|
|
TEST(MCBasedABI, MapRegisterName) {
|
|
auto map = [](std::string name) {
|
|
MCBasedABI::MapRegisterName(name, "foo", "bar");
|
|
return name;
|
|
};
|
|
EXPECT_EQ("bar", map("foo"));
|
|
EXPECT_EQ("bar0", map("foo0"));
|
|
EXPECT_EQ("bar47", map("foo47"));
|
|
EXPECT_EQ("foo47x", map("foo47x"));
|
|
EXPECT_EQ("fooo47", map("fooo47"));
|
|
EXPECT_EQ("bar47", map("bar47"));
|
|
}
|
|
|