Trucs et astuces PlatformIO

Dump source+asm du fichier exécutable

Dans ce tutorial, je vous propose de voir comment désassembler le fichier elf du projet de façon à voir le résultat de la compilation (assembleur) conjointement au code source.

Le script Python suivant est utilisé pour ajouter la fonctionnalité au projet :

Import("env", "projenv")
# Ajout de l'option -g aux indicateurs du linker pour obtenir le code source dans le fichier elf.
env.Append(LINKFLAGS=["-g"])

# Ajout d'un outil dans le menu Custom de PIO
env.AddCustomTarget(
    "asm_dump",
    "$BUILD_DIR/${PROGNAME}.elf",
    "C:/Users/%username%/.platformio/packages/toolchain-atmelavr/avr/bin/objdump -D -S $BUILD_DIR/${PROGNAME}.elf > $BUILD_DIR/${PROGNAME}.asm",
    "Dump ELF to ASM",
    "Dump de firmware.elf vers firmware.asm (source + ASM résultant de la compilation)."
)

# Fonction de call back pour extraire le code asm compilé avec le code source
def asmAvecSourceCB(source, target, env):
    print("Dump firmware.elf ...")
    env.Execute("C:/Users/%username%/.platformio/packages/toolchain-atmelavr/avr/bin/objdump -D -S $BUILD_DIR/${PROGNAME}.elf > $BUILD_DIR/${PROGNAME}.asm")
    # do some actions

# Ajout d'une fonction de call back a exécuté lorsque le fichier firmware.elf est créé.
env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", asmAvecSourceCB)