better unwinding for 386.
command-line extraction from core files on linux and freebsd. move linux ureg into ureg386.h (used in many places).
This commit is contained in:
parent
cdf1805191
commit
1cc215aaf9
13 changed files with 495 additions and 109 deletions
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
typedef struct Lreg Lreg;
|
||||
typedef struct Status Status;
|
||||
typedef struct Psinfo Psinfo;
|
||||
|
||||
struct Lreg
|
||||
{
|
||||
|
|
@ -32,14 +33,22 @@ struct Lreg
|
|||
|
||||
struct Status
|
||||
{
|
||||
u32int version; /* Version number of struct (1) */
|
||||
u32int statussz; /* sizeof(prstatus_t) (1) */
|
||||
u32int gregsetsz; /* sizeof(gregset_t) (1) */
|
||||
u32int fpregsetsz; /* sizeof(fpregset_t) (1) */
|
||||
u32int osreldate; /* Kernel version (1) */
|
||||
u32int cursig; /* Current signal (1) */
|
||||
u32int pid; /* Process ID (1) */
|
||||
Lreg reg; /* General purpose registers (1) */
|
||||
u32int version; /* Version number of struct (1) */
|
||||
u32int statussz; /* sizeof(prstatus_t) (1) */
|
||||
u32int gregsetsz; /* sizeof(gregset_t) (1) */
|
||||
u32int fpregsetsz; /* sizeof(fpregset_t) (1) */
|
||||
u32int osreldate; /* Kernel version (1) */
|
||||
u32int cursig; /* Current signal (1) */
|
||||
u32int pid; /* Process ID (1) */
|
||||
Lreg reg; /* General purpose registers (1) */
|
||||
};
|
||||
|
||||
struct Psinfo
|
||||
{
|
||||
u32int version;
|
||||
u32int size;
|
||||
char name[17];
|
||||
char psargs[81];
|
||||
};
|
||||
|
||||
int
|
||||
|
|
@ -87,3 +96,25 @@ coreregsfreebsd386(Elf *elf, ElfNote *note, uchar **up)
|
|||
return sizeof(Ureg);
|
||||
}
|
||||
|
||||
int
|
||||
corecmdfreebsd386(Elf *elf, ElfNote *note, char **pp)
|
||||
{
|
||||
char *t;
|
||||
Psinfo *p;
|
||||
|
||||
*pp = nil;
|
||||
if(note->descsz < sizeof(Psinfo)){
|
||||
werrstr("elf psinfo note too small");
|
||||
return -1;
|
||||
}
|
||||
p = (Psinfo*)note->desc;
|
||||
print("elf name %s\nelf args %s\n", p->name, p->psargs);
|
||||
t = malloc(80+1);
|
||||
if(t == nil)
|
||||
return -1;
|
||||
memmove(t, p->psargs, 80);
|
||||
t[80] = 0;
|
||||
*pp = t;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue