Using CCS 6.1.3.00033 SYS/BIOS had created projects for the Cortex-A15 in a 66AK2H14 using SYS/BIOS 6.45.1.29 and GNU compiler v4.9.3.
When changed to using CCS 6.2.0.00048 the GCC linker was reporting errors about incompatible object files due to differences in the use of VFP register arguments. The problem can be shown with the unmodified semihost_66AK2H12_CortexA example from SYS/BIOS 6.45.1.29. With CCS 6.1.3 a successful link:
'Building target: semihost_66AK2H12_CortexA.out' 'Invoking: GNU Linker' "C:/ti_ccs6_1_3/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc.exe" -mfloat-abi=hard -g -gdwarf-3 -gstrict-dwarf -Wall -Wl,-Map,"semihost_66AK2H12_CortexA.map" -nostartfiles -static -Wl,--gc-sections -L"C:/ti/bios_6_45_01_29/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu" -o"semihost_66AK2H12_CortexA.out" "./semihost.o" -Wl,-T"configPkg/linker.cmd" -Wl,--start-group -lgcc -lm -lrdimon -lc -Wl,--end-group 'Finished building target: semihost_66AK2H12_CortexA.out'
With CCS 6.2.0 a failed link:
'Building target: semihost_66AK2H12_CortexA.out' 'Invoking: GNU Linker' "C:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc.exe" -mcpu=cortex-a15 -marm -mfloat-abi=hard -g -gdwarf-3 -gstrict-dwarf -Wall -Wl,-Map,"semihost_66AK2H12_CortexA.map" -nostartfiles -static -Wl,--gc-sections -L"C:/ti/bios_6_45_01_29/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu" -o"semihost_66AK2H12_CortexA.out" "./semihost.o" -Wl,-T"configPkg/linker.cmd" -Wl,--start-group -lgcc -lm -lrdimon -lc -Wl,--end-group makefile:144: recipe for target 'semihost_66AK2H12_CortexA.out' failed c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: error: semihost_66AK2H12_CortexA.out uses VFP register arguments, c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(bpabi.o) does not c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(bpabi.o) c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: error: semihost_66AK2H12_CortexA.out uses VFP register arguments, c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(_divdi3.o) does not c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(_divdi3.o) c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: error: semihost_66AK2H12_CortexA.out uses VFP register arguments, c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(_udivdi3.o) does not c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file c:/ti_ccs6_2_0/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3\libgcc.a(_udivdi3.o) collect2.exe: error: ld returned 1 exit status gmake: *** [semihost_66AK2H12_CortexA.out] Error 1
There is a difference in the flags passed to the GCC linker between the two CCS versions.
CCS 6.1.3 passes:
-mfloat-abi=hard
CCS 6.2.0 passes:
-mcpu=cortex-a15 -marm -mfloat-abi=hard
I guess this change in behavior is a result of the CCS 6.2.0 bug fix for SDSCM00052763.