I suppose he meant using JTAG, or is there another way?
Probably he didn't. ARM has their own debugging bus standard – SWD (single wire debug), that is very well-specified. JTAG, on the other hand, is merely a electrical and shift-register-level standard, and it's up to device manufacturers to give JTAG endpoints and actions a meaning.
SWD programmers can be had for <5€. Look for products called "STLink v2 compatible" or so. The ST in the name stems from the fact that they are based on the protocol that STmicro USB-to-SWD adapters speak between host computer and adapter, but since they only "transport" SWD, they work with every SWD-compatible microcontroller.
On most development systems, you'd want to use OpenOCD as "driver" for these devices, so that you can easily flash images (either directly through OpenOCD or using e.g. GDB's load
). If you're stuck with an absurd OS that needs specific drivers even for generic devices, you'd probably have to install ST's tools.
Btw, I'm meaning to flash an empty ARM processor without a bootloader.
Yep, sounds like a classical case for SWD – ARM offers hardware for that in their cores, and most manufacturers choose to use that and assign pins.
Also note that most manufacturers (including ST) ship their "empty" ICs with some kind of bootloader, over which you can load firmware through a serial port or even USB into the device – suuuuper handy for manufacturing.
For a bit of discussion on SWD, I actually recommend (for the pure fun it is to read) PoC||GTFO 0x10, pp. 26, which begins with an introduction of ARM's debugging infrastructure and SWD as a protocol, and then goes on to explain how to use SWD-connected ARMs as sophisticated IO expanders rather than independent MCUs.