Error:glibc-2.1.3 :Question about 'struct sigcontext'
kim sook young
icekim at sec.samsung.co.kr
Mon Apr 24 21:12:04 EST 2000
hi, all
While compiling glibc-2.1.3 with gcc-2.95.2 , I met error like the following
(as you know, I had already posted this error)
---------------------------------------------------------------
../sysdeps/unix/sysv/linux/i386/profil-counter.h: In function `profil_counter':
../sysdeps/unix/sysv/linux/i386/profil-counter.h:26: structure has no member named `regs'
../sysdeps/posix/profil.c:39: warning: inlining failed in call to `profil_count'
../sysdeps/unix/sysv/linux/i386/profil-counter.h:26: warning: called from here
make[2]: *** [/home/icekim/Cross-Compiler/Glibc/glibc-2.1.3/build/gmon/profil.o] Error 1
make[2]: Leaving directory `/home/icekim/Cross-Compiler/Glibc/glibc-2.1.3/gmon'
make[1]: *** [gmon/subdir_lib] Error 2
----------------------------------------------------------------------
I thought header files would probably cause a problem. While tracing header files, I found a problem.
the following is sigcontext.h
-------------------------------------------------------------
struct sigcontext {
unsigned short gs, __gsh;
unsigned short fs, __fsh;
unsigned short es, __esh;
unsigned short ds, __dsh;
unsigned long edi;
unsigned long esi;
unsigned long ebp;
unsigned long esp;
unsigned long ebx;
unsigned long edx;
unsigned long ecx;
unsigned long eax;
unsigned long trapno;
unsigned long err;
unsigned long eip;
unsigned short cs, __csh;
unsigned long eflags;
unsigned long esp_at_signal;
unsigned short ss, __ssh;
struct _fpstate * fpstate;
unsigned long oldmask;
unsigned long cr2;
};
----------------------------------------------------------------------------
Like the above error message, struct sigcontext in the above sigcontext.h has no 'member named `regs' .
Even though this problem might be solved in the process of the compilation ( indeed, this error passed with my clumsy trick), it also occurred while compiling segfault.c like the following...
-----------------------------------------------------------------------------
powerpc-linux-gcc ../sysdeps/generic/segfault.c -c -O -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -fpic -I../include -I. -I/home/icekim/glibc-2.1.3/build/debug -I.. -I../libio -I/home/icekim/glibc-2.1.3/build -I../sysdeps/powerpc/elf -I../crypt/sysdeps/unix -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/powerpc -I../sysdeps/unix/sysv/linux/powerpc -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/powerpc -I../sysdeps/wordsize-32 -I../sysdeps/ieee754 -I../sysdeps/libm-ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /usr/local/lib/gcc-lib/powerpc-linux/2.95.2/include -isystem /usr/src/linux/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -o /home/icekim/gli!
bc-2.1.3/build/debug/segfault.os
In file included from ../sysdeps/generic/segfault.c:41:
../sysdeps/powerpc/register-dump.h: In function `register_dump':
../sysdeps/powerpc/register-dump.h:106: structure has no member named `regs'
make[2]: *** [/home/icekim/glibc-2.1.3/build/debug/segfault.os] Error 1
make[2]: Leaving directory `/home/icekim/glibc-2.1.3/debug'
make[1]: *** [debug/others] Error 2
make[1]: Leaving directory `/home/icekim/glibc-2.1.3'
make: *** [all] Error 2
-----------------------------------------------------------------------------
In this case I could avoid this error because function register_dump() in register-dump.h uses 'regs' like the below.
-----------------------------------------------------------------------------
static void
register_dump (int fd, struct sigcontext *ctx)
{
char buffer[sizeof(dumpform)];
char *bufferpos;
unsigned regno;
unsigned *regs = (unsigned *)(ctx->regs);
memcpy(buffer, dumpform, sizeof(dumpform));
/* Generate the output. */
while ((bufferpos = memchr (buffer, '%', sizeof(dumpform))))
{
regno = xtoi (bufferpos[-1]) | xtoi (bufferpos[-2]) << 4;
memset (bufferpos-2, '0', 3);
_itoa_word (regs[regno], bufferpos+1, 16, 0);
}
/* Write the output. */
write (fd, buffer, sizeof(buffer));
}
-----------------------------------------------------------------------------
In fact, I don't understand what all members of struct sigcontext mean. I don't know how to solve this problem. I hope somebody would help me.
e-mail: icekim at sec.samsung.co.kr
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list