Collaborative Working Sessions - Embedded systems

What are embedded systems:

  • All systems which is not a PC, Software in a device.
  • Industrial control (PLC = programmable logic control)
  • Software in a toaster or dishwasher
  • Small and powerful systems given:
  • Small: TMS430 Series, 32 kByte ROM, 512 Byte RAM,
  • Powerful: Raspi as controller
  • => Focus to small systems, because powerful have often a Linux Kernel,
  • Using a specific Real time operation system or not, no difference
  • (If RTOS is used, it should be also reproducible)

Challenges

  • Different Target systems, different compilers from diff. vendors, more variablility.
  • comprehensibility process how the binary is built
  • traceability of build process.
  • Reprod. Build should be a part of the approval procedure for a device.

Solutions:

  • All solutions known for gcc should be also applied to all known compiler,
  • Is it done or in focus? Responsibility from the compiler vendors for this topic

Notes during session

  • Reproducible required: Gambling industry requires it. restrict regulation.
  • look for gcc link time optimization.

Look for:

  • Debugging information in the object:
  • 1) with the same path, different machines.
  • 2) diff. path on diff machines
  • If the path is a symbolic link (or Junction in Windows), the Compiler should not resolve the symbolic linked path, then the path is able to make unique.
  • Use Option remove debug symbols.
  • Always use the same compiler version.

  • Build info file is not very well standardized? Look for https://wiki.debian.org/ReproducibleBuilds/BuildinfoFiles
  • Have a script for all stuff of build inputs
  • Language for sorting its a topic to the build system. (for linker), use always US-ASCII-sorting
  • Optimizations should not randomized or have start seed. SDE Source date epoch as seed.
  • Parallel compilation makes problems? Order of files.

gcc is reproducible by default. with the same source path. Or have not debug symbols. build-id.

Changing and testing: Test effort.

What about changing sources in a small way, reprod. build gives only small changes, test only the differences:

  • Have to be more as one binary for the solutions. using dll libs ?
  • Use static link, compare object files. Look from where comes the difference