diff --git a/gdb/infrun.c b/gdb/infrun.c
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -6453,6 +6453,16 @@ process_event_stop_test (struct execution_control_state *ecs)
 
       if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL)
 	{
+	  struct symbol *stop_fn = find_pc_function (stop_pc);
+	  struct minimal_symbol *stopf = lookup_minimal_symbol_by_pc (stop_pc).minsym;
+
+	  if ((stop_fn == NULL
+	       || strstr (stop_fn->linkage_name (), ".omp_fn.") == NULL)
+	      /* gcc-4.7.2-9.fc19.x86_64 uses a new format.  */
+	      && (stopf == NULL
+		  || strstr (stopf->linkage_name (), "._omp_fn.") == NULL))
+{	/* ".omp_fn." */
+
 	  /* We're doing a "next".
 
 	     Normal (forward) execution: set a breakpoint at the
@@ -6486,6 +6496,7 @@ process_event_stop_test (struct execution_control_state *ecs)
 
 	  keep_going (ecs);
 	  return;
+}	/* ".omp_fn." */
 	}
 
       /* If we are in a function call trampoline (a stub between the
diff --git a/gdb/testsuite/gdb.fortran/omp-step.exp b/gdb/testsuite/gdb.fortran/omp-step.exp
new file mode 100644
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/omp-step.exp
@@ -0,0 +1,31 @@
+# Copyright 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set testfile "omp-step"
+set srcfile ${testfile}.f90
+if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90 additional_flags=-fopenmp}] } {
+    return -1
+}
+
+if ![runto [gdb_get_line_number "start-here"]] {
+    perror "Couldn't run to start-here"
+    return 0
+}
+
+gdb_test "next" {!\$omp parallel} "step closer"
+gdb_test "next" {a\(omp_get_thread_num\(\) \+ 1\) = 1} "step into omp"
+
+gdb_breakpoint [gdb_get_line_number "success"]
+gdb_continue_to_breakpoint "success" ".*success.*"
diff --git a/gdb/testsuite/gdb.fortran/omp-step.f90 b/gdb/testsuite/gdb.fortran/omp-step.f90
new file mode 100644
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/omp-step.f90
@@ -0,0 +1,32 @@
+! Copyright 2009 Free Software Foundation, Inc.
+
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+      use omp_lib
+      integer nthreads, i, a(1000)
+      nthreads = omp_get_num_threads()
+      if (nthreads .gt. 1000) call abort
+
+      do i = 1, nthreads
+          a(i) = 0
+      end do
+      print *, "start-here"
+!$omp parallel
+      a(omp_get_thread_num() + 1) = 1
+!$omp end parallel
+      do i = 1, nthreads
+          if (a(i) .ne. 1) call abort
+      end do
+      print *, "success"
+      end
