From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Interfaces.C + generics: stack overflow Date: Sat, 25 Mar 2017 16:23:49 +0100 Organization: Aioe.org NNTP Server Message-ID: References: NNTP-Posting-Host: BYuA7L7MRjuLLjcoGHOBxw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:46455 Date: 2017-03-25T16:23:49+01:00 List-Id: On 2017-03-25 15:17, hreba wrote: > On 03/24/2017 11:03 PM, Dmitry A. Kazakov wrote: > > Thanks for your convincing suggestions and the detailed code. I changed > my program accordingly - still STORAGE_ERROR. > > Then I followed the advice from Randy, transferring the exported > function of the C library to another, non-generic package, changing the > first parameter from > > function gsl_integration_qng > (f: in out GSL_Function; ... > to > function gsl_integration_qng > (f: System.Address; ... > > Result - STORAGE_ERROR 1. You could try to replace out T with access T. Especially because you apply a conversion to the argument. 2. You should also read the library documentation for memory allocation issues. Storage_Error is a usual result when an Ada allocated object is passed where a C malloc result expected. If some of the arguments are allocated by callee to be freed by the caller or conversely you must use Interfaces.C.Pointers to deal with these. 3. And you could debug it to get an idea where it fails. If the stack frame becomes corrupted, that means wrong call convention. An error in the heap indicates an allocator issue as above etc. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de