delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/10/15/13:00:04

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs
Date: Wed, 15 Oct 2003 12:59:17 -0400 (EDT)
From: Igor Pechtchanski <pechtcha AT cs DOT nyu DOT edu>
Reply-To: cygwin AT cygwin DOT com
To: Brian Ford <ford AT vss DOT fsi DOT com>
cc: cygwin AT cygwin DOT com
Subject: Re: cygpath hangings
In-Reply-To: <Pine.GSO.4.56.0310141619070.823@eos>
Message-ID: <Pine.GSO.4.56.0310151249200.20462@slinky.cs.nyu.edu>
References: <20031014100230 DOT A12215 AT fw DOT j-son DOT org> <006501c392b7$dc780730$200aa8c0 AT thorin>
<3F8BE1B9 DOT 3000704 AT cs DOT york DOT ac DOT uk> <Pine DOT GSO DOT 4 DOT 56 DOT 0310140914020 DOT 20462 AT slinky DOT cs DOT nyu DOT edu>
<Pine DOT GSO DOT 4 DOT 56 DOT 0310141554180 DOT 823 AT eos> <Pine DOT GSO DOT 4 DOT 56 DOT 0310141712520 DOT 20462 AT slinky DOT cs DOT nyu DOT edu>
<Pine DOT GSO DOT 4 DOT 56 DOT 0310141619070 DOT 823 AT eos>
Importance: Normal
MIME-Version: 1.0

On Tue, 14 Oct 2003, Brian Ford wrote:

> On Tue, 14 Oct 2003, Igor Pechtchanski wrote:
> >Brian Ford wrote:
> > > There will be no ouput unless main calls foo, right?
> >
> > Actually, if the DLL was loaded, there should be output even if foo isn't
> > called...
> >
> Just linking to it causes a load, or is it the first referance?  I'm a DLL
> dunce.

I've just verified that the DLL is loaded even if no functions from it are
called (or variables referenced).  FWIW, here's the code I used:

$ cat > cpath.c
int hello();
void foo (void) { hello(); }
int main (int argc, char **argv) { return 0; }
$ cat > cygx.c
#include <windows.h>
#include <stdio.h>

static int counter = 0;
static FILE *output = NULL;

int hello() {
  fprintf (output, "Hello world for the %dth time!\n", counter);
  fflush (output);
  return counter++;
}

BOOL WINAPI DllMain(HINSTANCE h, DWORD f, LPVOID r) {
  if (!output) output = fopen("cygx.out", "wt");
  fprintf (output, "DLL loaded: ");
  switch (f) {
    case DLL_PROCESS_ATTACH: fprintf (output, "process attach");
                             break;
    case DLL_THREAD_ATTACH:  fprintf (output, "thread attach");
                             break;
    case DLL_THREAD_DETACH:  fprintf (output, "thread detach");
                             break;
    case DLL_PROCESS_DETACH: fprintf (output, "process detach");
                             break;
    default:                 fprintf (output, "WTF?!");
  }
  fprintf (output, "\n");
  fflush (output);
  return TRUE;
}
$ gcc -mno-cygwin -shared -o cygx.dll cygx.c
$ gcc -o cpath.exe cpath.c -L. -lcygx
$ ./cpath.exe; cat cygx.out
DLL loaded: process attach
DLL loaded: thread attach
DLL loaded: process detach
$

> > > Then, I still get a hang under setup from explorer; no output.
> >
> > This could be because the DLL was not loaded, or because of the two stdio
> > conflicts...  Did you compile the DLL with -mno-cygwin?
>
> No.  I guess you wanted me too? :)

I don't know if it matters, frankly.  It looks like the DLL is loaded, but
it doesn't load completely.  Maybe something that SHLWAPI.DLL is doing on
initialization?

> > > Stand alone in a shell, output is:
> > >
> > > DLL loaded: process attach
> > > DLL loaded: thread attach
> > > Segmentation fault (core dumped)
> > >
> > > The SEGV is expected given the code is invalid anyway.
> > >
> > > Nothing to see here... move along...
> > > [snip test_dll.c]
> >
> > Hmm.  Maybe if the DLL has exported global variables, not just functions?
> > I'll see if I can come up with the appropriate code and will then post it
> > to the list.
> >
> Not following, but ok.

I meant making "counter" in the above example global rather than static.
Turns out it doesn't make a difference -- the DLL is loaded anyway.  I
still suspect the initialization code in SHLWAPI.DLL is doing something
that Cygwin doesn't like.
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha AT cs DOT nyu DOT edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor AT watson DOT ibm DOT com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019