xref: /llvm-project/llvm/test/tools/llvm-objdump/XCOFF/disassemble-traceback-table.test (revision b5abaea3c0de605c8145035b21a5ee492883ebd7)
1d6d7f7b1Szhijian## Test that "llvm-objdump --traceback-table" decodes the ControlledStorageInfo,
2d6d7f7b1Szhijian## AllocaRegister, and extension table of the traceback table.
3d6d7f7b1Szhijian
4d6d7f7b1Szhijian# RUN: yaml2obj %s -o %t.o
5d6d7f7b1Szhijian# RUN: llvm-objdump -d --traceback-table --symbol-description %t.o | \
6d6d7f7b1Szhijian# RUN:   FileCheck --match-full-lines --strict-whitespace %s
7d6d7f7b1Szhijian
8d6d7f7b1Szhijian## Show that --traceback-table implies --disassemble.
9d6d7f7b1Szhijian# RUN: llvm-objdump --traceback-table --symbol-description %t.o | \
10d6d7f7b1Szhijian# RUN:   FileCheck --match-full-lines --strict-whitespace %s
11d6d7f7b1Szhijian
12d6d7f7b1Szhijian--- !XCOFF
13d6d7f7b1SzhijianFileHeader:
14d6d7f7b1Szhijian  MagicNumber:       0x1DF
15d6d7f7b1SzhijianSections:
16d6d7f7b1Szhijian  - Name:            .text
17d6d7f7b1Szhijian    Flags:           [ STYP_TEXT ]
18d6d7f7b1Szhijian    SectionData:     "9421ffc0000000000000204080000201000000000000000400064164644e756d0000000093e1fffc0000000000002a6080c202072c90000000000004000000036f0000010000000a000001000003666f6f1f0203c000000000002000000000000000000000000000010000000000000100000000000000000000000000123400000000"
19d6d7f7b1SzhijianSymbols:
20d6d7f7b1Szhijian  - Name:            .AddNum
21d6d7f7b1Szhijian    Value:           0
22d6d7f7b1Szhijian    Section:         .text
23d6d7f7b1Szhijian    Type:            0x20
24d6d7f7b1Szhijian    StorageClass:    C_EXT
25d6d7f7b1Szhijian    AuxEntries:
26d6d7f7b1Szhijian      - Type:                   AUX_CSECT
27d6d7f7b1Szhijian        SectionOrLength:        0x24
28d6d7f7b1Szhijian        SymbolAlignmentAndType: 0x21
29d6d7f7b1Szhijian        StorageMappingClass:    XMC_PR
30d6d7f7b1Szhijian  - Name:            .foo
31d6d7f7b1Szhijian    Value:           0x24
32d6d7f7b1Szhijian    Section:         .text
33d6d7f7b1Szhijian    Type:            0x20
34d6d7f7b1Szhijian    StorageClass:    C_EXT
35d6d7f7b1Szhijian    AuxEntries:
36d6d7f7b1Szhijian      - Type:                   AUX_CSECT
37d6d7f7b1Szhijian        SectionOrLength:        0x5F
38d6d7f7b1Szhijian        SymbolAlignmentAndType: 0x21
39d6d7f7b1Szhijian        StorageMappingClass:    XMC_PR
40d6d7f7b1Szhijian
41d6d7f7b1Szhijian## The above .text section data is generated using the compiler command:
42d6d7f7b1Szhijian##   xlc -o test.o -c test.c
43d6d7f7b1Szhijian## We also modified the binary content of the traceback table in the object file to add vector information
44d6d7f7b1Szhijian## for function "foo", including ControlledStorageInfo, AllocaRegister, and ExtensionTable.
45d6d7f7b1Szhijian
46d6d7f7b1Szhijian## test.c:
47d6d7f7b1Szhijian## int AddNum(int i,intj) {
48d6d7f7b1Szhijian##  return i+j;
49d6d7f7b1Szhijian## }
50d6d7f7b1Szhijian
51d6d7f7b1Szhijian## float foo(int i1,float f1,double d1,int i2, float f2) {
52d6d7f7b1Szhijian##    return i1+f1+d1+i2+f2;
53d6d7f7b1Szhijian##   }
54d6d7f7b1Szhijian
55d6d7f7b1Szhijian# CHECK:00000000 (idx: 0) .AddNum[PR]:
56d6d7f7b1Szhijian# CHECK-NEXT:       0: 94 21 ff c0  	stwu 1, -64(1)
57d6d7f7b1Szhijian# CHECK-NEXT:       4: 00 00 00 00  	# Traceback table start
58d6d7f7b1Szhijian# CHECK-NEXT:       8: 00           	# Version = 0
59d6d7f7b1Szhijian# CHECK-NEXT:       9: 00           	# Language = C
60d6d7f7b1Szhijian# CHECK-NEXT:       a: 20           	# -isGlobalLinkage, -isOutOfLineEpilogOrPrologue
61d6d7f7b1Szhijian# CHECK-NEXT:                       	  +hasTraceBackTableOffset, -isInternalProcedure
62d6d7f7b1Szhijian# CHECK-NEXT:                       	  -hasControlledStorage, -isTOCless
63d6d7f7b1Szhijian# CHECK-NEXT:                       	  -isFloatingPointPresent
64d6d7f7b1Szhijian# CHECK-NEXT:                       	  -isFloatingPointOperationLogOrAbortEnabled
65d6d7f7b1Szhijian# CHECK-NEXT:       b: 40           	# -isInterruptHandler, +isFuncNamePresent, -isAllocaUsed
66d6d7f7b1Szhijian# CHECK-NEXT:                       	  OnConditionDirective = 0, -isCRSaved, -isLRSaved
67d6d7f7b1Szhijian# CHECK-NEXT:       c: 80           	# +isBackChainStored, -isFixup, NumOfFPRsSaved = 0
68d6d7f7b1Szhijian# CHECK-NEXT:       d: 00           	# -hasExtensionTable, -hasVectorInfo, NumOfGPRsSaved = 0
69d6d7f7b1Szhijian# CHECK-NEXT:       e: 02           	# NumberOfFixedParms = 2
70d6d7f7b1Szhijian# CHECK-NEXT:       f: 01           	# NumberOfFPParms = 0, +hasParmsOnStack
71d6d7f7b1Szhijian# CHECK-NEXT:      10: 00 00 00 00  	# ParmsType = i, i
72d6d7f7b1Szhijian# CHECK-NEXT:      14: 00 00 00 04  	# TraceBackTableOffset = 4
73d6d7f7b1Szhijian# CHECK-NEXT:      18: 00 06        	# FunctionNameLen = 6
74d6d7f7b1Szhijian# CHECK-NEXT:      1a: 41 64 64 4e  	# FunctionName = AddNum
75d6d7f7b1Szhijian# CHECK-NEXT:      1e: 75 6d
76d6d7f7b1Szhijian# CHECK-NEXT:      20: 00 00 00 00  	# Padding
77d6d7f7b1Szhijian
78d6d7f7b1Szhijian# CHECK:00000024 (idx: 2) .foo[PR]:
79d6d7f7b1Szhijian# CHECK-NEXT:      24: 93 e1 ff fc  	stw 31, -4(1)
80d6d7f7b1Szhijian# CHECK-NEXT:      28: 00 00 00 00  	# Traceback table start
81d6d7f7b1Szhijian# CHECK-NEXT:      2c: 00           	# Version = 0
82d6d7f7b1Szhijian# CHECK-NEXT:      2d: 00           	# Language = C
83d6d7f7b1Szhijian# CHECK-NEXT:      2e: 2a           	# -isGlobalLinkage, -isOutOfLineEpilogOrPrologue
84d6d7f7b1Szhijian# CHECK-NEXT:                       	  +hasTraceBackTableOffset, -isInternalProcedure
85d6d7f7b1Szhijian# CHECK-NEXT:                       	  +hasControlledStorage, -isTOCless
86d6d7f7b1Szhijian# CHECK-NEXT:                       	  +isFloatingPointPresent
87d6d7f7b1Szhijian# CHECK-NEXT:                       	  -isFloatingPointOperationLogOrAbortEnabled
88d6d7f7b1Szhijian# CHECK-NEXT:      2f: 60           	# -isInterruptHandler, +isFuncNamePresent, +isAllocaUsed
89d6d7f7b1Szhijian# CHECK-NEXT:                       	  OnConditionDirective = 0, -isCRSaved, -isLRSaved
90d6d7f7b1Szhijian# CHECK-NEXT:      30: 80           	# +isBackChainStored, -isFixup, NumOfFPRsSaved = 0
91d6d7f7b1Szhijian# CHECK-NEXT:      31: c2           	# +hasExtensionTable, +hasVectorInfo, NumOfGPRsSaved = 2
92d6d7f7b1Szhijian# CHECK-NEXT:      32: 02           	# NumberOfFixedParms = 2
93d6d7f7b1Szhijian# CHECK-NEXT:      33: 07           	# NumberOfFPParms = 3, +hasParmsOnStack
94d6d7f7b1Szhijian# CHECK-NEXT:      34: 2c 90 00 00  	# ParmsType = i, f, d, i, f, v
95d6d7f7b1Szhijian# CHECK-NEXT:      38: 00 00 00 04  	# TraceBackTableOffset = 4
96d6d7f7b1Szhijian# CHECK-NEXT:      3c: 00 00 00 03  	# NumOfCtlAnchors = 3
97d6d7f7b1Szhijian# CHECK-NEXT:      40: 6f 00 00 01  	# ControlledStorageInfoDisp[0] = 1862270977
98d6d7f7b1Szhijian# CHECK-NEXT:      44: 00 00 00 0a  	  ControlledStorageInfoDisp[1] = 10
99d6d7f7b1Szhijian# CHECK-NEXT:      48: 00 00 01 00  	  ControlledStorageInfoDisp[2] = 256
100d6d7f7b1Szhijian# CHECK-NEXT:      4c: 00 03        	# FunctionNameLen = 3
101d6d7f7b1Szhijian# CHECK-NEXT:      4e: 66 6f 6f     	# FunctionName = foo
102d6d7f7b1Szhijian# CHECK-NEXT:      51: 1f           	# AllocaRegister = 31
103d6d7f7b1Szhijian# CHECK-NEXT:      52: 02           	# NumberOfVRSaved = 0, +isVRSavedOnStack, -hasVarArgs
104d6d7f7b1Szhijian# CHECK-NEXT:      53: 03           	# NumberOfVectorParms = 1, +hasVMXInstruction
105d6d7f7b1Szhijian# CHECK-NEXT:      54: c0 00 00 00  	# VectorParmsInfoString = vf
106d6d7f7b1Szhijian# CHECK-NEXT:      58: 00 00        	# Padding
107d6d7f7b1Szhijian# CHECK-NEXT:      5a: 20           	# ExtensionTable = TB_SSP_CANARY
108d6d7f7b1Szhijian# CHECK-NEXT:      5b: 00           	# Padding
109d6d7f7b1Szhijian# CHECK-NEXT:        ...
110d6d7f7b1Szhijian# CHECK-NEXT:      68: 01 00 00 00
111d6d7f7b1Szhijian# CHECK-NEXT:      6c: 00 00 00 01
112d6d7f7b1Szhijian# CHECK-NEXT:      70: 00 00 00 00
113d6d7f7b1Szhijian# CHECK-NEXT:        ...
114d6d7f7b1Szhijian# CHECK-NEXT:      7c: 00 12 34 00
115*b5abaea3Sstephenpeckham# CHECK-NEXT:      80: 00 00 00
116