config: Change parsing of Addr so hex values work from scripts
When passed from a configuration script with a hexadecimal value (like "0x80000000"), gem5 would error out. This is because it would call "toMemorySize" which requires the argument to end with a size specifier (like 1MB, etc). This modification makes it so raw hex values can be passed through Addr parameters from the configuration scripts.
This commit is contained in:
parent
1046b8d6e5
commit
23c8540756
2 changed files with 11 additions and 3 deletions
|
@ -65,7 +65,7 @@ class ArmSystem(System):
|
||||||
highest_el_is_64 = Param.Bool(False,
|
highest_el_is_64 = Param.Bool(False,
|
||||||
"True if the register width of the highest implemented exception level "
|
"True if the register width of the highest implemented exception level "
|
||||||
"is 64 bits (ARMv8)")
|
"is 64 bits (ARMv8)")
|
||||||
reset_addr_64 = Param.UInt64(0x0,
|
reset_addr_64 = Param.Addr(0x0,
|
||||||
"Reset address if the highest implemented exception level is 64 bits "
|
"Reset address if the highest implemented exception level is 64 bits "
|
||||||
"(ARMv8)")
|
"(ARMv8)")
|
||||||
phys_addr_range_64 = Param.UInt8(40,
|
phys_addr_range_64 = Param.UInt8(40,
|
||||||
|
|
|
@ -626,9 +626,17 @@ class Addr(CheckedInt):
|
||||||
self.value = value.value
|
self.value = value.value
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
# Often addresses are referred to with sizes. Ex: A device
|
||||||
|
# base address is at "512MB". Use toMemorySize() to convert
|
||||||
|
# these into addresses. If the address is not specified with a
|
||||||
|
# "size", an exception will occur and numeric translation will
|
||||||
|
# proceed below.
|
||||||
self.value = convert.toMemorySize(value)
|
self.value = convert.toMemorySize(value)
|
||||||
except TypeError:
|
except (TypeError, ValueError):
|
||||||
self.value = long(value)
|
# Convert number to string and use long() to do automatic
|
||||||
|
# base conversion (requires base=0 for auto-conversion)
|
||||||
|
self.value = long(str(value), base=0)
|
||||||
|
|
||||||
self._check()
|
self._check()
|
||||||
def __add__(self, other):
|
def __add__(self, other):
|
||||||
if isinstance(other, Addr):
|
if isinstance(other, Addr):
|
||||||
|
|
Loading…
Reference in a new issue