This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TMS320F28377D: Compiler not generating correct DWARF call frame information

Part Number: TMS320F28377D

Tool/software: TI C/C++ Compiler

I compile the following code

float dotp_f32_f32_f32( const float * a, const float * b, int num )

{

int i;

float result = 0.0f;

_nassert( num > 1 );

for ( i = 0; i < num; i++ )

{

result += *a++ * *b++;

}

return result;

}

 

I compile with the following command line (through CCS)

 

**** Build of configuration Release for project temp ****

"C:\\ti\\ccsv6\\utils\\bin\\gmake" -k temp.obj

'Building file: ../temp.c'

'Invoking: C2000 Compiler'

"C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_17.9.0.STS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 -O2 --include_path="C:/ti/ccsv6/tools/compiler/ti-cgt-c2000_17.9.0.STS/include" --diag_warning=225 --diag_wrap=off --display_error_number -k --src_interlist --preproc_with_compile --preproc_dependency="temp.d" "../temp.c"

'Finished building: ../temp.c'

' '

**** Build Finished ****

This produces the following assembly file

;***************************************************************

;* TMS320C2000 C/C++ Codegen PC v17.9.0.STS *

;* Date/Time created: Wed Nov 15 14:58:05 2017 *

;***************************************************************

.compiler_opts --abi=coffabi --cla_support=cla1 --diag_wrap=off --float_support=fpu32 --hll_source=on --mem_model:code=flat --mem_model:data=large --object_format=coff --silicon_version=28 --symdebug:dwarf --symdebug:dwarf_version=3 --tmu_support=tmu0

.asg XAR2, FP

$C$DW$CU .dwtag DW_TAG_compile_unit

.dwattr $C$DW$CU, DW_AT_name("../temp.c")

.dwattr $C$DW$CU, DW_AT_producer("TI TMS320C2000 C/C++ Codegen PC v17.9.0.STS Copyright (c) 1996-2017 Texas Instruments Incorporated")

.dwattr $C$DW$CU, DW_AT_TI_version(0x01)

.dwattr $C$DW$CU, DW_AT_comp_dir("C:\Users\rist-1\CcsWorkspace\temp\Release")

$C$DW$1 .dwtag DW_TAG_subprogram

.dwattr $C$DW$1, DW_AT_name("_nassert")

.dwattr $C$DW$1, DW_AT_TI_symbol_name("__nassert")

.dwattr $C$DW$1, DW_AT_declaration

.dwattr $C$DW$1, DW_AT_external

$C$DW$2 .dwtag DW_TAG_formal_parameter

.dwattr $C$DW$2, DW_AT_type(*$C$DW$T$10)

.dwendtag $C$DW$1

; C:\ti\ccsv6\tools\compiler\ti-cgt-c2000_17.9.0.STS\bin\opt2000.exe C:\\Users\\rist-1\\AppData\\Local\\Temp\\{4F90EC8F-0DF8-485A-87B1-8676861B4445} C:\\Users\\rist-1\\AppData\\Local\\Temp\\{A8E3CBE3-D0B5-44F6-B2FB-145805233A8E}

; C:\ti\ccsv6\tools\compiler\ti-cgt-c2000_17.9.0.STS\bin\ac2000.exe -@C:\\Users\\rist-1\\AppData\\Local\\Temp\\{A641DD8E-03A8-4DEB-873D-C8C4B53EA530}

.sect ".text"

.clink

.global _dotp_f32_f32_f32

$C$DW$3 .dwtag DW_TAG_subprogram

.dwattr $C$DW$3, DW_AT_name("dotp_f32_f32_f32")

.dwattr $C$DW$3, DW_AT_low_pc(_dotp_f32_f32_f32)

.dwattr $C$DW$3, DW_AT_high_pc(0x00)

.dwattr $C$DW$3, DW_AT_TI_symbol_name("_dotp_f32_f32_f32")

.dwattr $C$DW$3, DW_AT_external

.dwattr $C$DW$3, DW_AT_type(*$C$DW$T$16)

.dwattr $C$DW$3, DW_AT_TI_begin_file("../temp.c")

.dwattr $C$DW$3, DW_AT_TI_begin_line(0x01)

.dwattr $C$DW$3, DW_AT_TI_begin_column(0x07)

.dwattr $C$DW$3, DW_AT_TI_max_frame_size(-6)

.dwpsn file "../temp.c",line 2,column 1,is_stmt,address _dotp_f32_f32_f32,isa 0

