rbdc 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +5 -5
  2. data/dyncall/CMakeLists.txt +3 -3
  3. data/dyncall/ChangeLog +33 -0
  4. data/dyncall/ChangeLog.orig +274 -0
  5. data/dyncall/LICENSE +1 -1
  6. data/dyncall/README +3 -5
  7. data/dyncall/ToDo +27 -18
  8. data/dyncall/ToDo.orig +201 -0
  9. data/dyncall/autovar/autovar_ARCH.h +1 -1
  10. data/dyncall/buildsys/vs2005/vs2005.sln +0 -9
  11. data/dyncall/cconv.lang +36 -0
  12. data/dyncall/configure +17 -9
  13. data/dyncall/configure.bat +1 -1
  14. data/dyncall/dyncall/dyncall.h +2 -1
  15. data/dyncall/dyncall/dyncall_call.S +9 -1
  16. data/dyncall/dyncall/dyncall_call_mips_n32.S +192 -0
  17. data/dyncall/dyncall/dyncall_call_mips_n64.S +197 -0
  18. data/dyncall/dyncall/dyncall_call_mips_n64.h +2 -0
  19. data/dyncall/dyncall/{dyncall_call_mips_o32_gas.s → dyncall_call_mips_o32.S} +44 -42
  20. data/dyncall/dyncall/dyncall_call_mips_o32.h +8 -3
  21. data/dyncall/dyncall/dyncall_call_ppc32.S +3 -1
  22. data/dyncall/dyncall/dyncall_call_ppc32.h +4 -3
  23. data/dyncall/dyncall/dyncall_call_ppc64.S +1 -1
  24. data/dyncall/dyncall/dyncall_call_ppc64.h +3 -0
  25. data/dyncall/dyncall/dyncall_call_x64.S +27 -2
  26. data/dyncall/dyncall/dyncall_call_x64.h +2 -1
  27. data/dyncall/dyncall/dyncall_call_x64_generic_masm.asm +13 -2
  28. data/dyncall/dyncall/dyncall_call_x86.S +6 -6
  29. data/dyncall/dyncall/dyncall_call_x86.h +7 -7
  30. data/dyncall/dyncall/dyncall_call_x86_generic_masm.asm +6 -7
  31. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +27 -9
  32. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +38 -31
  33. data/dyncall/dyncall/dyncall_callvm_mips_o32.c.orig +247 -0
  34. data/dyncall/dyncall/dyncall_callvm_x64.c +57 -3
  35. data/dyncall/dyncall/dyncall_callvm_x86.c +32 -32
  36. data/dyncall/dyncall/dyncall_macros.h +11 -8
  37. data/dyncall/dyncall/dyncall_struct.c +12 -6
  38. data/dyncall/dyncall/dyncall_struct.h +1 -1
  39. data/dyncall/dyncall/dyncall_vector.c +13 -12
  40. data/dyncall/dyncall/dyncall_vector.c.orig +53 -0
  41. data/dyncall/dyncall/gen-masm.sh +4 -5
  42. data/dyncall/dyncallback/dyncall_args_mips.h +24 -6
  43. data/dyncall/dyncallback/dyncall_args_mips64.c +3 -3
  44. data/dyncall/dyncallback/dyncall_args_mips_o32.c +19 -6
  45. data/dyncall/dyncallback/dyncall_callback_arch.S +11 -1
  46. data/dyncall/dyncallback/{dyncall_callback_mips_n32_gas.s → dyncall_callback_mips_n32.S} +1 -1
  47. data/dyncall/dyncallback/{dyncall_callback_mips_n64_gas.s → dyncall_callback_mips_n64.S} +39 -25
  48. data/dyncall/dyncallback/{dyncall_callback_mips_o32_gas.s → dyncall_callback_mips_o32.S} +29 -13
  49. data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +0 -1
  50. data/dyncall/dyncallback/dyncall_thunk.h +1 -1
  51. data/dyncall/dyncallback/gen-masm.sh +3 -5
  52. data/dyncall/dynload/dynload.3 +16 -4
  53. data/dyncall/dynload/dynload_unix.c +101 -53
  54. data/dyncall/dynload/dynload_windows.c +76 -3
  55. data/dyncall/portasm/README.txt +1 -1
  56. data/dyncall/portasm/gen-masm.sh +5 -1
  57. metadata +14 -13
  58. data/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj +0 -202
  59. data/dyncall/dyncall/dyncall_call_mips_gas.S +0 -37
  60. data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +0 -192
  61. data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +0 -192
  62. data/dyncall/dyncallback/dyncall_callback_mips_gas.S +0 -38
