aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2019-10-30 12:44:49 -0400
committerYonghong Song <yhs@fb.com>2019-11-04 20:08:05 -0800
commitfff2721286e1c051c2b1c91210ddc3e6a9b179e1 (patch)
treef5dcaec2113c53989eb04b36c39a41992e2e4775 /lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
parent586952f4cefd809b7becd16c6d1e751ea923adfd (diff)
downloadllvm-fff2721286e1c051c2b1c91210ddc3e6a9b179e1.zip
llvm-fff2721286e1c051c2b1c91210ddc3e6a9b179e1.tar.gz
llvm-fff2721286e1c051c2b1c91210ddc3e6a9b179e1.tar.bz2
[BPF] Fix CO-RE bugs with bitfields
bitfield handling is not robust with current implementation. I have seen two issues as described below. Issue 1: struct s { long long f1; char f2; char b1:1; } *p; The current approach will generate an access bit size 56 (from b1 to the end of structure) which will be rejected as it is not power of 2. Issue 2: struct s { char f1; char b1:3; char b2:5; char b3:6: char b4:2; char f2; }; The LLVM will group 4 bitfields together with 2 bytes. But loading 2 bytes is not correct as it violates alignment requirement. Note that sometimes, LLVM breaks a large bitfield groups into multiple groups, but not in this case. To resolve the above two issues, this patch takes a different approach. The alignment for the structure is used to construct the offset of the bitfield access. The bitfield incurred memory access is an aligned memory access with alignment/size equal to the alignment of the structure. This also simplified the code. This may not be the optimal memory access in terms of memory access width. But this should be okay since extracting the bitfield value will have the same amount of work regardless of what kind of memory access width. Differential Revision: https://reviews.llvm.org/D69837
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h')
0 files changed, 0 insertions, 0 deletions