.dwfde $C$DW$CIE, _dotp_f32_f32_f32

$C$DW$4 .dwtag DW_TAG_formal_parameter

.dwattr $C$DW$4, DW_AT_name("a")

.dwattr $C$DW$4, DW_AT_TI_symbol_name("_a")

.dwattr $C$DW$4, DW_AT_type(*$C$DW$T$23)

.dwattr $C$DW$4, DW_AT_location[DW_OP_reg12]

$C$DW$5 .dwtag DW_TAG_formal_parameter

.dwattr $C$DW$5, DW_AT_name("b")

.dwattr $C$DW$5, DW_AT_TI_symbol_name("_b")

.dwattr $C$DW$5, DW_AT_type(*$C$DW$T$23)

.dwattr $C$DW$5, DW_AT_location[DW_OP_reg14]

$C$DW$6 .dwtag DW_TAG_formal_parameter

.dwattr $C$DW$6, DW_AT_name("num")

.dwattr $C$DW$6, DW_AT_TI_symbol_name("_num")

.dwattr $C$DW$6, DW_AT_type(*$C$DW$T$10)

.dwattr $C$DW$6, DW_AT_location[DW_OP_reg0]

 

;***************************************************************

;* FNAME: _dotp_f32_f32_f32 FR SIZE: 4 *

;* *

;* FUNCTION ENVIRONMENT *

;* *

;* FUNCTION PROPERTIES *

;* 0 Parameter, 0 Auto, 4 SOE *

;***************************************************************

_dotp_f32_f32_f32:

;* R2H assigned to $O$T1

$C$DW$7 .dwtag DW_TAG_variable

.dwattr $C$DW$7, DW_AT_name("O$T1")

.dwattr $C$DW$7, DW_AT_TI_symbol_name("$O$T1")

.dwattr $C$DW$7, DW_AT_type(*$C$DW$T$16)

.dwattr $C$DW$7, DW_AT_location[DW_OP_regx 0x33]

;* AR5 assigned to $O$L1

$C$DW$8 .dwtag DW_TAG_variable

.dwattr $C$DW$8, DW_AT_name("O$L1")

.dwattr $C$DW$8, DW_AT_TI_symbol_name("$O$L1")

.dwattr $C$DW$8, DW_AT_type(*$C$DW$T$10)

.dwattr $C$DW$8, DW_AT_location[DW_OP_reg14]

;* AR4 assigned to _a

$C$DW$9 .dwtag DW_TAG_variable

.dwattr $C$DW$9, DW_AT_name("a")

.dwattr $C$DW$9, DW_AT_TI_symbol_name("_a")

.dwattr $C$DW$9, DW_AT_type(*$C$DW$T$23)

.dwattr $C$DW$9, DW_AT_location[DW_OP_reg12]

;* AR7 assigned to _b

$C$DW$10 .dwtag DW_TAG_variable

.dwattr $C$DW$10, DW_AT_name("b")

.dwattr $C$DW$10, DW_AT_TI_symbol_name("_b")

.dwattr $C$DW$10, DW_AT_type(*$C$DW$T$23)

.dwattr $C$DW$10, DW_AT_location[DW_OP_reg18]

;* AR5 assigned to _num

$C$DW$11 .dwtag DW_TAG_variable

.dwattr $C$DW$11, DW_AT_name("num")

.dwattr $C$DW$11, DW_AT_TI_symbol_name("_num")

.dwattr $C$DW$11, DW_AT_type(*$C$DW$T$20)

.dwattr $C$DW$11, DW_AT_location[DW_OP_reg14]

;* R3H assigned to _result

$C$DW$12 .dwtag DW_TAG_variable

.dwattr $C$DW$12, DW_AT_name("result")

.dwattr $C$DW$12, DW_AT_TI_symbol_name("_result")

.dwattr $C$DW$12, DW_AT_type(*$C$DW$T$16)

.dwattr $C$DW$12, DW_AT_location[DW_OP_regx 0x37]

.dwcfi cfa_offset, -2

.dwcfi save_reg_to_mem, 26, 0

;*** ----------------------- L$1 = num-1;

;*** 4 ----------------------- result = T$1 = 0.0F;

;*** ----------------------- #pragma MUST_ITERATE(2, 32767, 1)

;*** ----------------------- #pragma LOOP_FLAGS(4096u)

;*** -----------------------g2:

;*** 9 ----------------------- __parallel_mpy_add_f32(*a++, *b++, &(result), &(T$1));

;*** 7 ----------------------- if ( (--L$1) != (-1) ) goto g2;

