Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • D dynamorio
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 1,467
    • Issues 1,467
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 44
    • Merge requests 44
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • DynamoRIO
  • dynamorio
  • Issues
  • #1326
Closed
Open
Issue created Nov 28, 2014 by Derek Bruening@derekbrueningContributor

Usage error: encoding failed re-relativizing rip-relative address for base_unittests with native_exec

From zhao...@google.com on November 21, 2013 15:12:25

~/Workspace/LLVM/dr/exports/bin64/drrun -early -debug -msgbox_mask 0xf -native_exec_list base_unittests -native_exec_retakeover -native_exec_opt -disable_traces -c ~/Workspace/LLVM/llvm-build/lib/clang/3.4/lib/linux/libclang_rt.msandr-x86_64.so -- ./out/Debug/base_unittests

When enable native_exec, initialize_plt_stub_template is called to initialize the plt stub template. instrlist_append(ilist, INSTR_CREATE_mov_imm(dc, opnd_create_reg(DR_REG_R11), OPND_CREATE_INTPTR(0))); instrlist_append(ilist, INSTR_CREATE_jmp_ind(dc, opnd_create_rel_addr(0, OPSZ_PTR))); The second instr INSTR_CREATE_jmp_ind(dc, opnd_create_rel_addr(0, OPSZ_PTR)) causes problem.

(gdb) where #0 instr_allocate_raw_bits (dcontext=0xffffffffffffffff, instr=0x7f6f4cd40900, num_bytes=6) at /home/zhaoqin/Workspace/LLVM/dr/core/x86/instr.c:2624 #1 (closed) 0x0000000071255917 in private_instr_encode (dcontext=0xffffffffffffffff, instr=0x7f6f4cd40900, always_cache=false) at /home/zhaoqin/Workspace/LLVM/dr/core/x86/instr.c:2002 #2 (closed) 0x0000000071256fb5 in instr_length (dcontext=0xffffffffffffffff, instr=0x7f6f4cd40900) at /home/zhaoqin/Workspace/LLVM/dr/core/x86/instr.c:2790 #3 0x00000000712340fd in instrlist_encode_to_copy (dcontext=0xffffffffffffffff, ilist=0x7f6f4cd41248, copy_pc=0x7161f240 <plt_stub_template> "", final_pc=0x0, max_pc=0x7161f250 <plt_stub_immed_offset> "", has_instr_jmp_targets=false) at /home/zhaoqin/Workspace/LLVM/dr/core/x86/encode.c:2827 #4 (closed) 0x0000000071310287 in initialize_plt_stub_template () at /home/zhaoqin/Workspace/LLVM/dr/core/unix/native_elf.c:190

In instr_allocate_raw_bits: byte * new_bits = (byte *) heap_alloc(dcontext, num_bytes HEAPACCT(ACCT_IR)); ... instr->bytes = new_bits; (gdb) p new_bits $18 = (byte *) 0x7f6f4cd613d8

so later in copy_and_re_relativize_raw_instr: where it tries to encode it to 0x7161f24a <plt_stub_template+10>, the target is (gdb) p target $24 = (byte *) 0x7f6f00000000

      Start Addr           End Addr       Size     Offset objfile
      0x71000000         0x713bd000   0x3bd000        0x0 /usr/local/google/home/zhaoqin/Workspace/LLVM/dr/exports/lib64/debug/libdynamorio.so.4.1
      0x715bd000         0x71605000    0x48000   0x3bd000 /usr/local/google/home/zhaoqin/Workspace/LLVM/dr/exports/lib64/debug/libdynamorio.so.4.1
      ...
  0x7f6f4cd55000     0x7f6f4cd63000     0xe000        0x0
  0x7f6f4cd63000     0x7f6f4cd65000     0x2000        0x0
  0x7f6f4cd65000     0x7f6f4cd66000     0x1000        0x0
      ...
  0x7f6fc53cf000     0x7f6fccb30000  0x7761000        0x0 /usr/local/google/home/zhaoqin/Workspace/Chrome/chromium.git/src/out/Debug/base_unittests
  0x7f6fccb30000     0x7f6fce24e000  0x171e000  0x7761000 /usr/local/google/home/zhaoqin/Workspace/Chrome/chromium.git/src/out/Debug/base_unittests

So it is the result of separate library from the heap used by DR.

Original issue: http://code.google.com/p/dynamorio/issues/detail?id=1326

Assignee
Assign to
Time tracking