Skip to content

Conversation

@AlexiousLu
Copy link

Similar to the PR in MLTA, fix the array type mismatching problem in Typm.


Following is the original description of PR in MLTA.

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 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.
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.

1 participant