Skip to content
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

dynamic: Refactor logic to perform multiple updates #1702

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Commits on Mar 11, 2024

  1. dynamic: Load dynamic info only once

    This is in preparation of runtime dynamic patching. This commit
    guarantees that dynamic info is read only once for the target binary and
    for each module.
    
    Co-authored-by: Gabriel-Andrew Pollo-Guilbert <gabrielpolloguilbert@gmail.com>
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    Signed-off-by: Seyed-Vahid Azhari <vazhari@ciena.com>
    2 people authored and clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    62cefa1 View commit details
    Browse the repository at this point in the history
  2. dynamic: Initialize size filter only once

    If 'mcount_dynamic_update' is called multiple times (e.g. at runtime),
    it initializes the size filter only once.
    
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    671829d View commit details
    Browse the repository at this point in the history
  3. dynamic: arch: Initialize disassembly engine once

    Skip the initialization of the disassembly engine with it has already
    been performed.
    
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    a4466df View commit details
    Browse the repository at this point in the history
  4. dynamic: Archive pattern list after update

    After patching, clear the pattern list for reuse. However, archive its
    content in a separate aggregated list. This list contains all applied
    patterns and is used applied again when when opening a dynamic library.
    
    Co-authored-by: Gabriel-Andrew Pollo-Guilbert <gabrielpolloguilbert@gmail.com>
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi and gpollo committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    1654b9c View commit details
    Browse the repository at this point in the history
  5. dynamic: Refactor 'mcount_dynamic_update'

    The 'mcount_dynamic_update' is now safe to call multiple times,
    including at runtime. On each call, it will perform patching and
    unpatching of the target (not implemented yet).
    
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    3e5ae01 View commit details
    Browse the repository at this point in the history
  6. dynamic: Streamline trampoline life cycle

    Install a trampoline for each loaded module map, on initialization. Keep
    the trampolines in memory to allow for dynamic patching at runtime.
    Clear the trampolines on libmcount exit.
    
    Co-authored-by: Gabriel-Andrew Pollo-Guilbert <gabrielpolloguilbert@gmail.com>
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi and gpollo committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    3e89e6d View commit details
    Browse the repository at this point in the history
  7. mcount: Use flag to indicate if target is running

    Use a global flag to indicate the state of the target. When the target
    is not running, tasks such as dynamic patching can be performed with
    less constraints.
    
    If libmcount.so is dynamically injected (not implemented yet), the
    'mcount_target_running' flag indicates that libmcount has to be
    initialized in a running target.
    
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    5a150da View commit details
    Browse the repository at this point in the history
  8. dynamic: Init arch-specific structures

    Trigger architecture specific dynamic initialization when initializing
    the dynamic instrumentation mechanics.
    
    Co-authored-by: Gabriel-Andrew Pollo-Guilbert <gabrielpolloguilbert@gmail.com>
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi and gpollo committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    ad3cbf6 View commit details
    Browse the repository at this point in the history
  9. dynamic: Save original instructions only once

    Don't save instructions if they are already present in the code hmap.
    
    Signed-off-by: Clément Guidi <cguidi@ciena.com>
    clementguidi committed Mar 11, 2024
    Configuration menu
    Copy the full SHA
    c4ba8e1 View commit details
    Browse the repository at this point in the history