Thread (126 messages) 126 messages, 10 authors, 2011-02-18
STALE5581d

[PATCH 03/14] ARM: v6k: remove CPU_32v6K dependencies in asm/spinlock.h

From: Russell King - ARM Linux <hidden>
Date: 2011-01-26 15:52:03
Also in: linux-omap

On Wed, Jan 26, 2011 at 10:42:41AM -0500, Nicolas Pitre wrote:
On Wed, 26 Jan 2011, Dave Martin wrote:
quoted
Alternatively, I wonder .alt.smp.init could make weak references
instead of normal references: then if the referenced section is
discarded, the reference will revert to 0 and the fixup code can
ignore it (at the expense of wasting a bit of space in the fixup table
... but it's no worse than the current situation).  From
experimentation, it seems this doesn't work if the referenced symbol
is defined in the same file, since the linker resolves the reference
before discarding sections, but maybe there's a way around it...
That's strange.  How can the linker resolve the reference if the 
referenced symbol is not in the same section as the reference source?  
What happens when the final link completes?
$ cat t.s
	.section ".exit.text", "ax", %progbits
	mov	r0, r0
a:	mov	r0, r0

	.pushsection ".alt.smp.fixup", "a"
	.weak	a
	.long	a
	mov	r0, r1
	.popsection
$ arm-linux-as -o t.o t.s
$ arm-linux-nm t.o
00000004 W a
$ arm-linux-objdump -Dr t.o

Disassembly of section .exit.text:

00000000 <a-0x4>:
   0:	e1a00000 	nop			(mov r0,r0)

00000004 <a>:
   4:	e1a00000 	.word	0xe1a00000

Disassembly of section .alt.smp.fixup:

00000000 <.alt.smp.fixup>:
   0:	00000000 	.word	0x00000000
			0: R_ARM_ABS32	a
   4:	e1a00001 	mov	r0, r1

which when linked with:

SECTIONS
{
        .alt.smp.init : { *(.alt.smp.init) }

        /DISCARD/ : { *(.exit.text) }
}

$ arm-linux-ld -T t.lds -r -o t.oo t.o
`a' referenced in section `.alt.smp.fixup' of t.o: defined in discarded section `.exit.text' of t.o

So I don't think weak symbols work like we want them to.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help