-
Notifications
You must be signed in to change notification settings - Fork 0
initial port of vm implementation from Nim #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
viega
approved these changes
Apr 29, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As disccussed.
Merged
ee7
added a commit
that referenced
this pull request
Aug 12, 2024
Before this commit, compiling c4test with UBSan and then running it may produce 500+ lines of output like: ../src/hatrack/hash/set.c:258:15: runtime error: null pointer passed as argument 1, which is declared to never be null /usr/include/stdlib.h:971:30: note: nonnull attribute specified here #0 0x5899b1111647 in hatrack_set_items_base libcon4m/src/hatrack/hash/set.c:258:9 #1 0x5899b1111ea1 in hatrack_set_items_sort libcon4m/src/hatrack/hash/set.c:305:12 #2 0x5899b0fa6772 in c4m_set_to_xlist libcon4m/src/adts/set.c:158:38 #3 0x5899b11430a6 in process_branch_exit libcon4m/src/compiler/cfg.c:497:30 #4 0x5899b113cd67 in cfg_process_node libcon4m/src/compiler/cfg.c:633:9 #5 0x5899b113d1a0 in cfg_process_node libcon4m/src/compiler/cfg.c:644:9 #6 0x5899b113c070 in cfg_process_node libcon4m/src/compiler/cfg.c:577:31 #7 0x5899b113d62a in cfg_process_node libcon4m/src/compiler/cfg.c:656:9 #8 0x5899b113c070 in cfg_process_node libcon4m/src/compiler/cfg.c:577:31 #9 0x5899b113b154 in c4m_cfg_analyze libcon4m/src/compiler/cfg.c:744:5 #10 0x5899b106c882 in c4m_check_pass libcon4m/src/compiler/check_pass.c:3320:13 #11 0x5899b1016fc5 in c4m_compile_from_entry_point libcon4m/src/compiler/compile.c:467:5 #12 0x5899b0f07197 in execute_test libcon4m/src/harness/con4m_base/run.c:11:11 #13 0x5899b0f05674 in run_one_item libcon4m/src/harness/con4m_base/run.c:61:29 #14 0x5899b0f0535a in c4m_run_expected_value_tests libcon4m/src/harness/con4m_base/run.c:152:18 #15 0x5899b0f01cdb in main libcon4m/src/harness/con4m_base/test.c:44:5 #16 0x7fd148d45e07 in __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:58:16 #17 0x7fd148d45ecb in __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:360:3 #18 0x5899b0ecf7b4 in _start (libcon4m/build_dev/c4test+0x14f7b4) (BuildId: eb75f65a7b383149176b9e55cbbfdfd116868794) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/hatrack/hash/set.c:258:15 This was because, on some machines, qsort specifies that the first argument must not be null: /* Sort NMEMB elements of BASE, of SIZE bytes each, using COMPAR to perform the comparisons. */ extern void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __nonnull ((1, 4)); and at one call site, qsort could be called with a null first argument. Skip the call in that case. Closes: #92
ee7
added a commit
that referenced
this pull request
Aug 12, 2024
Before this commit, compiling c4test with UBSan and then running it may produce 500+ lines of output like: ``` ../src/hatrack/hash/set.c:258:15: runtime error: null pointer passed as argument 1, which is declared to never be null /usr/include/stdlib.h:971:30: note: nonnull attribute specified here #0 0x5899b1111647 in hatrack_set_items_base libcon4m/src/hatrack/hash/set.c:258:9 #1 0x5899b1111ea1 in hatrack_set_items_sort libcon4m/src/hatrack/hash/set.c:305:12 #2 0x5899b0fa6772 in c4m_set_to_xlist libcon4m/src/adts/set.c:158:38 #3 0x5899b11430a6 in process_branch_exit libcon4m/src/compiler/cfg.c:497:30 #4 0x5899b113cd67 in cfg_process_node libcon4m/src/compiler/cfg.c:633:9 #5 0x5899b113d1a0 in cfg_process_node libcon4m/src/compiler/cfg.c:644:9 #6 0x5899b113c070 in cfg_process_node libcon4m/src/compiler/cfg.c:577:31 #7 0x5899b113d62a in cfg_process_node libcon4m/src/compiler/cfg.c:656:9 #8 0x5899b113c070 in cfg_process_node libcon4m/src/compiler/cfg.c:577:31 #9 0x5899b113b154 in c4m_cfg_analyze libcon4m/src/compiler/cfg.c:744:5 #10 0x5899b106c882 in c4m_check_pass libcon4m/src/compiler/check_pass.c:3320:13 #11 0x5899b1016fc5 in c4m_compile_from_entry_point libcon4m/src/compiler/compile.c:467:5 #12 0x5899b0f07197 in execute_test libcon4m/src/harness/con4m_base/run.c:11:11 #13 0x5899b0f05674 in run_one_item libcon4m/src/harness/con4m_base/run.c:61:29 #14 0x5899b0f0535a in c4m_run_expected_value_tests libcon4m/src/harness/con4m_base/run.c:152:18 #15 0x5899b0f01cdb in main libcon4m/src/harness/con4m_base/test.c:44:5 #16 0x7fd148d45e07 in __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:58:16 #17 0x7fd148d45ecb in __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:360:3 #18 0x5899b0ecf7b4 in _start (libcon4m/build_dev/c4test+0x14f7b4) (BuildId: eb75f65a7b383149176b9e55cbbfdfd116868794) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/hatrack/hash/set.c:258:15 ``` This was because, on some machines, qsort specifies that the first argument must not be null: /* Sort NMEMB elements of BASE, of SIZE bytes each, using COMPAR to perform the comparisons. */ extern void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __nonnull ((1, 4)); and at one call site, qsort could be called with a null first argument. Skip the call in that case. Closes: #92
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an initial port of the VM from Nim. It is not 100% complete, still missing a few things, but this seemed like a good checkpoint. This is pretty much a straight port with few modifications. Of note is that the original
RuntimeState
structure is broken out intoc4m_vm_t
andc4m_vmthread_t
. The former is shared state for all threads and the latter is per-thread state. The idea is to let the host decide what constitutes a thread and where that state data comes from. It's probably not a great idea to run multiple threads against the same object code at present, as there are absolutely some data race issues that need to be addressed in some fashion, but the framework is there.Nothing is tested since there is no code generation yet, but it builds at least on Linux (Fedora 39). There's also a handful of miscellaneous bug fixes for issues in existing C code found along the way.
Notably missing, code is commented with more explanation where appropriate:
My plan is to do marshaling next assuming what I've done here, specifically with how the structures are laid out, is what you had in mind.