%s              signal number
        %t              UNIX time of dump
        %h              hostname
-       %e              executable filename (may be shortened)
+       %e              executable filename (may be shortened, could be changed by prctl etc)
+       %f              executable filename
        %E              executable path
        %c              maximum size of core file by resource limit RLIMIT_CORE
        %<OTHER>        both are dropped
 
        return ret;
 }
 
-static int cn_print_exe_file(struct core_name *cn)
+static int cn_print_exe_file(struct core_name *cn, bool name_only)
 {
        struct file *exe_file;
-       char *pathbuf, *path;
+       char *pathbuf, *path, *ptr;
        int ret;
 
        exe_file = get_mm_exe_file(current->mm);
                goto free_buf;
        }
 
+       if (name_only) {
+               ptr = strrchr(path, '/');
+               if (ptr)
+                       path = ptr + 1;
+       }
        ret = cn_esc_printf(cn, "%s", path);
 
 free_buf:
                                              utsname()->nodename);
                                up_read(&uts_sem);
                                break;
-                       /* executable */
+                       /* executable, could be changed by prctl PR_SET_NAME etc */
                        case 'e':
                                err = cn_esc_printf(cn, "%s", current->comm);
                                break;
+                       /* file name of executable */
+                       case 'f':
+                               err = cn_print_exe_file(cn, true);
+                               break;
                        case 'E':
-                               err = cn_print_exe_file(cn);
+                               err = cn_print_exe_file(cn, false);
                                break;
                        /* core limit size */
                        case 'c':