#!/bin/bash

function syscall() {
	if [ -z "$1" ]; then
			echo "Usage: syscall name [32|64]"
			return 0
	fi

	name="$1"
	bits="${2-64}"
	number=$(grep -m1 "__NR_$name" "/usr/include/x86_64-linux-gnu/asm/unistd_$bits.h"\
				| cut -d' ' -f3)

	[ -z "$number" ] && return 1

	if [ "$bits" == "64" ]; then
		sysnumRegister="RAX"
		arguments="RDI, RSI, RDX, R10, R8, R9"
	else
		sysnumRegister="EAX"
		arguments="EBX, ECX, EDX, ESI, EDI, EBP"
	fi

	echo "Syscall number: $number ($sysnumRegister)"
	echo "Argument order: $arguments"
	echo
	echo "Synopsis:"
	man 2 "$name" | awk '/SYNOPSIS/,/DESCRIPTION/{ if ($1 != "SYNOPSIS" && $1 != "DESCRIPTION") {  print $0 } }'

	return 0
}
syscall $1 $2