@@ -0,0 +1,201 @@
1
+ 1.1:
2
+ ----
3
+ - test atpcs thumb on arm and verify if ellipse and C++ thiscalls work, if so adapt doc appendix
4
+ - test eabi thumb on arm and verify if ellipse and C++ thiscalls work, if so adapt doc appendix
5
+ - new platform matrix
6
+ * check dark green cells and validit in general
7
+ - dyncall/dyncall_call*h could probably be all removed, as forward declarations in corresponding .c
8
+ files would be enough; no headers are needed b/c those functions declared in there are of no public use
9
+
10
+ 1.2:
11
+ ----
12
+ - test/thunk win/x64 doesn't output anything decent for stack test (neither sigsegv nor output), which can create a problem for test log file as it'll mess with the subsequent test's output)
13
+ - remove test/gen-masm alltogether
14
+ - test code: add sparc tests for when out of register windows, meaning multiple layers deep in the call stack
15
+ - ./configure on macOS does not pass CFLAGS etc.. to Makefile.config
16
+ - support platforms without shared libraries so they can be built by just typing `./configure;make` (e.g. minix < 3.2.1)
17
+ * also make sure minix with shared library support builds and works in general (>= 3.2.1) as well as ELF on Minix (>= 3.2.0) to begin with (as that's the base, and we only test on 3.1.8 so far)
18
+ - dyncall supports calls to functions where prototype exists (with and without varargs); however not when no
19
+ prototype exist (e.g. just calling some pointer), without any declaration... even possible in C, as one has
20
+ to cast to the function type? need to support?
21
+
22
+
23
+ - dyncallback's "stack_cleanup" can be removed from non x86 impls... test if they still work
24
+ - target a minimum c version, for use with -pedantic, etc.? Right now we use e.g. extensions
25
+ for anon structs, etc. -> we do now target c99
26
+ - the CallVM-free functions are per VTable, however the latter can be changed out
27
+ at runtime... which basically changes potentially the deallocator...
28
+ same goes for functions setting the mode. think about how to make this safer - currently
29
+ we have a higher flexibility and we need to potentially clean up from the mode we are in,
30
+ however, this is open to misuse
31
+ - check all vararg calling conv implementations if they promote correctly
32
+ (e.g. float to double); we used to not care as it was the user's job to
33
+ think of that, but we allow users to use ArgFloat, etc. on "..." now,
34
+ taking care of the promotion; so it should be consistent all across the
35
+ implementations -> also write testcode specifically for that
36
+ - autovar was never really pushed all the way through and still plays second
37
+ fiddle to dyncall_macros.h, clean this all up, eventually (Tassilo: for now, I
38
+ removed out of sync files to avoid confusion; but still probably duped code)
39
+ - add portable "make install"
40
+ * make install should also install manpages
41
+ - mailing list announcements (html email?)
42
+ - fix for NDS:
43
+ * ARM:
44
+ - callback_plain retval wrong (not only platform), area on stack where
45
+ it's stored is probably not zeroed, so half-words, etc., come with garbage
46
+ * THUMB:
47
+ - ellipsis (might be test itself, not respecting fixed part of args)
48
+ - callback_plain retval, see above under ARM
49
+ - callf
50
+ - support Solaris11 CFLAGS with -D_FILE_OFFSET_BITS=64
51
+ - make sure selinux works (esp. regarding NX bits)
52
+ Daniel has a patch for it, if needed, implementing allocwx with two memory blocks, one for w^x, mmaped to one for r|x
53
+ - support /SAFESEH on cl/win32
54
+ - test code functions should be in .so files, optionally, so the suites can directly
55
+ be used to test dycnall bindings
56
+ - pkg-config support?
57
+ - quadmath support (long double)
58
+ - add tests using alloca(), as this might depend on the frame pointer being correctly set (we don't
59
+ check for this, currently, at all - but might not affect dyncall's stubs, anyways) - verify
60
+
61
+ portasm:
62
+ --------
63
+ - add solaris support for x64
64
+
65
+ dyncall:
66
+ --------
67
+ - merge arm32_thumb_{gas/apple} and include thumb support for portasm
68
+ - x64 verification: return values are passed via RAX and RDX, and XMM0 and XMM1.
69
+ - find big endian arm box (also hardfloat), e.g. cubietruck: http://blog.netbsd.org/tnf/entry/working_arm_multiprocessor_support
70
+ - test if armhf/thumb is actually working... pulls in arm mode code in dyncall_callvm.c
71
+ - dyncall_call_mips_n32.h and dyncall_call_mips_n64.h are pretty much the same, share code
72
+ - support for return values: aggregate return values
73
+ - support for argument values: structures, half-precision, vector types, long double
74
+ * make sure that struct support for ellipsis calls are not forgotten (copy everything by value)
75
+ - consider automatic type-promotion for arguments passed through DC_CALL_C_ELLIPSIS_VARARGS;
76
+ this would make it easier to just pass arguments instead of having to know about the C
77
+ type promotions (this is partly done, see todo-item above under 1.1)
78
+ - other syscalls
79
+ - test MIPS32 eabi big endian (current port works on psp, which is little endian)
80
+ - implement MIPS64 N32 (gcc -mabi=n32); both, little and big-endian (looks like NetNBSD on and
81
+ EdgeRouter lite uses this: https://blog.netbsd.org/tnf/entry/hands_on_experience_with_edgerouter)
82
+ - MIPS64 n32 softfloat support (-msoft-float)
83
+ - implement MIPS64 EABI (gcc -mabi=eabi); both, little and big-endian
84
+ - support for Minix/arm
85
+ - improve ellipsis test:
86
+ * test not just with one fixed arg, to also simulate alignment problems
87
+ * test return values
88
+ * convert from c++ to c, to have it also on plan9, and more portability
89
+
90
+ dynload:
91
+ --------
92
+ - dlGetLibraryPath: dl_iterate_phdr() used on OpenBSD, but not available on version < 3.7
93
+ - bug: test/nm crashes on qemu mips linux o32 debian etch
94
+ - rename SymsInit to InitSyms and similar for cleanup function to reflect naming
95
+ in dyncall
96
+ - get rid of Dl_info and friends (_GNU_SOURCE) in dynload/dynload_syms_elf.c
97
+ for implementation of dlSymsNameFromValue(..)
98
+ - check if PSP can support dynload (missing elf.h, dlfcn.h, etc.); fixup readme if successful
99
+ - some functionality like java's System.mapLibraryName('name') might be helpful?
100
+ - Failed On Open Solaris 11:
101
+ In file included from dynload_syms.c:28:
102
+ dynload_syms_elf.c:56: error: syntax error before "Elf_Dyn"
103
+ dynload_syms_elf.c:56: warning: data definition has no type or storage class
104
+ dynload_syms_elf.c: In function `dlSymsInit':
105
+ dynload_syms_elf.c:155: error: `pDyn' undeclared (first use in this function)
106
+ dynload_syms_elf.c:155: error: (Each undeclared identifier is reported only once
107
+ dynload_syms_elf.c:155: error: for each function it appears in.)
108
+ dynload_syms_elf.c:155: error: syntax error before ')' token
109
+ dynload_syms_elf.c:160: error: `DT_NULL' undeclared (first use in this function)
110
+ dynload_syms_elf.c:163: error: `DT_STRTAB' undeclared (first use in this function)
111
+ dynload_syms_elf.c:164: error: `DT_SYMTAB' undeclared (first use in this function)
112
+ dynload_syms_elf.c:165: error: `DT_HASH' undeclared (first use in this function)
113
+ make: *** [dynload_syms.o] Error 1
114
+
115
+ dyncallback:
116
+ ------------
117
+ - callback_plain's return value not correct anymore on NDS (maybe just broken testcode?),
118
+ see above under 1.1 items
119
+ * check other platforms also, if asm stub initializes retval space, correctly
120
+ - test MIPS32 eabi big endian (current port works on psp, which is little endian)
121
+ - implement MIPS64 N32 (gcc -mabi=n32); both, little and big-endian (looks like NetNBSD on and
122
+ EdgeRouter lite uses this: https://blog.netbsd.org/tnf/entry/hands_on_experience_with_edgerouter)
123
+ - MIPS64 n32 softfloat support (-msoft-float)
124
+ - implement MIPS64 EABI (gcc -mabi=eabi); both, little and big-endian
125
+ - support for Minix/arm
126
+
127
+ bindings:
128
+ ---------
129
+ - release bindings as standalone packages (already done for rbdc as a gem and rdyncall on cran)
130
+ * add note to documentation, where bindings are and that some bindings are svn-only ATM
131
+ - add rdoc documentation to ruby gem
132
+ - add pydoc for python
133
+ - add manpage for shdc
134
+ - expose callf-convenience functions to go
135
+ - add godoc for godc
136
+ - add javadoc to java
137
+ - add more bindings
138
+ - add callback support for erlang, go, java, lua, python and ruby (and shell? how?)
139
+ - add call-conv-mode-support for rbdc through signature
140
+
141
+ manual:
142
+ -------
143
+ - introduce doc overview tables and common vocab for calling convention specifics, following example of table on page 13 of https://www.linux-mips.org/pub/linux/mips/doc/ABI/MIPS-N32-ABI-Handbook.pdf; also as inspiration, e.g. user 'preserved' instead of 'permanent', etc. https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW4
144
+ * also, get inspiration for naming for GCC predefs as talked about in https://stffrdhrn.github.io/software/embedded/openrisc/2018/06/08/gcc_stack_frames.html
145
+ - make stack layout diagrams better, e.g. add grow direction (example: https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/art/arm_stack.jpg on https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW1)
146
+ * another example, chapter 3 of: ftp://www.sourceware.org/pub/binutils/ppc-docs/ppc-poweropen/
147
+ - provide more examples on how to use dyncall, dynload and dyncallback
148
+ * e.g. enhance manual with a couple of examples (e.g. calling MessageBoxA on windows, etc.)
149
+ - manuals for bindings (as stated in bindings-section, above)
150
+ - under "dyncall support", in each calling convention appendix, list crucial details of e.g. big/little endian support, etc.
151
+ - specify integer models in use, use common ILP32, LLP64, etc. terms
152
+
153
+ regressions:
154
+ ------------
155
+ - Haiku/gmake build doesn't build dynload due to the fact, that elf.h is not found
156
+ on default installations (one has to install the system headers)
157
+ * add to doc
158
+ - Solaris/gmake build doesn't build dynload and tests anymore (maybe not even dyncallback)
159
+ - look over code and fix TODO or @@@ marks
160
+ - add ppc-support to doc (both, 32 and 64, as well as little and big endian remarks)
161
+
162
+ nice to have:
163
+ -------------
164
+ - update: microsoft visual c++ build files - integrate all test suites in solution file
165
+ - consistency: on x64 platforms: make both ABIs available ('win64','sysv') for all x64 OS ports
166
+ - microsoft build enhancement: autodetect assembly via C preprocessor (like with .S gcc files)
167
+ - test/thunk: some platforms do not allow for allocation of executable code on heap and stack --
168
+ currently this test will segfault (handled), maybe we should collect information which platforms allow and which not.
169
+ - PSP
170
+ - automate ppsspp stuff, seems to print to stdout for callback_suite? but not for call_suite.. (?)
171
+ - fix link with dummy versions of the following for test-bins:
172
+ void __stack_chk_fail(){}
173
+ void __stack_chk_guard(){}
174
+
175
+ bugs:
176
+ -----
177
+ - setting callconv, specifically for platforms that have only one (default)) excepts on some
178
+ platforms, eg. setting X64_sysv on amd64/Linux - keeping cdecl which is the same in
179
+ this case, works (this should work now...)
180
+ - vararg function calls don't work for ARM THUMB mode (Daniel's new interface for modesetting for varag
181
+ args should be used); adapt test/ellipsis and/or retest
182
+
183
+ missing implementations (descending priority):
184
+ ----------------------------------------------
185
+ - riscv
186
+ - itanium
187
+ - superh/j-core
188
+ - 68k, 88k, 6502, etc.
189
+ - arc
190
+ - alpha
191
+ - cell
192
+ - blackfin
193
+ - seaforth
194
+ - s/390
195
+ - z80
196
+ - hppa
197
+ - vax
198
+ - atmel avr
199
+ - propeller
200
+ - amd29k
201
+
@@ -48,7 +48,7 @@
48
48
  # if defined(__thumb__)
49
49
  # define ARCH_THUMB
50
50
  # endif
51
- #elif defined(__aarch64__)
51
+ #elif defined(__aarch64__) || defined(__arm64) || defined(__arm64__)
52
52
  # define ARCH_ARM64
53
53
  #elif defined(__sh__)
54
54
  # define ARCH_SH
@@ -3,11 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 9.00
3
3
  # Visual Studio 2005
4
4
  Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dyncall", "dyncall\dyncall.vcproj", "{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}"
5
5
  EndProject
6
- Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_plain", "test_plain\test_plain.vcproj", "{65E1A63C-079D-4F72-8307-E070A499D2EA}"
7
- ProjectSection(ProjectDependencies) = postProject
8
- {DF67B85F-C8F8-4FB1-A701-867A9C835ABA} = {DF67B85F-C8F8-4FB1-A701-867A9C835ABA}
9
- EndProjectSection
10
- EndProject
11
6
  Global
12
7
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
13
8
  Debug|Win32 = Debug|Win32
@@ -18,10 +13,6 @@ Global
18
13
  {DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Debug|Win32.Build.0 = Debug|Win32
19
14
  {DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Release|Win32.ActiveCfg = Release|Win32
20
15
  {DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Release|Win32.Build.0 = Release|Win32
21
- {65E1A63C-079D-4F72-8307-E070A499D2EA}.Debug|Win32.ActiveCfg = Debug|Win32
22
- {65E1A63C-079D-4F72-8307-E070A499D2EA}.Debug|Win32.Build.0 = Debug|Win32
23
- {65E1A63C-079D-4F72-8307-E070A499D2EA}.Release|Win32.ActiveCfg = Release|Win32
24
- {65E1A63C-079D-4F72-8307-E070A499D2EA}.Release|Win32.Build.0 = Release|Win32
25
16
  EndGlobalSection
26
17
  GlobalSection(SolutionProperties) = preSolution
27
18
  HideSolutionNode = FALSE
@@ -0,0 +1,36 @@
1
+ e.g. vx{r%eax%ebx l0pL}
2
+
3
+ NOTE: codes are regex style in left hand columns
4
+
5
+ [ ;] token delimiters (if needed)
6
+ [v^] stack direction: down/up
7
+ [1248xX] slot alignment: x=16, X=32
8
+ 0 requires 0 in unused space (alignment/justification)
9
+ [if]?[<>] slot justification (i=int, f=float, both if ommitted)
10
+ [{}] frame begin/end (= fp/sp)
11
+
12
+
13
+ Areas
14
+
15
+ r([0-9]+|(%[a-z0-9])+) register save area, number is (aligned) slot count or alternatively names of registers in order
16
+ s([0-9]+|(%[a-z0-9])+) spill area, "
17
+ n[0-9]+ null/unused, number is aligned slot count
18
+ l[0-9]+ local data, number is minium aligned slot count
19
+ p([0-9]+|([if][<>1248xX]?)+) stack params, number is aligned slot count or alternatively float/int specs (with alignment/justification specifiers, if difference from global setting) @@@ this is an n-element space, so not sure if the hard specification of count/type makes any sense, here
20
+ L link address
21
+ @@@ needed?: S[0-9]+ special, "
22
+
23
+
24
+ conditionals:
25
+
26
+
27
+
28
+
29
+ see also wacom's #pragma aux, e.g.:
30
+ #pragma aux __mycall "_!" \ mangle with _prefix and lowercase
31
+ parm caller [eax ecx] \ use eax and ecx for params
32
+ value [edx] \ return in edx
33
+ modify [eax ecx edx] eax, ecx and edx are scratch
34
+
35
+ more: https://users.pja.edu.pl/~jms/qnx/help/watcom/compiler-tools/pragma32.html
36
+
@@ -5,7 +5,7 @@ cat <<EOF
5
5
  usage: $0 --<option>=<value> <var>=<value> ..
6
6
 
7
7
  --prefix=<dir>
8
- --target=<platform> uname/special targets: MacOSX,iOS,iPhoneSimulator
8
+ --target=<platform> uname/special targets: macos,iOS,iPhoneSimulator
9
9
  use "?" to get a list of explicitly specifiable
10
10
  targets
11
11
  --sdk=<version> Mac OS X/iOS SDK version (e.g. '6.1' or '10.9.3')
@@ -91,12 +91,17 @@ case ${TARGET:=`uname`} in
91
91
  ;;
92
92
  FreeBSD)
93
93
  if [ -z "${CFLAGS}" ]; then
94
- printf "CFLAGS=-fPIC\n" >>$C
94
+ if [ `uname -m` = "mips" ] && make -V MACHINE_ARCH | grep 'hf$' >/dev/null 2>&1; then
95
+ # FBSD12-CURRENT/mipshf needs to be told explicitly to use -mhard-float (at least as of may 2018)
96
+ printf "CFLAGS=-fPIC -mhard-float\n" >>$C
97
+ else
98
+ printf "CFLAGS=-fPIC\n" >>$C
99
+ fi
95
100
  fi
96
101
  printf "LDLIBS=-lm\n" >>$C
97
102
  printf "RM=rm -f\n" >>$C
98
103
  ;;
99
- MacOSX|Darwin)
104
+ MacOSX|macos|Darwin)
100
105
  # if Apple's libtool (not to be confused with GNU's) is available, which is according to libtool(1) "with -static [...] intended
101
106
  # to replace ar(5) and ranlib", use it - if it is shadowed by some install of GNU's libtool assume that a foreign environment is
102
107
  # intentionally used, and fall back to using 'ar rs' (the equivalent to 'libtool -static'), for compatibility:
@@ -111,18 +116,21 @@ case ${TARGET:=`uname`} in
111
116
  printf "CC=gcc\n" >>$C
112
117
  elif [ -z ${SDK} ]; then
113
118
  case `sw_vers -productVersion` in
114
- 10.4.*)
119
+ 10.4.*) # == tiger (10.4.*)
115
120
  ARCHS="-arch ppc -arch i386 -arch x86_64"
