Commit graph

436 commits

Author SHA1 Message Date
John Hawthorn
7f25b8f5fb Disable TSAN for rb_gc_mark_machine_context
Previously this was listed as a suppression, but we actually want this
permanently unsanitized. This should be faster and more reliable since
TASN won't have to match against symbolicated backtraces.
2025-07-24 16:35:42 -07:00
John Hawthorn
3ad2019259 Extract vm_locked_by_ractor_p
This introduces a new method to encapsulate checking whether the current
Ractor owns the vm->ractor.sync lock. This allows us to disable TSan on
it since that operation should be safe, and still get validation of
other uses.
2025-07-24 16:35:20 -07:00
John Hawthorn
41ec0f5b97 Update misc/tsan_suppressions.txt
* Add gc_enable/disable to TSAN suppressions
* Remove deleted methods from tsan suppressions
* Remove TSAN errors we've fixed
* Add another two inline cache suppressions
* Improve comments
2025-07-22 09:37:13 -07:00
Hiroshi SHIBATA
0ce4b43ebf
Update default gems and bundled gems list at expand_tabs.rb 2025-07-04 13:14:45 +09:00
Hiroshi SHIBATA
9503a77da2
DRb has been extracted as bundled gems 2025-07-04 13:01:39 +09:00
Nobuyoshi Nakada
2eb5ee8aad
Remove unnecessary shebang and excutable bits [ci skip] 2025-06-19 19:49:01 +09:00
Jean Boussier
15084fbc3c Get rid of FL_EXIVAR
Now that the shape_id gives us all the same information, it's no
longer needed.
2025-06-13 23:50:30 +02:00
John Hawthorn
7854b71e7f Supress a few more tsan errors 2025-06-11 18:11:36 -07:00
John Hawthorn
84bfcaa80d Add two more TSan suppressions 2025-05-20 09:56:31 -07:00
John Hawthorn
e7f97eb2f3 Use atomic load for signal buff size 2025-05-20 09:56:31 -07:00
John Hawthorn
05e0e7223a Use atomic load to read interrupt mask 2025-05-20 09:56:31 -07:00
John Hawthorn
d67d169aea Use atomics for system_working global
Although it almost certainly works in this case, volatile is best not
used for multi-threaded code. Using atomics instead avoids warnings from
TSan.

This also simplifies some logic, as system_working was previously only
ever assigned to 1, so --system_working <= 0 should always return true
(unless it underflowed).
2025-05-15 15:18:10 -07:00
John Hawthorn
86f5cec782 Add misc/tsan_suppressions.txt 2025-05-13 20:09:30 -07:00
Étienne Barrié
e1f544c1cf Always look for the top-level RBasic in LLDB scripts
`rp` and other commands were broken for me because they always showed
the object as a T_NONE.

The reason was that instead of returning the type `struct RBasic`,
FindFirstType("struct RBasic") was returning
`yjit::cruby::autogened::RBasic`.

