This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] Re: [POWERPC/IA64] Updates required due to loader changes

To: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
Subject: [Xen-devel] Re: [POWERPC/IA64] Updates required due to loader changes
From: Horms <horms@xxxxxxxxxxxx>
Date: Thu, 24 Aug 2006 17:11:03 +0900
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Tue, 29 Aug 2006 01:58:31 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1156403522.19808.81.camel@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20060824021712.09FA73403E@xxxxxxxxxxxxxxxxx> <1156403522.19808.81.camel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: mutt-ng/devel-r804 (Debian)
On Thu, Aug 24, 2006 at 08:12:02AM +0100, Ian Campbell wrote:
> On Thu, 2006-08-24 at 11:17 +0900, Horms wrote:
> > Sorry for being so naieve, but where is the staging tree?
> It's an internal tree which gets regression tested and then copied
> automatically to the public xen-unstable tree.
> The code in question is in the xen-unstable tree now.
> > I included elf notes infastructure in the kexec patches that I have
> > posted to this list serveral times. It sounds like there is probably
> > some infastructure overlap. I'd like to take a look at what you have
> > done to see if it fits the needs of kexec so we can avoid code duplication.
> I didn't know you guys had ELF infrastructure in the kexec patches, I
> hope my stuff is useful for you...

Hi Ian,

I took a look over the changes, and unforunately there doesn't seem
to be much overlap. This is for two main reasons:

  1. kexec is mainly concerned with crash notes, rather than
     generic notes (I was a bit confused when I read your original post).

  2. kexec creates these notes from within the hypervisor,
     but I beleive that your code has linux create the notes,
     while the hypervisor just reads them.

I'd really appreciate it if you could take a moment to cast your eyes
over my elf code. 

Below is the x86 code to fill in the crash notes, and below that
is include/xen/elfcore.h. This comprises the bulk of the elf code
that I have. I can come up with a full patch if you are interested.

The x86 fill-in code was basically copied from i386 linux kexec,
if there is room for improvement there, then its probably something
that also wants fixing in Linux.

The include/xen/elfcore.h. portion is based on linux, translated
to the xen style of elf code - which apparently does not have
the same origin as the linux code. I'd appreciate feedback on
the style here.

  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/

=== begin x86 fill-in snippet ===
static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
                                                               size_t data_len)
        Elf_Note note;

        note.namesz = strlen(name) + 1;
        note.descsz = data_len;
        note.type   = type;
        memcpy(buf, &note, sizeof(note));
        buf += (sizeof(note) +3)/4;
        memcpy(buf, name, note.namesz);
        buf += (note.namesz + 3)/4;
        memcpy(buf, data, note.descsz);
        buf += (note.descsz + 3)/4;

        return buf;

static void final_note(u32 *buf)
        Elf_Note note;

        note.namesz = 0;
        note.descsz = 0;
        note.type   = 0;
        memcpy(buf, &note, sizeof(note));
=== end x86 fill-in snippet ===

=== begin include/xen/elfcore.h ===
 * include/xen/elfcore.h
 * Created By: Horms
 * Based heavily on include/linux/elfcore.h from Linux 2.6.16
 * Naming scheeme based on include/xen/elf.h (not include/linux/elfcore.h)

#ifndef __ELFCOREC_H__
#define __ELFCOREC_H__

#include <xen/types.h>
#include <xen/elf.h>
#include <public/xen.h>

#define NT_PRSTATUS     1
#define NT_XEN_DOM0_CR3 0x10000001 /* XXX: Hopefully this is unused,
                                           feel free to change to a 
                                           better/different value */

typedef struct
    int signo;                       /* signal number */
    int code;                        /* extra code */
    int errno;                       /* errno */
} ELF_Signifo;

/* These seem to be the same length on all architectures on Linux */
typedef int ELF_Pid;
typedef struct {
        long tv_sec;
        long tv_usec;
} ELF_Timeval;
typedef unsigned long ELF_Greg;
#define ELF_NGREG (sizeof (struct cpu_user_regs) / sizeof(ELF_Greg))
typedef ELF_Greg ELF_Gregset[ELF_NGREG];

 * Definitions to generate Intel SVR4-like core files.
 * These mostly have the same names as the SVR4 types with "elf_"
 * tacked on the front to prevent clashes with linux definitions,
 * and the typedef forms have been avoided.  This is mostly like
 * the SVR4 structure, but more Linuxy, with things that Linux does
 * not support and which gdb doesn't really use excluded.
typedef struct
    ELF_Signifo pr_info;         /* Info associated with signal */
    short pr_cursig;             /* Current signal */
    unsigned long pr_sigpend;    /* Set of pending signals */
    unsigned long pr_sighold;    /* Set of held signals */
    ELF_Pid pr_pid;
    ELF_Pid pr_ppid;
    ELF_Pid pr_pgrp;
    ELF_Pid pr_sid;
    ELF_Timeval pr_utime;        /* User time */
    ELF_Timeval pr_stime;        /* System time */
    ELF_Timeval pr_cutime;       /* Cumulative user time */
    ELF_Timeval pr_cstime;       /* Cumulative system time */
    ELF_Gregset pr_reg;          /* GP registers */
    int pr_fpvalid;              /* True if math co-processor being used.  */
} ELF_Prstatus;

#endif /* __ELFCOREC_H__ */

 * Local variables:
 * mode: C
 * c-set-style: "BSD"
 * c-basic-offset: 4
 * tab-width: 4
 * indent-tabs-mode: nil
 * End:
=== end include/xen/elfcore.h ===

Xen-devel mailing list