01 Jul, 2008

2 commits

  • This patch extends the floating point save and restore code to use the
    VSX load/stores when VSX is available. This will make FP context
    save/restore marginally slower on FP only code, when VSX is available,
    as it has to load/store 128bits rather than just 64bits.

    Mixing FP, VMX and VSX code will get constant architected state.

    The signals interface is extended to enable access to VSR 0-31
    doubleword 1 after discussions with tool chain maintainers. Backward
    compatibility is maintained.

    The ptrace interface is also extended to allow access to VSR 0-31 full
    registers.

    Signed-off-by: Michael Neuling
    Signed-off-by: Paul Mackerras

    Michael Neuling
     
  • This makes asm/elf.h export less non-userspace stuff to userspace.

    Signed-off-by: Adrian Bunk
    Signed-off-by: Paul Mackerras

    Adrian Bunk
     

07 Feb, 2008

2 commits

  • This switches the CONFIG_PPC64 support for 32-bit ELF to use the
    generic fs/compat_binfmt_elf.c implementation instead of our own
    binfmt_elf32.c. Since so much is the same between 32/64, there is
    only one macro we have to define to make the generic support work out
    of the box.

    Signed-off-by: Roland McGrath
    Signed-off-by: Paul Mackerras

    Roland McGrath
     
  • This switches powerpc to using the user_regset-based code for ELF core
    dumps. The core dumps come out exactly the same either way, except that
    the NT_PPC_VMX note is now omitted for any thread that never touched its
    Altivec registers (thread_struct.vr_used).

    Signed-off-by: Roland McGrath
    Signed-off-by: Paul Mackerras

    Roland McGrath
     

17 Oct, 2007

3 commits

  • include/asm-powerpc/elf.h has 6 entries in ARCH_DLINFO. fs/binfmt_elf.c
    has 14 unconditional NEW_AUX_ENT entries and 2 conditional NEW_AUX_ENT
    entries. So in the worst case, saved_auxv does not get an AT_NULL entry at
    the end.

    The saved_auxv array must be terminated with an AT_NULL entry. Make the
    size of mm_struct->saved_auxv arch dependend, based on the number of
    ARCH_DLINFO entries.

    Signed-off-by: Olaf Hering
    Cc: Roland McGrath
    Cc: Jakub Jelinek
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Cc: "Luck, Tony"
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Paul Mundt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Olaf Hering
     
  • This makes powerpc64's compat code use the new linux/elfcore-compat.h,
    reducing some hand-copied duplication.

    Signed-off-by: Roland McGrath
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Andi Kleen
    Cc: "Luck, Tony"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roland McGrath
     
  • Update dump_task_altivec() (which has so far never been put to use) so that
    it dumps the Altivec/VMX registers (VR[0] - VR[31], VSCR and VRSAVE) in the
    same format as the ptrace get_vrregs(), and add the appropriate glue
    typedef and #defines to make it work.

    A new note type of NT_PPC_VMX was chosen to be 0x100 (arbitrarily) because
    it allows the low range values to be used for more generic purposes and
    0x100 seems an adequate starting point for PowerPC extensions.

    Signed-off-by: Mark Nelson
    Signed-off-by: Paul Mackerras
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Andi Kleen
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mark Nelson
     

19 Sep, 2007

1 commit

  • To start with, arch_notes_size() etc. is a little too ambiguous a name for
    my liking, so change the function names to be more explicit.

    Calling through macros is ugly, especially with hidden parameters, so don't
    do that, call the routines directly.

    Use ARCH_HAVE_EXTRA_ELF_NOTES as the only flag, and based on it decide
    whether we want the extern declarations or the empty versions.

    Since we have empty routines, actually use them in the coredump code to
    save a few #ifdefs.

    We want to change the handling of foffset so that the write routine updates
    foffset as it goes, instead of using file->f_pos (so that writing to a pipe
    works). So pass foffset to the write routine, and for now just set it to
    file->f_pos at the end of writing.

    It should also be possible for the write routine to fail, so change it to
    return int and treat a non-zero return as failure.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Jeremy Kerr
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     

24 Jan, 2007

