Stack analysis and value analysis for SPARC, TriCore, and V850 have been ported to the new EVA value analysis framework. This implies changes in analysis behavior and precision, see the corresponding notes for PowerPC, C28x and FR81 in release 14.10.
QK_COMPILER_FUNCTION_POINTER_LOOKUP_COUNTING
test case.qk_setting_expected_result
: check all variants
of violated expected bounds.32-bit Windows is no longer supported.
First AIS2 annotations are now officially available.
ais2 { routine "func" enter with: reg("r2") = [ 4, 56, 14 ]; } // register r2 contains the value 4, or 56, or 14
ais2 { area "configValue" contains data: [ 7, 300, 14 ]; } // memory cell "configValue" contains 7, or 300, or 14
instruction "f" -> call(1) { enter with: "r4" = 0x400080; assert assembly: "bl <memcpy>"; }This annotates the contents of register
r4
at the first call within routine f
.
By means of the assembly string assertion we ensure that the call
is a non-computed call to memcpy
. If the assembly string does
not match, the decoder reports this accordingly:
Assertion failed: Assembly string 'bctrl <fInput, gOutput>' does not match expected assembly string 'bl <memcpy>'.
instruction 0x8500 assert accesses: 0x8100 to 0x81ff; instruction "main" -> read(1) assert accesses: "tab"; instruction 0x2100 assert accesses speculatively: 0x1000;
main
to cma
and cmk
is infeasible:
routine "main" calls to "cma", "cmk" infeasible;
.section(0xABCDEF)
name but also the original
.section
name, e.g.:
ais2 { area relocated section(".ROM.SECTION") {writable:true;}; }
ais2 { instruction 0x1000 begin partitioning: trace; instruction 0x1120 end partitioning; }
define <name>: <expression>;The decoder will attempt to evaluate the
<expression>
to a constant. If this is possible, every occurrence of
def(<name>)
is replaced by the evaluated constant.
Otherwise, any reference to <name>
is replaced by the <expression>
that is evaluated by later analysis phases, such as the value analysis.
Example:
define "count": reg("r1") + 1; define "n": 4; routine "main" { instruction -> computed(1) enter with: reg("r4") = def("n") * def("count"); }The symbolic expression def("n") evaluates to 4, whereas the symbolic expression def("count") cannot be evaluated during decoding. After that, the value analysis attempts to compute 4 * (reg("r1") + 1) to determine the contents of register r4.
calls
, branches to
,
and returns to
annotations..L<number>
.area is copied
annotation.ldr*
/str*
instructions.$a/$t
for ARM/THUMB switching.tlbsync
instructions.HALT
instruction,
that point is considered the end of the program.a8daan: Warning #3097: In "test.c", line 200: In routine 'test1', at address thumb::0x1000: For routine 'test1' the default incarnation bound of 1 is used. Please verify that this is correct, recursion details: 1: test1 2: test_middle 3: test_middle2 4: test1
=> Call stack for maximum global usage: -> 0 < 32> 'main' (*) -> 32 < 0> 'cma' => 32 bytes of system stack
Warning #3075: In "dry2_1.c", line 214: In routine 'Proc0.L1', at address 0x3f40ea: Write access to [0x003f8000]:1 ('counter'), which overlaps with read-only memory.
max-length
mapping settings.a%b
operations emulated via div/mul/sub instruction sequences,
==
.eva-ppc: Info: In "allloops.inc", line 190: In routine 'nestedLDep.L2', at address 0x80338: Loop 'nestedLDep.L2' is unbounded in 2 contexts: ..., 0x80398->"nestedLDep", 0x80320->"nestedLDep.L1"[1/2..] ..., 0x80398->"nestedLDep", 0x80320->"nestedLDep.L1"[2/2..]
bclr
, bclrl
, bcctr
, and bcctrl
,
only the lowest bit of LR or CTR is assumed to be masked to be compatible
with the VLE extension.ICALL
/__ind_call
/F_CALL
are now inlined in the call graph.viewer
: a³ now offers a mode for viewing
existing analysis results without running any analysis.