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
	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 *);

extern uintptr_t _Unwind_GetDataRelBase(struct _Unwind_Context *);
extern uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *);




#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);







>


>
>
>







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
	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);

	case DW_EH_PE_datarel:
		return _Unwind_GetDataRelBase(ctx);
	case DW_EH_PE_textrel:
		return _Unwind_GetTextRelBase(ctx);




	}

	OBJC_ERROR("Unknown encoding!")
}

static size_t
size_for_encoding(uint8_t enc)







>




>
>
>
>







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)