This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
I haven't heard any feedbacks about my proposal for the libgcc runtime ABI: http://gcc.gnu.org/ml/gcc-bugs/2000-07/msg00117.html But I think the current situation is quite broken. In glibc, we have --- /* This must match what's in frame.h in gcc. How can one do that? */ struct object { void *pc_begin; void *pc_end; void *fde_begin; void *fde_array; __SIZE_TYPE__ count; struct object *next; }; --- in elf/soinit.c. In gcc, we have --- /* This must match what's in frame.h. */ fprintf (stream, "struct object {\n"); fprintf (stream, " void *pc_begin;\n"); fprintf (stream, " void *pc_end;\n"); fprintf (stream, " void *fde_begin;\n"); fprintf (stream, " void *fde_array;\n"); fprintf (stream, " __SIZE_TYPE__ count;\n"); fprintf (stream, " struct object *next;\n"); fprintf (stream, "};\n"); --- in gcc/collect2.c. However, in gcc/frame.h, there are struct object { #ifdef IA64_UNWIND_INFO void *pc_base; /* This field will be set by find_fde. */ #endif void *pc_begin; void *pc_end; struct dwarf_fde *fde_begin; #ifdef IA64_UNWIND_INFO struct dwarf_fde *fde_end; #endif struct dwarf_fde **fde_array; size_t count; struct object *next; }; So as of today, the ia64 gcc/glibc are broken due to the mismatch in struct object. My libgcc runtime ABI proposal will fix it as well as lead to a fix for the original problem. It means gcc can change the implementation of ---runtime.h--- #ifndef __RUNTIME_H #define __RUNTIME_H 1 struct frame_object { /* It should be large enough for future expansion. */ void * dummy [16]; }; /* Note the following routines are exported interfaces from libgcc; do not change these interfaces. Instead create new interfaces. Also note references to these functions may be made weak in files where they are referenced. */ extern void __register_frame (void * ); extern void __register_frame_table (void *); extern void __deregister_frame (void *); /* Called either from crtbegin.o or a static constructor to register the unwind info for an object or translation unit, respectively. */ extern void __register_frame_info (void *, struct frame_object *); /* Similar, but BEGIN is actually a pointer to a table of unwind entries for different translation units. Called from the file generated by collect2. */ extern void __register_frame_info_table (void *, struct frame_object *); /* Called from crtend.o to deregister the unwind info for an object. */ extern void *__deregister_frame_info (void *); #endif /* __RUNTIME_H */ --- as long as we don't change the ABI defined in runtime.h. Thanks. -- H.J. Lu (hjl@gnu.org)
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |