summaryrefslogtreecommitdiff
path: root/ext/fiddle
AgeCommit message (Collapse)Author
2023-11-08[ruby/fiddle] Remove garbageSutou Kouhei
https://github.com/ruby/fiddle/commit/bbcb66e16e
2023-11-08[ruby/fiddle] Include stdbool.h explicitly for old RubySutou Kouhei
https://github.com/ruby/fiddle/commit/74a05fb358
2023-11-08[ruby/fiddle] Use Ruby's true/false for C boolSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/130 Reported by Benoit Daloze. Thanks!!! https://github.com/ruby/fiddle/commit/2640e0148e
2023-09-17[ruby/fiddle] Suppress -Wundef warnings on arm64 macOS and WindowsNobuyoshi Nakada
(https://github.com/ruby/fiddle/pull/134) ``` In file included from ../../../../ext/fiddle/fiddle.h:46: /opt/local/include/ffi.h:477:5: warning: 'FFI_GO_CLOSURES' is not defined, evaluates to 0 [-Wundef] ^ ``` c.f. https://github.com/libffi/libffi/pull/796 https://github.com/ruby/fiddle/commit/d4feb57098
2023-08-25use configure-detected sanity of _Alignof卜部昌平
This is actually already checked in (Ruby's) configure. Notes: Merged: https://github.com/ruby/ruby/pull/8274
2023-08-02[ruby/fiddle] Include stdbool.h explicitlySutou Kouhei
https://github.com/ruby/fiddle/commit/c313a74632
2023-08-02[ruby/fiddle] Include stdbool.h explicitlySutou Kouhei
https://github.com/ruby/fiddle/commit/69ff680bf6
2023-08-02[ruby/fiddle] Add support for boolSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/130 Reported by Benoit Daloze. Thanks!!! https://github.com/ruby/fiddle/commit/bc6c66bbb9
2023-08-02[ruby/fiddle] Use ifdefSutou Kouhei
https://github.com/ruby/fiddle/commit/6cdf53726d
2023-06-28[ruby/fiddle] Mark Closure, Function and Handle as write barrierJean byroot Boussier
protected (https://github.com/ruby/fiddle/pull/129) They don't have a mark function, so they don't need any change. https://github.com/ruby/fiddle/commit/9bbc732aef Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2023-06-28[ruby/fiddle] Implement write barriers for Fiddle::PointerJean byroot Boussier
(https://github.com/ruby/fiddle/pull/127) Save from having to mark them on every minor. https://github.com/ruby/fiddle/commit/153c09c99f Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2023-06-28[ruby/fiddle] Fix a typoSutou Kouhei
https://github.com/ruby/fiddle/commit/4c0c5da1a5
2023-06-28[ruby/fiddle] Add support for converting "C" (one character string) to charSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/96 I wanted to add a test for this but I couldn't find a function that has a "char" argument in libc... Reported by kojix2. Thanks!!! https://github.com/ruby/fiddle/commit/2c863ef8ba
2023-06-28[ruby/fiddle] Add support for more "short" variantsSutou Kouhei
https://github.com/ruby/fiddle/commit/2b22bb9d74
2023-06-28[ruby/fiddle] Add support for "long" variantsSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/100 Reported by David M. Lary. Thanks!!! https://github.com/ruby/fiddle/commit/516333dd78
2023-06-28[ruby/fiddle] Add a helper method for reading/writing memoryAaron Patterson
(https://github.com/ruby/fiddle/pull/123) This commit adds two new methods, `Fiddle::Pointer.read` and `Fiddle::Pointer.write`. Both methods take an address, and will read or write bytes at that address respectively. For example we can read from an address without making a Pointer object: ```ruby Fiddle::Pointer.read(address, 5) # read 5 bytes ``` We can also write to an address without allocating a Pointer object: ```ruby Fiddle::Pointer.write(address, "bytes") # write 5 bytes ``` This allows us to read / write memory at arbitrary addresses without instantiating a new `Fiddle::Pointer` object. Examples where this API would be useful [1](https://github.com/tenderlove/tenderjit/blob/f03481d28bff4d248746e596929b0841de65f181/lib/tenderjit/fiddle_hacks.rb#L26-L28) [2](https://github.com/tenderlove/ruby/blob/77c8daa2d40dd58eeb3785ce17dea2ee38f308d1/lib/ruby_vm/rjit/c_pointer.rb#L193) [3](https://github.com/tenderlove/ruby/blob/77c8daa2d40dd58eeb3785ce17dea2ee38f308d1/lib/ruby_vm/rjit/c_pointer.rb#L284) I also added a writer method for the same reasons as the reader. --------- https://github.com/ruby/fiddle/commit/04238cefed Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2023-02-28Update the depend filesMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7310
2023-02-27Remove intern/gc.h from Make depsMatt Valentine-House
Notes: Merged: https://github.com/ruby/ruby/pull/7330
2023-02-27Prefer to use File.foreach instead of IO.foreachHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/7387
2023-02-27Prefer to use File.binwrite instead of IO.binwriteHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/7387
2023-02-27Prefer to use File.binread instead of IO.binreadHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/7387
2023-02-08Extract include/ruby/internal/attr/packed_struct.hNobuyoshi Nakada
Split `PACKED_STRUCT` and `PACKED_STRUCT_UNALIGNED` macros into the macros bellow: * `RBIMPL_ATTR_PACKED_STRUCT_BEGIN` * `RBIMPL_ATTR_PACKED_STRUCT_END` * `RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_BEGIN` * `RBIMPL_ATTR_PACKED_STRUCT_UNALIGNED_END` Notes: Merged: https://github.com/ruby/ruby/pull/7268
2023-01-27[ruby/fiddle] fiddle: Use C11 _Alignof to define ALIGN_OF whenKhem Raj
possible (https://github.com/ruby/fiddle/pull/120) WG14 N2350 made very clear that it is an UB having type definitions within "offsetof" [1]. This patch enhances the implementation of macro ALIGN_OF to use builtin "_Alignof" to avoid undefined behavior when using std=c11 or newer clang 16+ has started to flag this [2] Fixes build when using -std >= gnu11 and using clang16+ Older compilers gcc < 4.9 or clang < 8 has buggy _Alignof even though it may support C11, exclude those compiler versions [1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm [2] https://reviews.llvm.org/D133574 Signed-off-by: Khem Raj <raj.khem@gmail.com> https://github.com/ruby/fiddle/commit/ad6c9aa826
2023-01-27[ruby/fiddle] Fix comment formattingAaron Patterson
https://github.com/ruby/fiddle/commit/36b2432575
2023-01-27[ruby/fiddle] Update documentationAaron Patterson
(https://github.com/ruby/fiddle/pull/119) The documentation for `Fiddle.dlwrap` and `Fiddle.dlunwrap` were not very accurate and pretty confusing. This commit updates the documentation so it's easier to understand what the methods do.
2022-12-26[ruby/fiddle] Prefer String#unpack1 in Fiddle::ValueUtilMau Magnaguagno
(https://github.com/ruby/fiddle/pull/118) String#unpack1 is available since Ruby 2.4, and support for older than Ruby 2.5 was dropped by #85. Also simplified a common return statement. Notes: Merged: https://github.com/ruby/ruby/pull/7025
2022-12-26[ruby/fiddle] Bump versionSutou Kouhei
https://github.com/ruby/fiddle/commit/3033266902 Notes: Merged: https://github.com/ruby/ruby/pull/7025
2022-12-09Merge fiddle-1.1.1Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/6890
2022-10-18[ruby/fiddle] Free closures immediatelyAaron Patterson
(https://github.com/ruby/fiddle/pull/109) These structs don't need to be freed as part of finalization, so lets free them immediately. https://github.com/ruby/fiddle/commit/8a10ec1152 Notes: Merged: https://github.com/ruby/ruby/pull/6576
2022-10-18[ruby/fiddle] Add support for linker script on LinuxSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/107 Reported by nicholas a. evans. Thanks!!! https://github.com/ruby/fiddle/commit/49ea1490df Notes: Merged: https://github.com/ruby/ruby/pull/6576
2022-10-18[ruby/fiddle] Bump versionSutou Kouhei
Notes: Merged: https://github.com/ruby/ruby/pull/6576
2022-10-18fiddle: use the old rb_ary_tmp_new() aliasNobuyoshi Nakada
Fiddle is a gem and has the external upstream which supports older versions of Ruby. Notes: Merged: https://github.com/ruby/ruby/pull/6576
2022-10-07Add --with-libffi-source-dir feature and removed --enable-bundled-libffi ↵Hiroshi SHIBATA
option. (#113) https://bugs.ruby-lang.org/issues/18571 Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org> Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2022-10-07[ruby/fiddle] closure: follow variable name changeSutou Kouhei
GitHub: GH-102 https://github.com/ruby/fiddle/commit/2530496602
2022-10-07[ruby/fiddle] closure: free resources when an exception is raised in Closure.newSutou Kouhei
GitHub: GH-102 https://github.com/ruby/fiddle/commit/81a8a56239
2022-10-07[ruby/fiddle] Add Fiddle::Closure.create and Fiddle::Closure.freeSutou Kouhei
GitHub: fix GH-102 It's for freeing a closure explicitly. We can't use Fiddle::Closure before we fork the process. If we do it, the process may be crashed with SELinux. See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 for details. Reported by Vít Ondruch. Thanks!!! https://github.com/ruby/fiddle/commit/a0ccc6bb1b
2022-10-07[ruby/fiddle] Add `sym_defined?` methods to test if a symbol is defined ↵Aaron Patterson
(https://github.com/ruby/fiddle/pull/108) I would like to check if a symbol is defined before trying to access it. Some symbols aren't available on all platforms, so instead of raising an exception, I want to check if it's defined first. Today we have to do: ```ruby begin addr = Fiddle::Handle.sym("something") # do something rescue Fiddle::DLError end ``` I want to write this: ```ruby if Fiddle::Handle.sym_defined?("something") addr = Fiddle::Handle.sym("something") # do something end ``` https://github.com/ruby/fiddle/commit/9d3371de13 Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2022-10-07[ruby/fiddle] Move "type" constants to `Fiddle::Types` ↵Aaron Patterson
(https://github.com/ruby/fiddle/pull/112) This helps to reduce repetition in code. Instead of doing "TYPE_*" everywhere, you can do `include Fiddle::Types`, and write the type name directly. This PR is to help reduce repetition when writing Fiddle code. Right now we have to type `TYPE_` everywhere, and you also have to include all of `Fiddle` to access `TYPE_*` constants. With this change, you can just include `Fiddle::Types` and it will shorten your code and also you only have to include those constants. Here is an example before: ```ruby require "fiddle" module MMAP # All Fiddle constants included include Fiddle def self.make_function name, args, ret ptr = Handle::DEFAULT[name] func = Function.new ptr, args, ret, name: name define_singleton_method name, &func.to_proc end make_function "munmap", [TYPE_VOIDP, # addr TYPE_SIZE_T], # len TYPE_INT make_function "mmap", [TYPE_VOIDP, TYPE_SIZE_T, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT], TYPE_VOIDP make_function "mprotect", [TYPE_VOIDP, TYPE_SIZE_T, TYPE_INT], TYPE_INT end ``` After: ```ruby require "fiddle" module MMAP # Only type names included include Fiddle::Types def self.make_function name, args, ret ptr = Fiddle::Handle::DEFAULT[name] func = Fiddle::Function.new ptr, args, ret, name: name define_singleton_method name, &func.to_proc end make_function "munmap", [VOIDP, # addr SIZE_T], # len INT make_function "mmap", [VOIDP, SIZE_T, INT, INT, INT, INT], VOIDP make_function "mprotect", [VOIDP, SIZE_T, INT], INT end ``` We only need to import the type names, and you don't have to type `TYPE_` over and over. I think this makes Fiddle code easier to read. https://github.com/ruby/fiddle/commit/49fa7233e5 Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2022-10-07[ruby/fiddle] Add constants for unsigned values ↵Aaron Patterson
(https://github.com/ruby/fiddle/pull/111) This commit adds constants for unsigned values. Currently we can use `-` to mean "unsigned", but I think having a specific name makes Fiddle more user friendly. This commit continues to support `-`, but introduces negative constants with "unsigned" names I think this will help to eliminate [this code](https://github.com/ruby/ruby/blob/3a56bf0bcc66e14ffe5ec89efc32ecfceed180f4/lib/mjit/c_type.rb#L31-L38) https://github.com/ruby/fiddle/commit/2bef0f1082 Co-authored-by: Sutou Kouhei <kou@clear-code.com>
2022-09-11[ruby/fiddle] Fix PACK_MAP for unsigned types ↵Takashi Kokubun
(https://github.com/ruby/fiddle/pull/110) https://github.com/ruby/fiddle/commit/4a71246645ccff001292c9d80b855b2ef5bf06c1
2022-09-09No longer bundle external library sourcesNobuyoshi Nakada
2022-07-26Rename rb_ary_tmp_new to rb_ary_hidden_newPeter Zhu
rb_ary_tmp_new suggests that the array is temporary in some way, but that's not true, it just creates an array that's hidden and not on the transient heap. This commit renames it to rb_ary_hidden_new. Notes: Merged: https://github.com/ruby/ruby/pull/6180
2022-02-22[Feature #18249] Update dependenciesPeter Zhu
Notes: Merged: https://github.com/ruby/ruby/pull/5474
2022-01-26Do not need to print to stderrKoichi Sasada
2021-11-21Update dependenciesNobuyoshi Nakada
2021-10-05ruby tool/update-deps --fix卜部昌平
Notes: Merged: https://github.com/ruby/ruby/pull/4909
2021-09-05[ruby/fiddle] Use test-unit gem (https://github.com/ruby/fiddle/pull/69)Hiroshi SHIBATA
https://github.com/ruby/fiddle/commit/e08c4c635e Co-authored-by: Sutou Kouhei <kou@clear-code.com> Notes: Merged: https://github.com/ruby/ruby/pull/4810
2021-08-24[ruby/fiddle] Improve "offsetof" calculations ↵Aaron Patterson
(https://github.com/ruby/fiddle/pull/90) I need to get the offset of members inside sub structures. This patch adds sub-structure offset support for structs. https://github.com/ruby/fiddle/commit/cf78eddbb6
2021-07-14[ruby/fiddle] Add Fiddle::Handle#file_name ↵Kenta Murata
(https://github.com/ruby/fiddle/pull/88) https://github.com/ruby/fiddle/commit/4ee1c6fc4b
2021-07-14[ruby/fiddle] Check HAVE_RUBY_MEMORY_VIEW_H rather than API version ↵Nobuyoshi Nakada
(https://github.com/ruby/fiddle/pull/86) https://github.com/ruby/fiddle/commit/c5abcc3a7e