1 commit

  • I often test new versions of glibc by doing:

    LD_LIBRARY_PATH=/XXX/lib /XXX/lib/ld.so.1

    One test case ended up SEGV'ing. Upon closer inspection ld.so was loaded
    at 0x8000000 (128MB) with the heap right after it. Since we normally
    link binaries at 0x10000000 (256MB) we only had about 128MB of space for
    the heap:

    00100000-00103000 r-xp 00100000 00:00 0 [vdso]
    08000000-0801e000 r-xp 00000000 00:01 33079 /lib/ld-2.5.so
    0802d000-0802f000 rwxp 0001d000 00:01 33079 /lib/ld-2.5.so
    0802f000-08050000 rwxp 0802f000 00:00 0 [heap]
    0fe91000-0ffd9000 r-xp 00000000 00:01 33082 /lib/libc-2.5.so
    0ffd9000-0ffe8000 ---p 00148000 00:01 33082 /lib/libc-2.5.so
    0ffe8000-0ffea000 r--p 00147000 00:01 33082 /lib/libc-2.5.so
    0ffea000-0ffed000 rwxp 00149000 00:01 33082 /lib/libc-2.5.so
    10000000-10004000 r-xp 00000000 00:01 76 /bin/sleep
    10013000-10014000 rwxp 00003000 00:01 76 /bin/sleep
    ffb41000-ffb56000 rw-p ffb41000 00:00 0 [stack]

    One way to fix this is move ELF_ET_DYN_BASE from 0x08000000 to 0x20000000.
    This allows 128MB for the binary (hopefully enough for even the most
    crazy c++ apps), and with our current layout we will grow the heap up
    and the stack down, allowing potentially gigabytes of heap:

    00100000-00103000 r-xp 00100000 00:00 0 [vdso]
    0fe8a000-0ffd3000 r-xp 00000000 00:01 3350 /lib/tls/libc-2.3.6.so
    0ffd3000-0ffe3000 ---p 00149000 00:01 3350 /lib/tls/libc-2.3.6.so
    0ffe3000-0ffea000 r--p 00149000 00:01 3350 /lib/tls/libc-2.3.6.so
    0ffea000-0ffee000 rwxp 00150000 00:01 3350 /lib/tls/libc-2.3.6.so
    10000000-10004000 r-xp 00000000 00:01 76 /bin/sleep
    10013000-10014000 rwxp 00003000 00:01 76 /bin/sleep
    20000000-20018000 r-xp 00000000 00:01 3478 /lib/ld-2.3.6.so
    20028000-20029000 r--p 00018000 00:01 3478 /lib/ld-2.3.6.so
    20029000-2002a000 rwxp 00019000 00:01 3478 /lib/ld-2.3.6.so
    2002a000-2004b000 rwxp 2002a000 00:00 0 [heap]
    ffd67000-ffd7c000 rw-p ffd67000 00:00 0 [stack]

    Signed-off-by: Anton Blanchard
    Signed-off-by: Paul Mackerras

    Anton Blanchard
     

08 Dec, 2006

1 commit

  • Define elf_addr_t in linux/elf.h. The size of the type is determined using
    ELF_CLASS. This allows us to remove the defines that today are spread all
    over .c and .h files.

    Signed-off-by: Magnus Damm
    Cc: Daniel Jacobowitz
    Cc: Roland McGrath
    Cc: Jakub Jelinek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Magnus Damm
     

04 Dec, 2006

2 commits

  • It may be desireable to build a kernel for cell without
    spufs, e.g. as the initial kboot kernel. This requires
    that the SPU specific parts of the core dump and the xmon
    code depend on CONFIG_SPU_BASE instead of CONFIG_PPC_CELL.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • This patch adds SPU elf notes to the coredump. It creates a separate note
    for each of /regs, /fpcr, /lslr, /decr, /decr_status, /mem, /signal1,
    /signal1_type, /signal2, /signal2_type, /event_mask, /event_status,
    /mbox_info, /ibox_info, /wbox_info, /dma_info, /proxydma_info, /object-id.

    A new macro, ARCH_HAVE_EXTRA_NOTES, was created for architectures to
    specify they have extra elf core notes.

    A new macro, ELF_CORE_EXTRA_NOTES_SIZE, was created so the size of the
    additional notes could be calculated and added to the notes phdr entry.

    A new macro, ELF_CORE_WRITE_EXTRA_NOTES, was created so the new notes
    would be written after the existing notes.

    The SPU coredump code resides in spufs. Stub functions are provided in the
    kernel which are hooked into the spufs code which does the actual work via
    register_arch_coredump_calls().

    A new set of __spufs__read/get() functions was provided to allow the
    coredump code to read from the spufs files without having to lock the
    SPU context for each file read from.

    Cc:
    Signed-off-by: Dwayne Grant McConnell
    Signed-off-by: Arnd Bergmann

    Dwayne Grant McConnell
     

23 Jun, 2006

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (139 commits)
    [POWERPC] re-enable OProfile for iSeries, using timer interrupt
    [POWERPC] support ibm,extended-*-frequency properties
    [POWERPC] Extra sanity check in EEH code
    [POWERPC] Dont look for class-code in pci children
    [POWERPC] Fix mdelay badness on shared processor partitions
    [POWERPC] disable floating point exceptions for init
    [POWERPC] Unify ppc syscall tables
    [POWERPC] mpic: add support for serial mode interrupts
    [POWERPC] pseries: Print PCI slot location code on failure
    [POWERPC] spufs: one more fix for 64k pages
    [POWERPC] spufs: fail spu_create with invalid flags
    [POWERPC] spufs: clear class2 interrupt status before wakeup
    [POWERPC] spufs: fix Makefile for "make clean"
    [POWERPC] spufs: remove stop_code from struct spu
    [POWERPC] spufs: fix spu irq affinity setting
    [POWERPC] spufs: further abstract priv1 register access
    [POWERPC] spufs: split the Cell BE support into generic and platform dependant parts
    [POWERPC] spufs: dont try to access SPE channel 1 count
    [POWERPC] spufs: use kzalloc in create_spu
    [POWERPC] spufs: fix initial state of wbox file
    ...

    Manually resolved conflicts in:
    drivers/net/phy/Makefile
    include/asm-powerpc/spu.h

    Linus Torvalds
     

