[DynInst_API:] [dyninst/dyninst] b3796c: Power8 does not necessary have the .opd section


Date: Fri, 07 Sep 2018 09:26:46 -0700
From: Xiaozhu Meng <mxz297@xxxxxxxxx>
Subject: [DynInst_API:] [dyninst/dyninst] b3796c: Power8 does not necessary have the .opd section
  Branch: refs/heads/master
  Home:   https://github.com/dyninst/dyninst
  Commit: b3796c755f99395da6fc78b5dd6023fda4186fb8
      https://github.com/dyninst/dyninst/commit/b3796c755f99395da6fc78b5dd6023fda4186fb8
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-08-28 (Tue, 28 Aug 2018)

  Changed paths:
    M dyninstAPI/src/unix.C

  Log Message:
  -----------
  Power8 does not necessary have the .opd section


  Commit: e15b10217a5a9624742701a42e902518ad083eda
      https://github.com/dyninst/dyninst/commit/e15b10217a5a9624742701a42e902518ad083eda
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-08-30 (Thu, 30 Aug 2018)

  Changed paths:
    M common/src/arch-power.C
    M common/src/arch-power.h
    M dyninstAPI/src/Relocation/CFG/RelocBlock.C
    M dyninstAPI/src/Relocation/CFG/RelocBlock.h
    M dyninstAPI/src/addressSpace.C
    M dyninstAPI/src/block.C
    M dyninstAPI/src/block.h
    M dyninstAPI/src/codegen-power.C
    M dyninstAPI/src/codegen-power.h
    M dyninstAPI/src/function.C
    M dyninstAPI/src/function.h
    M dyninstAPI/src/image.C
    M dyninstAPI/src/mapped_object.C
    M dyninstAPI/src/parse-cfg.C
    M dyninstAPI/src/parse-cfg.h
    M parseAPI/src/CodeObject.C

  Log Message:
  -----------
  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.


  Commit: 1ad3c5ead1974ac84618860a8a213eff13f4455d
      https://github.com/dyninst/dyninst/commit/1ad3c5ead1974ac84618860a8a213eff13f4455d
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-03 (Mon, 03 Sep 2018)

  Changed paths:
    M dyninstAPI/src/Relocation/CFG/RelocBlock.C
    M dyninstAPI/src/Relocation/CodeMover.C
    M dyninstAPI/src/Relocation/Transformers/Instrumenter.C
    M dyninstAPI/src/emit-power.h
    M dyninstAPI/src/inst-power.C
    M dyninstAPI/src/inst-power.h

  Log Message:
  -----------
  1. Copy Ben's fix for code gen on power
2. Make sure we skip the function preamble when genearting springboard
3. Reloc block now can be empty, so should not assert


  Commit: 1730b7cd5f4a49bdc55b182e683cc5d72f5643e7
      https://github.com/dyninst/dyninst/commit/1730b7cd5f4a49bdc55b182e683cc5d72f5643e7
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-05 (Wed, 05 Sep 2018)

  Changed paths:
    M dyninstAPI/src/Relocation/CFG/RelocBlock.C
    M dyninstAPI/src/Relocation/CFG/RelocGraph.C
    M dyninstAPI/src/Relocation/CFG/RelocGraph.h
    M dyninstAPI/src/Relocation/CodeMover.C
    M dyninstAPI/src/Relocation/Springboard.C
    M dyninstAPI/src/block.C
    M dyninstAPI/src/function.C

  Log Message:
  -----------
  More fixes for power instrumentation

1. Do not relocate the power preamble by skipping the first two instructions,
   instead of comparing addresses
2. RelocGraph indexes RelocBlock by block starting address rather than
   block_instance pointers
3. Function entry springboard is now using OffLimits springboard priority,
   as it should have a higher priority than block entry springboard.


  Commit: 0fee9504b030981f47cf6645f160f3f95e8e7e30
      https://github.com/dyninst/dyninst/commit/0fee9504b030981f47cf6645f160f3f95e8e7e30
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-05 (Wed, 05 Sep 2018)

  Changed paths:
    M dyninstAPI/src/BPatch_loopTreeNode.C
    M dyninstAPI/src/BPatch_point.C

  Log Message:
  -----------
  Two more fixes for instrumentation on power. Now all tests in create and attach modes are passing.

