From: Bryce McKinlay <bmckinlay@gmail.com>
To: Dave Korn <dave.korn.cygwin@googlemail.com>
Cc: GCC Java <java@gcc.gnu.org>
Subject: Re: Two quick GC questions [was Re: [REVIVED: PATCH PR42811,4.5 regression] java.lang.ExceptionInInitializerError in ecj1]
Date: Thu, 18 Feb 2010 22:13:00 -0000 [thread overview]
Message-ID: <7230133d1002181413h5c6abcf8ge7a989349e0fa3c0@mail.gmail.com> (raw)
In-Reply-To: <4B7DA9FA.1020307@gmail.com>
On Thu, Feb 18, 2010 at 8:58 PM, Dave Korn
<dave.korn.cygwin@googlemail.com> wrote:
> On 18/02/2010 15:56, Dave Korn wrote:
>
>>>> Running /gnu/gcc/gcc/libjava/testsuite/libjava.loader/loader.exp ...
>>>> FAIL: /gnu/gcc/obj-pr42811-3/i686-pc-cygwin/libjava/testsuite/TestEarlyGC.exe output - /gnu/gcc/obj-pr42811-3/i686-pc-cygwin/libjava/testsuite/TestEarlyGC.exe
>>> *sigh*, and it turns out to be because some memory is getting released by the
>>> garbage collector when its still in use. I'm busy trying to learn how the GC
>>> works real fast so I can figure out what's going wrong.
>
> Well, it turns out to be fairly straightforward: there is no code to
> register the .data and .bss sections of the main executable as static data
> regions with the GC, so it has no idea there's a live pointer to an object(*)
> in there, and happily frees it up.
>
> This leads me to two quick questions about the GC:
>
> 1- There's no call to GC_INIT anywhere under libjava/, and I can't find
> anything in boehm.cc that even looks suitable for the purpose. Does anyone
> know how the main exe's data/bss sections are supposed to get registered on a
> posixy system?
GC_init_gcj_malloc() is called from boehm.cc:_Jv_InitGC(), and that in
turn calls GC_init() if required.
> 2- Libgcj statically links its own personal private copy of boehm-gc, rather
> than using a shared library; does anyone know why it was designed this way?
Early on, the GC actually was in its own shared library (as was
libffi). The main reason to put these into libgcj was that it avoids
weird, hard-to-debug problems if you accidentally end up with the
wrong version of one library or the other. That's probably not such a
big deal now, but (windows limitations aside) I think its generally
better to have less shared libraries rather than more.
In theory, there could also be a performance advantage to having a
single library because a smart linker / linker script could optimize
internal calls to things like GC_malloc, speeding up the allocation
path by avoiding PLT indirection.
Bryce
next prev parent reply other threads:[~2010-02-18 22:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4B6C9B26.3010106@gmail.com>
[not found] ` <4B6D0C67.5030500@gmail.com>
2010-02-14 22:23 ` JVMTI events system and _jvmtiEnvironments uninitialised memory problem? [was Re: [PATCH " Dave Korn
[not found] ` <4B78BA6D.5000603@gmail.com>
[not found] ` <7230133d1002150504r23738e28if92303426c349661@mail.gmail.com>
[not found] ` <4B7CC61E.1050709@gmail.com>
[not found] ` <4B7D631B.8030401@gmail.com>
2010-02-18 20:41 ` Two quick GC questions [was Re: [REVIVED: PATCH " Dave Korn
2010-02-18 22:06 ` Boehm, Hans
2010-02-19 7:04 ` Dave Korn
2010-02-18 22:13 ` Bryce McKinlay [this message]
2010-02-19 3:22 ` Boehm, Hans
2010-02-20 18:22 ` Dave Korn
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=7230133d1002181413h5c6abcf8ge7a989349e0fa3c0@mail.gmail.com \
--to=bmckinlay@gmail.com \
--cc=dave.korn.cygwin@googlemail.com \
--cc=java@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).