Re: [patch] 2.4.6-pre3 unresolved symbol do_softirq

From: Russell King (rmk@arm.linux.org.uk)
Date: Wed Jun 13 2001 - 09:52:46 EST


On Wed, Jun 13, 2001 at 07:21:41AM -0700, David S. Miller wrote:
> I can't believe there is no reliable way to get rid of that
> pesky "$" gcc is adding to the symbol. Oh well...

GCC on ARM does a similar thing - all constants in the assembler are
prefixed with '#' or '@'. Using the 'i' constraint adds this. This
behaviour is actually useful when you want to pass a constant or a
register - it allows GCC to make the decision for you, and do the
right thing in the assembler fragment. Eg, the following code used
to be in the kernel until 2.3:

extern __inline__ void __outb (unsigned int value, unsigned int port)
{
        unsigned long temp;
        __asm__ __volatile__(
        "tst %2, #0x80000000\n\t"
        "mov %0, %4\n\t"
        "addeq %0, %0, %3\n\t"
        "strb %1, [%0, %2, lsl #2] @ outb"
        : "=&r" (temp)
        : "r" (value), "r" (port), "Ir" (PCIO_BASE - IO_BASE), "Ir" (IO_BASE)
        : "cc");
}

%3 and %4 might be a constant:
        mov r5, #0x03000000

or a real register if the constant can't be loaded in one instruction:
        mov r5, r1

'I' in this case means "a constant suitable for use with the arithmetic
instructions".

--
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Jun 15 2001 - 21:00:18 EST