gcc 12215.c -o 12215.x -save-temps -fpic

if [ "$1" = "stap" ] ; then

objdump -d 12215.x | 
grep '@plt' | 
awk '
/:$/ {gsub(":","",$1)
      gsub("<[a-z]*@plt-0x[a-z0-9]*>","",$0)
      printf "probe process(\"./12215.x\").statement(0x%s)\
             {printf(\"plt entry %s @%s rip=%%#lx\\n\",register(\"rip\"))}\n",
             $1,substr($NF,2,index($NF,"@")-2),$1}
/[0-9a-f]:/ {gsub(":","",$1)
      gsub("<[a-z]*@plt-0x[a-z0-9]*>","",$0)
      printf "probe process(\"./12215.x\").statement(0x%s)\
             {printf(\"plt ref %s @%s rip=%%#lx\\n\",register(\"rip\"))}\n",
             $1,substr($NF,2,index($NF,"@")-2),$1}
' >| 12215.stp
echo now run \"stap --kelf -c ./12215.x 12215.stp\"

elif [ "$1" = "gdb" ] ; then

echo 'gdb 12215.x <<EOF' >| 12215.gdb
objdump -d 12215.x | 
grep '@plt' | 
awk '
/:$/ {gsub(":","",$1)
      gsub("<[a-z]*@plt-0x[a-z0-9]*>","",$0)
      printf "b *0x%s\ncommand\n\
             printf \"plt entry %s @%s rip=%%#lx\\n\",\\$rip\ncontinue\nend\n",
             $1,substr($NF,2,index($NF,"@")-2),$1
             end}
/[0-9a-f]:/ {gsub(":","",$1)
      gsub("<[a-z]*@plt-0x[a-z0-9]*>","",$0)
      printf "b *0x%s\ncommand\n\
             printf \"plt ref %s @%s rip=%%#lx\\n\",\\$rip\ncontinue\nend\n",
             $1,substr($NF,2,index($NF,"@")-2),$1
             end}
' >> 12215.gdb
echo -e 'run\nq\n' >> 12215.gdb
echo 'EOF' >> 12215.gdb

echo now run \"sh 12215.gdb\"

fi