116
121
  ;;
117
- 10.5.*)
122
+ 10.5.*) # == leopard (10.5.*)
118
123
  ARCHS="-arch i386 -arch x86_64 -arch ppc"
119
124
  ;;
120
- 10.6.*)
121
- ARCHS="-arch i386 -arch x86_64"
125
+ 10.6.*) # == snow leopard (10.6.*)
126
+ ARCHS="-arch i386 -arch x86_64" # no more ppc
122
127
  ;;
123
- 10.[789].*|10.1?.*|10.1?)
128
+ 10.[789].*|10.1[0123].*|10.1[0123]) # >= lion (10.7.*), <= high sierra (10.13.*)
124
129
  ARCHS="-arch x86_64 -arch i386"
125
130
  ;;
131
+ 10.1?.*|10.1?) # >= mojave (10.14.*)
132
+ ARCHS="-arch x86_64" # mojave is final os to run x86 code, but removed build support for it
133
+ ;;
126
134
  esac
127
135
  printf "ASFLAGS=${ARCHS}\n" >>$C
128
136
  printf "CFLAGS=${ARCHS}\n" >>$C
@@ -147,7 +155,7 @@ case ${TARGET:=`uname`} in
147
155
  [67].*)
148
156
  ARCHS="-arch armv7"
149
157
  ;;
