Works for me (tm) Reviewed-by: Benoît Canet <ben...@scylladb.com>
2016-08-25 18:46 GMT+02:00 Nadav Har'El <n...@scylladb.com>: > This is a trivial hello-world Free Pascal application. > It does't currently work because of missing syscall instruction support. > https://github.com/cloudius-systems/osv/issues/590 > Hopefully it will begin working when OSv adds syscall instruction support. > > Stack trace we get in fpc initialization function: > > 4 0x0000000000482754 in invalid_opcode (ef=0xffff800002a2b088) > at arch/x64/exceptions.cc:320 > 5 <signal handler called> > 6 0x0000100000c07b72 in SYSTEM_$$_FPSYSCALL$INT64$INT64$INT64$$INT64 () > 7 0x0000100000c0839a in SYSTEM_$$_FPGETRLIMIT$LONGINT$PRLIMIT$$LONGINT > () > 8 0x0000000c000ff3b0 in ?? () > 9 0x0000100000c2a357 in SYSTEM_$$_CHECKINITIALSTKLEN$QWORD$$QWORD () > 10 0x0000000000000000 in ?? () > > Note that to see these function names, you'll need to remove the strip > command from the script ppash.sh automatically generated by fpc, and run > it again. > > This example was based on > http://wiki.lazarus.freepascal.org/Free_Pascal_on_OSv > but I wanted to not need the special linking instructions. > > Signed-off-by: Nadav Har'El <n...@scylladb.com> > --- > fpc-example/module.py | 3 +++ > fpc-example/Makefile | 11 +++++++++++ > fpc-example/README | 1 + > fpc-example/fpc-hello.pas | 20 ++++++++++++++++++++ > fpc-example/usr.manifest | 1 + > 5 files changed, 36 insertions(+) > create mode 100644 fpc-example/module.py > create mode 100644 fpc-example/Makefile > create mode 100644 fpc-example/README > create mode 100644 fpc-example/fpc-hello.pas > create mode 100644 fpc-example/usr.manifest > > diff --git a/fpc-example/module.py b/fpc-example/module.py > new file mode 100644 > index 0000000..cc4b4bd > --- /dev/null > +++ b/fpc-example/module.py > @@ -0,0 +1,3 @@ > +from osv.modules import api > + > +default = api.run("/fpc-hello") > diff --git a/fpc-example/Makefile b/fpc-example/Makefile > new file mode 100644 > index 0000000..3733869 > --- /dev/null > +++ b/fpc-example/Makefile > @@ -0,0 +1,11 @@ > +.PHONY: module > +module: fpc-hello > + > + > +fpc-hello: fpc-hello.pas > + fpc -fPIC -XD -Xc -s -ofpc-hello fpc-hello.pas > + # if we drop -init and -fini from link line, it works. Like this > it doesn't, currently. > + sh ppas.sh > + > +clean: > + rm -f fpc-hello fpc-hello.o link.res ppas.sh > diff --git a/fpc-example/README b/fpc-example/README > new file mode 100644 > index 0000000..8eb493d > --- /dev/null > +++ b/fpc-example/README > @@ -0,0 +1 @@ > +Doesn't work - check out https://github.com/cloudius- > systems/osv/issues/590 > diff --git a/fpc-example/fpc-hello.pas b/fpc-example/fpc-hello.pas > new file mode 100644 > index 0000000..3659f42 > --- /dev/null > +++ b/fpc-example/fpc-hello.pas > @@ -0,0 +1,20 @@ > +library hello; > + > +uses > + unixtype; > + > +// use the C function 'write' > +function CWrite(fd : cInt; buf:pChar; nbytes : unixtype.TSize): TSsize; > external name 'write'; > + > +// start function for OSv > +function main: longint; cdecl; > +const > + MyText: PChar = 'It works!'; > +begin > + CWrite(StdOutputHandle,MyText,strlen(MyText)); > + main:=0; > +end; > + > +exports main name 'main'; // OSv searches for 'main' in the library > + > +end. > diff --git a/fpc-example/usr.manifest b/fpc-example/usr.manifest > new file mode 100644 > index 0000000..c3c1304 > --- /dev/null > +++ b/fpc-example/usr.manifest > @@ -0,0 +1 @@ > +/fpc-hello: ${MODULE_DIR}/fpc-hello > -- > 2.7.4 > > -- > You received this message because you are subscribed to the Google Groups > "OSv Development" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to osv-dev+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.