1. call site instrumentation point should return the real function rather than the targ function
2. loop tree node should not include targ functions as callee


  Commit: 04c9b8706da758828dfc4d19e0219038f84a9bcd
      https://github.com/dyninst/dyninst/commit/04c9b8706da758828dfc4d19e0219038f84a9bcd
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-06 (Thu, 06 Sep 2018)

  Changed paths:
    M dyninstAPI/src/inst-power.C

  Log Message:
  -----------
  Fix power rewriter mode

1. there is no longer .opd section in Power 8 binaries. We used to derived TOC for each
   function based on .opd section. Such code is outdated.
2. Fix genearting calls to PLT on power. If the caller and the callee are not in the
   same object, we need a PLT call.
3. Fix getting the same scratch registers


  Commit: 9d17f858f26629130def0d817aabd8b34cf992dc
      https://github.com/dyninst/dyninst/commit/9d17f858f26629130def0d817aabd8b34cf992dc
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-07 (Fri, 07 Sep 2018)

  Changed paths:
    M dyninstAPI/src/mapped_object.C
    M parseAPI/src/CodeObject.C
    M parseAPI/src/SymtabCodeSource.C

  Log Message:
  -----------
  The fixes for power preamble should not be enabled on other platforms
and suppress unncessary warning output


  Commit: 07126d227f7df5a1bf31d97313de0556868f4446
      https://github.com/dyninst/dyninst/commit/07126d227f7df5a1bf31d97313de0556868f4446
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-09-07 (Fri, 07 Sep 2018)

  Changed paths:
    M dyninstAPI/src/mapped_object.C

  Log Message:
  -----------
  Remove debugging printf statement


  Commit: 40cbe229f295c649411cb0e07b3afbc17ae4b6e0
      https://github.com/dyninst/dyninst/commit/40cbe229f295c649411cb0e07b3afbc17ae4b6e0
  Author: Xiaozhu Meng <mxz297@xxxxxxxxx>
  Date:   2018-09-07 (Fri, 07 Sep 2018)

  Changed paths:
    M common/src/arch-power.C
    M common/src/arch-power.h
    M dyninstAPI/src/BPatch_loopTreeNode.C
    M dyninstAPI/src/BPatch_point.C
    M dyninstAPI/src/Relocation/CFG/RelocBlock.C
    M dyninstAPI/src/Relocation/CFG/RelocBlock.h
    M dyninstAPI/src/Relocation/CFG/RelocGraph.C
    M dyninstAPI/src/Relocation/CFG/RelocGraph.h
    M dyninstAPI/src/Relocation/CodeMover.C
    M dyninstAPI/src/Relocation/Springboard.C
    M dyninstAPI/src/Relocation/Transformers/Instrumenter.C
    M dyninstAPI/src/addressSpace.C
    M dyninstAPI/src/block.C
    M dyninstAPI/src/block.h
    M dyninstAPI/src/codegen-power.C
    M dyninstAPI/src/codegen-power.h
    M dyninstAPI/src/emit-power.h
    M dyninstAPI/src/function.C
    M dyninstAPI/src/function.h
    M dyninstAPI/src/image.C
    M dyninstAPI/src/inst-power.C
    M dyninstAPI/src/inst-power.h
    M dyninstAPI/src/mapped_object.C
    M dyninstAPI/src/parse-cfg.C
    M dyninstAPI/src/parse-cfg.h
    M dyninstAPI/src/unix.C
    M parseAPI/src/CodeObject.C
    M parseAPI/src/SymtabCodeSource.C

  Log Message:
  -----------
  Merge pull request #485 from dyninst/power8_instrumentation_fix

Power8 instrumentation fix


Compare: https://github.com/dyninst/dyninst/compare/7a6870835880...40cbe229f295
      **NOTE:** This service has been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.
[← Prev in Thread] Current Thread [Next in Thread→]