Repository navigation
Feat: Settle what fingerprints leave open in rows made without a PDB - #210
Merged
Merged
Conversation
…a PDB The decoder now says where an instruction's register displacement and immediate are, a body decoder reads the instructions found past a function start, and a module lists its exception table ranges. A row made from fingerprints needs these to follow calls and to read member offsets, slots and ids from the new build.
A row made without its PDB now reads the prior build next to the new one for each address its fingerprint matched several places, no place, or had no fingerprint. Calls into it from functions known in both builds, its own calls to functions their fingerprints find, its slot in a class table known in both, and the texts it uses each name a place. A place is taken only when two different methods name it, no method names another, and it is one of the fingerprint's places. Class tables are found by references from known functions and by their slots. Anything else keeps its review line with the reason.
A row made without its PDB no longer carries a member offset, slot, size or id over from the prior row. Each use of the prior value in the functions of its part of the row, and in the functions they call, is named by the instructions around it, and the same instruction is read in the new build. A value is taken only when two uses are read and all agree. Any other value keeps its review line and stays listed as carried, so the row is not published. Stack slots and frame sizes are never taken for a use. The new tab delay and the colours of the developer theme are Rivet's own settings, not values of a build: they are kept from the prior row and listed as settings in the report.
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
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.
Summary
A row made without its PDB (#202) now tries to close what fingerprints leave open, and still never ships a guessed or carried value.
row_resolve.rs). Methods: calls into it from functions known in both builds (calls and RIP-relative references paired by the instructions before each site), its own calls to callees found by their own fingerprints, its slot in a class table known in both builds (slots lined up by comparing the neighbours, so a removed virtual shifts nothing wrongly), a text it uses that the new build holds once, and for tables, references from known functions and their slot contents. A place is taken only when two different methods name it, no method names another, and it is one of the fingerprint's places. Otherwise the review line gets the reason (...; not settled: the methods disagree: ...).carried; the 156 value is never accepted.tabs.new_tab_delay_msand the colour half oftoolbar.dev.colourspairs are Rivet settings, not build values: kept from the prior row and listed in the newsettingsreport field. The colour ids are still build values.port_row) and the later PDB comparison are unchanged.Notes for review
nfr6_the_operands_of_a_body_instruction_are_located,nfr6_a_function_with_several_places_takes_the_one_two_methods_agree_on,nfr6_methods_that_disagree_leave_the_function_unresolved,nfr6_one_method_alone_does_not_place_a_function,nfr6_a_place_outside_the_fingerprint_matches_is_refused,nfr6_a_carried_value_is_read_from_the_instructions_that_use_it,nfr6_a_value_no_instruction_gives_stops_the_row,nfr6_rivet_settings_are_not_values_of_the_build.🤖 Generated with Claude Code