;*** 12 ----------------------- result += T$1;

;*** 12 ----------------------- return result;

MOVL XAR7,XAR5 ; [CPU_ALU] |2|

MOV32 *SP++,R6H ; [CPU_FPU]

.dwpsn file "../temp.c",line 4,column 18,is_stmt,isa 0

ZERO R2H ; [CPU_FPU] |4|

.dwpsn file "../temp.c",line 2,column 1,is_stmt,isa 0

MOVZ AR5,AL ; [CPU_ALU] |2|

.dwpsn file "../temp.c",line 9,column 9,is_stmt,isa 0

ZERO R6H ; [CPU_FPU] |9|

MOV32 *SP++,R7H ; [CPU_FPU]

.dwpsn file "../temp.c",line 4,column 18,is_stmt,isa 0

MOV32 R3H,R2H ; [CPU_FPU] |4|

.dwpsn file "../temp.c",line 9,column 9,is_stmt,isa 0

ZERO R7H ; [CPU_FPU] |9|

SUBB XAR5,#1 ; [CPU_ARAU]

RPT AR5

|| MACF32 R7H,R3H,*XAR4++,*XAR7++ ; [CPU_FPU] |9|

ADDF32 R3H,R3H,R2H ; [CPU_FPU] |9|

ADDF32 R2H,R7H,R6H ; [CPU_FPU] |9|

.dwpsn file "../temp.c",line 12,column 5,is_stmt,isa 0

MOV32 R7H,*--SP ; [CPU_FPU] |12|

MOV32 R6H,*--SP ; [CPU_FPU] |12|

|| ADDF32 R0H,R2H,R3H ; [CPU_FPU] |12|

$C$DW$13 .dwtag DW_TAG_TI_branch

.dwattr $C$DW$13, DW_AT_low_pc(0x00)

.dwattr $C$DW$13, DW_AT_TI_return

LRETR ; [CPU_ALU]

; return occurs ; []

.dwattr $C$DW$3, DW_AT_TI_end_file("../temp.c")

.dwattr $C$DW$3, DW_AT_TI_end_line(0x0d)

.dwattr $C$DW$3, DW_AT_TI_end_column(0x01)

.dwendentry

.dwendtag $C$DW$3

 

;***************************************************************

;* TYPE INFORMATION *

;***************************************************************

$C$DW$T$2 .dwtag DW_TAG_unspecified_type

.dwattr $C$DW$T$2, DW_AT_name("void")

$C$DW$T$4 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$4, DW_AT_encoding(DW_ATE_boolean)

.dwattr $C$DW$T$4, DW_AT_name("bool")

.dwattr $C$DW$T$4, DW_AT_byte_size(0x01)

$C$DW$T$5 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$5, DW_AT_encoding(DW_ATE_signed_char)

.dwattr $C$DW$T$5, DW_AT_name("signed char")

.dwattr $C$DW$T$5, DW_AT_byte_size(0x01)

$C$DW$T$6 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$6, DW_AT_encoding(DW_ATE_unsigned_char)

.dwattr $C$DW$T$6, DW_AT_name("unsigned char")

.dwattr $C$DW$T$6, DW_AT_byte_size(0x01)

$C$DW$T$7 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$7, DW_AT_encoding(DW_ATE_signed_char)

.dwattr $C$DW$T$7, DW_AT_name("wchar_t")

.dwattr $C$DW$T$7, DW_AT_byte_size(0x01)

$C$DW$T$8 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$8, DW_AT_encoding(DW_ATE_signed)

.dwattr $C$DW$T$8, DW_AT_name("short")

.dwattr $C$DW$T$8, DW_AT_byte_size(0x01)

$C$DW$T$9 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$9, DW_AT_encoding(DW_ATE_unsigned)

.dwattr $C$DW$T$9, DW_AT_name("unsigned short")

.dwattr $C$DW$T$9, DW_AT_byte_size(0x01)

$C$DW$T$10 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$10, DW_AT_encoding(DW_ATE_signed)

.dwattr $C$DW$T$10, DW_AT_name("int")

.dwattr $C$DW$T$10, DW_AT_byte_size(0x01)

$C$DW$14 .dwtag DW_TAG_TI_far_type

.dwattr $C$DW$14, DW_AT_type(*$C$DW$T$10)

$C$DW$T$20 .dwtag DW_TAG_const_type

.dwattr $C$DW$T$20, DW_AT_type(*$C$DW$14)

