gnucobol-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [open-cobol-list] Problem calling a known void function


From: Ehud Karni
Subject: Re: [open-cobol-list] Problem calling a known void function
Date: Tue, 26 May 2009 23:04:12 +0300

Hi,

Thank you for your answer, it make me check my COBOL arguments.

Here is my version and compile information:

# Generated by OpenCOBOL 1.1.0
# Built        Mar 12 2009 17:05:48
# Packaged     Feb 06 2009 10:30:55 CET
# Environment
#  TMPDIR :    /tmp
#  COBCPY :    /appl/src/CP
# Command :    cobc -cx -O2 -std=mf -I /appl/src -Wall -fnotrunc -fstatic-call 
-save-temps -t test_free.lst test_free.opc
                                                                 ^^^^^^^^^^^^^
        ------- Note this argument ------------------------------^^^^^^^^^^^^^

If I omit the "-fstatic-call" then it compiles OK.
The difference is C calling code - the function is searched only at run time.

When I changed "free" to "XXXfree", and compiled with "-fstatic-call",
I got a loader error:

./test_free.o: In function `test__free_':
test_free.c:(.text+0x158): undefined reference to `XXXfree'
collect2: ld returned 1 exit status

But if I omit it (i.e. dynamic call compilation), I get at RUN time:

pntr=0x09914e08
123
libcob: Cannot find module 'XXXfree'
Exit 1


We need static calling because we are migrating many COBOL programs
(over 1000) with many subroutines (COBOL, FORTRAN and C) and we can't
wait for the run time to know which subroutines are missing.

So, I'll ask a more precise question: Is there a way to statically call
"void" known functions ?

Known functions are those that have prototype in any of <stdio.h>,
<stdlib.h>, <string.h> or <math.h>, which are included in the C code
of any open-cobol program ("free" is declared in <stdlib.h>).

Since there less than 25 void functions in all these headers, we
can live with it (wrap each needed function) if there is no better
solution.

Ehud.



On Tue, 26 May 2009 19:36:26 vince coen wrote:
>
> Hi;
>
> Just tried it using OC v1.1 and get:
>
> address@hidden Stock]$ ./test1
> pntr=0x08056908
> 123
>
>
> What version of OC are you using?
>
> Shalom,
>
> Vince
>
> On Tuesday 26 May 2009, Ehud Karni wrote:
> > Hello All,
> >
> > I'm the system programmer of Mivtach-Simon. One of the programmers
> > here had a problem when he used CALL with void function like `free'.
> >
> > An example program:
> >
> >        identification division.
> >        program-id. test-free.
> >        data        division.
> >        working-storage section.
> >        01 pntr usage pointer.
> >        01 len-rec  pic 999 value 100.
> >        linkage    section.
> >        01 rec pic x(100).
> >        procedure  division.
> >            call "malloc" using value len-rec returning pntr.
> >            display "pntr=" pntr.
> >            set address of rec to pntr.
> >            move "123" to rec.
> >            display rec.
> >            call "free" using rec.
> >            move 0 to return-code
> >            stop run.
> >
> > The gcc emits the following error -
> > test_free.c:140: error: void value not ignored as it ought to be
> > which is referencing this produced c code:
> >   /* test_free.opc:15: CALL */
> >   {
> >     {
> >
> >       module.cob_procedure_parameters[0] = (f_7.data = b_7, &f_7);
> >       module.cob_procedure_parameters[1] = NULL;
> >       module.cob_procedure_parameters[2] = NULL;
> >       module.cob_procedure_parameters[3] = NULL;
> >       module.cob_procedure_parameters[4] = NULL;
> >       cob_call_params = 1;
> >       (*(int *) (b_1)) = free (b_7);       <--- error
> >     }
> >   }
> >
> > I checked the ISO standard (ISO/IEC 1989:200x WD 1.10) and did not
> > find any syntax to say "not returning".
> >
> > The bypass solution now is to wrap the `free' call, like:
> >
> > int int_free (void *ptr)
> > {
> >     free ( ptr ) ;
> >     return ( 0 ) ;
> > }
> >
> > but we will appreciate a better non-specific solution.
> >
> > Ehud.


--
 Ehud Karni           Tel: +972-3-7966-561  /"\
 Mivtach - Simon      Fax: +972-3-7966-667  \ /  ASCII Ribbon Campaign
 Insurance agencies   (USA) voice mail and   X   Against   HTML   Mail
 http://www.mvs.co.il  FAX:  1-815-5509341  / \
 GnuPG: 98EA398D <http://www.keyserver.net/>    Better Safe Than Sorry


reply via email to

[Prev in Thread] Current Thread [Next in Thread]