www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/08/07/17:02:28

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
From: "Alan Cooley" <alan AT vacooley DOT com>
To: <cygwin AT sources DOT redhat DOT com>
Subject: gcc - static pointer initialization problem
Date: Thu, 7 Aug 2003 16:00:39 -0500
Message-ID: <NDBBJGEAMLLLJFEHPBDMIEAOCIAA.alan@vacooley.com>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Note-from-DJ: This may be spam

------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello,

I am having a problem with a C program.  It appears that static variables
are not being initialized when in an object file.   The program compiles and
links fine but funcPtrStruct.ptr is null so program crashes.

This program works using gcc on Linux and (as I understand the C language)
should work anywhere.

Thanks in advance for any explanation/corrections you can provide.

Alan.

----------------
Files attached:
gccversion.txt - output of "gcc -v"
Makefile - 'nuf said
static_function_ptr_def.h - header for structure to hold function ptr
static_function_ptr_def.c - implementation with static initializer
static_function_ptr.c - main that invokes the function



------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: text/plain;
	name="gccversion.txt"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="gccversion.txt"

Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs=0A=
Configured with: /netrel/src/gcc-3.2-3/configure =
--enable-languages=3Dc,c++,f77,java --enable-libgcj =
--enable-threads=3Dposix --with-system-zlib --enable-nls =
--without-included-gettext --enable-interpreter =
--disable-sjlj-exceptions --disable-version-specific-runtime-libs =
--enable-shared --build=3Di686-pc-linux --host=3Di686-pc-cygwin =
--target=3Di686-pc-cygwin --enable-haifa --prefix=3D/usr =
--exec-prefix=3D/usr --sysconfdir=3D/etc --libdir=3D/usr/lib =
--includedir=3D/nonexistent/include --libexecdir=3D/usr/sbin=0A=
Thread model: posix=0A=
gcc version 3.2 20020927 (prerelease)=0A=

------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: application/octet-stream;
	name="Makefile"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="Makefile"

CFLAGS =3D -g=0A=
EXT =3D .exe=0A=
=0A=
PROGS =3D static_function_ptr$(EXT)=0A=
=0A=
all: $(PROGS)=0A=
=0A=
static_function_ptr$(EXT): static_function_ptr_def.o =
static_function_ptr.o=0A=
	$(CC) -o $@ static_function_ptr_def.o static_function_ptr.o $(LDFLAGS)=0A=
=0A=
clean:=0A=
	rm -f $(PROGS)=0A=
	rm -f *.o=0A=
	rm -f *.stackdump=0A=
=0A=
clean_editor:=0A=
	rm -f *~ *#=0A=
=0A=
clean_all: clean clean_editor=0A=
=0A=
=0A=

------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: application/octet-stream;
	name="static_function_ptr_def.h"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="static_function_ptr_def.h"

#ifndef STATIC_FUNCTION_PTR_DEF_H=0A=
#define STATIC_FUNCTION_PTR_DEF_H=0A=
=0A=
typedef void (*myFuncPtr) ();=0A=
=0A=
typedef struct {=0A=
  myFuncPtr ptr;=0A=
} funcPtrStructDef;=0A=
=0A=
static funcPtrStructDef funcPtrStruct;=0A=
=0A=
#endif=0A=

------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: application/octet-stream;
	name="static_function_ptr_def.c"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="static_function_ptr_def.c"

#include "static_function_ptr_def.h"=0A=
=0A=
void func() {=0A=
  printf("Here I am.\n");=0A=
}=0A=
=0A=
static funcPtrStructDef funcPtrStruct =3D {func};  =0A=
=0A=

------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: application/octet-stream;
	name="static_function_ptr.c"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="static_function_ptr.c"

/* =0A=
   Test behavior of static function pointers with gcc in Win=0A=
*/=0A=
#include <stdio.h>=0A=
#include "static_function_ptr_def.h"=0A=
=0A=
int main() {=0A=
=0A=
  printf("Try function directly...\n");=0A=
  func();=0A=
=0A=
  printf("Try function via ptr...\n");=0A=
  funcPtrStruct.ptr();=0A=
=0A=
  printf("Bye!\n");=0A=
}=0A=
=0A=
  =0A=


------=_NextPart_000_0004_01C35CFD.0BF988D0
Content-Type: text/plain; charset=us-ascii

--
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/
------=_NextPart_000_0004_01C35CFD.0BF988D0--


- Raw text -


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