Hi Mansur, > I added following lines In Makefile: > ... > ifeq ($(MAKECMDGOALS), x86-64.freeBsd) > ... > ifeq ($(UNAME), FreeBSD) > ...
This looks all right. > (.text+0x459): undefined reference to `stderr' So this looks like 'stderr' etc. are not direct global variables, but macros of some kind. For SunOS we have a similar case, so that "x86-64.sunOs.defs.l" defines (equ stdin "$__iob") (equ stdout "$__iob+128") (equ stderr "$__iob+256") Can you find out how 'stderr' is defined in the stdio includes? > I don't know how to change x86-64.freeBsd.code.l > I found this in "man errno": > extern int * __error(); > #define errno (* __error()) The Pil64 assembly code used the convention that the registers of the arguments and return values of a function are encoded into the name. A function 'fooAE_CXY' would expect arguments in 'A' and 'E', and return values in 'C', 'X' and 'Y'. Thus, the function 'errno_A' should return the error code in 'A'. From your "man errno" above I would suspect that the correct implementation is: (code 'errno_A 0) call __errno # Get address of 'errno' ld4 (A) # Load value ret I.e. '__error()' corresponds to 'call __errno', and 'ld4' then fetches an 'int' (a 4-byte value). ♪♫ Alex -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe