+Resetting the chip from GDB
+===========================
+
+You may reset the chip using GDB if you want. You'll need to use `target
+extended-remote' command like in this session:
+(gdb) target extended-remote localhost:4242
+Remote debugging using localhost:4242
+0x080007a8 in _startup ()
+(gdb) kill
+Kill the program being debugged? (y or n) y
+(gdb) run
+Starting program: /home/whitequark/ST/apps/bally/firmware.elf
+
+Remember that you can shorten the commands. `tar ext :4242' is good enough
+for GDB.
+
+Setting up udev rules
+=====================
+
+For convenience, you may install udev rules file, 49-stlinkv*.rules, located
+in the root of repository. You will need to copy it to /etc/udev/rules.d,
+and then either reboot or execute
+$ udevadm control --reload-rules
+
+Udev will now create a /dev/stlinkv2_XX or /dev/stlinkv1_XX file, with the appropriate permissions.
+This is currently all the device is for, (only one stlink of each version is supported at
+any time presently)
+
+Running programs from SRAM
+==========================
+
+You can run your firmware directly from SRAM if you want to. Just link
+it at 0x20000000 and do
+(gdb) load firmware.elf
+
+It will be loaded, and pc will be adjusted to point to start of the
+code, if it is linked correctly (i.e. ELF has correct entry point).
+
+Writing to flash
+================
+
+The GDB stub ships with a correct memory map, including the flash area.
+If you would link your executable to 0x08000000 and then do
+(gdb) load firmware.elf
+then it would be written to the memory.
+
+
+FAQ
+===
+
+Q: My breakpoints do not work at all or only work once.
+
+A: Optimizations can cause severe instruction reordering. For example,
+if you are doing something like `REG = 0x100;' in a loop, the code may
+be split into two parts: loading 0x100 into some intermediate register
+and moving that value to REG. When you set up a breakpoint, GDB will
+hook to the first instruction, which may be called only once if there are
+enough unused registers. In my experience, -O3 causes that frequently.
+
+Q: At some point I use GDB command `next', and it hangs.
+
+A: Sometimes when you will try to use GDB `next' command to skip a loop,
+it will use a rather inefficient single-stepping way of doing that.
+Set up a breakpoint manually in that case and do `continue'.
+
+Currently known working combinations of programmer and target
+=============================================================
+
+STLink v1 (as found on the 32VL Discovery board)
+
+Known Working Targets:
+* STM32F100xx (Medium Density VL)
+* STM32F103 (according to jpa- o n##stm32
+
+No information:
+* everything else!
+
+
+STLink v2 (as found on the 32L and F4 Discovery boards)
+Known Working Targets:
+* STM32F100xx (Medium Density VL, as on the 32VL Discovery board)
+* ?
+
+Please report any and all known working combinations so I can update this!