This note is about using Segger J-Link software to help debug code on a BBC micro:bit.
Friday, 1 February 2019
Monday, 19 November 2018
After you've installed Xcode (or, my preference, the Command Line Tools via xcode-select -install) so that you can install and use GNAT, you may expect to be able to compile C code too.
Mojave may surprise you with
$ gcc casing.c -o casing casing.c:1:10: fatal error: stdio.h: No such file or directory 1 | #include <stdio.h> | ^~~~~~~~~ compilation terminated.
The reason, according to this question and its answers, is that Apple's developer tools, in particular the clang compiler, know where to find the include files under /Library/Developer; GCC doesn't (I'm sure it could be made to, but ...) and so we have to add an extra step to install them in the normal place:
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / Password: installer: Package name is macOS_SDK_headers_for_macOS_10.14 installer: Installing at base path / installer: The install was successful.
Apple's software development tools are based on LLVM, and Apple don't seem to feel it necessary to keep GCC and friends up to date with changes in the Apple tools or security policies.
GDB has been particularly affected by this. You can see why a tool which is capable of interacting with running programs would have to be treated with caution.
Thursday, 21 June 2018
This note is about problems with VMWare shared drives failing to mount.
My previous setup was VMWare Fusion 8 and Debian 8 (jessie), with the VMWare-recommended open-vm-tools. After upgrading to VMWare Fusion 10 and Debian 9 (stretch), the shared folder (~) on the Mac was no longer visible from Debian (~/mac, a symbolic link to /mnt/hgfs).
After looking here, I added this line to /etc/fstab:
vmhgfs-fuse /mnt/hgfs fuse defaults,allow_other 0 0
but rebooting hung, and invited me to log in as system to fix the problem.
Other posts in the reference stated that you need to mount to /mnt/hgfs/mac: so, edit the /etc/fstab line to
vmhgfs-fuse /mnt/hgfs/mac fuse defaults,allow_other 0 0
and the system rebooted OK.
Now, make ~/mac a link to /mnt/hgfs/mac:
ln -sf /mnt/hgfs/mac ~/mac
and all is well again.
Incidentally, I found that copy/paste between host and client no longer worked: another Google search led me to
sudo apt-get install open-vm-tools-desktop
Reboot, and on we go!
Thursday, 14 June 2018
In GNAT, the secondary stack is a construct used with indeterminate types. For example, if a function returns a String, it isn't possible for the caller to determine how much space to reserve for the result: instead, the called function allocates the amount of space required on the secondary stack, and on return the caller determines how much space to allocate on the normal (primary) stack, and pops the function's result from the secondary stack to there.
This note discusses how the secondary stack is managed in Cortex GNAT RTS for FSF GCC and GNAT Community Edition (was GNAT GPL).