Send MinGW-Notify mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.osdn.me/mailman/listinfo/mingw-notify
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of MinGW-Notify digest..."
Please do not reply to this notification; the sender address is unable to
accept incoming e-mail. If you wish to unsubscribe you can do so at
https://lists.osdn.me/mailman/listinfo/mingw-notify.
Today's Topics:
1. [mingw] #41070: Please include libgccjit with MinGW GCC
distribution (MinGW Notification List)
2. [mingw] #41070: Please include libgccjit with MinGW GCC
distribution (MinGW Notification List)
----------------------------------------------------------------------
Message: 1
Date: Mon, 01 Feb 2021 21:47:33 +0000
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41070: Please include libgccjit with
MinGW GCC distribution
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41070: Please include libgccjit with MinGW GCC distribution
Open Date: 2020-12-23 17:28
Last Update: 2021-02-01 21:47
URL for this Ticket:
https://osdn.net//projects/mingw/ticket/41070
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41070
---------------------------------------------------------------------
Last Changes/Comment on this Ticket:
2021-02-01 21:47 Updated by: keith
Comment:
Reply To davidmalcolm
Looking at the patches themselves:
23-libgccjit-win32-no-pthreads.patch(2KB)
- Patch to eliminate -lpthread dependency
@@ -2138,12 +2173,12 @@ void
playback::context::release_mutex ()
{
/* Release the big GCC mutex. */
JIT_LOG_SCOPE (get_logger ());
gcc_assert (active_playback_ctxt == this);
+ JIT_CONTEXT_RELEASE_LOCK (jit_mutex);
active_playback_ctxt = NULL;
- pthread_mutex_unlock (&jit_mutex);
}
Usage of "active_playback_ctxt" must be guarded by the mutex, so the
JIT_CONTEXT_RELEASE_LOCK needs to be after the
active_playback_ctxt = NULL;
i.e. where the pthread_mutex_unlock call is.
Okay. A careless mistake on my part; thanks for pointing it out. I've fixed
it, in my local build tree, and refreshed the attached patch.
Looking at the jit_mutex_initializer and the docs for
https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-initializecriticalsection
I see that InitializeCriticalSection needs to be called exactly once on a
CRITICAL_SECTION.
Yes ... unless DeleteCriticalSection() is called before a subsequent
initialization request, (but I can't see how that might be helpful here — we
need the critical section to have been initialized, before we attempt to
acquire the mutex, but behaviour is undefined if we call
InitializeCriticalSection() on an already initialized section, or we attempt to
delete an uninitialized one).
I see that the code does this via "static jit_mutex;" Presumably this leads to
jit_mutex's ctor being called once when the DLL is loaded.
Yes.
Does this work correctly?
AFAIK, it does, but it's not a feature I use very often.
(I'm always a little nervous about global ctors; older toolchains don't always
implement it reliably)
I wasn't completely sure, before I created my patch, so I wrote a toy program
to test the concept:
#include <stdio.h> #include <winbase.h> #ifdef COMPILE_DLL extern "C" void
jit_acquire_mutex( void ); extern "C" void jit_release_mutex( void ); static
class jit_mutex_initializer { private: CRITICAL_SECTION mutex; public:
jit_mutex_initializer(); void lock(); void unlock(); } jit_mutex;
jit_mutex_initializer::jit_mutex_initializer() { InitializeCriticalSection
(&mutex); printf ("jit_mutex initialized\n"); } void
jit_mutex_initializer::lock() { EnterCriticalSection (&mutex); printf
("jit_mutex acquired\n"); } void jit_mutex_initializer::unlock() {
LeaveCriticalSection (&mutex); printf ("jit_mutex released\n"); } void
jit_acquire_mutex(){ jit_mutex.lock(); } void jit_release_mutex(){
jit_mutex.unlock(); } #else #include <unistd.h> int main() { HMODULE
foo_dll; printf ("Loading JITFOO.DLL ...\n"); if ((foo_dll = LoadLibrary
("jitfoo.dll")) != NULL) { printf ("JITFOO.DLL loaded successfully\n");
typedef void (*hook)(void); hook acquire_mutex = (hook)(GetProcAddress
(foo_dll, "jit_acquire_mutex")); hook release_mutex = (hook)(GetProcAddress
(foo_dll, "jit_release_mutex")); printf ("Wait for JIT_MUTEX ...\n");
acquire_mutex(); printf ("JIT_MUTEX successfully acquired\n"); sleep (10);
printf ("Relinquish JIT_MUTEX ...\n"); release_mutex(); printf
("JIT_MUTEX successfully released\n"); } return 0; } #endifWhen I compile,
and run this under Wine, I see:
$ mingw32-g++ jitfoo.cc -o ~/VirtualBox/share/jitfoo.exe
$ mingw32-g++ -shared -D COMPILE_DLL jitfoo.cc -o ~/VirtualBox/share/jitfoo.dll
$ ~/VirtualBox/share/jitfoo.exe
Loading JITFOO.DLL ...
jit_mutex initialized
JITFOO.DLL loaded successfully
Wait for JIT_MUTEX ...
jit_mutex acquired
JIT_MUTEX successfully acquired
Relinquish JIT_MUTEX ...
jit_mutex released
JIT_MUTEX successfully released
Since I don't entirely trust the fidelity of tests run under Wine, I then ran
the cross-compiled code on both a WinXP VM, and a Win7 VM; both reproduced
identically the same output as Wine.
---------------------------------------------------------------------
Ticket Status:
Reporter: eliz
Owner: keith
Type: Feature Request
Status: Open [Owner assigned]
Priority: 5 - Medium
MileStone: (None)
Component: GCC
Severity: 5 - Medium
Resolution: None
---------------------------------------------------------------------
Ticket details:
ease add libgccjit to the binaries included in the MinGW GCC distributions.
This is required to be able to build projects that use libgccjit for JIT
compilation of code.
One example of this is "gccemacs", a branch of GNU Emacs development (soon to
land
on the master branch of Emacs) that compiles Emacs Lisp programs into native
x86 code
for faster runtime performance.
Thank you.
--
Ticket information of MinGW - Minimalist GNU for Windows project
MinGW - Minimalist GNU for Windows Project is hosted on OSDN
Project URL: https://osdn.net/projects/mingw/
OSDN: https://osdn.net
URL for this Ticket:
https://osdn.net/projects/mingw/ticket/41070
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41070
------------------------------
Message: 2
Date: Mon, 01 Feb 2021 23:01:12 +0000
From: MinGW Notification List <[email protected]>
To: OSDN Ticket System <[email protected]>
Subject: [MinGW-Notify] [mingw] #41070: Please include libgccjit with
MinGW GCC distribution
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
#41070: Please include libgccjit with MinGW GCC distribution
Open Date: 2020-12-23 17:28
Last Update: 2021-02-01 23:01
URL for this Ticket:
https://osdn.net//projects/mingw/ticket/41070
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41070
---------------------------------------------------------------------
Last Changes/Comment on this Ticket:
2021-02-01 23:01 Updated by: keith
Comment:
Reply To davidmalcolm
Looking at the patches themselves:
24-libgccjit-full-driver-name.patch(616bytes)
- Correction for omitted $(exeext) in Makefile
Nicholas made the same change as part of
c83027f32d9cca84959c7d6a1e519a0129731501.
He did, but that correction isn't in the GCC-9.2.0 tarball, so I still need my
patch, for the time being. When I start working from an upstream tarball, in
which the correction is already present, I will set a "guard" on my patch, so
that it is skipped when my patch series is applied.
---------------------------------------------------------------------
Ticket Status:
Reporter: eliz
Owner: keith
Type: Feature Request
Status: Open [Owner assigned]
Priority: 5 - Medium
MileStone: (None)
Component: GCC
Severity: 5 - Medium
Resolution: None
---------------------------------------------------------------------
Ticket details:
ease add libgccjit to the binaries included in the MinGW GCC distributions.
This is required to be able to build projects that use libgccjit for JIT
compilation of code.
One example of this is "gccemacs", a branch of GNU Emacs development (soon to
land
on the master branch of Emacs) that compiles Emacs Lisp programs into native
x86 code
for faster runtime performance.
Thank you.
--
Ticket information of MinGW - Minimalist GNU for Windows project
MinGW - Minimalist GNU for Windows Project is hosted on OSDN
Project URL: https://osdn.net/projects/mingw/
OSDN: https://osdn.net
URL for this Ticket:
https://osdn.net/projects/mingw/ticket/41070
RSS feed for this Ticket:
https://osdn.net/ticket/ticket_rss.php?group_id=3917&tid=41070
------------------------------
Subject: Digest Footer
_______________________________________________
MinGW-Notify mailing list
[email protected]
https://lists.osdn.me/mailman/listinfo/mingw-notify
------------------------------
End of MinGW-Notify Digest, Vol 41, Issue 2
*******************************************