public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "iam at datacompboy dot ru" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libgcc/106949] Memory leak using VLA/alloca with -fsplit-stack
Date: Tue, 04 Oct 2022 12:16:20 +0000	[thread overview]
Message-ID: <bug-106949-4-lA3eaWZeq7@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-106949-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106949

--- Comment #4 from Anton Fedorov <iam at datacompboy dot ru> ---
> You can't just add a stack segment without changing the stack pointer.

I can -- since we are on the initial stack at this point, no return into
__morestack will happen so no attempt to release it, thus there is no problem
and it won't affect subsequent allocations of frames would it be necessary.

But that's the catch: the allocated blocks won't be released no matter is we on
the initial stack or deep inside, until we try to release the frame, which may
never happen no matter are we on the initial stack or not.

the easiest way may be change gcc generate the code like:

```
struct __morestack_blocks {
  struct __morestack_blocks * next;
  void * block;
};

void __morestack_free_blocks(struct __morestack_blocks ** blocks) {
  struct __morestack_blocks * cur = *blocks;
  while(cur) {
    free(cur->block);
    cur = cur->next;
  }
}

void* __morestack_allocate_stack_space(int size, struct __morestack_blocks **
blocks){ ... }

somefunction(someargs) {
  struct __morestack_blocks __attribute__((cleanup(__morestack_free_blocks))) =
nullptr;

  // void * a = alloca(x);
  a = __morestack_allocate_stack_space(x, &__morestack_blocks);

}
```

But that local variable to be used as a reference, but makes it trivial
(although, I don't know how to generate local variable with assigned destructor
from the gcc code, will look for it)...

  parent reply	other threads:[~2022-10-04 12:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-15  8:18 [Bug libgcc/106949] New: Memory leak using VLA " iam at datacompboy dot ru
2022-09-15  8:21 ` [Bug libgcc/106949] " iam at datacompboy dot ru
2022-10-03 12:25 ` iam at datacompboy dot ru
2022-10-04  0:22 ` ian at airs dot com
2022-10-04 12:16 ` iam at datacompboy dot ru [this message]
2022-10-04 15:50 ` [Bug libgcc/106949] Memory leak using VLA/alloca " iam at datacompboy dot ru

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-106949-4-lA3eaWZeq7@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).