[Lldb-commits] [PATCH] D92063: [LLDB] RegisterInfoPOSIX_arm64 remove unused bytes from g/G packet
Muhammad Omair Javaid via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Nov 26 01:20:28 PST 2020
omjavaid added a comment.
In D92063#2417815 <https://reviews.llvm.org/D92063#2417815>, @mgorny wrote:
> In D92063#2416162 <https://reviews.llvm.org/D92063#2416162>, @labath wrote:
>
>> + at mgorny, as he's been navigating these waters lately...
>>
>> So... I presume we can't just slap `__attribute__((packed))` on the structure, because the kernel actually expects that the data structure will have the extra space for the padding. Is that so?
>>
>> Even if we can't, I'm wondering if it wouldn't be cleaner to use two structures for this. Something like:
>>
>> LLVM_PACKED_START
>> struct GPR {
>> // as before...
>> };
>> /// Big comment explaining the purpose of padding
>> struct GPRBuffer: GPR {
>> uint32_t pad;
>> };
>> LLVM_PACKED_END
>>
>> and then using GPR or GPRBuffer accordingly. What do you think?
>
> That would imply adding additional offset field to the register lists, wouldn't it? Not that I'm opposed — it might be reasonable to have the option to override the offset for system structs, coredumps...
Register infos should contain g/G packet offset and Ideally offset calculation should look something like this: reg[index].byte_offset = reg[index - 1].byte_offset + reg[index - 1].byte_size.
In case of AArch64 we are using GPR struct to calculate offsets which I think is inspired from the thinking that offset == ptrace offset rather than the g/G packet offset. Coincidentally ptrace offsets do no interfere with g/G packet offset the way we are calculating them right now except for this pad bytes added at the end. And I have fixed that anyway in my latest update.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92063/new/
https://reviews.llvm.org/D92063
More information about the lldb-commits
mailing list