merged
authorOleksandr Gavenko <gavenkoa@gmail.com>
Wed, 30 Sep 2009 16:37:06 +0300
changeset 210 104213635e5c
parent 201 cd3df5b56744 (current diff)
parent 209 c51f51e9a015 (diff)
child 211 4c0c30b9539d
merged
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/binary.rst	Wed Sep 30 16:37:06 2009 +0300
@@ -0,0 +1,39 @@
+-*- mode: outline; coding: utf-8 -*-
+
+* Caller vs callee.
+
+If routine A calls routine B then routine A is the caller and routine B is the
+callee. i.e. the caller is the routine which is calling the callee.
+
+The routine that initiates the call is the caller and the routine that is
+being called is is the callee.
+
+* Argument vs parameter.
+
+From the perspective of the caller the thing which is passed is an argument.
+From the perspective of the routine that receives the call, i.e. the callee,
+the thing which is passed is a parameter.
+
+* Linkage convention.
+
+A linkage convention is computing term that means an agreement which is made
+between a caller and a callee. The agreement describes:
+
+ - how the caller should pass parameters to the callee
+
+ - what assumptions the callee is allowed to make about the values in the
+   machine registers at the moment of the call
+
+ - who should preserve registers which are modified by the callee and/or which
+   are important to the caller so that their original values are available
+   when the caller needs them
+
+ - how and where registers should be preserved
+
+ - how the callee knows where to return to when it is ready to return to the
+   caller
+
+ - how the callee returns a value to the caller if the routine is a function
+   (as opposed to a subroutine which has no return value)
+
+ - how a debugger will find the information necessary to obtain a stack trace