Cross-Linking in TriCore

03-Dec-2024

This article provides information regarding the TriCore v6.3r1 cross-linking in addition to the existing Chapter 7.5 Cross-Linking in the TriCore user guide. It explains the changes introduced in the v6.3r1-based patches due to EABI compliance reasons. Moreover, this article includes details of the --eabi option additions and clarifies the option settings for the whole application.

Chapter 7.5 Cross-Linking also explains the evolution of the --eabi options for EABI compliance. Some sub-options have been added to ensure EABI compliance. These updates resolve known EABI-related issues and fulfill the requirement to comply with new versions of the EABI specification which now define the required toolset behavior in previously unspecified use cases.

To cross-link object files generated with a newer version with an older one, you need to ensure that the new EABI compliance options are not activated. EABI compliance is activated using an uppercase letter or -<option name>. The following list explains the newly introduced EABI compliance sub-options depending on the version of the tools:

  • v6.1r1:

The char-bitfield option has been added. It must be enabled for downward compatibility with older versions, which can be done using --eabi=+char-bitfield or --eabi=c. Alternatively, you can omit this option, as it is enabled by default.

  • v6.2r1:

The word-struct-align option has been addedIt must be enabled for downward compatibility with older versions, which can be done using --eabi=+word-struct-align or --eabi=w. Alternatively, you can omit this option, as it is enabled by default.

  • v6.3r1:

The bitfield-align option has been addedIt must be enabled for downward compatibility with older versions, which can be done using --eabi=+bitfield-align or --eabi=b. Alternatively, you can omit this option, as it is enabled by default.

  • v6.3r1 patch 6:

The issue TCVX-44802 has been resolved, which can have an impact on the alignment of the int data type bit-fields in a struct. For downward compatibility with older versions v6.3r1 patch 5 and below, you need to apply the C compiler option --mitigation=tcvx-44802.  

  • v6.3r1 patch 7:

The issue TCVX-44802 has been resolved, which can have an impact on the alignment of the int data type bit-fields in a struct. For downward compatibility with older versions v6.3r1 patch 5 and below, you need to apply the C compiler option --mitigation=tcvx-44802.

  • v6.3r1 patch 8:

The short-bitfield, int-bitfield and long-long-bitfield options have been added. They must be enabled for downward compatibility with older versions, which can be done using --eabi=+short-bitfield+int-bitfield+long-long-bitfield or --eabi=dil. Alternatively, you can omit this option, as it is enabled by default.

    The option --mitigation=tcvx-44802 is now deprecated due to the introduction of the EABI option int-bitfield. In v6.3r1 patch 8, --eabi=+int-bitfield or --eabi=i shall be used to be downward compatible with older versions v6.3r1 patch 5 and below.


    Additional information


    Chapter 7.5 Cross-Linking states that:

        The following options of the TriCore compiler have the same values for the whole application:
        --eabi=+bitfield-align
        --eabi=+char-bitfield
        --eabi=+half-word-align
        --eabi=+word-struct-align
        --fp-model=+float
        --integer-enumeration
        --mmu-on and --mmu-present
        --signed-bitfields
        --uchar


    This statement can be misleading as you might assume that the named options must be enabled for cross-linking. This is not valid. The purpose of this statement is to underline that the option setting for the named options may not alternate across a project. For example, you should not compile a C source module using --eabi=+half-word-align, and another one using --eabi=-half-word-align. Instead, it needs to be either --eabi=+half-word-align or--eabi=-half-word-align for the whole application.


    More resources

    Was this answer helpful?