Subject: Re: empty undefined symbols
To: None <tech-toolchain@NetBSD.org>
From: Valeriy E. Ushakov <uwe@stderr.spb.ru>
List: tech-toolchain
Date: 10/22/2007 06:18:07
On Mon, Oct 22, 2007 at 03:40:49 +0200, Martin Husemann wrote:

> We need to declare global register usage (outside usual abi restrictions)
> on sparc64 with
> 
>   .register %g2,#scratch
>   .register %g3,#scratch
> 
> (and we do this in the kernel quite a lot).
> 
> However, this seems to create "empty" undefined symbols:
> 
> # nm /netbsd |fgrep " U " 
>                  U 
>                  U 
> 
> Using #ignore instead of #scratch makes those Us go away.
> 
> This is a binutils bug, isn't it?

No, for .register you get STT_SPARC_REGISTER entries in the symbol
table and for #scratch you get symbol with null name, see psABI.
You can use readelf instead of nm to confirm this.

  The #ignore form of the .register pseudo-instruction is used only
  for code that does not change the global registers in a program
  visible way, such as thread and context switching system code.

For kernel I think #ignore is ok (presumably we refer to those
registers either to save restore context or we refer to alternate
globals).

SY, Uwe
-- 
uwe@stderr.spb.ru                       |       Zu Grunde kommen
http://snark.ptc.spbu.ru/~uwe/          |       Ist zu Grunde gehen