reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
@ RUN:   | llvm-readobj -S --sd --sr --symbols | FileCheck %s

@ Check the .group section for the function in comdat section.

@ In C++, the instantiation of the template will come with linkonce (or
@ linkonce_odr) linkage, so that the linker can remove the duplicated
@ instantiation.  When the exception handling is enabled on those function,
@ we have to group the corresponding .ARM.extab and .ARM.exidx with the
@ text section together.
@
@ This test case will check the content of .group section.  The section index
@ of the grouped sections should be recorded in .group section.

	.syntax unified
	.section	.TEST1,"axG",%progbits,func1,comdat
	.weak	func1
	.align	2
	.type	func1,%function
func1:
	.fnstart
	.save	{r4, lr}
	push	{r4, lr}
	.vsave	{d8, d9, d10, d11, d12}
	vpush	{d8, d9, d10, d11, d12}
	.pad	#24
	sub	sp, sp, #24

	add	sp, sp, #24
	vpop	{d8, d9, d10, d11, d12}
	pop	{r4, pc}

	.globl	__gxx_personality_v0
	.personality __gxx_personality_v0
	.handlerdata
	.fnend



@-------------------------------------------------------------------------------
@ Check the .group section
@-------------------------------------------------------------------------------
@ CHECK: Sections [
@ CHECK:   Section {
@ CHECK:     Index: 1
@ CHECK:     Name: .group
@ CHECK:     Type: SHT_GROUP (0x11)
@ CHECK:     Flags [ (0x0)
@ CHECK:     ]
@ CHECK:     Size: 24
@ CHECK:     SectionData (
@-------------------------------------------------------------------------------
@ These are the section indexes of .TEST1, .ARM.extab.TEST1, .ARM.exidx.TEST1,
@ .rel.ARM.extab.TEST1, and .rel.ARM.exidx.TEST1.
@-------------------------------------------------------------------------------
@ CHECK-NEXT:     0000: 01000000 04000000 05000000 06000000
@ CHECK-NEXT:     0010: 07000000 08000000
@ CHECK-NEXT:     )
@ CHECK:   }


@-------------------------------------------------------------------------------
@ Check the .TEST1 section
@-------------------------------------------------------------------------------
@ CHECK:   Section {
@ CHECK:     Index: 4
@ CHECK-NEXT:     Name: .TEST1
@ CHECK:     Type: SHT_PROGBITS (0x1)
@-------------------------------------------------------------------------------
@ The flags should contain SHF_GROUP.
@-------------------------------------------------------------------------------
@ CHECK:     Flags [ (0x206)
@ CHECK:       SHF_ALLOC (0x2)
@ CHECK:       SHF_EXECINSTR (0x4)
@ CHECK:       SHF_GROUP (0x200)
@ CHECK:     ]
@ CHECK:   }


@-------------------------------------------------------------------------------
@ Check the .ARM.extab.TEST1 section
@-------------------------------------------------------------------------------
@ CHECK:   Section {
@ CHECK:     Index: 5
@ CHECK-NEXT:     Name: .ARM.extab.TEST1
@ CHECK:     Type: SHT_PROGBITS (0x1)
@-------------------------------------------------------------------------------
@ The flags should contain SHF_GROUP.
@-------------------------------------------------------------------------------
@ CHECK:     Flags [ (0x202)
@ CHECK:       SHF_ALLOC (0x2)
@ CHECK:       SHF_GROUP (0x200)
@ CHECK:     ]
@ CHECK:   }

@ CHECK:   Section {
@ CHECK:     Index: 6
@ CHECK-NEXT:     Name: .rel.ARM.extab.TEST1
@ CHECK: }

@-------------------------------------------------------------------------------
@ Check the .ARM.exidx.TEST1 section
@-------------------------------------------------------------------------------
@ CHECK:   Section {
@ CHECK:     Index: 7
@ CHECK-NEXT:     Name: .ARM.exidx.TEST1
@ CHECK:     Type: SHT_ARM_EXIDX (0x70000001)
@-------------------------------------------------------------------------------
@ The flags should contain SHF_GROUP.
@-------------------------------------------------------------------------------
@ CHECK:     Flags [ (0x282)
@ CHECK:       SHF_ALLOC (0x2)
@ CHECK:       SHF_GROUP (0x200)
@ CHECK:       SHF_LINK_ORDER (0x80)
@ CHECK:     ]
@ CHECK:     Link: 4
@ CHECK:   }


@ CHECK:   Section {
@ CHECK:     Index: 8
@ CHECK-NEXT:     Name: .rel.ARM.exidx.TEST1
@ CHECK: }

@ CHECK: ]

@-------------------------------------------------------------------------------
@ Check symbol func1.  It should be weak binding, and belong to .TEST1 section.
@-------------------------------------------------------------------------------
@ CHECK: Symbols [
@ CHECK:   Symbol {
@ CHECK:     Name: func1
@ CHECK:     Binding: Weak (0x2)
@ CHECK:     Type: Function (0x2)
@ CHECK:     Section: .TEST1
@ CHECK:   }
@ CHECK: ]