1*760c253cSXin Li#!/bin/bash 2*760c253cSXin Liset -e -o pipefail 3*760c253cSXin Li 4*760c253cSXin Li# This script copies a locally built GLIBC to a remote device. 5*760c253cSXin Li# 6*760c253cSXin Li# Usage: push_glibc <target>... 7*760c253cSXin Li# 8*760c253cSXin Li# This script works with 64-bit (amd64 or arm64) ChromeOS targets. 9*760c253cSXin Li# It copies both 32-bit and 64-bit glibc loaders onto the device. 10*760c253cSXin Li# This allows loading and running both 32-bit and 64-bit binaries 11*760c253cSXin Li# on the same device. 12*760c253cSXin Li 13*760c253cSXin Lifor target in "$@" 14*760c253cSXin Lido 15*760c253cSXin Li echo -n "pushing glibc to ${target} ... " 16*760c253cSXin Li case "$(ssh -i ${HOME}/.ssh/testing_rsa ${target} uname -m)" in 17*760c253cSXin Li x86_64) 18*760c253cSXin Li glibc="/usr/x86_64-cros-linux-gnu/lib64" 19*760c253cSXin Li loader="ld-linux-x86-64.so.2" 20*760c253cSXin Li glibc32="/usr/i686-pc-linux-gnu/lib" 21*760c253cSXin Li loader32="ld-linux.so.2" 22*760c253cSXin Li ;; 23*760c253cSXin Li aarch64) 24*760c253cSXin Li glibc="/usr/aarch64-cros-linux-gnu/lib64" 25*760c253cSXin Li loader="ld-linux-aarch64.so.1" 26*760c253cSXin Li glibc32="/usr/armv7a-cros-linux-gnueabihf/lib" 27*760c253cSXin Li loader32="ld-linux-armhf.so.3" 28*760c253cSXin Li ;; 29*760c253cSXin Li *) 30*760c253cSXin Li echo "unknown arch" 31*760c253cSXin Li continue 32*760c253cSXin Li ;; 33*760c253cSXin Li esac 34*760c253cSXin Li 35*760c253cSXin Li target_sh ${target} "rm -rf /tmp/glibc" 36*760c253cSXin Li target_sh ${target} "mkdir -p /tmp/glibc" 37*760c253cSXin Li target_cp "${glibc}" ${target}:/tmp/glibc 38*760c253cSXin Li 39*760c253cSXin Li target_sh ${target} "rm -rf /tmp/glibc32" 40*760c253cSXin Li target_sh ${target} "mkdir -p /tmp/glibc32" 41*760c253cSXin Li target_cp "${glibc32}" ${target}:/tmp/glibc32 42*760c253cSXin Li 43*760c253cSXin Li echo "#!/bin/bash" > /tmp/ld.so 44*760c253cSXin Li echo "LD_LIBRARY_PATH=/tmp/glibc/${glibc##*/} exec /tmp/glibc/${glibc##*/}/${loader} \"\$@\"" >> /tmp/ld.so 45*760c253cSXin Li chmod +x /tmp/ld.so 46*760c253cSXin Li target_cp /tmp/ld.so ${target}:/tmp/glibc 47*760c253cSXin Li rm /tmp/ld.so 48*760c253cSXin Li 49*760c253cSXin Li echo "#!/bin/bash" > /tmp/ld.so 50*760c253cSXin Li echo "LD_LIBRARY_PATH=/tmp/glibc32/${glibc32##*/} exec /tmp/glibc32/${glibc32##*/}/${loader32} \"\$@\"" >> /tmp/ld.so 51*760c253cSXin Li chmod +x /tmp/ld.so 52*760c253cSXin Li target_cp /tmp/ld.so ${target}:/tmp/glibc32 53*760c253cSXin Li rm /tmp/ld.so 54*760c253cSXin Li 55*760c253cSXin Li echo "done" 56*760c253cSXin Lidone 57