[m-rev.] for review: deconstruct.named_arg for java

Ian MacLarty maclarty at csse.unimelb.edu.au
Mon Jul 5 17:04:24 AEST 2010


On Mon, Jul 5, 2010 at 3:53 PM, Julien Fischer
<juliensf at csse.unimelb.edu.au> wrote:
>
> On Mon, 5 Jul 2010, Ian MacLarty wrote:
>
>> On Mon, Jul 05, 2010 at 03:18:38PM +1000, Paul Bone wrote:
>>>
>>> On Mon, Jul 05, 2010 at 02:35:32PM +1000, Ian MacLarty wrote:
>>>>
>>>> On Mon, Jul 5, 2010 at 2:21 PM, Paul Bone <pbone at csse.unimelb.edu.au>
>>>> wrote:
>>>>>
>>>>> On Mon, Jul 05, 2010 at 02:04:23PM +1000, Ian MacLarty wrote:
>>>>>>
>>>>>> What seems to be happening is that functions are being declared with
>>>>>> a prototype like the following:
>>>>>>
>>>>>>     static void mercury__tree234__LCMCpr_insert2_1_4_0(void)
>>>>>> __asm__("_entry_" "mercury__tree234__LCMCpr_insert2_1_4_0")
>>>>>>
>>>>>> and then being referred to without being defined in C code.
>>>>>> The functions are in fact defined using assembly code.
>>>>>>
>>>>>> It seems to be the fact that the function is declared static that is
>>>>>> causing gcc to expect a definition of the function in the same file.
>>>>>> Removing the static keyword appears to fix the problem.
>>>>>>
>>>>>> Here is the hack I used to test this:
>>>>>
>>>>> Why is there a static definition but no declaration?  In other words,
>>>>> are these
>>>>> symbols really indented to be static?
>>>>>
>>>>
>>>> There is a static declaration.  It is the definition that is missing.
>>>> I'm not sure if the static keyword makes any difference if the
>>>> function is defined in assembler.  It doesn't appear to (running nm on
>>>> the .o files yields the same results).
>>>>
>>>>> If this is true then they should be created using a different
>>>>> preprocessor
>>>>> macro, rather than making a static macro create non-static
>>>>> declarations.
>>>>>
>>>>
>>>> Yes I know.  That was just a hack I used to test my theory.
>>>
>>> Ah, okay.
>>>
>>>>> Alternativly, is there a missing (static) definition of these symbols?
>>>>>  I
>>>>> wouldn't think so otherwise the linker wuld fail to link the
>>>>> executable.  Can
>>>>> GCC see the static definitions if they exist?
>>>>
>>>> The definition, as far as I can tell, is done with some inline
>>>> assembler.  There is no C code definition of the function, which is
>>>> why gcc complains.
>>>
>>> In that case I'm happy to use a new macro that doesn't make the
>>> definition
>>> static.
>>>
>>
>> I don't want to change the compiler code to emit a different macro
>> depending on whether we're using asm labels or not, because,
>> as I understand it, the compiler should emit the same code for
>> all the low level grades and the differences between the grades should
>> be hidden behind macros.
>
> Yes, and you are not allowed to break that behaviour!
>
>> This allows us to build in none.gc, reg.gc or
>> asm_fast.gc from the same source distribution.  I could change the name
>> of the MR_decl_static and MR_declare_static macros, but what to?
>> (MR_decl_local is already used for something else).
>
> Maybe there is a GCC function attribute that we could attach to the
> declaration that would inhibit the warning,
> <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function-Attributes>?
>

Thanks for the link.  There are a lot of useful looking attributes
there, but I didn't see any that would help in this case.

Ian.

--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list