X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=breakpoints.c;h=c3fa275ff41a7661ab2e1b5a0a7040829f153e35;hb=ccd9f24a3eb74dbc884c21859b1aaa141834528d;hp=ebb22d6c1bccb8d2904bd358d24e84efe86e60a2;hpb=517f5529d7008eba87b8b2fee5ec9ec0a5075f6e;p=platform%2Fupstream%2Fltrace.git diff --git a/breakpoints.c b/breakpoints.c index ebb22d6..c3fa275 100644 --- a/breakpoints.c +++ b/breakpoints.c @@ -1,6 +1,6 @@ /* * This file is part of ltrace. - * Copyright (C) 2006,2007,2011,2012,2013 Petr Machata, Red Hat Inc. + * Copyright (C) 2006,2007,2011,2012,2013,2014 Petr Machata, Red Hat Inc. * Copyright (C) 2009 Juan Cespedes * Copyright (C) 1998,2001,2002,2003,2007,2008,2009 Juan Cespedes * Copyright (C) 2006 Ian Wienand @@ -85,6 +85,14 @@ breakpoint_on_retract(struct breakpoint *bp, struct process *proc) (bp->cbs->on_retract)(bp, proc); } +void +breakpoint_on_install(struct breakpoint *bp, struct process *proc) +{ + assert(bp != NULL); + if (bp->cbs != NULL && bp->cbs->on_install != NULL) + (bp->cbs->on_install)(bp, proc); +} + int breakpoint_get_return_bp(struct breakpoint **ret, struct breakpoint *bp, struct process *proc) @@ -229,6 +237,7 @@ breakpoint_turn_on(struct breakpoint *bp, struct process *proc) if (bp->enabled == 1) { assert(proc->pid != 0); enable_breakpoint(proc, bp); + breakpoint_on_install(bp, proc); } return 0; } @@ -372,27 +381,6 @@ breakpoint_library(const struct breakpoint *bp) } static enum callback_status -enable_bp_cb(arch_addr_t *addr, struct breakpoint **bpp, void *data) -{ - struct process *proc = data; - debug(DEBUG_FUNCTION, "enable_bp_cb(pid=%d)", proc->pid); - if ((*bpp)->enabled) - enable_breakpoint(proc, *bpp); - return CBS_CONT; -} - -void -enable_all_breakpoints(struct process *proc) -{ - debug(DEBUG_FUNCTION, "enable_all_breakpoints(pid=%d)", proc->pid); - - debug(1, "Enabling breakpoints for pid %u...", proc->pid); - if (proc->breakpoints != NULL) - DICT_EACH(proc->breakpoints, arch_addr_t, struct breakpoint *, - NULL, enable_bp_cb, proc); -} - -static enum callback_status disable_bp_cb(arch_addr_t *addr, struct breakpoint **bpp, void *data) { struct process *proc = data;