Working in Mentor Graphics’ Sourcery CodeBench backend team

I work as a Software Development Engineer in Mentor Graphics’ Sourcery CodeBench IDE backend team. It is an Eclipse based development suite to program microprocessors.

What is an Embedded System IDE

Development of software for a microprocessor (or an embedded system) – or firmware development, consists of three phases:

  1. Programming
  2. Debugging
  3. Optimization

Programmer writes his code on the development computer (host). The code is then converted to machine readable form and transferred to the microprocessor (target) via a debug probe. The microprocessor is now able to execute as instructed by the code just loaded to it.

At a later development stage, it is desirable to pause execution of the microprocessor and read off important information about its state at that point of execution, to ensure it is working as expected or to find clues about what is going wrong (this process is called debugging – to fix bugs). Once the microprocessor is working as expected, the final stage is to analyze its performance during operation and to find clues on how to optimize it.

Sourcery CodeBench performs all of the above operations, while ensuring compatibility with numerous target boards containing microprocessors of different architectures and capabilities and a handful of debug probes of different makes and models from different vendors.

My Activities

I work in the back-end team; interfacing different debug probes and microprocessors types with the IDE. Some of my activities include:

  • Support for ARM, AArch64, PowerPC, x86 architectures
  • Board bring-up procedures (studying TRM and provided SDK)
    • Processor core(s) initialization
    • Memory initialization
    • Memory Management Unit (MMU) setup
  • JTAG embedded debug probes (ARM DStream, NXP CodeWarrior, Lauterbach, SEGGER J-Link)
  • Asymmetric Multi-Processing (AMP) debug support
    • Various processor cores operate independantly of each other
  • Symmetric Multi-Processing (SMP) Embedded Linux kernel debug support
    • Various processor cores, as a group, run a single operating system
    • Compiling Linux kernel from source for different targets using different build systems (bitbake, busybox)
  • Interacting with a mix of propriety and open-source GNU Project tools (GDB, GCC, QEMU).

I find working on the lowest level of state of the art embedded boards with bleeding edge functionality, to streamline their firmware development workflow, very exciting.


Mentor Graphics –
Sourcery CodeBench –

Leave a Reply

Your email address will not be published. Required fields are marked *