Skip to content

Conversation

@AlexiousLu
Copy link
Contributor

In LLVM, the type of arrays is represented as strings formatted as "[SIZE x element type]", which should be consistent if the same array is referred. However, LLVM will sometimes drop the SIZE information during access it. For example, in Linux v6.5, the sys_call_table is initialized as [452 x i64 (%struct.pt_regs*)*] and is accessed as [0 x i64 (%struct.pt_regs*)*].
This is because, LLVM doesn't need to know the size of an array to access it. But it will introduce false negatives in MLTA, which is mentioned in the comment at Common.cc:477 and 478.

In this patch, I uncomment Common.cc:480 to use the "element type" instead of type string in IR to represent an array, so that the initialization and accesses of an array have a consistent type.

In LLVM, the type of array is represented in a string formatted as
"[SIZE x element type]", which should be consistent if the same
array is refered. However, LLVM will sometimes drop the SIZE
information during access it. For example, in Linux v6.5, the
`sys_call_table` is initialized as [452 x i64 (%struct.pt_regs*)*]
and is accessed as [0 x i64 (%struct.pt_regs*)*].
This is because, LLVM doesn't need to know the size of an array to
access it. But it will introduce false negatives in MLTA, which is
mentioned in the comment at Common.cc:477 and 478.

In this patch, I de-comment Common.cc:480 to use the "element type"
instead of type string in IR to represent an array, so that the
initialization and accesses of an array have a consistent type.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants