1. 25 Oct, 2006 4 commits
    • Benjamin Herrenschmidt's avatar
      [POWERPC] Support feature fixups in vdso's · 0909c8c2
      Benjamin Herrenschmidt authored
      This patch reworks the feature fixup mecanism so vdso's can be fixed up.
      The main issue was that the construct:
      
              .long   label  (or .llong on 64 bits)
      
      will not work in the case of a shared library like the vdso. It will
      generate an empty placeholder in the fixup table along with a reloc,
      which is not something we can deal with in the vdso.
      
      The idea here (thanks Alan Modra !) is to instead use something like:
      
      1:
              .long   label - 1b
      
      That is, the feature fixup tables no longer contain addresses of bits of
      code to patch, but offsets of such code from the fixup table entry
      itself. That is properly resolved by ld when building the .so's. I've
      modified the fixup mecanism generically to use that method for the rest
      of the kernel as well.
      
      Another trick is that the 32 bits vDSO included in the 64 bits kernel
      need to have a table in the 64 bits format. However, gas does not
      support 32 bits code with a statement of the form:
      
              .llong  label - 1b  (Or even just .llong label)
      
      That is, it cannot emit the right fixup/relocation for the linker to use
      to assign a 32 bits address to an .llong field. Thus, in the specific
      case of the 32 bits vdso built as part of the 64 bits kernel, we are
      using a modified macro that generates:
      
              .long   0xffffffff
              .llong  label - 1b
      
      Note that is assumes that the value is negative which is enforced by
      the .lds (those offsets are always negative as the .text is always
      before the fixup table and gas doesn't support emiting the reloc the
      other way around).
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      0909c8c2
    • Benjamin Herrenschmidt's avatar
      [POWERPC] Support nested cpu feature sections · 7aeb7324
      Benjamin Herrenschmidt authored
      This patch adds some macros that can be used with an explicit label in
      order to nest cpu features. This should be used very careful but is
      necessary for the upcoming cell TB fixup.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: default avatarOlof Johansson <olof@lixom.net>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      7aeb7324
    • Benjamin Herrenschmidt's avatar
      [POWERPC] Consolidate feature fixup code · 42c4aaad
      Benjamin Herrenschmidt authored
      There are currently two versions of the functions for applying the
      feature fixups, one for CPU features and one for firmware features. In
      addition, they are both in assembly and with separate implementations
      for 32 and 64 bits. identify_cpu() is also implemented in assembly and
      separately for 32 and 64 bits.
      
      This patch replaces them with a pair of C functions. The call sites are
      slightly moved on ppc64 as well to be called from C instead of from
      assembly, though it's a very small change, and thus shouldn't cause any
      problem.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: default avatarOlof Johansson <olof@lixom.net>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      42c4aaad
    • Olaf Hering's avatar
      [POWERPC] Fix hang in start_ldr if _end or _edata is unaligned · fb20f65a
      Olaf Hering authored
      Quick fix for lack of memset(__bss_start, 0, _end-__bss_start) in
      load_kernel().  If edata is unaligned, the loop will overwrite all
      memory because r3 and r4 will never be equal.
      Signed-off-by: default avatarOlaf Hering <olaf@aepfle.de>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      fb20f65a
  2. 23 Oct, 2006 6 commits
  3. 21 Oct, 2006 30 commits