Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-21248

Test main.execution_constants fails with memory exhausted near

Details

    Description

      After update to latest GCC 10, I see the aforementioned test failing. I use -flto that enables cross module inlining and I investigated that stack overflow detection does not work in `check_stack_overrun` function in sql_parse.cc. It's very likely caused by optimized out the allocation of buf argument of the function, which is a stack variable in a caller frame.
      I'm suggesting the following patch:

      diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
      index a8e66d2a..9cbf23d7 100644
      --- a/sql/sql_parse.cc
      +++ b/sql/sql_parse.cc
      @@ -7229,10 +7229,14 @@ long max_stack_used;
           corresponding exec. (Thus we only have to check in fix_fields.)
         - Passing to check_stack_overrun() prevents the compiler from removing it.
       */
      -bool check_stack_overrun(THD *thd, long margin,
      -			 uchar *buf __attribute__((unused)))
      +bool check_stack_overrun(THD *thd, long margin, uchar *buf)
       {
         long stack_used;
      +  /*
      +     Take address of the buf argument in order to prevent
      +     the stack allocation made this function caller.
      +  */
      +  static volatile uchar *buf_ptr = buf;
         DBUG_ASSERT(thd == current_thd);
         if ((stack_used= available_stack_size(thd->thread_stack, &stack_used)) >=
             (long) (my_thread_stack_size - margin))
      

      Attachments

        Activity

          marxin Martin Liška added a comment -

          Is there a consensus that using -O0 will be accepted in a pull request?

          marxin Martin Liška added a comment - Is there a consensus that using -O0 will be accepted in a pull request?
          marxin Martin Liška added a comment -

          May I please ping the issue?

          marxin Martin Liška added a comment - May I please ping the issue?

          Yes, I think both attributes and pragma could be accepted as a solution. Both are a way to tell the compiler what it should not optimize, both aren't portable, but it's ok, as the optimization issue is compiler specific anyway, so a compiler specific fix is fine here.

          serg Sergei Golubchik added a comment - Yes, I think both attributes and pragma could be accepted as a solution. Both are a way to tell the compiler what it should not optimize, both aren't portable, but it's ok, as the optimization issue is compiler specific anyway, so a compiler specific fix is fine here.
          marxin Martin Liška added a comment -

          Good, I've just rebased the corresponding github PR.

          marxin Martin Liška added a comment - Good, I've just rebased the corresponding github PR.
          serg Sergei Golubchik added a comment - - edited
          serg Sergei Golubchik added a comment - - edited the last ( https://github.com/MariaDB/server/pull/1424/commits/c1584b72097c385d2cb59d4e27c958168f78e0e6 ) commit looks ok, could you, please, push it?

          People

            anel Anel Husakovic
            marxin Martin Liška
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.