Explicitly asking for the top-level RBasic by prefixing it with `::` is
enough to fix those commands.
2025-04-15 11:50:48 +09:00
Étienne Barrié
6e184ebb5a Fix LLDB heap_page command
Move _append_command_output and _append_expression to LLDBInterface, and
use it from HeapPageCommand after setting result.
2025-04-15 11:50:48 +09:00
Eileen
5aa05f179c
Fix lldb debug scripts (#13048)
In ruby/ruby#13008 `RVALUE` was removed without replacement. This means
the lldb scripts that relied on `RVALUE` stopped working.

I updated the ones that were using it just for the bytesize to use
`slot_size` and then round to the nearest power of 40. We can't use
`slot_size` directly because in debug mode it's `48` but `RVALUE` is
`40` bytes.

For the `as_type` method, I updated it to check the type. It's only used
for `bignum` and `array` so that's a simple change.

Lastly, for the `dump_page` method I replaced it with `struct free_slot`
since that's looking at the freelist.

`struct RVALUE` has been removed from all the scripts and I verified
that `rp` is fixed. I'm not confident the `dump_page` method is fixed,
the freelist looks off, but for now this gets us closer.
2025-04-08 12:52:49 -04:00
Étienne Barrié
332f5d0b73 Remove RUBY_FL_PROMOTED{0,1} from debugger scripts
These flags were removed in d426343418 and
print_flags is broken because of it.
2025-03-28 17:36:24 +01:00
Takashi Kokubun
e9e4770a18 Fix .vscode/settings.json for the latest extension 2025-02-12 16:17:08 -08:00
Nobuyoshi Nakada
5a18956430
ruby-style.el: Minimize backslash columns [ci skip]
Basically we don't align line continuation backslashes.
2024-10-17 19:34:31 +09:00
Matt Valentine-House
8e7df4b7c6 Rename size_pool -> heap
Now that we've inlined the eden_heap into the size_pool, we should
rename the size_pool to heap. So that Ruby contains multiple heaps, with
different sized objects.

The term heap as a collection of memory pages is more in memory
management nomenclature, whereas size_pool was a name chosen out of
necessity during the development of the Variable Width Allocation
features of Ruby.

The concept of size pools was introduced in order to facilitate
different sized objects (other than the default 40 bytes). They wrapped
the eden heap and the tomb heap, and some related state, and provided a
reasonably simple way of duplicating all related concerns, to provide
multiple pools that all shared the same structure but held different
objects.

Since then various changes have happend in Ruby's memory layout:

* The concept of tomb heaps has been replaced by a global free pages list,
  with each page having it's slot size reconfigured at the point when it
  is resurrected
* the eden heap has been inlined into the size pool itself, so that now
  the size pool directly controls the free_pages list, the sweeping
  page, the compaction cursor and the other state that was previously
  being managed by the eden heap.

Now that there is no need for a heap wrapper, we should refer to the
collection of pages containing Ruby objects as a heap again rather than
a size pool
2024-10-03 21:20:09 +01:00
Nobuyoshi Nakada
7836626f92
Add c-style for prism [ci skip] 2024-09-20 22:50:27 +09:00
Nobuyoshi Nakada
cedc7737b6 Make interchangeable NODE types aliases 2024-06-02 09:43:33 +09:00
Nobuyoshi Nakada
43798e0f6d
lldb: Show coderange 2024-05-28 16:23:18 +09:00
Nobuyoshi Nakada
d076101af9
Fix dump of NODE [ci skip] 2024-05-16 21:25:52 +09:00
yui-knk
f057741c5d NODE_LIT is not used anymore 2024-04-04 13:17:26 +09:00
Nobuyoshi Nakada
e720a6b485
Show the chilled status of a String [ci skip] 2024-03-25 14:33:20 +09:00
Takashi Kokubun
b0be2961f7
YJIT: Let yjit_perf.py support perf with Python disabled (#10246)
* YJIT: Let yjit_perf.py support perf with Python disabled

* Update yjit.md about perf

* Recommend the extra interface by default
2024-03-14 10:08:23 -07:00
yui-knk
e7ab5d891c Introduce NODE_REGX to manage regexp literal 2024-02-21 08:06:48 +09:00
yui-knk
89cfc15207 [Feature #20257] Rearchitect Ripper
Introduce another semantic value stack for Ripper so that
Ripper can manage both Node and Ruby Object separately.
This rearchitectutre of Ripper solves these issues.
Therefore adding test cases for them.

* [Bug 10436] https://bugs.ruby-lang.org/issues/10436
* [Bug 18988] https://bugs.ruby-lang.org/issues/18988
* [Bug 20055] https://bugs.ruby-lang.org/issues/20055

Checked the differences of `Ripper.sexp` for files under `/test/ruby`
are only on test_pattern_matching.rb.
The differences comes from the differences between
`new_hash_pattern_tail` functions between parser and Ripper.
Ripper `new_hash_pattern_tail` didn’t call `assignable` then
`kw_rest_arg` wasn’t marked as local variable.
This is also fixed by this commit.

```
--- a/./tmp/before/test_pattern_matching.rb
+++ b/./tmp/after/test_pattern_matching.rb
@@ -3607,7 +3607,7 @@
                  [:in,
                   [:hshptn, nil, [], [:var_field, [:@ident, “a”, [984, 13]]]],
                   [[:binary,
-                    [:vcall, [:@ident, “a”, [985, 10]]],
+                    [:var_ref, [:@ident, “a”, [985, 10]]],
                     :==,
                     [:hash, nil]]],
                   nil]]],
@@ -3662,7 +3662,7 @@
                  [:in,
                   [:hshptn, nil, [], [:var_field, [:@ident, “a”, [993, 13]]]],
                   [[:binary,
-                    [:vcall, [:@ident, “a”, [994, 10]]],
+                    [:var_ref, [:@ident, “a”, [994, 10]]],
                     :==,
                     [:hash,
                      [:assoclist_from_args,
@@ -3813,7 +3813,7 @@
                    [:command,
                     [:@ident, “raise”, [1022, 10]],
                     [:args_add_block,
-                     [[:vcall, [:@ident, “b”, [1022, 16]]]],
+                     [[:var_ref, [:@ident, “b”, [1022, 16]]]],
                      false]]],
                   [:else, [[:var_ref, [:@kw, “true”, [1024, 10]]]]]]]],
                nil,
@@ -3876,7 +3876,7 @@
                      [:@int, “0”, [1033, 15]]],
                     :“&&“,
                     [:binary,
-                     [:vcall, [:@ident, “b”, [1033, 20]]],
+                     [:var_ref, [:@ident, “b”, [1033, 20]]],
                      :==,
                      [:hash, nil]]]],
                   nil]]],
@@ -3946,7 +3946,7 @@
                      [:@int, “0”, [1042, 15]]],
                     :“&&“,
                     [:binary,
-                     [:vcall, [:@ident, “b”, [1042, 20]]],
+                     [:var_ref, [:@ident, “b”, [1042, 20]]],
                      :==,
                      [:hash,
                       [:assoclist_from_args,
@@ -5206,7 +5206,7 @@
                      [[:assoc_new,
                        [:@label, “c:“, [1352, 22]],
                        [:@int, “0”, [1352, 25]]]]]],
-                   [:vcall, [:@ident, “r”, [1352, 29]]]],
+                   [:var_ref, [:@ident, “r”, [1352, 29]]]],
                   false]]],
                [:binary,
                 [:call,
@@ -5299,7 +5299,7 @@
                       [:assoc_new,
                        [:@label, “c:“, [1367, 34]],
                        [:@int, “0”, [1367, 37]]]]]],
-                   [:vcall, [:@ident, “r”, [1367, 41]]]],
+                   [:var_ref, [:@ident, “r”, [1367, 41]]]],
                   false]]],
                [:binary,
                 [:call,
@@ -5931,7 +5931,7 @@
              [:in,
               [:hshptn, nil, [], [:var_field, [:@ident, “r”, [1533, 11]]]],
               [[:binary,
-                [:vcall, [:@ident, “r”, [1534, 8]]],
+                [:var_ref, [:@ident, “r”, [1534, 8]]],
                 :==,
                 [:hash,
                  [:assoclist_from_args,
```
2024-02-20 17:33:58 +09:00
Takashi Kokubun
7177731282
YJIT: Add --yjit-perf=codegen option (#9957) 2024-02-14 09:09:14 -08:00
Takashi Kokubun
0a30fc6211 Remove obsoleted lldb_yjit.py
which clearly seems to be written for Ruby 3.1 YJIT that was not
rewritten in Rust yet. Since it has been left there as is, I don't think
anybody is actively using this script. We could add a new one if we need
it again.
2024-01-08 15:51:15 -08:00
yui-knk
7a050638b1 Introduce NODE_FILE
`__FILE__` was managed by `NODE_STR` with `String` object.
This commit introduces `NODE_FILE` and `struct rb_parser_string` so that

1. `__FILE__` is detectable from AST Node
2. Reduce dependency ruby object
2024-01-02 14:19:42 +09:00
yui-knk
97986f406b LLDB: Print actual node structure of NODE_LINE 2024-01-02 10:36:09 +09:00
Maxime Chevalier-Boisvert
3f25c08fa5
YJIT: implement call fuzzer script (#9129)
* YJIT: implement call fuzzer script

Attempt to detect bugs in YJIT call implementation.

* Add basic checks for rest, kwrest. Impprove formatting.

* Refactor call fuzzer to make it more powerful and maintainable

Compute checksum of arguments

* Fix checksum computation. Add useless locals as sussged by Alan.

* Add some useless if statements

* Add arguments of different types

* Pass object arguments as well. Force different shapes.

* Compute fuzzing time/speed

* Make use of block param
2023-12-11 12:52:47 -05:00
Nobuyoshi Nakada
5f50593b45
Fix RCLASS_EXT dump [ci skip] 2023-12-06 15:16:21 +09:00
Nobuyoshi Nakada
b06b69e6dc
LLDB: Dump table structs in Hash [ci skip] 2023-10-31 22:40:34 +09:00
Nobuyoshi Nakada
526292d9fe
LLDB: Use expression to save the result into the history [ci skip] 2023-10-25 16:50:00 +09:00
yui-knk
7de6908a28 LLDB: Print actual node structure [ci skip] 2023-10-10 07:53:42 +09:00
Nobuyoshi Nakada
ce717be188
Fix RBignum print [ci skip] 2023-09-30 02:09:29 +09:00
Nobuyoshi Nakada
9fa7ec9332
Fix RArray print [ci skip] 2023-09-30 02:09:29 +09:00
Nobuyoshi Nakada
e825160257
Delete empty lines at EOF [ci skip] 2023-09-30 02:09:29 +09:00
Peter Zhu
27024004fa Fix string2cstr in lldb_cruby.py [ci skip] 2023-08-29 19:31:53 -04:00
Takashi Kokubun
5766fb7266 Fix gdb.py for C frames [ci skip] 2023-08-23 10:59:23 -07:00
Takashi Kokubun
b35a222348 gdb.py: Support dumping a dummy frame [ci skip] 2023-08-03 09:55:37 -07:00
git
29fd05036b * remove trailing spaces. [ci skip] 2023-08-02 23:43:29 +00:00
Takashi Kokubun
192ed8e70f gdb.py: Add -a option to dump all frames [ci skip] 2023-08-02 16:43:12 -07:00
Takashi Kokubun
5f5cc22b5f gdb.py: Print Env based on EP instead of BP
because EP could be escaped.
2023-08-02 16:23:55 -07:00
Takashi Kokubun
8d9a25a6d7 misc/gdb.py: Allow overriding stack_size [ci skip] 2023-07-20 15:04:51 -07:00
Takashi Kokubun
a7127745f1 Get rid of obsoleted __bp__ references 2023-07-20 11:55:31 -07:00
Jemma Issroff
dadf17818c
Add ruby_globals to lldb for easier debugging (#8041) 2023-07-07 15:55:58 -04:00