09 Jun, 2006

1 commit

  • This patch cleans up some locking & error handling in the ppc vdso and
    moves the vdso base pointer from the thread struct to the mm context
    where it more logically belongs. It brings the powerpc implementation
    closer to Ingo's new x86 one and also adds an arch_vma_name() function
    allowing to print [vsdo] in /proc//maps if Ingo's x86 vdso patch is
    also applied.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Paul Mackerras

    Benjamin Herrenschmidt
     

04 May, 2006

1 commit


25 Apr, 2006

1 commit


14 Jan, 2006

1 commit

  • The glibc folks want to use AT_PLATFORM to select between possible
    alternative versions of shared libraries. This commit makes the kernel
    supply an AT_PLATFORM string that indicates what class of processor
    we are running on. Processors with the same set of user-level
    instructions and roughly the same instruction scheduling characteristics
    are given the same AT_PLATFORM value; for example, 821, 823 and 860
    are all reported as "ppc823", and 7447, 7447A, 7448, 7450, 7451, 7455
    are all called "ppc7450".

    The intention is that the AT_PLATFORM values match the values that
    gcc accepts for the -mcpu= option. For values which are numeric
    (e.g. -mcpu=750), "ppc" has been prepended.

    This also adds a PPC_FEATURE_BOOKE bit to the AT_HWCAP value and sets
    it for the 440 family and the Freescale 85xx family.

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     

11 Jan, 2006

1 commit


09 Jan, 2006

1 commit

  • include/asm-ppc/ had #ifdef __KERNEL__ in all header files that
    are not meant for use by user space, include/asm-powerpc does
    not have this yet.

    This patch gets us a lot closer there. There are a few cases
    where I was not sure, so I left them out. I have verified
    that no CONFIG_* symbols are used outside of __KERNEL__
    any more and that there are no obvious compile errors when
    including any of the headers in user space libraries.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     

11 Nov, 2005

1 commit

  • This patch moves the vdso's to arch/powerpc, adds support for the 32
    bits vdso to the 32 bits kernel, rename systemcfg (finally !), and adds
    some new (still untested) routines to both vdso's: clock_gettime() with
    support for CLOCK_REALTIME and CLOCK_MONOTONIC, clock_getres() (same
    clocks) and get_tbfreq() for glibc to retreive the timebase frequency.

    Tom,Steve: The implementation of get_tbfreq() I've done for 32 bits
    returns a long long (r3, r4) not a long. This is such that if we ever
    add support for >4Ghz timebases on ppc32, the userland interface won't
    have to change.

    I have tested gettimeofday() using some glibc patches in both ppc32 and
    ppc64 kernels using 32 bits userland (I haven't had a chance to test a
    64 bits userland yet, but the implementation didn't change and was
    tested earlier). I haven't tested yet the new functions.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Paul Mackerras

    Benjamin Herrenschmidt
     

07 Nov, 2005

1 commit

  • Fix more include file problems that surfaced since I submitted the previous
    fix-missing-includes.patch. This should now allow not to include sched.h
    from module.h, which is done by a followup patch.

    Signed-off-by: Tim Schmielau
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tim Schmielau
     

04 Nov, 2005

1 commit

  • The merged verison of ELF_CORE_COPY_REGS is basically the PPC64 version, with
    a memset that came from PPC and a few types abstracted out into #defines. But
    it's not _quite_ right.

    The first problem is we calculate the number of registers with:
    nregs = sizeof(struct pt_regs) / sizeof(ELF_GREG_TYPE)

    For a 32-bit process on a 64-bit kernel that's bogus because the registers are
    64 bits, but ELF_GREG_TYPE is u32, so nregs == 88 which is wrong.

    The other problem is the memset, which assumes a struct pt_regs is smaller
    than a struct elf_regs. For a 32-bit process on a 64-bit kernel that's false.

    The fix is to calculate the number of regs using sizeof(unsigned long), which
    should always be right, and just memset the whole damn thing _before_ copying
    the registers in.

    Signed-off-by: Michael Ellerman

    Michael Ellerman
     

10 Oct, 2005

1 commit


28 Sep, 2005

1 commit


21 Sep, 2005

1 commit

  • ppc/ppc64: Merge elf.h into include/asm-powerpc

    Merge elf.h into a single include file for 32 and 64-bit ppc platforms. This
    patch has been tested on 32-bit and built on 64-bit platforms.

    Signed-off-by: Kumar Gala
    Signed-off-by: Becky Bruce
    Signed-off-by: Paul Mackerras

    Becky Bruce