Subject: Re: CVS commit: src/libexec/ld.elf_so/arch/powerpc
To: None <tech-userlevel@netbsd.org, port-powerpc@netbsd.org>
From: Charles M. Hannum <abuse@spamalicious.com>
List: tech-userlevel
Date: 09/26/2005 14:33:52
On Monday 26 September 2005 05:45, Chuck Silvers wrote:
> Module Name:	src
> Committed By:	chs
> Date:		Mon Sep 26 05:45:13 UTC 2005
>
> Modified Files:
> 	src/libexec/ld.elf_so/arch/powerpc: ppc_reloc.c
>
> Log Message:
> fix two problems with icache invalidation of the PLT:
>  - restore revision 1.33, it was correct.

It took me a few minutes to refresh myself on what's going on here, but...

No, it is *not* correct.  Please take the time to understand the PLT format 
before messing with it.

On PPC, the PLT area is split into two sections: the first contains code, and 
is actually 8 or 16 bytes per entry; the second contains pointers, and does 
not need to be synced.  The 8 vs. 16 split happens if the PLT is larger than 
8192 entries.

I have to admit that I'm not completely sure if the "large PLT" support does 
the right arithmetic -- I never got clear documentation on the format -- but 
the basic deal of only flushing 8 (or 16) bytes is definitely correct, and 
should not have been changed.

Please revert it and add a comment for the next person who is going to screw 
it up.  I believe Matt Thomas is the one who clued me into this the first 
time around.