# Unexpected PLT reloc type 0x00

**URL:** https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072
**Category:** Help
**Created:** [July 29, 2023, 11:37pm UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072 "2023-07-29T23:37:15Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![matthuszagh](https://discourse.nixos.org/user_avatar/discourse.nixos.org/matthuszagh/32/1438_2.png) [@matthuszagh](https://discourse.nixos.org/u/matthuszagh)
#### Post date: [July 29, 2023, 11:37pm UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072/1 "2023-07-29T23:37:15Z")

</div>

I’m attempting to package Vivado 2022.2. I believe I’ve gotten pretty far in the process, but I’m running an issue. When I run the vivado binary (`./result/opt/vivado/Vivado/2022.2/bin/vivado`), I see the error `unexpected PLT reloc type 0x00`. From a quick search, this appears to be an issue with the linker tables.

The current build expression for this is:

```auto
{ stdenv
, pkgs
, lib
, requireFile
, bash
, zlib
, glibc
# TODO do I need this?
, xorg
}:

stdenv.mkDerivation rec {
  pname = "vivado";
  version = "2022.2";
  subversion = "1014_8888";

  src = requireFile {
    name = "Xilinx_Unified_${version}_${subversion}.tar.gz";
    url = "https://www.xilinx.com/member/forms/download/xef.html?filename=Xilinx_Unified_${version}_${subversion}.tar.gz";
    sha256 = "1s28fwhnjqkng9imqbd89cm8xaf33lq4f511i3irf127lhnav1v0";
  };

  buildInputs = [
    bash
    zlib
    glibc
  ] ++ (with xorg; [
    libXext
    libX11
    libXrender
    libXtst
    libXi
  ]);

  doConfigure = false;
  doBuild = false;

  patchPhase = ''
    patchShebangs .

    # /bin/rm... seriously...?
    sed -i 's/\/bin\/rm/rm/g' xsetup

    # change references to $HOME and $USER
    sed -i 's/\$HOME/"_home"/g' xsetup
    sed -i 's/\$USER/"_home"/g' xsetup

    # fix interpreter paths
    for exe in $(find bin tps/lnx64/jre11.0.11_9/bin -executable -type f); do
        isELF "$exe" || continue
        if [["$(basename $exe)" == "rlwrap"]]; then continue; fi
        echo "patching $exe..."
        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$exe"
    done

    # add missing libraries to java RPATH directory
    ln -s ${zlib}/lib/libz.so.1 lib/lnx64.o/

    # add missing libraries to tps/lnx64/jre11.0.11_9/lib/libawt_xawt.so
    basePath="tps/lnx64/jre11.0.11_9/lib"
    ln -s $basePath/server/libjvm.so $basePath/
  '';

  installPhase = ''
    mkdir -p $out/opt/vivado

    ./xsetup --agree 3rdPartyEULA,XilinxEULA \
      --batch Install \
      --product "Vitis" \
      --edition "Vitis Unified Software Platform" \
      --location $out/opt/vivado
  '';

  preFixup = ''
    # For all tool main binaries, set interpreter and add requisite runpaths.
    dynamicLinker="$(cat $NIX_CC/nix-support/dynamic-linker)"
    tools=("Model_Composer" "Vitis" "Vitis_HLS" "Vivado")
    for tool in ''${tools[*]}; do
      for exe in $(find $out/opt/vivado/$tool/${version}/bin/unwrapped/lnx64.o -maxdepth 1 -type f); do
        isELF $exe || continue
        if [["$(basename $exe)" == "rlwrap"]]; then continue; fi
        # Apparently, patchelf cannot accept multiple options at once.
        patchelf --set-interpreter $dynamicLinker $exe
        patchelf --add-rpath $out/opt/vivado/$tool/${version}/lib/lnx64.o $exe
        patchelf \
          --add-rpath $out/opt/vivado/$tool/${version}/lib/lnx64.o/Default $exe
      done
    done

    # Add runpaths to libraries.
    for tool in ''${tools[*]}; do
      for lib in $(find $out/opt/vivado/$tool/${version}/lib/lnx64.o -maxdepth 1 -type f); do
        isELF $lib || continue
        if [["$(basename $lib)" == "rlwrap"]]; then continue; fi
        patchelf --add-rpath $out/opt/vivado/$tool/${version}/lib/lnx64.o $lib
        patchelf \
          --add-rpath $out/opt/vivado/$tool/${version}/lib/lnx64.o/Default $lib
      done
    done
  '';
}

```

Any ideas about what might be going wrong here? Or, at least, any hints about the right direction to proceed?

---

<div class="post-metadata">

### Author: ![hugosenari](https://discourse.nixos.org/user_avatar/discourse.nixos.org/hugosenari/32/5630_2.png) [@hugosenari](https://discourse.nixos.org/u/hugosenari)
#### Post date: [July 31, 2023, 11:02pm UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072/2 "2023-07-31T23:02:43Z")

</div>

No idea, about what is going on, but usually read ldd output for that binary helps debug linker tables

```auto
ldd ./result/opt/vivado/Vivado/2022.2/bin/vivado

```

Check if pointed libraries exists

---

<div class="post-metadata">

### Author: ![matthuszagh](https://discourse.nixos.org/user_avatar/discourse.nixos.org/matthuszagh/32/1438_2.png) [@matthuszagh](https://discourse.nixos.org/u/matthuszagh)
#### Post date: [July 31, 2023, 11:16pm UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072/3 "2023-07-31T23:16:18Z")

</div>

Thanks for the note. Yeah, I tried this - they’re all there. FYI `bin/vivado` is a shell script that invokes `bin/unwrapped/lnx64.o/vivado`, hence why I’ve used `ldd` on the latter.

```auto
$ ldd result/opt/vivado/Vivado/2022.2/bin/unwrapped/lnx64.o/vivado 
        linux-vdso.so.1 (0x00007ffd533ce000)
        libtcmalloc.so.4 => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vivado/2022.2/lib/lnx64.o/libtcmalloc.so.4 (0x00007f5c42c00000)
        librdi_common.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vivado/2022.2/lib/lnx64.o/librdi_common.so (0x00007f5c40f14000)
        librdi_commonmain.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vivado/2022.2/lib/lnx64.o/librdi_commonmain.so (0x00007f5c43007000)
        libstdc++.so.6 => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vivado/2022.2/lib/lnx64.o/Default/libstdc++.so.6 (0x00007f5c40a00000)
        libgcc_s.so.1 => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vivado/2022.2/lib/lnx64.o/Default/libgcc_s.so.1 (0x00007f5c40600000)
        libc.so.6 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/libc.so.6 (0x00007f5c403f7000)
        libpthread.so.0 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/libpthread.so.0 (0x00007f5c43000000)
        libm.so.6 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/libm.so.6 (0x00007f5c42f20000)
        libCOIN-all.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libCOIN-all.so (0x00007f5c3fa00000)
        libboost_date_time.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_date_time.so (0x00007f5c3f600000)
        libboost_filesystem.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_filesystem.so (0x00007f5c3f200000)
        libboost_program_options.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_program_options.so (0x00007f5c3ee00000)
        libboost_regex.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_regex.so (0x00007f5c3ea00000)
        libboost_thread.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_thread.so (0x00007f5c3e600000)
        libboost_xilinx.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_xilinx.so (0x00007f5c42f04000)
        libhdlpsolve.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libhdlpsolve.so (0x00007f5c3e200000)
        libhdxml.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libhdxml.so (0x00007f5c3de00000)
        libisl_iostreams.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libisl_iostreams.so (0x00007f5c3c5a7000)
        libisl_sysinfo.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libisl_sysinfo.so (0x00007f5c40ea3000)
        liblmx6.0.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/liblmx6.0.so (0x00007f5c40df4000)
        libprotobuf.so.18 => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libprotobuf.so.18 (0x00007f5c3bc00000)
        librdi_commonxillic.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/librdi_commonxillic.so (0x00007f5c3b88b000)
        librdiconfig.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/librdiconfig.so (0x00007f5c3b600000)
        librdizlib.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/librdizlib.so (0x00007f5c3b200000)
        libtcl8.5.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libtcl8.5.so (0x00007f5c3ae00000)
        libxerces-c-3.2.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libxerces-c-3.2.so (0x00007f5c3a400000)
        libdl.so.2 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/libdl.so.2 (0x00007f5c42efb000)
        libgurobi90.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libgurobi90.so (0x00007f5c37a00000)
        libgomp.so.1 => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/Default/libgomp.so.1 (0x00007f5c37600000)
        /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/ld-linux-x86-64.so.2 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib64/ld-linux-x86-64.so.2 (0x00007f5c43030000)
        librdi_commonversion.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/librdi_commonversion.so (0x00007f5c42eef000)
        libboost_iostreams.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libboost_iostreams.so (0x00007f5c37200000)
        libisl_iosutils.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libisl_iosutils.so (0x00007f5c42eb2000)
        libXil_lmgr11.so => /nix/store/5k0v1sqcd50rjqyk2dmg3ab70br997f6-vivado-2022.2/opt/vivado/Vitis/2022.2/lib/lnx64.o/libXil_lmgr11.so (0x00007f5c36c00000)
        librt.so.1 => /nix/store/76l4v99sk83ylfwkz8wmwrm4s8h73rhd-glibc-2.35-224/lib/librt.so.1 (0x00007f5c42eab000)

```

---

<div class="post-metadata">

### Author: ![ius](https://discourse.nixos.org/user_avatar/discourse.nixos.org/ius/32/4508_2.png) [@ius](https://discourse.nixos.org/u/ius)
#### Post date: [August 1, 2023, 7:05am UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072/4 "2023-08-01T07:05:01Z")

</div>

You could try `LD_DEBUG=reloc` or `LD_DEBUG=all` to debug relocation processing & combine with `readelf` to investigate further.

But Vivado is extremely huge/complicated - this is going to be a long ride. I do hope you’re aware of that and have already seen [Fhs env for installing xilinx - #2 by Mic92](https://discourse.nixos.org/t/fhs-env-for-installing-xilinx/13150/2) for hints on getting it to ‘just work’ in a _FHSEnv_.

---

<div class="post-metadata">

### Author: ![matthuszagh](https://discourse.nixos.org/user_avatar/discourse.nixos.org/matthuszagh/32/1438_2.png) [@matthuszagh](https://discourse.nixos.org/u/matthuszagh)
#### Post date: [August 2, 2023, 6:50pm UTC](https://discourse.nixos.org/t/unexpected-plt-reloc-type-0x00/31072/5 "2023-08-02T18:50:44Z")

</div>

I was not aware of FHSEnv - thanks for pointing that out. I’d eventually like a proper build expression for the Xilinx tools, but that seems like a good intermediate solution.
