SPRACK2A September   2019  – March 2020 TMS320F280021 , TMS320F280021-Q1 , TMS320F280023 , TMS320F280023-Q1 , TMS320F280023C , TMS320F280025 , TMS320F280025-Q1 , TMS320F280025C , TMS320F280025C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1

 

  1.   1
    1.     2
    2.     3
      1.      4
    3.     5
      1.      6
      2.      7
      3.      8
      4.      9
      5.      10
      6.      11
    4.     12
      1.      13
        1.       14
        2.       15
        3.       16
        4.       17
        5.       18
        6.       19
        7.       20
      2.      21
      3.      22
      4.      23
      5.      24
        1.       25
          1.        26
          2.        27
          3.        28
        2.       29
          1.        30
          2.        31
        3.       32
        4.       33
        5.       34
      6.      35
        1.       36
        2.       37
        3.       38
      7.      39
      8.      40
        1.       41
        2.       42
      9.      43
      10.      44
    5.     45
      1.      46
      2.      47
      3.      48
      4.      49
      5.      50
        1.       51
        2.       52
        3.       53
      6.      54
        1.       55
        2.       56
        3.       57
    6.     58
  2.   59

EABI Support

In the past, F28004x applications have always supported the Common Object File Format (COFF) binary executable output. COFF has several limitations. One of which is that the symbolic debugging information is not capable of supporting C/C++. There is also a limit on the maximum number of sections and length of section names and source files, among other things. COFF is also not an industry standard. For these reasons, C2000 is now migrating to Embedded Application Binary Interface (EABI) format and F28002x is one of the first devices to support it. EABI and COFF are incompatible and conversion between the two formats is not possible. This section provides summary of COFF and EABI differences and useful links that provide more guidelines in migrating applications from COFF to EABI.

  • EABI key differences with COFF:
    • Direct initialization
      • Uninitialized data is zero by default in EABI.
      • Initialization of RW data is accomplished via linker-generated compressed copy tables in EABI.
    • C++ language support
      • C++ inline function semantics: In COFF, inline functions are treated as static inline and this causes issues for functions that cannot be inlined or have static data. In EABI, inline functions without the ‘static’ qualifier have external linkage.
      • Better template instantiation: COFF uses a method called late template instantiation and EABI uses early template instantiation. Late template instantiation can run into issues with library code and can result in long link times. Early instantiation uses ELF COMDAT to guarantee templates are always instantiated properly and at most one version of each instantiation is present in the final executable.
      • Table-Driven Exception Handling (TDEH): Almost zero impact on code performance as opposed to COFF which uses setjmp/longjmp to implement C++ exceptions Features enabled by EABI.
    • Features enabled by EABI
      • Location attribute: Specify the run-time address of a symbol in C-source code.
      • Noinit/persistent attribute: Specify if a symbol should not be initialized during C auto initialization.
      • Weak attribute: Weak symbol definitions are pre-empted by strong definitions. Weak symbol references are not required to be resolved at link time. Unresolved weak symbols resolve to 0.
      • External aliases: In COFF, the compiler will make A an alias to B if all calls to A can be replaced with B. A and B must be defined in the same file. In EABI, the compiler will make A an alias to B even if B is external.
    • Calling convention
      • Scalar calling convention is identical between COFF and EABI
      • Struct calling convention (EABI)
        • Single field structs are passed/returned by value corresponding to the underlying scalar types.
        • For FPU32, homogenous float structs with size less than 128 bits will be passed by value.
        • Passed in R0H-R3H, then by value on the stack.
        • Structs that are passed by value are also candidates for register allocation.
        • For FPU64, the same applies for 64-bit doubles(R0-R3).
    • Double memory size
      • In EABI, double is 64-bit size while in COFF, double is still represented as 32-bit size.
      • C/C++ requires that double be able to represent integer types with at least 10 decimal digits, which effectively requires 64-bit double precision.
  • Sections overview:
  • Table 19 summarizes the section names for COFF and EABI. These are compiler-generated sections.

    Table 19. Section Names

    Description COFF EABI
    Read-Only Sections
    Const data .econst .const
    Const data above 22-bits .farconst .farconst
    Code .text .text
    Pre-main constructors .pinit .init_array
    Exception handling N/A .c28xabi.exidx/.c28xabi.extab
    Read-Write Sections
    Uninitialized data .ebss .bss
    Initialized data N/A .data
    Uninitialized data above 22-bits .farbss .farbss
    Initialized data above 22-bits N/A .fardata
    Heap .esysmem .sysmem
    Stack .stack .stack
    CIO Buffer .cio .bss:cio
  • Resources:
    For more information regarding EABI and the migration process, see the resources on the links below: