302 lines · plain
1 2; RUN: llc -debugger-tune=gdb -mcpu=ppc -mtriple powerpc-ibm-aix-xcoff -function-sections \3; RUN: < %s | FileCheck %s4 5source_filename = "1.c"6target datalayout = "E-m:a-p:32:32-i64:64-n32"7 8; Function Attrs: noinline nounwind optnone9define i32 @foo() #0 !dbg !8 {10entry:11 ret i32 0, !dbg !1212}13 14; Function Attrs: noinline nounwind optnone15define i32 @bar() #0 !dbg !13 {16entry:17 ret i32 1, !dbg !1418}19 20!llvm.dbg.cu = !{!0}21!llvm.module.flags = !{!3, !4, !5, !6}22!llvm.ident = !{!7}23 24!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 13.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)25!1 = !DIFile(filename: "1.c", directory: "debug")26!2 = !{}27!3 = !{i32 7, !"Dwarf Version", i32 3}28!4 = !{i32 2, !"Debug Info Version", i32 3}29!5 = !{i32 1, !"wchar_size", i32 2}30!6 = !{i32 7, !"PIC Level", i32 2}31!7 = !{!"clang version 13.0.0"}32!8 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 1, type: !9, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)33!9 = !DISubroutineType(types: !10)34!10 = !{!11}35!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)36!12 = !DILocation(line: 3, column: 3, scope: !8)37!13 = distinct !DISubprogram(name: "bar", scope: !1, file: !1, line: 6, type: !9, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)38!14 = !DILocation(line: 8, column: 3, scope: !13)39 40; CHECK: .file "1.c"41; CHECK-NEXT: .csect ..text..[PR],542; CHECK-NEXT: .rename ..text..[PR],""43; CHECK-NEXT: .machine "COM"44; CHECK-NEXT: .csect .foo[PR],545; CHECK-NEXT: .globl foo[DS] # -- Begin function foo46; CHECK-NEXT: .globl .foo[PR]47; CHECK-NEXT: .align 248; CHECK-NEXT: .csect foo[DS],249; CHECK-NEXT: .vbyte 4, .foo[PR] # @foo50; CHECK-NEXT: .vbyte 4, TOC[TC0]51; CHECK-NEXT: .vbyte 4, 052; CHECK-NEXT: .csect .foo[PR],553; CHECK-NEXT: L..func_begin0:54; CHECK-NEXT: # %bb.0: # %entry55; CHECK-NEXT: L..tmp0:56; CHECK-NEXT: li 3, 057; CHECK-NEXT: blr58; CHECK-NEXT: L..tmp1:59; CHECK-NEXT: L..foo0:60; CHECK-NEXT: .vbyte 4, 0x00000000 # Traceback table begin61; CHECK-NEXT: .byte 0x00 # Version = 062; CHECK-NEXT: .byte 0x09 # Language = CPlusPlus63; CHECK-NEXT: .byte 0x20 # -IsGlobalLinkage, -IsOutOfLineEpilogOrPrologue64; CHECK-NEXT: # +HasTraceBackTableOffset, -IsInternalProcedure65; CHECK-NEXT: # -HasControlledStorage, -IsTOCless66; CHECK-NEXT: # -IsFloatingPointPresent67; CHECK-NEXT: # -IsFloatingPointOperationLogOrAbortEnabled68; CHECK-NEXT: .byte 0x40 # -IsInterruptHandler, +IsFunctionNamePresent, -IsAllocaUsed69; CHECK-NEXT: # OnConditionDirective = 0, -IsCRSaved, -IsLRSaved70; CHECK-NEXT: .byte 0x00 # -IsBackChainStored, -IsFixup, NumOfFPRsSaved = 071; CHECK-NEXT: .byte 0x00 # -HasExtensionTable, -HasVectorInfo, NumOfGPRsSaved = 072; CHECK-NEXT: .byte 0x00 # NumberOfFixedParms = 073; CHECK-NEXT: .byte 0x01 # NumberOfFPParms = 0, +HasParmsOnStack74; CHECK-NEXT: .vbyte 4, L..foo0-.foo[PR] # Function size75; CHECK-NEXT: .vbyte 2, 0x0003 # Function name len = 376; CHECK-NEXT: .byte "foo" # Function Name77; CHECK-NEXT: L..func_end0:78; CHECK-NEXT: # -- End function79; CHECK-NEXT: .csect .bar[PR],580; CHECK-NEXT: .globl bar[DS] # -- Begin function bar81; CHECK-NEXT: .globl .bar[PR]82; CHECK-NEXT: .align 283; CHECK-NEXT: .csect bar[DS],284; CHECK-NEXT: .vbyte 4, .bar[PR] # @bar85; CHECK-NEXT: .vbyte 4, TOC[TC0]86; CHECK-NEXT: .vbyte 4, 087; CHECK-NEXT: .csect .bar[PR],588; CHECK-NEXT: L..func_begin1:89; CHECK-NEXT: # %bb.0: # %entry90; CHECK-NEXT: L..tmp2:91; CHECK-NEXT: li 3, 192; CHECK-NEXT: blr93; CHECK-NEXT: L..tmp3:94; CHECK-NEXT: L..bar0:95; CHECK-NEXT: .vbyte 4, 0x00000000 # Traceback table begin96; CHECK-NEXT: .byte 0x00 # Version = 097; CHECK-NEXT: .byte 0x09 # Language = CPlusPlus98; CHECK-NEXT: .byte 0x20 # -IsGlobalLinkage, -IsOutOfLineEpilogOrPrologue99; CHECK-NEXT: # +HasTraceBackTableOffset, -IsInternalProcedure100; CHECK-NEXT: # -HasControlledStorage, -IsTOCless101; CHECK-NEXT: # -IsFloatingPointPresent102; CHECK-NEXT: # -IsFloatingPointOperationLogOrAbortEnabled103; CHECK-NEXT: .byte 0x40 # -IsInterruptHandler, +IsFunctionNamePresent, -IsAllocaUsed104; CHECK-NEXT: # OnConditionDirective = 0, -IsCRSaved, -IsLRSaved105; CHECK-NEXT: .byte 0x00 # -IsBackChainStored, -IsFixup, NumOfFPRsSaved = 0106; CHECK-NEXT: .byte 0x00 # -HasExtensionTable, -HasVectorInfo, NumOfGPRsSaved = 0107; CHECK-NEXT: .byte 0x00 # NumberOfFixedParms = 0108; CHECK-NEXT: .byte 0x01 # NumberOfFPParms = 0, +HasParmsOnStack109; CHECK-NEXT: .vbyte 4, L..bar0-.bar[PR] # Function size110; CHECK-NEXT: .vbyte 2, 0x0003 # Function name len = 3111; CHECK-NEXT: .byte "bar" # Function Name112; CHECK-NEXT: L..func_end1:113; CHECK-NEXT: # -- End function114; CHECK-NEXT: L..sec_end0:115; CHECK: .dwsect 0x60000116; CHECK-NEXT: .dwabrev:117; CHECK-NEXT: .byte 1 # Abbreviation Code118; CHECK-NEXT: .byte 17 # DW_TAG_compile_unit119; CHECK-NEXT: .byte 1 # DW_CHILDREN_yes120; CHECK-NEXT: .byte 37 # DW_AT_producer121; CHECK-NEXT: .byte 14 # DW_FORM_strp122; CHECK-NEXT: .byte 19 # DW_AT_language123; CHECK-NEXT: .byte 5 # DW_FORM_data2124; CHECK-NEXT: .byte 3 # DW_AT_name125; CHECK-NEXT: .byte 14 # DW_FORM_strp126; CHECK-NEXT: .byte 16 # DW_AT_stmt_list127; CHECK-NEXT: .byte 6 # DW_FORM_data4128; CHECK-NEXT: .byte 27 # DW_AT_comp_dir129; CHECK-NEXT: .byte 14 # DW_FORM_strp130; CHECK-NEXT: .byte 17 # DW_AT_low_pc131; CHECK-NEXT: .byte 1 # DW_FORM_addr132; CHECK-NEXT: .byte 85 # DW_AT_ranges133; CHECK-NEXT: .byte 6 # DW_FORM_data4134; CHECK-NEXT: .byte 0 # EOM(1)135; CHECK-NEXT: .byte 0 # EOM(2)136; CHECK-NEXT: .byte 2 # Abbreviation Code137; CHECK-NEXT: .byte 46 # DW_TAG_subprogram138; CHECK-NEXT: .byte 0 # DW_CHILDREN_no139; CHECK-NEXT: .byte 17 # DW_AT_low_pc140; CHECK-NEXT: .byte 1 # DW_FORM_addr141; CHECK-NEXT: .byte 18 # DW_AT_high_pc142; CHECK-NEXT: .byte 1 # DW_FORM_addr143; CHECK-NEXT: .byte 64 # DW_AT_frame_base144; CHECK-NEXT: .byte 10 # DW_FORM_block1145; CHECK-NEXT: .byte 3 # DW_AT_name146; CHECK-NEXT: .byte 14 # DW_FORM_strp147; CHECK-NEXT: .byte 58 # DW_AT_decl_file148; CHECK-NEXT: .byte 11 # DW_FORM_data1149; CHECK-NEXT: .byte 59 # DW_AT_decl_line150; CHECK-NEXT: .byte 11 # DW_FORM_data1151; CHECK-NEXT: .byte 39 # DW_AT_prototyped152; CHECK-NEXT: .byte 12 # DW_FORM_flag153; CHECK-NEXT: .byte 73 # DW_AT_type154; CHECK-NEXT: .byte 19 # DW_FORM_ref4155; CHECK-NEXT: .byte 63 # DW_AT_external156; CHECK-NEXT: .byte 12 # DW_FORM_flag157; CHECK-NEXT: .byte 0 # EOM(1)158; CHECK-NEXT: .byte 0 # EOM(2)159; CHECK-NEXT: .byte 3 # Abbreviation Code160; CHECK-NEXT: .byte 36 # DW_TAG_base_type161; CHECK-NEXT: .byte 0 # DW_CHILDREN_no162; CHECK-NEXT: .byte 3 # DW_AT_name163; CHECK-NEXT: .byte 14 # DW_FORM_strp164; CHECK-NEXT: .byte 62 # DW_AT_encoding165; CHECK-NEXT: .byte 11 # DW_FORM_data1166; CHECK-NEXT: .byte 11 # DW_AT_byte_size167; CHECK-NEXT: .byte 11 # DW_FORM_data1168; CHECK-NEXT: .byte 0 # EOM(1)169; CHECK-NEXT: .byte 0 # EOM(2)170; CHECK-NEXT: .byte 0 # EOM(3)171; CHECK: .dwsect 0x10000172; CHECK-NEXT: .dwinfo:173; CHECK-NEXT: L..cu_begin0:174; CHECK-NEXT: .vbyte 2, 3 # DWARF version number175; CHECK-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section176; CHECK-NEXT: .byte 4 # Address Size (in bytes)177; CHECK-NEXT: .byte 1 # Abbrev [1] 0xb:0x51 DW_TAG_compile_unit178; CHECK-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer179; CHECK-NEXT: .vbyte 2, 12 # DW_AT_language180; CHECK-NEXT: .vbyte 4, L..info_string1 # DW_AT_name181; CHECK-NEXT: .vbyte 4, L..line_table_start0 # DW_AT_stmt_list182; CHECK-NEXT: .vbyte 4, L..info_string2 # DW_AT_comp_dir183; CHECK-NEXT: .vbyte 4, 0 # DW_AT_low_pc184; CHECK-NEXT: .vbyte 4, L..debug_ranges0 # DW_AT_ranges185; CHECK-NEXT: .byte 2 # Abbrev [2] 0x26:0x17 DW_TAG_subprogram186; CHECK-NEXT: .vbyte 4, L..func_begin0 # DW_AT_low_pc187; CHECK-NEXT: .vbyte 4, L..func_end0 # DW_AT_high_pc188; CHECK-NEXT: .byte 1 # DW_AT_frame_base189; CHECK-NEXT: .byte 81190; CHECK-NEXT: .vbyte 4, L..info_string3 # DW_AT_name191; CHECK-NEXT: .byte 1 # DW_AT_decl_file192; CHECK-NEXT: .byte 1 # DW_AT_decl_line193; CHECK-NEXT: .byte 1 # DW_AT_prototyped194; CHECK-NEXT: .vbyte 4, 84 # DW_AT_type195; CHECK-NEXT: .byte 1 # DW_AT_external196; CHECK-NEXT: .byte 2 # Abbrev [2] 0x3d:0x17 DW_TAG_subprogram197; CHECK-NEXT: .vbyte 4, L..func_begin1 # DW_AT_low_pc198; CHECK-NEXT: .vbyte 4, L..func_end1 # DW_AT_high_pc199; CHECK-NEXT: .byte 1 # DW_AT_frame_base200; CHECK-NEXT: .byte 81201; CHECK-NEXT: .vbyte 4, L..info_string5 # DW_AT_name202; CHECK-NEXT: .byte 1 # DW_AT_decl_file203; CHECK-NEXT: .byte 6 # DW_AT_decl_line204; CHECK-NEXT: .byte 1 # DW_AT_prototyped205; CHECK-NEXT: .vbyte 4, 84 # DW_AT_type206; CHECK-NEXT: .byte 1 # DW_AT_external207; CHECK-NEXT: .byte 3 # Abbrev [3] 0x54:0x7 DW_TAG_base_type208; CHECK-NEXT: .vbyte 4, L..info_string4 # DW_AT_name209; CHECK-NEXT: .byte 5 # DW_AT_encoding210; CHECK-NEXT: .byte 4 # DW_AT_byte_size211; CHECK-NEXT: .byte 0 # End Of Children Mark212; CHECK-NEXT: L..debug_info_end0:213; CHECK: .dwsect 0x80000214; CHECK-NEXT: .dwrnges:215; CHECK-NEXT: L..debug_ranges0:216; CHECK-NEXT: .vbyte 4, L..func_begin0217; CHECK-NEXT: .vbyte 4, L..func_end0218; CHECK-NEXT: .vbyte 4, L..func_begin1219; CHECK-NEXT: .vbyte 4, L..func_end1220; CHECK-NEXT: .vbyte 4, 0221; CHECK-NEXT: .vbyte 4, 0222; CHECK: .dwsect 0x70000223; CHECK-NEXT: .dwstr:224; CHECK-NEXT: L..info_string0:225; CHECK-NEXT: .string "clang version 13.0.0" # string offset=0226; CHECK-NEXT: L..info_string1:227; CHECK-NEXT: .string "1.c" # string offset=21228; CHECK-NEXT: L..info_string2:229; CHECK-NEXT: .string "debug" # string offset=25230; CHECK-NEXT: L..info_string3:231; CHECK-NEXT: .string "foo" # string offset=31232; CHECK-NEXT: L..info_string4:233; CHECK-NEXT: .string "int" # string offset=35234; CHECK-NEXT: L..info_string5:235; CHECK-NEXT: .string "bar" # string offset=39236; CHECK-NEXT: .toc237; CHECK: .dwsect 0x20000238; CHECK-NEXT: .dwline:239; CHECK-NEXT: L..debug_line_0:240; CHECK-NEXT: .set L..line_table_start0, L..debug_line_0-4241; CHECK-NEXT: .vbyte 2, 3242; CHECK-NEXT: .vbyte 4, L..prologue_end0-L..prologue_start0243; CHECK-NEXT: L..prologue_start0:244; CHECK-NEXT: .byte 4245; CHECK-NEXT: .byte 1246; CHECK-NEXT: .byte -5247; CHECK-NEXT: .byte 14248; CHECK-NEXT: .byte 13249; CHECK-NEXT: .byte 0250; CHECK-NEXT: .byte 1251; CHECK-NEXT: .byte 1252; CHECK-NEXT: .byte 1253; CHECK-NEXT: .byte 1254; CHECK-NEXT: .byte 0255; CHECK-NEXT: .byte 0256; CHECK-NEXT: .byte 0257; CHECK-NEXT: .byte 1258; CHECK-NEXT: .byte 0259; CHECK-NEXT: .byte 0260; CHECK-NEXT: .byte 1261; CHECK-NEXT: .byte "debug"262; CHECK-NEXT: .byte 0263; CHECK-NEXT: .byte 0264; CHECK-NEXT: .byte "1.c"265; CHECK-NEXT: .byte 0266; CHECK-NEXT: .byte 1267; CHECK-NEXT: .byte 0268; CHECK-NEXT: .byte 0269; CHECK-NEXT: .byte 0270; CHECK-NEXT: L..prologue_end0:271; CHECK-NEXT: .byte 5272; CHECK-NEXT: .byte 3273; CHECK-NEXT: .byte 10274; CHECK-NEXT: .byte 0 # Set address to L..tmp0275; CHECK-NEXT: .byte 5276; CHECK-NEXT: .byte 2277; CHECK-NEXT: .vbyte 4, L..tmp0278; CHECK-NEXT: .byte 20 # Start sequence279; CHECK-NEXT: .byte 0 # Set address to L..func_end0280; CHECK-NEXT: .byte 5281; CHECK-NEXT: .byte 2 282; CHECK-NEXT: .vbyte 4, L..func_end0283; CHECK-NEXT: .byte 0 # End sequence284; CHECK-NEXT: .byte 1285; CHECK-NEXT: .byte 1286; CHECK-NEXT: .byte 5287; CHECK-NEXT: .byte 3288; CHECK-NEXT: .byte 10289; CHECK-NEXT: .byte 0 # Set address to L..tmp2290; CHECK-NEXT: .byte 5291; CHECK-NEXT: .byte 2292; CHECK-NEXT: .vbyte 4, L..tmp2293; CHECK-NEXT: .byte 25 # Start sequence294; CHECK-NEXT: .byte 0 # Set address to L..func_end1295; CHECK-NEXT: .byte 5296; CHECK-NEXT: .byte 2297; CHECK-NEXT: .vbyte 4, L..func_end1298; CHECK-NEXT: .byte 0 # End sequence299; CHECK-NEXT: .byte 1300; CHECK-NEXT: .byte 1301; CHECK-NEXT: L..debug_line_end0:302