Re: Weak globals

Joe Pluta <joepluta-Kokj9vFzZubAKuVPhbf8BAC/[email protected]> Tue, 2 Apr 2019 09:20:04 -0500
Newsgroups gmane.comp.lang.as400.c
Message-ID <[email protected]>
It looks like the #pragma weak is just not working.  Here's the relevant 
CRTSRVPGM output:

5770SS1 V7R3M0 160422 MVXJP/TFOO    DEV       04/02
  Module . . . . . . . . . . . : TFOO2
    Library  . . . . . . . . . : MVXJP
    Bound  . . . . . . . . . . : *YES
    Change date/time . . . . . :     04/02/19 07:39:13
    Teraspace storage enabled  : *YES
    Storage model  . . . . . . : *SNGLVL
        Number    Symbol      Ref 
Identifier                                   Type      Scope Export
        00000025  Def foo__Fv                                      
Proc      Module Strong
        00000026  Ref         0000011C _C_SIGABRT_ctl_action Data

Note that foo__Fv in TFOO2 is identified as a strong export.  That's 
just not correct.  It later conflicts with the foo__Fv from TFOO3 and 
the service program is not created.



On 4/2/2019 9:12 AM, Joe Pluta wrote:
> Nope - still getting CPD5D03.
>
> On 4/2/2019 9:08 AM, Joe Pluta wrote:
>> Thanks Jon, that's the way I'll go if I can't figure anything else 
>> out. As you probably guess, I don't like DUPPROC, especially since as 
>> I read the documentation, weak should work.
>>
>> The EXPORT(*ALL) is simply for testing, but I'm not sure how the 
>> binder source would help.  I'm not very versed in binder source, but 
>> as far as I can tell all binder source does is order the exported 
>> modules.  How would it help when resolving duplicate symbols?
>>
>> Oh wait.  Maybe that's the problem! Maybe it's trying to export both 
>> the weak and the strong.  Ah, let me try that.  If I add binder 
>> source to only export main maybe that will work.
>>
>>
>> On 4/2/2019 8:53 AM, Jon Paris wrote:
>>> Joe - I think dup proc is the only way to go. As to your comment 
>>> "and even then the order isn't _guaranteed_" that should be dealt 
>>> with by binder language/source instead of doing Export *All.  That 
>>> guarantees the slot sequence.
>>>
>>>
>>> Jon Paris
>>>
>>> www.partner400.com
>>> www.SystemiDeveloper.com
>>>
>>>> On Apr 2, 2019, at 8:43 AM, Joe Pluta <[email protected]> 
>>>> wrote:
>>>>
>>>> Has anybody successfully used the weak #pragma for a function?  I'm 
>>>> trying to create a service program with three modules: one that 
>>>> references a function, one with that function defined weakly, and 
>>>> one with the function defined strongly.  In that scenario, I should 
>>>> be able to combine the following:
>>>>
>>>> Reference, weak: calls weak
>>>> Reference, strong: calls strong
>>>> Reference, weak, strong: calls strong
>>>> Reference only: won't compile
>>>>
>>>> The best example code I found was in the AIX reference:
>>>>
>>>> https://www.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/compiler_ref/prag_weak.html 
>>>>
>>>>
>>>>  From what I can tell, that same syntax should work in the ILE 
>>>> compiler, so I created the following:
>>>>
>>>> |// TFOO1.CPP #include <stdio.h> void foo(); int main() { foo(); } 
>>>> // TFOO2.CPP #include <stdio.h> #pragma weak foo__Fv void foo() { 
>>>> printf("Foo called from compilation unit 2\n"); } // TFOO3.CPP 
>>>> #include <stdio.h> void foo() { printf("Foo called from compilation 
>>>> unit 3\n"); } |
>>>>
>>>>
>>>> CRTSRVPGM TFOO MODULES(TFOO1 TFOO2 TFOO3) EXPORT(*ALL) fails with 
>>>> CPD5D03, Definition supplied multiple times for symbol 'foo__Fv'.
>>>>
>>>> I can get around it with OPTION(*DUPPROC) but then I have to be 
>>>> very careful of the order of my modules in the MODULES keyword of 
>>>> CRTSRVPGM (and even then the order isn't _guaranteed_).  That also 
>>>> would hide any cases of unintentional procedure duplication, so I'd 
>>>> really like to get #pragma weak working.
>>>>
>>>>
>>>> -- 
>>>> This is the Bare Metal Programming IBM i (AS/400 and iSeries) 
>>>> (C400-L) mailing list
>>>> To post a message email: [email protected]
>>>> To subscribe, unsubscribe, or change list options,
>>>> visit: https://lists.midrange.com/mailman/listinfo/c400-l
>>>> or email: [email protected]
>>>> Before posting, please take a moment to review the archives
>>>> at https://archive.midrange.com/c400-l.
>>>>
>>>> Help support midrange.com by shopping at amazon.com with our affiliate
>>>> link: https://amazon.midrange.com
>>
>>
>

-- 
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/c400-l
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/c400-l.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com