delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1999/11/05/12:17:49

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT sourceware DOT cygnus DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT sourceware DOT cygnus DOT com>
List-Archive: <http://sourceware.cygnus.com/ml/cygwin/>
List-Post: <mailto:cygwin AT sourceware DOT cygnus DOT com>
List-Help: <mailto:cygwin-help AT sourceware DOT cygnus DOT com>, <http://sourceware.cygnus.com/ml/#faqs>
Sender: cygwin-owner AT sourceware DOT cygnus DOT com
Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com
Message-ID: <779F20BCCE5AD31186A50008C75D997917167F@SILLDN_MAIL1>
From: "Fifer, Eric" <EFifer AT sanwaint DOT com>
To: "'cygwin AT sourceware DOT cygnus DOT com'" <cygwin AT sourceware DOT cygnus DOT com>
Subject: RE: Wierd perl problem..
Date: Fri, 5 Nov 1999 17:14:15 -0000
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2448.0)

Chris Faylor wrote:
>So, if you're adventurous, try out the latest snapshot and see if dynamic
>loading in perl just miraculously "works" now.

I pulled down the 10/31/99 snapshot and I'm still seeing problems
with fork and dlls.  I went back to my simple forkbug example (see
below) and it outputs:

in child
    0       0 [main] s:\efifer\dev\cygwin\forkbug\forkbug1.exe 3192
handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
    0   15778 [main] forkbug1 3192 stackdump: Dumping stack trace to
forkbug1.exe.stackdump
pid=3192 status=0
dll1_func=parent

forkbug1.exe.stackdump:

Exception: STATUS_ACCESS_VIOLATION at eip=00005110
eax=6107B120 ebx=60C81010 ecx=00000009 edx=6107B3B4 esi=00020818
edi=6107B40C
ebp=0240FE84 esp=0240FE68 program=s:\efifer\dev\cygwin\forkbug\forkbug1.exe
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace:
Frame     Function  Args
0240FE64  00005110  (6107B3B4, 60C81000, 00401070, 00000074)
0240FE84  60C81030  (00401070, 00401066, 0240FED4, 004010CF)
0240FED4  00401100  (00000001, 0A041238, 0A040008, 00000000)
0240FF30  61004870  (7FFDF000, 00000000, 00000000, 0040124C)
0240FF60  61004B1D  (00403010, C0069000, 0240FF90, 00401292)
0240FF90  0040129F  (00401090, 80C3BD00, 80CCB068, F9071E18)
0240FFC0  0040103D  (00000000, 00000000, 7FFDF000, 7FFDF000)
0240FFF0  77F1BA3C  (00401000, 00000000, 00000000, 77FA5AB0)
End of stack trace

I'll try to work out the problem and send a patch, but in
the meantime any pointers will be appreciated.

Thanks.

Eric Fifer

--

forkbug1.c:

	#include <stdio.h>
	#include <unistd.h>
	#include <sys/wait.h>
	#include <dlfcn.h>

	int main()
	{
	    int	child, pid, status;
	    void	*dll1_dll;
	    void	(*dll1_func)();

	    dll1_dll = dlopen("libdll1.dll", RTLD_LAZY);
	    dll1_func = dlsym(dll1_dll, "dll1_func");

	    if((child = fork()) == 0) {
		fprintf(stderr, "in child\n");
		dll1_func("child");
		exit(0);
	    }

	    pid = wait(&status);
	    fprintf(stderr, "pid=%d status=%d\n", pid, status);
	    dll1_func("parent");

	    return 0;
	}

libdll1.c:

	#include <stdio.h>

	#define DLLIMPORT __declspec (dllexport)

	DLLIMPORT int
	dll1_func(char *msg)
	{
	    fprintf(stderr, "dll1_func=%s\n", msg);
	    return 1;
	}

Makefile:

	CFLAGS	= -g -Wall
	LDFLAGS = -g

	all: libdll1.dll forkbug1

	forkbug1: forkbug1.o
		$(CC) $(LDFLAGS) -o forkbug1 forkbug1.o

	%.dll: %.o
		dllwrap --export-all --output-def $*.def \
			--output-lib $*.a -o $@ $<

--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


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