HomePhabricator

[lldb] Remove all the RegisterInfo name constification code

Authored by teemperor on Oct 13 2020, 8:10 AM.

Description

[lldb] Remove all the RegisterInfo name constification code

RegisterInfo's reg_name/reg_alt_name fields are C-Strings and are supposed
to only be generated from a ConstString. The reason for that is that
DynamicRegisterInfo::GetRegisterInfo and
RegInfoBasedABI::GetRegisterInfoByName try to optimise finding registers by
name by only comparing the C string pointer values instead of the underlying
strings. This only works if both C strings involved in the comparison come from
a ConstString. If one of the two C strings doesn't come from a ConstString the
comparison won't work (and most likely will silently fail).

I added an assert in b0060c3a7868ef026d95d0cf8a076791ef74f474 which checks that
both strings come from a ConstString. Apparently not all ABI plugins are
generating their register names via ConstString, so this code is now not just
silently failing but also asserting.

In D88375 we did a shady fix for the MIPS plugins by just copying the
ConstString setup code to that plugin, but we still need to fix ABISysV_arc,
ABISysV_ppc and ABISysV_ppc64 plugins.

I would say we just fix the remaining plugins by removing the whole requirement
to have the register names coming from ConstStrings. I really doubt that we
actually save any time with the whole ConstString search trick (searching ~50
strings that have <4 characters doesn't sound more expensive than calling the
really expensive ConstString constructor + comparing the same amount of pointer
values). Also whatever small percentage of LLDB's runtime is actually spend in
this function is anyway not worth the complexity of this approach.

This patch just removes all this and just does a normal string comparison.

Reviewed By: JDevlieghere, labath

Differential Revision: https://reviews.llvm.org/D88490

Details

Committed
teemperorOct 13 2020, 8:10 AM
Reviewer
JDevlieghere
Differential Revision
D88490: [lldb] Remove all the RegisterInfo name constification code
Parents
rG4cd873c4bd7f: [lldb][NFC] Remove property predicate matcher
Branches
Unknown
Tags
Unknown