On Tue, 24 Sep 2019, Markus Elfring wrote:
> >> @@
> >> -rc = x;
> >
> > Replace by - lrc@rc = x;
>
> I have constructed further test scripts for the semantic patch language.
>
> @display1@
> expression x;
> identifier rc;
> local idexpression lrc;
> @@
> (
> if (...)
> *{
> *lrc@rc = x;
> *return lrc;
> *}
> |
> *lrc@rc = x;
> *return lrc;
> )
>
> @display2@
> identifier display1.rc;
> type t;
> @@
> *t rc;
> ... when != rc
>
>
> The following test result is generated so far for an example.
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/kernel/ptrace.c?id=08f103b9a9502974109fab47ea35ca8542c4e57a
>
> elfring@Sonne:~/Projekte/Linux/next-patched> spatch
> ~/Projekte/Coccinelle/janitor/show_code_for_moving_to_return1.cocci
> arch/arm64/kernel/ptrace.c
> …
> (ONCE) already tagged but only removed, so safe
> …
> @@ -290,7 +290,6 @@ static struct perf_event *ptrace_hbp_cre
> {
> struct perf_event *bp;
> struct perf_event_attr attr;
> - int err, type;
>
> switch (note_type) {
> case NT_ARM_HW_BREAK:
> @@ -329,7 +328,6 @@ static int ptrace_hbp_fill_attr_ctrl(uns
> struct arch_hw_breakpoint_ctrl ctrl,
> struct perf_event_attr *attr)
> {
> - int err, len, type, offset, disabled = !ctrl.enabled;
>
> attr->disabled = disabled;
> if (disabled)
> @@ -434,10 +432,6 @@ static int ptrace_hbp_set_ctrl(unsigned
> struct arch_hw_breakpoint_ctrl ctrl;
>
> bp = ptrace_hbp_get_initialised_bp(note_type, tsk, idx);
> - if (IS_ERR(bp)) {
> - err = PTR_ERR(bp);
> - return err;
> - }
>
> attr = bp->attr;
> decode_ctrl_reg(uctrl, &ctrl);
> @@ -458,15 +452,9 @@ static int ptrace_hbp_set_addr(unsigned
> struct perf_event_attr attr;
>
> bp = ptrace_hbp_get_initialised_bp(note_type, tsk, idx);
> - if (IS_ERR(bp)) {
> - err = PTR_ERR(bp);
> - return err;
> - }
>
> attr = bp->attr;
> attr.bp_addr = addr;
> - err = modify_user_hw_breakpoint(bp, &attr);
> - return err;
> }
>
> #define PTRACE_HBP_ADDR_SZ sizeof(u64)
>
>
>
> I suggest to compare this output with the following source code
> transformation approach.
>
> @replacement@
> expression x;
> identifier rc;
> local idexpression lrc;
> @@
> -lrc@rc = x;
> return
> - rc
> + x
> ;
>
> @deletion@
> identifier replacement.rc;
> type t;
> @@
> -t rc;
> ... when != rc
>
>
> elfring@Sonne:~/Projekte/Linux/next-patched> spatch
> ~/Projekte/Coccinelle/janitor/simplify_return2.cocci
> arch/arm64/kernel/ptrace.c
> …
> @@ -435,8 +435,7 @@ static int ptrace_hbp_set_ctrl(unsigned
>
> bp = ptrace_hbp_get_initialised_bp(note_type, tsk, idx);
> if (IS_ERR(bp)) {
> - err = PTR_ERR(bp);
> - return err;
> + return PTR_ERR(bp);
> }
>
> attr = bp->attr;
> @@ -453,20 +452,17 @@ static int ptrace_hbp_set_addr(unsigned
> unsigned long idx,
> u64 addr)
> {
> - int err;
> struct perf_event *bp;
> struct perf_event_attr attr;
>
> bp = ptrace_hbp_get_initialised_bp(note_type, tsk, idx);
> if (IS_ERR(bp)) {
> - err = PTR_ERR(bp);
> - return err;
> + return PTR_ERR(bp);
> }
>
> attr = bp->attr;
> attr.bp_addr = addr;
> - err = modify_user_hw_breakpoint(bp, &attr);
> - return err;
> + return modify_user_hw_breakpoint(bp, &attr);
> }
>
> #define PTRACE_HBP_ADDR_SZ sizeof(u64)
>
>
> * Why are the functions “ptrace_hbp_create” and “ptrace_hbp_fill_attr_ctrl”
> presented here?
What does "here" mean. You give two semantic patches with two sets of
output. Which is here?
> * Why is the first variable declaration from the function
> “ptrace_hbp_set_addr”
> not marked by the SmPL asterisk functionality in this test example?
I don't know what you ae referring to so I can't answer precisely, but you
should know that the only connection between your first two rules with a *
is the name of an identifier. There is no guarantee that the two rules
match code in the same function.
julia_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci