28 December 2014 6:43 AM (hla | archlinux | vagrant)
I recently started reading The Art of Assembly Language, 2nd Edition. It uses High-Level Assembly language in its code examples and this requires a special compiler, or assembler, to turn your code into machine code.
Fixing the PKGBUILD
The compiler, hla
, is available on the Archlinux User Repository here. At the time of writing, though, that PKGBUILD
doesn't work entirely. By default pacman removes all static libraries from the created packages, which took me a while to find out. Adding the following line to the PKGBUILD
fixes it:
options=(staticlibs)
I also placed a comment on the AUR page, but there has been no sign of acknowledgment so far.
Running on x8664
After having installed the compiler I got a lot of errors compiling my very simple hello world application, as typed over from the book. The gist of them was that it couldn't create 64-bit executables, which isn't very surprising as HLA seems to be only for x86 (32-bit) architecture. Another comment on the AUR page helped that though. One should add the -lmelf_i386
switch to the hla
command-line. So I put in my ~/.zshrc
:
alias hla="hla -lmelf_i386"
This discovery only came after a few other attempts to install HLA.
Alternative: Using Vagrant
Before I'd read about the -lmelf_i386
command-line switch I was looking at ways to run a 32-bit operating system inside my Archlinux installation. There are a few options I'm familiar with: lxc, Docker and Vagrant.
At first I tried to create a 32-bit Archlinux container, but the installation script failed, so I couldn't get that started. Then I went on to Vagrant, which worked pretty quickly.
I used the ubuntu/trusty32
box, which can be downloaded by calling:
vagrant box add ubuntu/trusty32
A very short Vagrantfile
:
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty32" config.vm.provision :shell, path: "vagrant.sh" end
and then the provision in vagrant.sh
:
wget http://www.plantation-productions.com/Webster/HighLevelAsm/HLAv2.16/linux.hla.tar.gz tar --directory / --extract --file linux.hla.tar.gz cat > /etc/profile.d/hla.sh <<EOF #!/usr/bin/bash export hlalib=/usr/hla/hlalib export hlainc=/usr/hla/include export hlatemp=/tmp export PATH="${PATH}:/usr/hla" EOF
After that you can just call vagrant up
, wait a while and then have fun playing around with HLA in an Ubuntu 14.04 environment.