$C$DW$T$11 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$11, DW_AT_encoding(DW_ATE_unsigned)

.dwattr $C$DW$T$11, DW_AT_name("unsigned int")

.dwattr $C$DW$T$11, DW_AT_byte_size(0x01)

$C$DW$T$12 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$12, DW_AT_encoding(DW_ATE_signed)

.dwattr $C$DW$T$12, DW_AT_name("long")

.dwattr $C$DW$T$12, DW_AT_byte_size(0x02)

$C$DW$T$13 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$13, DW_AT_encoding(DW_ATE_unsigned)

.dwattr $C$DW$T$13, DW_AT_name("unsigned long")

.dwattr $C$DW$T$13, DW_AT_byte_size(0x02)

$C$DW$T$14 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$14, DW_AT_encoding(DW_ATE_signed)

.dwattr $C$DW$T$14, DW_AT_name("long long")

.dwattr $C$DW$T$14, DW_AT_byte_size(0x04)

$C$DW$T$15 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$15, DW_AT_encoding(DW_ATE_unsigned)

.dwattr $C$DW$T$15, DW_AT_name("unsigned long long")

.dwattr $C$DW$T$15, DW_AT_byte_size(0x04)

$C$DW$T$16 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$16, DW_AT_encoding(DW_ATE_float)

.dwattr $C$DW$T$16, DW_AT_name("float")

.dwattr $C$DW$T$16, DW_AT_byte_size(0x02)

$C$DW$15 .dwtag DW_TAG_TI_far_type

.dwattr $C$DW$15, DW_AT_type(*$C$DW$T$16)

$C$DW$T$22 .dwtag DW_TAG_const_type

.dwattr $C$DW$T$22, DW_AT_type(*$C$DW$15)

$C$DW$T$23 .dwtag DW_TAG_pointer_type

.dwattr $C$DW$T$23, DW_AT_type(*$C$DW$T$22)

.dwattr $C$DW$T$23, DW_AT_address_class(0x20)

$C$DW$T$17 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$17, DW_AT_encoding(DW_ATE_float)

.dwattr $C$DW$T$17, DW_AT_name("double")

.dwattr $C$DW$T$17, DW_AT_byte_size(0x02)

$C$DW$T$18 .dwtag DW_TAG_base_type

.dwattr $C$DW$T$18, DW_AT_encoding(DW_ATE_float)

.dwattr $C$DW$T$18, DW_AT_name("long double")

.dwattr $C$DW$T$18, DW_AT_byte_size(0x04)

.dwattr $C$DW$CU, DW_AT_language(DW_LANG_C)

;***************************************************************

;* DWARF CIE ENTRIES *

;***************************************************************

$C$DW$CIE .dwcie 26

.dwcfi cfa_register, 20

.dwcfi cfa_offset, 0

.dwcfi same_value, 28

.dwcfi same_value, 6

.dwcfi same_value, 7

.dwcfi same_value, 8

.dwcfi same_value, 9

.dwcfi same_value, 10

.dwcfi same_value, 11

.dwcfi same_value, 59

.dwcfi same_value, 60

.dwcfi same_value, 63

.dwcfi same_value, 64

.dwcfi same_value, 67

.dwcfi same_value, 68

.dwcfi same_value, 71

.dwcfi same_value, 72

.dwendentry

;***************************************************************

;* DWARF REGISTER MAP *

;***************************************************************

$C$DW$16 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$16, DW_AT_name("AL")

.dwattr $C$DW$16, DW_AT_location[DW_OP_reg0]

$C$DW$17 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$17, DW_AT_name("AH")

.dwattr $C$DW$17, DW_AT_location[DW_OP_reg1]

$C$DW$18 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$18, DW_AT_name("PL")

.dwattr $C$DW$18, DW_AT_location[DW_OP_reg2]

$C$DW$19 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$19, DW_AT_name("PH")

.dwattr $C$DW$19, DW_AT_location[DW_OP_reg3]

$C$DW$20 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$20, DW_AT_name("SP")

.dwattr $C$DW$20, DW_AT_location[DW_OP_reg20]

$C$DW$21 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$21, DW_AT_name("XT")

.dwattr $C$DW$21, DW_AT_location[DW_OP_reg21]

$C$DW$22 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$22, DW_AT_name("T")

.dwattr $C$DW$22, DW_AT_location[DW_OP_reg22]

$C$DW$23 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$23, DW_AT_name("ST0")

.dwattr $C$DW$23, DW_AT_location[DW_OP_reg23]

