diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 684716a869e..99909984241 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -35815,6 +35815,9 @@ variable object is updated, @value{GDBN} makes sure that the
 thread/frame combination the variable object is bound to still exists,
 and re-evaluates the variable object in context of that thread/frame.
 
+If the option @code{skip-trampoline-functions} is set, @value{GDBN} will
+not show trampoline functions in the stack.
+
 The following is the complete set of @sc{gdb/mi} operations defined to
 access this functionality:
 
diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c
index 1f66c02f8b4..66c758bd44e 100644
--- a/gdb/mi/mi-cmd-stack.c
+++ b/gdb/mi/mi-cmd-stack.c
@@ -401,6 +401,13 @@ mi_cmd_stack_list_args (const char *command, const char *const *argv, int argc)
 	   i++, fi = get_prev_frame (fi))
 	{
 	  QUIT;
+	  if (skip_trampoline_functions)
+	    {
+	      for (int j = 0; (SAFE_TRAMPOLINE_CHAIN (j, fi)
+			       && in_trampoline_frame (fi)); ++j)
+		fi = get_prev_frame (fi);
+	    }
+
 	  ui_out_emit_tuple tuple_emitter (uiout, "frame");
 	  uiout->field_signed ("level", i);
 	  list_args_or_locals (user_frame_print_options,
diff --git a/gdb/testsuite/gdb.mi/mi-func-trampoline.exp b/gdb/testsuite/gdb.mi/mi-func-trampoline.exp
index f40a9722f91..4e0c3922eb6 100644
--- a/gdb/testsuite/gdb.mi/mi-func-trampoline.exp
+++ b/gdb/testsuite/gdb.mi/mi-func-trampoline.exp
@@ -13,9 +13,9 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/> .
 
-# Test -stack-list-frames command for functions with trampoline
-# calls.  Also checks if trampoline frames are filtered while printing
-# stack.
+# Test -stack-list-frames and -stack-list-arguments command for functions
+# with trampoline calls.  Also checks if trampoline frames are filtered
+# while printing stack.
 
 require allow_fortran_tests
 
@@ -55,6 +55,10 @@ set frame1_regx "\{level=\"0\",addr=\"$hex\",func=\"second\",file=\".*func-tramp
 set frame2_regx "\{level=\"2\",addr=\"$hex\",func=\"first\",.*\}"
 set frame3_regx "\{level=\"4\",addr=\"$hex\",func=\"func_trampoline\",.*\}"
 
+set arg1_regx "\{level=\"0\",args=\\\[name=\"x\",name=\"y\"\\\]\}"
+set arg2_regx "\{level=\"1\",args=\\\[name=\"num1\",name=\"num2\"\\\]\}"
+set arg3_regx "\{level=\"2\",args=\\\[\\\]\}"
+
 # Set breakpoint inside the innermost function 'second'.
 mi_create_breakpoint "-t $srcfile:$inner_loc" \
     "insert breakpoint at line $inner_loc " \
@@ -67,3 +71,6 @@ mi_expect_stop \
 
 mi_gdb_test "100-stack-list-frames" \
     "100\\^done,stack=\\\[frame=${frame1_regx},frame=${frame2_regx},frame=${frame3_regx}\\\]"
+
+mi_gdb_test "200-stack-list-arguments 0" \
+    "200\\^done,stack-args=\\\[frame=${arg1_regx},frame=${arg2_regx},frame=${arg3_regx}\\\]"
