Start to make instrumentation on Power8 work.
authorXiaozhu Meng <xmeng@cs.wisc.edu>
Thu, 30 Aug 2018 18:42:26 +0000 (13:42 -0500)
committerXiaozhu Meng <xmeng@cs.wisc.edu>
Thu, 30 Aug 2018 18:42:26 +0000 (13:42 -0500)
commite15b10217a5a9624742701a42e902518ad083eda
treef5c946b4c8243d6a534f9860f820dbc74aab5a20
parentb3796c755f99395da6fc78b5dd6023fda4186fb8
Start to make instrumentation on Power8 work.

The first issue is about the new power ABI, where each function has two entries.
The inter-procedural entry has the function name and the intra-procedural entry
does not, and so is named as targXXXX. We do two things here:
1. We should not relocate targXXXX as it is essentially the same function as the inter-procedural one.
2. The inter-procedural entry contains two preamble to set up the value of r2 (TOC). We should
   not relocate these two instructions. So, when creating a RelocBlock for such entry, we skip
   the first two instructions.

The second issue is about generating long branches. This is related to springboard
and generating function call instrumentation (as function call on power is branch).
For calls, Ben introduces the uses of TAR register to store the target address. The
power manual says TAR register is reserved for system software. We will need to
revisit the use of TAR register. For long springboard, right now we cannot create an
instPoint to do liveness. So, long springboards are now done by traps.
16 files changed:
common/src/arch-power.C
common/src/arch-power.h
dyninstAPI/src/Relocation/CFG/RelocBlock.C
dyninstAPI/src/Relocation/CFG/RelocBlock.h
dyninstAPI/src/addressSpace.C
dyninstAPI/src/block.C
dyninstAPI/src/block.h
dyninstAPI/src/codegen-power.C
dyninstAPI/src/codegen-power.h
dyninstAPI/src/function.C
dyninstAPI/src/function.h
dyninstAPI/src/image.C
dyninstAPI/src/mapped_object.C
dyninstAPI/src/parse-cfg.C
dyninstAPI/src/parse-cfg.h
parseAPI/src/CodeObject.C