1*333d2b36SAndroid Build Coastguard Worker#!/bin/bash 2*333d2b36SAndroid Build Coastguard Worker 3*333d2b36SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project 4*333d2b36SAndroid Build Coastguard Worker# 5*333d2b36SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*333d2b36SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*333d2b36SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*333d2b36SAndroid Build Coastguard Worker# 9*333d2b36SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*333d2b36SAndroid Build Coastguard Worker# 11*333d2b36SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*333d2b36SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*333d2b36SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*333d2b36SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*333d2b36SAndroid Build Coastguard Worker# limitations under the License. 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Worker# core - send SIGV and pull the core for process 18*333d2b36SAndroid Build Coastguard Worker# $1 = PID of process (e.g., $(pid mediaserver)) 19*333d2b36SAndroid Build Coastguard Worker# 20*333d2b36SAndroid Build Coastguard Worker# NOTE: coredump_setup must be called once per boot for core dumps to be 21*333d2b36SAndroid Build Coastguard Worker# enabled globally. 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Workerset -e 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard WorkerPID=$1; 26*333d2b36SAndroid Build Coastguard Worker 27*333d2b36SAndroid Build Coastguard Workerif [ -z "$PID" ]; then 28*333d2b36SAndroid Build Coastguard Worker printf "Expecting a PID!\n"; 29*333d2b36SAndroid Build Coastguard Worker exit 1 30*333d2b36SAndroid Build Coastguard Workerfi; 31*333d2b36SAndroid Build Coastguard Worker 32*333d2b36SAndroid Build Coastguard WorkerCORENAME=core.$PID; 33*333d2b36SAndroid Build Coastguard WorkerCOREPATH=/cores/$CORENAME; 34*333d2b36SAndroid Build Coastguard WorkerSIG=SEGV; 35*333d2b36SAndroid Build Coastguard Worker 36*333d2b36SAndroid Build Coastguard Workercoredump_enable $1; 37*333d2b36SAndroid Build Coastguard Worker 38*333d2b36SAndroid Build Coastguard Workerdone=0; 39*333d2b36SAndroid Build Coastguard Workerwhile [ $(adb shell "[ -d /proc/$PID ] && echo -n yes") ]; do 40*333d2b36SAndroid Build Coastguard Worker printf "\tSending SIG%s to %d...\n" $SIG $PID; 41*333d2b36SAndroid Build Coastguard Worker adb shell kill -$SIG $PID; 42*333d2b36SAndroid Build Coastguard Worker sleep 1; 43*333d2b36SAndroid Build Coastguard Workerdone; 44*333d2b36SAndroid Build Coastguard Worker 45*333d2b36SAndroid Build Coastguard Workeradb shell "while [ ! -f $COREPATH ] ; do echo waiting for $COREPATH to be generated; sleep 1; done" 46*333d2b36SAndroid Build Coastguard Workerecho "Done: core is under $COREPATH on device."; 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Worker 49