This post describes (my) workflow when working on RISC-V JIT for OpenJ9. I have wrote it mainly as documentation for myself but I may be usefull for anyone who wants work on RISC-V JIT in OpenJ9. Especially after I had to put it - hopefully temporarily - on hold.
Ever since I started to work on OMR compiler codegen for RISC-V, I struggled to setup Eclipse CDT so I can use use it for OMR development. I tried a lot of things, but there was always something missing. The most annoying part was that code indexer did not work very well and that made code assist (code completion) useless.
Quite recently, I did another pass over the setup and found a way that works okay (so far):
- Supports multiple configurations including cross-compilation for different targets (tried only x86-64 and RISC-V),
- building OMR from IDE works and does not interfere with manual building,
- code assist works just fine (in most cases anyway),
- code formatter works and follows OMR compiler coding style (in most cases anyway).
This post contains a step-by-step recipe how to setup Eclipse CDT.
This year on ESUG 2018 conference in Cagliary, Sardinia, I gave a talk showing how to debug a faulty smalltalk runtime using GNU debugger, Mozilla rr and Visual / VM Debugger I have shown how I have debugged a real bug found in Smalltalk/X - issue #200.
Following post is pretty much the ESUG 2018 talk in a form of an article. And, by the way, the conference was great and with some very interesting talks.
While ZFS is supposedly very stable and reliable it’s not an integral part of Linux and likely never will be (due to licensing issues). Because of that, upgrading kernel or the operating system may go wrong. Well, so far in my case of Debian Jessie it was very smooth, but you never know. I have heard of people whose experience was not that great.
Since I plan to do an OS upgrade, I want to be ready for the case the upgrade go wrong and I won’t be able to boot the OS stored on ZFS filesystem. In that case, one needs a a bootable live system with ZFS ready-to-use. Ideally the same version you’re already running (or planning to run) on the system one wants to upgrade.
In case of Debian, creating such an image turned out to be very very simple…
I recently had a need to provide an access to my private OpenVPN server to couple of friends / colleagues. I ran my very own CA for the purpose of issuing certificates for OpenVPN clients. Usually I generate a key and (signed) certificate and give it to the client in a secure-enough way, e.g on my own USB stick.
In this case these guys live far, far away, so far that it’s impractical to meet them face-to-face. Indeed I can generate key and certificate as usual, send them these over an email (or a Jabber, Slack channel, you name it). I’d rather not to do so, these channels are unsafe so someone may intercept and steal both the key and the certificate. Let’s do it properly, after all the whole point of VPN is to have a secure access and if the process of exchanging credentials is insecure, it somewhat spoils the idea.
How to issue them a working signed certificate in a secure way? That’s the question…I hope this would shed some light on this.
As we progressed with CLR interop for Bee Smalltalk, a need to create a delegate for an unmanaged code arose. By “a delegate for an unmanaged code” I mean an instance of a delegate object that can be passed to CLR code which, when called, would execute an unmanaged code. In our case a Smalltalk code.
This can be handy, maybe necessary, if we want write a code that handles events. And we may well would like to do so, writing some UI code using .NET classes without use of event handlers seems to be impossible. Moreover, there are other interesting events we may want to handle, such as AppDomain.FirstChanceException.
Looking at the .NET documentation. this seem to be an easy task. Just use Marshal.GetDelegateForFunctionPointer() to create a delegate object for an arbitrary function pointer. Looks easy but it turned out to be a little more tricky. And not very well documented. The following text describes my findings and my solution so far. Mainly for my (our) own record but someone else may find useful too.
While working on CLR interop for Bee Smalltalk, things go wrong every now and again. This is tricky to debug, at least for me, as there is Smalltalk code, then some native C++ code (CLR’s CCW and all this stuff) and finally managed CLR code.
Obviously, Smalltalk debugger is kind of useless here as one would not see native nor managed stack there. Managed debugger is can be useful to see what’s happening in managed code, but quite often it got confused because we’re calling CLR from native application so more often than not all it tells you is that something went wrong - in case you don’t know that yet.
Couple days ago, I finally managed to get .NET to do a job for me. Not much but still .NET did its job and did it well. The following text shows how to call .NET code from Bee Smalltalk and retrieve results. I won’t go into technical details on how it’s done internally, rather show the usage from user point of view. The goal is to give you an idea how it might feel to call .NET code from Bee Smalltalk.
Couple weeks ago I decided to make myself a small home server. Home sever, sounds weird, doesn’t it? Home’s not work place, no?
Well, it is, in my case. I have no need for media center, downloading and streaming movies or even playing on TV, nothing like this. But I need a storage for backups and host to run virtual machines on.
There is no programming language that rules them all.
I'm interested in programming languages, compilers and virtual machines, in particular in multi-language programming environments.
I love Smalltalk. But I'm critical about it, all the same.