base: Prevent undefined behavior in not interleaved AddrRanges.
If an `AddrRange` is not interleaved, return the input address in `removeIntlvBits` and `addIntlvBits` to prevent undefined behavior. It allows to use these methods in all cases without having to check manually whether the range is interleaved. Change-Id: Ic6ac8c4e52b09417bc41aa9380a24319c34e0b35 Signed-off-by: Isaac Sánchez Barrera <isaac.sanchez@bsc.es> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/37617 Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
This commit is contained in:
@@ -473,12 +473,18 @@ class AddrRange
|
||||
* ---------------------------------
|
||||
*
|
||||
* @param a the input address
|
||||
* @return the new address
|
||||
* @return the new address, or the input address if not interleaved
|
||||
*
|
||||
* @ingroup api_addr_range
|
||||
*/
|
||||
inline Addr removeIntlvBits(Addr a) const
|
||||
{
|
||||
// Directly return the address if the range is not interleaved
|
||||
// to prevent undefined behavior.
|
||||
if (!interleaved()) {
|
||||
return a;
|
||||
}
|
||||
|
||||
// Get the LSB set from each mask
|
||||
int masks_lsb[masks.size()];
|
||||
for (int i = 0; i < masks.size(); i++) {
|
||||
@@ -511,6 +517,12 @@ class AddrRange
|
||||
*/
|
||||
inline Addr addIntlvBits(Addr a) const
|
||||
{
|
||||
// Directly return the address if the range is not interleaved
|
||||
// to prevent undefined behavior.
|
||||
if (!interleaved()) {
|
||||
return a;
|
||||
}
|
||||
|
||||
// Get the LSB set from each mask
|
||||
int masks_lsb[masks.size()];
|
||||
for (int i = 0; i < masks.size(); i++) {
|
||||
|
||||
Reference in New Issue
Block a user