150
- [89].*)
158
+ [89].*|1[0-9].*)
151
159
  ARCHS="-arch armv7 -arch arm64"
152
160
  ;;
153
161
  esac
@@ -56,7 +56,7 @@ IF [%1]==[] (
56
56
  ECHO. /prefix-bd PATH set build directory prefix ^(GNU make only^)
57
57
  ECHO. ^(only for use with gmake^)
58
58
  ECHO.
59
- ECHO. /target-x86 build for x86 architecture ^(default^)
59
+ ECHO. /target-x86 build for x86 architecture
60
60
  ECHO. /target-x64 build for x64 architecture
61
61
  ECHO. /target-psp build for PlayStation Portable ^(homebrew SDK^)
62
62
  ECHO. /target-nds-arm build for Nintendo DS ^(devkitPro, ARM mode^)
@@ -6,7 +6,7 @@
6
6
  Description: public header for library dyncall
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2020 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -83,6 +83,7 @@ typedef struct DCstruct_ DCstruct;
83
83
  #define DC_CALL_SYS_DEFAULT 200
84
84
  #define DC_CALL_SYS_X86_INT80H_LINUX 201
85
85
  #define DC_CALL_SYS_X86_INT80H_BSD 202
86
+ #define DC_CALL_SYS_X64_SYSCALL_SYSV 204
86
87
  #define DC_CALL_SYS_PPC32 210
87
88
  #define DC_CALL_SYS_PPC64 211
88
89
 
@@ -67,7 +67,15 @@
67
67
  # elif defined(DC__Arch_PPC64)
68
68
  # include "dyncall_call_ppc64.S"
69
69
  # elif defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
70
- # include "dyncall_call_mips_gas.S"
70
+ # if defined(DC__ABI_MIPS_O32)
71
+ # include "dyncall_call_mips_o32.S"
72
+ # elif defined(DC__ABI_MIPS_N64)
73
+ # include "dyncall_call_mips_n64.S"
74
+ # elif defined(DC__ABI_MIPS_N32)
75
+ # include "dyncall_call_mips_n32.S"
76
+ # else
77
+ # include "dyncall_call_mips_eabi_gas.s"
78
+ # endif
71
79
  # elif defined(DC__Arch_Sparc64)
72
80
  # include "dyncall_call_sparc64.s"
73
81
  # elif defined(DC__Arch_Sparc)
@@ -0,0 +1,192 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncall
5
+ File: dyncall/dyncall_call_mips_n32.S
6
+ Description: mips64 "n32" abi call kernel implementation in GNU Assembler
7
+ License:
8
+
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
+
12
+ Permission to use, copy, modify, and distribute this software for any
13
+ purpose with or without fee is hereby granted, provided that the above
14
+ copyright notice and this permission notice appear in all copies.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
+
24
+ */
25
+
26
+ .section .mdebug.abiN32
27
+ .previous
28
+ .abicalls
29
+ .text
30
+ .align 2
31
+ .globl dcCall_mips_n32
32
+ .ent dcCall_mips_n32
33
+ dcCall_mips_n32:
34
+
35
+ /* Stack-frame prolog */
36
+
37
+ .frame $fp,64,$31 /* vars=16, regs=3/0, args=0, extra=16 */
38
+ .mask 0xd0000000,-8
39
+ .fmask 0x00000000,0
40
+ subu $sp,$sp,64
41
+ sd $31,48($sp) /* save return address register (ra) */
42
+ sd $30,40($sp) /* save frame pointer register (fp) */
43
+ sd $28,32($sp) /* save global pointer register (gp) */
44
+ move $fp,$sp
45
+
46
+
47
+ /* arguments: */
48
+
49
+ /* $4 target function */
50
+ /* $5 register data */
51
+ /* $6 stack size */
52
+ /* $7 stack data */
53
+
54
+
55
+ /* allocate argument stack space */
56
+
57
+ subu $sp, $sp, $6
58
+
59
+ /* copy stack data */
60
+
61
+ /* n32 abi call assumptions:
62
+ - stack data is 16-byte aligned.
63
+ - no extra-storage for arguments passed via registers.
64
+ */
65
+
66
+ /* $12 source pointer (parameter stack data) */
67
+ /* $14 destination (stack pointer) */
68
+ /* $6 byte count */
69
+
70
+ move $12, $7
71
+ move $14, $sp
72
+
73
+ .next:
74
+ beq $6, $0, .skip
75
+ nop
76
+ daddiu $6, $6, -8
77
+ ld $2, 0($12)
78
+ sd $2, 0($14)
79
+ daddiu $12,$12, 8
80
+ daddiu $14,$14, 8
81
+ b .next
82
+ .skip:
83
+ move $25, $4
84
+
85
+ /* load registers */
86
+
87
+ /* locals: */
88
+ /* $13 = register data */
89
+ /* $14 = useDouble flags */
90
+ move $13, $5
91
+ ld $14, 128($13)
92
+
93
+ /* load integer parameter registers */
94
+
95
+ ld $4 , 0($13)
96
+ ld $5 , 8($13)
97
+ ld $6 ,16($13)
98
+ ld $7 ,24($13)
99
+ ld $8 ,32($13)
100
+ ld $9 ,40($13)
101
+ ld $10,48($13)
102
+ ld $11,56($13)
103
+
104
+ /* load float-or-double floating pointer parameter registers
105
+ a 64-bit bitmask given at byte offset 128 of regdata indicates
106
+ if loading a float (bit cleared) or double (bit set), starting
107
+ at bit position 0 in bitmask.
108
+ */
109
+ .t0:
110
+ and $15, $14, 1
111
+ bgtz $15, .d0
112
+ .f0:
113
+ l.s $f12, 64($13)
114
+ j .t1
115
+ .d0:
116
+ l.d $f12, 64($13)
117
+
118
+ .t1:
119
+ and $15, $14, 2
120
+ bgtz $15, .d1
121
+ .f1:
122
+ l.s $f13, 72($13)
123
+ j .t2
124
+ .d1:
125
+ l.d $f13, 72($13)
126
+ .t2:
127
+ and $15, $14, 4
128
+ bgtz $15, .d2
129
+ .f2:
130
+ l.s $f14, 80($13)
131
+ j .t3
132
+ .d2:
133
+ l.d $f14, 80($13)
134
+ .t3:
135
+ and $15, $14, 8
136
+ bgtz $15, .d3
137
+ .f3:
138
+ l.s $f15, 88($13)
139
+ j .t4
140
+ .d3:
141
+ l.d $f15, 88($13)
142
+ .t4:
143
+ and $15, $14, 16
144
+ bgtz $15, .d4
145
+ .f4:
146
+ l.s $f16, 96($13)
147
+ j .t5
148
+ .d4:
149
+ l.d $f16, 96($13)
150
+ .t5:
151
+ and $15, $14, 32
152
+ bgtz $15, .d5
153
+ .f5:
154
+ l.s $f17,104($13)
155
+ j .t6
156
+ .d5:
157
+ l.d $f17,104($13)
158
+ .t6:
159
+ and $15, $14, 64
160
+ bgtz $15, .d6
161
+ .f6:
162
+ l.s $f18,112($13)
163
+ j .t7
164
+ .d6:
165
+ l.d $f18,112($13)
166
+ .t7:
167
+ and $15, $14, 128
168
+ bgtz $15, .d7
169
+ .f7:
170
+ l.s $f19,120($13)
171
+ j .fregend
172
+ .d7:
173
+ l.d $f19,120($13)
174
+
175
+ .fregend:
176
+
177
+ /* jump-and-link to register $25 */
178
+
179
+ jal $31, $25
180
+ nop /* branch-delay slot - no nop according to gcc assembly */
181
+ /* output, but let's play safe */
182
+
183
+ /* Stack-frame epilog */
184
+ move $sp,$fp
185
+ ld $31,48($sp) /* restore ra register */
186
+ ld $fp,40($sp) /* restore fp register */
187
+ ld $28,32($sp) /* restore gp register */
188
+ daddu $sp,$sp,64
189
+ j $31
190
+ .end dcCall_mips_n64
191
+ .size dcCall_mips_n64, .-dcCall_mips_n64
192
+