$C$DW$24 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$24, DW_AT_name("ST1")

.dwattr $C$DW$24, DW_AT_location[DW_OP_reg24]

$C$DW$25 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$25, DW_AT_name("PC")

.dwattr $C$DW$25, DW_AT_location[DW_OP_reg25]

$C$DW$26 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$26, DW_AT_name("RPC")

.dwattr $C$DW$26, DW_AT_location[DW_OP_reg26]

$C$DW$27 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$27, DW_AT_name("FP")

.dwattr $C$DW$27, DW_AT_location[DW_OP_reg28]

$C$DW$28 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$28, DW_AT_name("DP")

.dwattr $C$DW$28, DW_AT_location[DW_OP_reg29]

$C$DW$29 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$29, DW_AT_name("SXM")

.dwattr $C$DW$29, DW_AT_location[DW_OP_reg30]

$C$DW$30 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$30, DW_AT_name("PM")

.dwattr $C$DW$30, DW_AT_location[DW_OP_reg31]

$C$DW$31 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$31, DW_AT_name("OVM")

.dwattr $C$DW$31, DW_AT_location[DW_OP_regx 0x20]

$C$DW$32 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$32, DW_AT_name("PAGE0")

.dwattr $C$DW$32, DW_AT_location[DW_OP_regx 0x21]

$C$DW$33 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$33, DW_AT_name("AMODE")

.dwattr $C$DW$33, DW_AT_location[DW_OP_regx 0x22]

$C$DW$34 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$34, DW_AT_name("INTM")

.dwattr $C$DW$34, DW_AT_location[DW_OP_regx 0x23]

$C$DW$35 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$35, DW_AT_name("IFR")

.dwattr $C$DW$35, DW_AT_location[DW_OP_regx 0x24]

$C$DW$36 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$36, DW_AT_name("IER")

.dwattr $C$DW$36, DW_AT_location[DW_OP_regx 0x25]

$C$DW$37 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$37, DW_AT_name("V")

.dwattr $C$DW$37, DW_AT_location[DW_OP_regx 0x26]

$C$DW$38 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$38, DW_AT_name("PSEUDOH")

.dwattr $C$DW$38, DW_AT_location[DW_OP_regx 0x4c]

$C$DW$39 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$39, DW_AT_name("VOL")

.dwattr $C$DW$39, DW_AT_location[DW_OP_regx 0x4d]

$C$DW$40 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$40, DW_AT_name("AR0")

.dwattr $C$DW$40, DW_AT_location[DW_OP_reg4]

$C$DW$41 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$41, DW_AT_name("XAR0")

.dwattr $C$DW$41, DW_AT_location[DW_OP_reg5]

$C$DW$42 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$42, DW_AT_name("AR1")

.dwattr $C$DW$42, DW_AT_location[DW_OP_reg6]

$C$DW$43 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$43, DW_AT_name("XAR1")

.dwattr $C$DW$43, DW_AT_location[DW_OP_reg7]

$C$DW$44 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$44, DW_AT_name("AR2")

.dwattr $C$DW$44, DW_AT_location[DW_OP_reg8]

$C$DW$45 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$45, DW_AT_name("XAR2")

.dwattr $C$DW$45, DW_AT_location[DW_OP_reg9]

$C$DW$46 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$46, DW_AT_name("AR3")

.dwattr $C$DW$46, DW_AT_location[DW_OP_reg10]

$C$DW$47 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$47, DW_AT_name("XAR3")

.dwattr $C$DW$47, DW_AT_location[DW_OP_reg11]

$C$DW$48 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$48, DW_AT_name("AR4")

.dwattr $C$DW$48, DW_AT_location[DW_OP_reg12]

$C$DW$49 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$49, DW_AT_name("XAR4")

.dwattr $C$DW$49, DW_AT_location[DW_OP_reg13]

$C$DW$50 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$50, DW_AT_name("AR5")

.dwattr $C$DW$50, DW_AT_location[DW_OP_reg14]

$C$DW$51 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$51, DW_AT_name("XAR5")

.dwattr $C$DW$51, DW_AT_location[DW_OP_reg15]

$C$DW$52 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$52, DW_AT_name("AR6")

.dwattr $C$DW$52, DW_AT_location[DW_OP_reg16]

$C$DW$53 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$53, DW_AT_name("XAR6")

.dwattr $C$DW$53, DW_AT_location[DW_OP_reg17]

$C$DW$54 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$54, DW_AT_name("AR7")

.dwattr $C$DW$54, DW_AT_location[DW_OP_reg18]

