* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 #include <linux/file.h>
+#include <linux/fs.h>
 #include <linux/module.h>
 #include <linux/syscalls.h>
 #include <linux/rcupdate.h>
        return ret;
 }
 
-int arch_notes_size(void)
+int elf_coredump_extra_notes_size(void)
 {
        struct spufs_calls *calls;
        int ret;
        return ret;
 }
 
-void arch_write_notes(struct file *file)
+int elf_coredump_extra_notes_write(struct file *file, loff_t *foffset)
 {
        struct spufs_calls *calls;
 
        calls = spufs_calls_get();
        if (!calls)
-               return;
+               return 0;
 
        calls->coredump_extra_notes_write(file);
 
        spufs_calls_put(calls);
+
+       /* Fudge foffset for now */
+       *foffset = file->f_pos;
+
+       return 0;
 }
 
 int register_spu_syscalls(struct spufs_calls *calls)
 
        int thread_status_size = 0;
        elf_addr_t *auxv;
        unsigned long mm_flags;
-#ifdef ELF_CORE_WRITE_EXTRA_NOTES
-       int extra_notes_size;
-#endif
 
        /*
         * We no longer stop all VM operations.
                
                sz += thread_status_size;
 
-#ifdef ELF_CORE_WRITE_EXTRA_NOTES
-               extra_notes_size = ELF_CORE_EXTRA_NOTES_SIZE;
-               sz += extra_notes_size;
-#endif
+               sz += elf_coredump_extra_notes_size();
 
                fill_elf_note_phdr(&phdr, sz, offset);
                offset += sz;
                if (!writenote(notes + i, file, &foffset))
                        goto end_coredump;
 
-#ifdef ELF_CORE_WRITE_EXTRA_NOTES
-       ELF_CORE_WRITE_EXTRA_NOTES;
-       foffset += extra_notes_size;
-#endif
+       if (elf_coredump_extra_notes_write(file, &foffset))
+               goto end_coredump;
 
        /* write out the thread status notes section */
        list_for_each(t, &thread_list) {
 
 /* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */
 #define NT_SPU         1
 
-extern int arch_notes_size(void);
-extern void arch_write_notes(struct file *file);
-
-#define ELF_CORE_EXTRA_NOTES_SIZE arch_notes_size()
-#define ELF_CORE_WRITE_EXTRA_NOTES arch_write_notes(file)
-
 #define ARCH_HAVE_EXTRA_ELF_NOTES
-#endif /* CONFIG_PPC_CELL */
+
+#endif /* CONFIG_SPU_BASE */
 
 #endif /* _ASM_POWERPC_ELF_H */
 
 
 #endif
 
+/* Optional callbacks to write extra ELF notes. */
 #ifndef ARCH_HAVE_EXTRA_ELF_NOTES
-static inline int arch_notes_size(void) { return 0; }
-static inline void arch_write_notes(struct file *file) { }
-
-#define ELF_CORE_EXTRA_NOTES_SIZE arch_notes_size()
-#define ELF_CORE_WRITE_EXTRA_NOTES arch_write_notes(file)
-#endif /* ARCH_HAVE_EXTRA_ELF_NOTES */
+static inline int elf_coredump_extra_notes_size(void) { return 0; }
+static inline int elf_coredump_extra_notes_write(struct file *file,
+                       loff_t *foffset) { return 0; }
+#else
+extern int elf_coredump_extra_notes_size(void);
+extern int elf_coredump_extra_notes_write(struct file *file, loff_t *foffset);
+#endif
 
 #endif /* _LINUX_ELF_H */