]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - ld/testsuite/ld-mips-elf/eh-frame1.s
daily update
[thirdparty/binutils-gdb.git] / ld / testsuite / ld-mips-elf / eh-frame1.s
1 #----------------------------------------------------------------------------
2 # Macros
3 #----------------------------------------------------------------------------
4
5 mask = (1 << alignment) - 1
6
7 # Output VALUE as an unaligned pointer-sized quantity.
8 .macro pbyte value
9 .if alignment == 2
10 .4byte \value
11 .else
12 .8byte \value
13 .endif
14 .endm
15
16
17 # Start a new CIE, and emit everything up to the augmentation data.
18 # Use LABEL to mark the start of the entry and AUG as the augmentation
19 # string.
20 .macro start_cie label,aug
21 .section .eh_frame,"aw",@progbits
22 \label:
23 .word 2f-1f # Length
24 1:
25 .word 0 # Identifier
26 .byte 1 # Version
27 .string "\aug" # Augmentation
28 .byte 1 # Code alignment
29 .byte 4 # Data alignment
30 .byte 31 # Return address column
31 .endm
32
33
34 # Create a dummy function of SIZE bytes in SECTION and emit the
35 # first four entries of an FDE for it.
36 .macro start_fde cie,section,size
37 .section \section,"ax",@progbits
38 3:
39 .rept \size / 4
40 nop
41 .endr
42 4:
43 .section .eh_frame,"aw",@progbits
44 .word 2f-1f # Length
45 1:
46 .word .-\cie # CIE offset
47 pbyte 3b # Initial PC
48 pbyte 4b-3b # Size of code
49 .endm
50
51
52 # Finish a CIE or FDE entry.
53 .macro end_entry
54 .p2align alignment,fill
55 2:
56 .endm
57
58
59 # Start the augmentation data for a CIE that has a 'P' entry
60 # followed by EXTRA bytes. AUGLEN is the length of augmentation
61 # string (including zero terminator), ENCODING is the encoding to
62 # use for the personality routine and VALUE is the value it
63 # should have.
64 .macro persaug auglen,extra,encoding,value
65 .if (\encoding & 0xf0) == 0x50
66 .byte (-(9 + \auglen + 3 + 2) & mask) + 2 + mask + \extra
67 .byte \encoding
68 .fill -(9 + \auglen + 3 + 2) & mask,1,0
69 .else
70 .byte 2 + mask + \extra
71 .byte \encoding
72 .endif
73 pbyte \value
74 .endm
75
76
77 .macro cie_basic label
78 start_cie \label,""
79 end_entry
80 .endm
81
82 .macro fde_basic cie,section,size
83 start_fde \cie,\section,\size
84 end_entry
85 .endm
86
87
88 .macro cie_zP label,encoding,value
89 start_cie \label,"zP"
90 persaug 3,0,\encoding,\value
91 end_entry
92 .endm
93
94 .macro fde_zP cie,section,size
95 start_fde \cie,\section,\size
96 .byte 0 # Augmentation length
97 end_entry
98 .endm
99
100
101 .macro cie_zPR label,encoding,value
102 start_cie \label,"zPR"
103 persaug 4,1,\encoding,\value
104 .byte 0 # FDE enconding
105 end_entry
106 .endm
107
108 .macro fde_zPR cie,section,size
109 start_fde \cie,\section,\size
110 .byte 0 # Augmentation length
111 end_entry
112 .endm
113
114 #----------------------------------------------------------------------------
115 # Test code
116 #----------------------------------------------------------------------------
117
118 cie_basic basic1
119 fde_basic basic1,.text,0x10
120 fde_basic basic1,.text,0x20
121
122 cie_basic basic2
123 fde_basic basic2,.text,0x30
124
125 cie_basic basic3
126 fde_basic basic3,.text,0x40
127
128 cie_basic basic4
129 fde_basic basic4,.text,0x50
130
131 cie_zP zP_unalign1,0x00,foo
132 fde_zP zP_unalign1,.text,0x10
133 fde_zP zP_unalign1,.text,0x20
134
135 cie_zP zP_align1,0x50,foo
136 fde_zP zP_align1,.text,0x10
137 fde_zP zP_align1,.text,0x20
138
139 cie_zPR zPR1,0x00,foo
140 fde_zPR zPR1,.text,0x10
141 fde_zPR zPR1,.discard,0x20
142
143 cie_zPR zPR2,0x00,foo
144 fde_zPR zPR2,.text,0x30
145 fde_zPR zPR2,.text,0x40
146
147 cie_basic basic5
148 fde_basic basic5,.text,0x10
149
150 .if alignment == 2
151 .section .gcc_compiled_long32
152 .endif