ObjFW  Check-in [27daad1290]

Overview
Comment:Add forwardingTargetForSelector: for ARM/ELF.

Currently, no methods returning structs are supported, see the comment
in OFObject.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 27daad129050ab6038095720e00462c0fa06ee8345e00df6fc60fc7b3f78c9f5
User & Date: js on 2013-07-09 00:20:24
Other Links: manifest | tags
Context
2013-07-09
00:33
Fix wrong include name. check-in: 12095daf4e user: js tags: trunk
00:20
Add forwardingTargetForSelector: for ARM/ELF. check-in: 27daad1290 user: js tags: trunk
2013-07-08
22:20
OFFile: Check arguments for nil. check-in: b4ebcc74b1 user: js tags: trunk
Changes

Modified src/Makefile from [d40a6c1db1] to [aa5871081e].

1
2
3

4
5
6
7
8
9
10
1
2

3
4
5
6
7
8
9
10


-
+







include ../extra.mk

SUBDIRS = exceptions ${RUNTIME} ${BRIDGE}
SUBDIRS = ${RUNTIME} exceptions ${BRIDGE}

SHARED_LIB = ${OBJFW_SHARED_LIB}
STATIC_LIB = ${OBJFW_STATIC_LIB}
LIB_MAJOR = ${OBJFW_LIB_MAJOR}
LIB_MINOR = ${OBJFW_LIB_MINOR}

SRCS = OFApplication.m			\

Added src/forwarding-arm-elf.S version [a83881c740].


















































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/*
 * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013
 *   Jonathan Schleifer <js@webkeks.org>
 *
 * All rights reserved.
 *
 * This file is part of ObjFW. It may be distributed under the terms of the
 * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
 * the packaging of this file.
 *
 * Alternatively, it may be distributed under the terms of the GNU General
 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

.globl of_forward

.section .text
of_forward:
	stmfd	sp!, {r0-r3, lr}
	fstmfdd	sp!, {d0-d7}

	ldr	r1, sel_forwardingTargetForSelector__indirect_L0
.L0:
	add	r1, pc
	stmfd	sp!, {r1}
	bl	objc_msg_lookup(PLT)
	ldmfd	sp!, {r1}

	mov	r12, r0
	ldr	r0, [sp, #64]
	ldr	r2, [sp, #68]
	blx	r12

	str	r0, [sp, #64]
	ldr	r1, [sp, #68]
	bl	objc_msg_lookup(PLT)

	mov	r12, r0
	fldmfdd	sp!, {d0-d7}
	ldmfd	sp!, {r0-r3, lr}

	bx	r12

init:
	ldr	r0, module_indirect_L1
.L1:
	add	r0, pc
	b	__objc_exec_class(PLT)

sel_forwardingTargetForSelector__indirect_L0:
	.long sel_forwardingTargetForSelector_-(.L0+8)
module_indirect_L1:
	.long module-(.L1+8)

.section .init_array
	.long init

.section .rodata
str_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab

.type of_forward, %function
.size of_forward, init-of_forward

#ifdef __linux__
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding.S from [e1168e09d5] to [ebcc628a59].

28
29
30
31
32
33
34


35
36
37
28
29
30
31
32
33
34
35
36
37
38
39







+
+



# endif
#else
# ifdef __ELF__
#  if defined(__amd64__) || defined(__x86_64__)
#   include "forwarding-x86_64-elf.S"
#  elif defined(__i386__)
#   include "forwarding-x86-elf.S"
#  elif defined(__arm__) || defined(__ARM__)
#   include "forwarding-arm-elf.S"
#  endif
# endif
#endif

Modified src/macros.h from [4fa25a7f6a] to [1a66d76e58].

110
111
112
113
114
115
116
117


118
119
120
121
122
123
124
110
111
112
113
114
115
116

117
118
119
120
121
122
123
124
125







-
+
+







# if defined(__x86_64__) || defined(__i386__) || defined(__arm__) || \
    defined(__ppc__)
#  define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR
#  define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR_STRET
# endif
#else
# ifdef __ELF__
#  if defined(__amd64__) || defined(__x86_64__) || defined(__i386__)
#  if defined(__amd64__) || defined(__x86_64__) || defined(__i386__) || \
    defined(__arm__) || defined(__ARM__)
#   define OF_HAVE_FORWARDING_TARGET_FOR_SELECTOR
#  endif
# endif
#endif

#define OF_ENSURE(cond)							\
	if (!(cond)) {							\