$C$DW$55 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$55, DW_AT_name("XAR7")

.dwattr $C$DW$55, DW_AT_location[DW_OP_reg19]

$C$DW$56 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$56, DW_AT_name("R0H")

.dwattr $C$DW$56, DW_AT_location[DW_OP_regx 0x2b]

$C$DW$57 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$57, DW_AT_name("R0HH")

.dwattr $C$DW$57, DW_AT_location[DW_OP_regx 0x2c]

$C$DW$58 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$58, DW_AT_name("R1H")

.dwattr $C$DW$58, DW_AT_location[DW_OP_regx 0x2f]

$C$DW$59 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$59, DW_AT_name("R1HH")

.dwattr $C$DW$59, DW_AT_location[DW_OP_regx 0x30]

$C$DW$60 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$60, DW_AT_name("R2H")

.dwattr $C$DW$60, DW_AT_location[DW_OP_regx 0x33]

$C$DW$61 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$61, DW_AT_name("R2HH")

.dwattr $C$DW$61, DW_AT_location[DW_OP_regx 0x34]

$C$DW$62 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$62, DW_AT_name("R3H")

.dwattr $C$DW$62, DW_AT_location[DW_OP_regx 0x37]

$C$DW$63 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$63, DW_AT_name("R3HH")

.dwattr $C$DW$63, DW_AT_location[DW_OP_regx 0x38]

$C$DW$64 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$64, DW_AT_name("R4H")

.dwattr $C$DW$64, DW_AT_location[DW_OP_regx 0x3b]

$C$DW$65 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$65, DW_AT_name("R4HH")

.dwattr $C$DW$65, DW_AT_location[DW_OP_regx 0x3c]

$C$DW$66 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$66, DW_AT_name("R5H")

.dwattr $C$DW$66, DW_AT_location[DW_OP_regx 0x3f]

$C$DW$67 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$67, DW_AT_name("R5HH")

.dwattr $C$DW$67, DW_AT_location[DW_OP_regx 0x40]

$C$DW$68 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$68, DW_AT_name("R6H")

.dwattr $C$DW$68, DW_AT_location[DW_OP_regx 0x43]

$C$DW$69 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$69, DW_AT_name("R6HH")

.dwattr $C$DW$69, DW_AT_location[DW_OP_regx 0x44]

$C$DW$70 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$70, DW_AT_name("R7H")

.dwattr $C$DW$70, DW_AT_location[DW_OP_regx 0x47]

$C$DW$71 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$71, DW_AT_name("R7HH")

.dwattr $C$DW$71, DW_AT_location[DW_OP_regx 0x48]

$C$DW$72 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$72, DW_AT_name("RBL")

.dwattr $C$DW$72, DW_AT_location[DW_OP_regx 0x49]

$C$DW$73 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$73, DW_AT_name("RB")

.dwattr $C$DW$73, DW_AT_location[DW_OP_regx 0x4a]

$C$DW$74 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$74, DW_AT_name("STFL")

.dwattr $C$DW$74, DW_AT_location[DW_OP_regx 0x27]

$C$DW$75 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$75, DW_AT_name("STF")

.dwattr $C$DW$75, DW_AT_location[DW_OP_regx 0x28]

$C$DW$76 .dwtag DW_TAG_TI_assign_register

.dwattr $C$DW$76, DW_AT_name("FPUHAZ")

.dwattr $C$DW$76, DW_AT_location[DW_OP_reg27]

.dwendtag $C$DW$CU

My issue is that the comments state the stack frame is 4 words and floating point registers are pushed onto and popped off the stack, but nowhere within the function are the expected '.dwcfi cfa_offset, -2' DWARF tags emitted. Why is this the case? I cannot use the DWARF information to unwind the call stack because these DWARF tags are missing.

  • I have just found the following in another compiler generated assembly file while chasing down a bug.

    .dwcfi cfa_offset, -10
    MOV32 R5H,*--SP ; [CPU_FPU]
    MOV32 R4H,*--SP ; [CPU_FPU]
    MOVL XAR2,*--SP ; [CPU_ALU]
    .dwcfi cfa_offset, -4
    .dwcfi restore_reg, 9
    MOVL XAR1,*--SP ; [CPU_ALU]
    .dwcfi cfa_offset, -2
    .dwcfi restore_reg, 7


    It looks like the compiler is not generating correct call frame information for FPU registers.
  • Interesting; this does look like a bug. I've submitted CODEGEN-3923 to track this issue.