"place (kretprobe): [<module>:]<symbol>[+<offset>]%return|<memaddr>\n"
 #endif
 #ifdef CONFIG_UPROBE_EVENTS
-  "   place (uprobe): <path>:<offset>[(ref_ctr_offset)]\n"
+  "   place (uprobe): <path>:<offset>[%return][(ref_ctr_offset)]\n"
 #endif
        "\t     args: <name>=fetcharg[:type]\n"
        "\t fetcharg: %<register>, @<address>, @<symbol>[+|-<offset>],\n"
 
 
 /*
  * Argument syntax:
- *  - Add uprobe: p|r[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS]
+ *  - Add uprobe: p|r[:[GRP/]EVENT] PATH:OFFSET[%return][(REF)] [FETCHARGS]
  */
 static int trace_uprobe_create(int argc, const char **argv)
 {
                }
        }
 
+       /* Check if there is %return suffix */
+       tmp = strchr(arg, '%');
+       if (tmp) {
+               if (!strcmp(tmp, "%return")) {
+                       *tmp = '\0';
+                       is_return = true;
+               } else {
+                       trace_probe_log_err(tmp - filename, BAD_ADDR_SUFFIX);
+                       ret = -EINVAL;
+                       goto fail_address_parse;
+               }
+       }
+
        /* Parse uprobe offset. */
        ret = kstrtoul(arg, 0, &offset);
        if (ret) {