ObjFW  Check-in [60ce701c5c]

Overview
Comment:Don't use _Unwind_Get{Data,Text}RelBase on IA64

DW_EH_PE_datarel can be handled via _Unwind_GetGR on GR 1, while
DW_EH_PE_textrel cannot be handled at all.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 60ce701c5c37b4e8a886b7caf3553dcffd7de82de545f31fdcb8b83feb9be82e
User & Date: js on 2017-09-06 00:49:10
Other Links: manifest | tags
Context
2017-09-06
00:52
PLATFORMS.md: Add Itanium to Linux check-in: a7c20c5ca7 user: js tags: trunk
00:49
Don't use _Unwind_Get{Data,Text}RelBase on IA64 check-in: 60ce701c5c user: js tags: trunk
00:40
Add OF_ITANIUM to platform.h check-in: 1cb9c8455a user: js tags: trunk
Changes

Modified src/runtime/exception.m from [11649a75a7] to [ba1f5e6f08].

166
167
168
169
170
171
172

173
174



175
176
177
178
179
180
181
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185







+


+
+
+







	const uint8_t *callsites, *actiontable;
};

extern _Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *);
extern void _Unwind_DeleteException(struct _Unwind_Exception *);
extern void *_Unwind_GetLanguageSpecificData(struct _Unwind_Context *);
extern uintptr_t _Unwind_GetRegionStart(struct _Unwind_Context *);
#ifndef OF_ITANIUM
extern uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *);
extern uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *);
#else
extern uintptr_t _Unwind_GetGR(struct _Unwind_Context *, int);
#endif

#ifndef HAVE_ARM_EHABI_EXCEPTIONS
# define CONTINUE_UNWIND return _URC_CONTINUE_UNWIND

extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *);
extern void _Unwind_SetIP(struct _Unwind_Context *, uintptr_t);
extern void _Unwind_SetGR(struct _Unwind_Context *, int, uintptr_t);
285
286
287
288
289
290
291

292
293
294
295




296
297
298
299
300
301
302
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311







+




+
+
+
+







	switch (enc & 0x70) {
	case DW_EH_PE_absptr:
	case DW_EH_PE_pcrel:
	case DW_EH_PE_aligned:
		return 0;
	case DW_EH_PE_funcrel:
		return _Unwind_GetRegionStart(ctx);
#ifndef OF_ITANIUM
	case DW_EH_PE_datarel:
		return _Unwind_GetDataRelBase(ctx);
	case DW_EH_PE_textrel:
		return _Unwind_GetTextRelBase(ctx);
#else
	case DW_EH_PE_datarel:
		return _Unwind_GetGR(ctx, 1);
#endif
	}

	OBJC_ERROR("Unknown encoding!")
}

static size_t
size_for_encoding(uint8_t enc)