Mercurial > pub > dyncall > dyncall
annotate ToDo @ 473:ead041d93e36
- ppc doc and disas examples related to aggregates
author | Tassilo Philipp |
---|---|
date | Wed, 16 Feb 2022 16:44:11 +0100 |
parents | 13475895a79b |
children | b42cee4358fc |
rev | line source |
---|---|
420
13475895a79b
- prep for 1.3 release, version number bump, etc.
Tassilo Philipp
parents:
414
diff
changeset
|
1 1.4: |
0 | 2 ---- |
364 | 3 - test atpcs thumb on arm and verify if ellipsis and C++ thiscalls work, if so adapt doc appendix |
4 - test eabi thumb on arm and verify if ellipsis and C++ thiscalls work, if so adapt doc appendix | |
5 - new platform matrix | |
6 * check dark green cells and validate in general | |
355 | 7 - openbsd-4.0-* test/resolve_self fails, but unsure why. dlopen correctly returns RTLD_DEFAULT, which |
8 should lookup via dlsym the function in the object itself, but cannot. So... some compiler flag might | |
9 be missing to keep symbol names, or some prefixing happens | |
10 - 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) | |
11 - remove test/gen-masm alltogether | |
329 | 12 - test code: add sparc tests for when out of register windows, meaning multiple layers deep in the call stack |
286 | 13 - ./configure on macOS does not pass CFLAGS etc.. to Makefile.config |
256
7520e2260097
- added to configure some detection on how to compile .s/.S with --noexecstack (or similar), as compilers' defaults are often insane
Tassilo Philipp
parents:
250
diff
changeset
|
14 - support platforms without shared libraries so they can be built by just typing `./configure;make` (e.g. minix < 3.2.1) |
7520e2260097
- added to configure some detection on how to compile .s/.S with --noexecstack (or similar), as compilers' defaults are often insane
Tassilo Philipp
parents:
250
diff
changeset
|
15 * 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) |
201 | 16 - dyncall supports calls to functions where prototype exists (with and without varargs); however not when no |
17 prototype exist (e.g. just calling some pointer), without any declaration... even possible in C, as one has | |
18 to cast to the function type? need to support? | |
155 | 19 - dyncallback's "stack_cleanup" can be removed from non x86 impls... test if they still work |
165
572aff021627
- file name/layout cleanup, removed "-att" from x64 .S filenames, as unnecessary and also misleading
cslag
parents:
159
diff
changeset
|
20 - target a minimum c version, for use with -pedantic, etc.? Right now we use e.g. extensions |
329 | 21 for anon structs, etc. -> we do now target c99 |
86 | 22 - the CallVM-free functions are per VTable, however the latter can be changed out |
23 at runtime... which basically changes potentially the deallocator... | |
24 same goes for functions setting the mode. think about how to make this safer - currently | |
25 we have a higher flexibility and we need to potentially clean up from the mode we are in, | |
26 however, this is open to misuse | |
78 | 27 - check all vararg calling conv implementations if they promote correctly |
28 (e.g. float to double); we used to not care as it was the user's job to | |
29 think of that, but we allow users to use ArgFloat, etc. on "..." now, | |
30 taking care of the promotion; so it should be consistent all across the | |
31 implementations -> also write testcode specifically for that | |
0 | 32 - autovar was never really pushed all the way through and still plays second |
9 | 33 fiddle to dyncall_macros.h, clean this all up, eventually (Tassilo: for now, I |
34 removed out of sync files to avoid confusion; but still probably duped code) | |
69 | 35 - add portable "make install" |
36 * make install should also install manpages | |
0 | 37 - fix for NDS: |
69 | 38 * ARM: |
104
dbca6763f2be
- complete, working mips o32 callback (using hardware fp); fixes error from last commit, which ignored first 2 float args
cslag
parents:
100
diff
changeset
|
39 - callback_plain retval wrong (not only platform), area on stack where |
dbca6763f2be
- complete, working mips o32 callback (using hardware fp); fixes error from last commit, which ignored first 2 float args
cslag
parents:
100
diff
changeset
|
40 it's stored is probably not zeroed, so half-words, etc., come with garbage |
69 | 41 * THUMB: |
42 - ellipsis (might be test itself, not respecting fixed part of args) | |
104
dbca6763f2be
- complete, working mips o32 callback (using hardware fp); fixes error from last commit, which ignored first 2 float args
cslag
parents:
100
diff
changeset
|
43 - callback_plain retval, see above under ARM |
69 | 44 - callf |
24 | 45 - support Solaris11 CFLAGS with -D_FILE_OFFSET_BITS=64 |
256
7520e2260097
- added to configure some detection on how to compile .s/.S with --noexecstack (or similar), as compilers' defaults are often insane
Tassilo Philipp
parents:
250
diff
changeset
|
46 - make sure selinux works (esp. regarding NX bits) |
54 | 47 Daniel has a patch for it, if needed, implementing allocwx with two memory blocks, one for w^x, mmaped to one for r|x |
68 | 48 - support /SAFESEH on cl/win32 |
370 | 49 - test code functions should be in .so files, optionally, so the suites can directly be used to test dyncall bindings |
83
54930a037e8a
- PPC64 single-precision float fixes for more than 13 float args (thanks Masanori!)
cslag
parents:
78
diff
changeset
|
50 - pkg-config support? |
329 | 51 - add tests using alloca(), as this might depend on the frame pointer being correctly set (we don't |
52 check for this, currently, at all - but might not affect dyncall's stubs, anyways) - verify | |
0 | 53 |
54 portasm: | |
55 -------- | |
56 - add solaris support for x64 | |
57 | |
58 dyncall: | |
59 -------- | |
370 | 60 - dyncall sparc v7/v8: -xO3 on SunPro segfaults in tests (observed years ago) |
364 | 61 - callbacks and use of CC signature characters (only x86 has any support for different CCs for callbacks): |
62 * support for arm (arm/thumb on same platform) | |
63 * check if ellipsis support is needed (is there any need for calling back into an ellipse function?) | |
64 * check if syscalls support is needed (is there any need for calling back into a syscall?) | |
65 - think about using 'inline' for all/most dyncall_api.c functions? | |
66 - support for where syscalls originate from on OpenBSD: http://undeadly.org/cgi?action=article;sid=20191202105849 | |
288 | 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. | |
146
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
69 - find big endian arm box (also hardfloat), e.g. cubietruck: http://blog.netbsd.org/tnf/entry/working_arm_multiprocessor_support |
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
70 - test if armhf/thumb is actually working... pulls in arm mode code in dyncall_callvm.c |
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
71 - dyncall_call_mips_n32.h and dyncall_call_mips_n64.h are pretty much the same, share code |
0 | 72 - support for return values: aggregate return values |
370 | 73 - support for argument values: structures, half-precision, vector types, long double (c89) |
74 - support for argument values: _Complex (c99) | |
75 - support for argument values: Fixed-width integer types (c99) - could be just aliases but would help abstracting it away from library users | |
288 | 76 * make sure that struct support for ellipsis calls are not forgotten (copy everything by value) |
0 | 77 - consider automatic type-promotion for arguments passed through DC_CALL_C_ELLIPSIS_VARARGS; |
78 this would make it easier to just pass arguments instead of having to know about the C | |
278 | 79 type promotions (this is partly done, see todo-item above under 1.1) |
0 | 80 - other syscalls |
135 | 81 - test MIPS32 eabi big endian (current port works on psp, which is little endian) |
132
b0cca984c740
- manual update, started splitting platform overview in EP and EL for some platforms
cslag
parents:
129
diff
changeset
|
82 - implement MIPS64 N32 (gcc -mabi=n32); both, little and big-endian (looks like NetNBSD on and |
b0cca984c740
- manual update, started splitting platform overview in EP and EL for some platforms
cslag
parents:
129
diff
changeset
|
83 EdgeRouter lite uses this: https://blog.netbsd.org/tnf/entry/hands_on_experience_with_edgerouter) |
306
9f2aff560fa7
- todo update reflecting mips softfloat status more precisely (as only lacking for mips64/n32 callconv)
Tassilo Philipp
parents:
295
diff
changeset
|
84 - MIPS64 n32 softfloat support (-msoft-float) |
129 | 85 - implement MIPS64 EABI (gcc -mabi=eabi); both, little and big-endian |
141 | 86 - support for Minix/arm |
146
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
87 - improve ellipsis test: |
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
88 * test not just with one fixed arg, to also simulate alignment problems |
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
89 * test return values |
0ab08c1541f0
- fixed armhf ellipsis calls, were ignoring spill area
cslag
parents:
145
diff
changeset
|
90 * convert from c++ to c, to have it also on plan9, and more portability |
0 | 91 |
92 dynload: | |
93 -------- | |
366
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
94 - investigate issue where if dlGetLibraryPath() is called from within a .so, |
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
95 passing NULL will return .so name, whereas passing result of |
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
96 dlLoadLibrary(NULL) returns process' name |
244 | 97 - dlGetLibraryPath: dl_iterate_phdr() used on OpenBSD, but not available on version < 3.7 |
0 | 98 - bug: test/nm crashes on qemu mips linux o32 debian etch |
99 - rename SymsInit to InitSyms and similar for cleanup function to reflect naming | |
100 in dyncall | |
101 - get rid of Dl_info and friends (_GNU_SOURCE) in dynload/dynload_syms_elf.c | |
102 for implementation of dlSymsNameFromValue(..) | |
103 - check if PSP can support dynload (missing elf.h, dlfcn.h, etc.); fixup readme if successful | |
84 | 104 - some functionality like java's System.mapLibraryName('name') might be helpful? |
288 | 105 - Failed On Open Solaris 11: |
106 In file included from dynload_syms.c:28: | |
107 dynload_syms_elf.c:56: error: syntax error before "Elf_Dyn" | |
108 dynload_syms_elf.c:56: warning: data definition has no type or storage class | |
109 dynload_syms_elf.c: In function `dlSymsInit': | |
110 dynload_syms_elf.c:155: error: `pDyn' undeclared (first use in this function) | |
111 dynload_syms_elf.c:155: error: (Each undeclared identifier is reported only once | |
112 dynload_syms_elf.c:155: error: for each function it appears in.) | |
113 dynload_syms_elf.c:155: error: syntax error before ')' token | |
114 dynload_syms_elf.c:160: error: `DT_NULL' undeclared (first use in this function) | |
115 dynload_syms_elf.c:163: error: `DT_STRTAB' undeclared (first use in this function) | |
116 dynload_syms_elf.c:164: error: `DT_SYMTAB' undeclared (first use in this function) | |
117 dynload_syms_elf.c:165: error: `DT_HASH' undeclared (first use in this function) | |
118 make: *** [dynload_syms.o] Error 1 | |
0 | 119 |
120 dyncallback: | |
121 ------------ | |
104
dbca6763f2be
- complete, working mips o32 callback (using hardware fp); fixes error from last commit, which ignored first 2 float args
cslag
parents:
100
diff
changeset
|
122 - callback_plain's return value not correct anymore on NDS (maybe just broken testcode?), |
278 | 123 see above under 1.1 items |
104
dbca6763f2be
- complete, working mips o32 callback (using hardware fp); fixes error from last commit, which ignored first 2 float args
cslag
parents:
100
diff
changeset
|
124 * check other platforms also, if asm stub initializes retval space, correctly |
135 | 125 - test MIPS32 eabi big endian (current port works on psp, which is little endian) |
132
b0cca984c740
- manual update, started splitting platform overview in EP and EL for some platforms
cslag
parents:
129
diff
changeset
|
126 - implement MIPS64 N32 (gcc -mabi=n32); both, little and big-endian (looks like NetNBSD on and |
b0cca984c740
- manual update, started splitting platform overview in EP and EL for some platforms
cslag
parents:
129
diff
changeset
|
127 EdgeRouter lite uses this: https://blog.netbsd.org/tnf/entry/hands_on_experience_with_edgerouter) |
306
9f2aff560fa7
- todo update reflecting mips softfloat status more precisely (as only lacking for mips64/n32 callconv)
Tassilo Philipp
parents:
295
diff
changeset
|
128 - MIPS64 n32 softfloat support (-msoft-float) |
129 | 129 - implement MIPS64 EABI (gcc -mabi=eabi); both, little and big-endian |
141 | 130 - support for Minix/arm |
0 | 131 |
132 bindings: | |
133 --------- | |
134 - release bindings as standalone packages (already done for rbdc as a gem and rdyncall on cran) | |
366
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
135 * add note to documentation, where bindings are |
0 | 136 - add rdoc documentation to ruby gem |
137 - add pydoc for python | |
138 - add manpage for shdc | |
366
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
139 - expose callf-convenience functions to godc |
0 | 140 - add godoc for godc |
141 - add javadoc to java | |
142 - add more bindings | |
414 | 143 - add callback support for erlang, go, java, lua and ruby (and shell? how?) |
0 | 144 - add call-conv-mode-support for rbdc through signature |
145 | |
146 manual: | |
147 ------- | |
366
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
148 - introduce doc overview tables and common vocab for calling convention specifics, following example of table on page 13 of |
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
149 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. |
ad5f9803f52f
- removal of some unnecessary headers that only contained internally used forward declarations, so no need to have them
Tassilo Philipp
parents:
364
diff
changeset
|
150 https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html#//apple_ref/doc/uid/TP40009021-SW4 |
329 | 151 * 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 |
201 | 152 - 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) |
332 | 153 * another example, chapter 3 of: ftp://www.sourceware.org/pub/binutils/ppc-docs/ppc-poweropen/ |
0 | 154 - provide more examples on how to use dyncall, dynload and dyncallback |
155 * e.g. enhance manual with a couple of examples (e.g. calling MessageBoxA on windows, etc.) | |
156 - manuals for bindings (as stated in bindings-section, above) | |
117 | 157 - under "dyncall support", in each calling convention appendix, list crucial details of e.g. big/little endian support, etc. |
158 - specify integer models in use, use common ILP32, LLP64, etc. terms | |
0 | 159 |
88 | 160 regressions: |
161 ------------ | |
0 | 162 - Solaris/gmake build doesn't build dynload and tests anymore (maybe not even dyncallback) |
163 - look over code and fix TODO or @@@ marks | |
164 | |
165 nice to have: | |
166 ------------- | |
167 - update: microsoft visual c++ build files - integrate all test suites in solution file | |
168 - consistency: on x64 platforms: make both ABIs available ('win64','sysv') for all x64 OS ports | |
169 - microsoft build enhancement: autodetect assembly via C preprocessor (like with .S gcc files) | |
170 - test/thunk: some platforms do not allow for allocation of executable code on heap and stack -- | |
329 | 171 currently this test will segfault (handled), maybe we should collect information which platforms allow and which not. |
172 - PSP | |
173 - automate ppsspp stuff, seems to print to stdout for callback_suite? but not for call_suite.. (?) | |
174 - fix link with dummy versions of the following for test-bins: | |
175 void __stack_chk_fail(){} | |
176 void __stack_chk_guard(){} | |
0 | 177 |
178 bugs: | |
179 ----- | |
88 | 180 - setting callconv, specifically for platforms that have only one (default)) excepts on some |
6 | 181 platforms, eg. setting X64_sysv on amd64/Linux - keeping cdecl which is the same in |
88 | 182 this case, works (this should work now...) |
0 | 183 - vararg function calls don't work for ARM THUMB mode (Daniel's new interface for modesetting for varag |
184 args should be used); adapt test/ellipsis and/or retest | |
185 | |
186 missing implementations (descending priority): | |
187 ---------------------------------------------- | |
188 - riscv | |
189 - itanium | |
88 | 190 - superh/j-core |
0 | 191 - 68k, 88k, 6502, etc. |
88 | 192 - arc |
0 | 193 - alpha |
194 - cell | |
195 - blackfin | |
88 | 196 - seaforth |
21 | 197 - s/390 |
0 | 198 - z80 |
199 - hppa | |
200 - vax | |
201 - atmel avr | |
202 - propeller | |
203 - amd29k | |
204 |