Xenix Cross Development from 386 to 286

Dirk Otterbach PEM 0711/71 30 45 do at pemstgt.PEM-Stuttgart.de
Tue Nov 27 20:54:01 AEST 1990


	I have the following problem:

	I have to port a very large program from SCO XENIX/386 Rel. 2.3.3 to
	SCO XENIX/286. As we don't have the right development system in-
	stalled on the target (=286) machine, we do a cross compilation
	on the 386 system.

	With size of the program (1.5 MByte incl. debug information) the
	compilation with the '-Zi -Od -Ml2 -Gt10' results in a runtime
	stack overflow.

	By enlarging the stack with '-F3000' the program wouldn't abort
	but would produce wrong screen output and results. I think that's
	still a stack size problem, but I can't enlarge stack size any 
	more without overflowing the default data segment.

	Another try was to put the stack into an extra segment with the
	flags '-Zi -Od -Ml -M2 -Au -ND GLOB_DAT -F 4000'. Now the program
	would hang up at the first malloc call (see below).

	Using the flags '-Zi -Od -Ml -M2 -Mt1' would result in further 
	problems. Now the linker has not enough memory for the segments.
	I could overcome this problem using the link option '-SE 1024'.
	Result: the program would hang even earlier at the 'access' call
	(see below).

	Does anybody know a solution? How can I manage to move the stack
	into another segment than the default data segment?

	Thanks in advance for any help

					Dirk

/* -------------------------------------------------------------------- */
/*			H A U P T P R O G R A M M 			*/
/* -------------------------------------------------------------------- */

void main( argc, argv)
int	  argc;
char	**argv;
{
int	  rc=RC_SUCCESS;
long	  cur_time;

  own_pname = BENUTZERDIALOG;

  /*  Feststellen, ob Parameter uebergeben und entsprechend schalten	*/
  parse(argc, argv);
  .
  .
  .

/************************************************************************/
/*   Modulname:    		parse_arg				*/
/************************************************************************/
int parse(int argc ,char **argv )
{
 int rtn = RC_SUCCESS;

	if( argc < 2 )
	{
	rtn = RC_FAIL;
	strcpy(aktuelle_daten.defdatei,DEFDATEI);
	return( rtn );
	}
        else 
	{
	 if(  strlen( argv[1] ) > SIZE_NAME )
	  {
	  .. stuff deleted ..
	  }
	  else
	  {
	  if(!access(argv[1],0) == 0)   <<<<<<<<<<<------ '-Zi -Od -Ml -M2 -Mt1'
	   {
	   .. stuff deleted ..
	   }
	   else
	   {
	   if(def_dat_kennung(argv[1]) == RC_SUCCESS )
	    {
	    .
	    .

/************************************************************************/
/*   Funktionsname:		def_dat_kennung				*/
/************************************************************************/
int def_dat_kennung( char *dateiname)
{
 int rtn= RC_SUCCESS;
 FILE *file;
 char *buffer;

    buffer=(char *)malloc(100); <<<<<<<<<<------- '-Zi -Od -Ml2 -Au -ND GLOBDAT'
    if(( file=fopen( dateiname,"r")) != NULL)
     {
     .
     .

-- 

  Dirk Otterbach 		|	PEM Tillmann Basien    
  do at pemstgt.PEM-Stuttgart.de	|	Programmentwicklung fuer Microcomputer
  FAX   +49-711-713047		|	Vaihinger Str.49, PostBox 810165



More information about the Comp.unix.programmer mailing list