Hi,
Following are some questions about whirltree and symbol table.
1. what is the difference between WN_PARM_BY_REFERENCE &
WN_PARM_BY_VALUE? I found that it doesnot necessarily use BY_REFERENCE
when Pro64 want to generate a "pointer" parameter. I got this opinion
by checking the dumped whirl tree.
e.g. from InnerProduct(&a);
we get:
U8LDA [[0]] <2,3,a> T<30,anon_ptr.,8>
U8PARM #2 T<30,anon_ptr.,8> # by_value
VCALL #126 <1,21,InnerProduct> # flags 0x7e
the parameter is "by_value" instead of "by-reference"
2. From the "WHIRL SYMBOL TABLE SPECIFICATION", " in a nested
procedure, three ST_TABs are visible: its own local ST_TAB, the parent
PU's ST_TAB and the global ST_TAB". Can somebody explain me why the parent
PU's ST_TAB should be visible to the nested function?
3. What is the difference between STR_TAB & TCON_STR_TAB? the
document mentions there difference in terms of null-terminatation. But I
still cannot see the point? why we need the same thing with two styles?
4. Is there any possibility that a function is placed
dis-contiguously in the final executable (use jmp to connect the control
flow)?
Thanks
|