Messages in this thread Patch in this message | | | From | David Mosberger <> | Date | Fri, 23 Jan 2004 19:00:34 -0800 | Subject | Re: [patch] 2.6.1-mm5 compile do not use shared extable code for ia64 |
| |
>>>>> On Tue, 20 Jan 2004 09:00:04 -0800, Andrew Morton <akpm@osdl.org> said:
Andrew> Jes Sorensen <jes@trained-monkey.org> wrote: >> The new sort_extable and shares search_extable code doesn't work >> on ia64.
Andrew> hm, OK. It would be nice if ia64 could use the generic code Andrew> at some stage, of course.
How about something along these lines? If you want to standardize on a single instruction-address format, I'd strongly favor using the location-relative addresses used on Alpha and ia64 (it makes no sense to uses a full 64-bit address for those members).
--david
===== lib/extable.c 1.3 vs edited ===== --- 1.3/lib/extable.c Tue Jan 20 17:58:55 2004 +++ edited/lib/extable.c Fri Jan 23 18:10:10 2004 @@ -19,6 +19,12 @@ extern struct exception_table_entry __stop___ex_table[]; #ifndef ARCH_HAS_SORT_EXTABLE + +# ifndef exception_table_entry_insn + /* Return the instruction address to which exception tabl entry E applies. */ +# define exception_table_entry_insn(e) ((e)->insn) +# endif + /* * The exception table needs to be sorted so that the binary * search that we use to find entries in it works properly. @@ -33,7 +39,7 @@ /* insertion sort */ for (p = start + 1; p < finish; ++p) { /* start .. p-1 is sorted */ - if (p[0].insn < p[-1].insn) { + if (exception_table_entry_insn(&p[0]) < exception_table_entry_insn(&p[-1])) { /* move element p down to its right place */ el = *p; q = p; @@ -41,7 +47,8 @@ /* el comes before q[-1], move q[-1] up one */ q[0] = q[-1]; --q; - } while (q > start && el.insn < q[-1].insn); + } while (q > start && (exception_table_entry_insn(&el) + < exception_table_entry_insn(&q[-1]))); *q = el; } } ===== include/asm-ia64/uaccess.h 1.16 vs edited ===== --- 1.16/include/asm-ia64/uaccess.h Fri Jan 23 16:43:32 2004 +++ edited/include/asm-ia64/uaccess.h Fri Jan 23 18:06:38 2004 @@ -283,13 +283,18 @@ __su_ret; \ }) -#define ARCH_HAS_SORT_EXTABLE #define ARCH_HAS_SEARCH_EXTABLE struct exception_table_entry { - int addr; /* gp-relative address of insn this fixup is for */ - int cont; /* gp-relative continuation address; if bit 2 is set, r9 is set to 0 */ + int addr; /* loc-relative address of insn this fixup is for */ + int cont; /* loc-relative continuation address; if bit 2 is set, r9 is set to 0 */ }; + +#define exception_table_entry_insn(e) \ +({ \ + const struct exception_table_entry *_etei_e = (e); \ + (u64) &(_etei_e)->addr + (_etei_e)->addr; \ +}) extern void handle_exception (struct pt_regs *regs, const struct exception_table_entry *e); extern const struct exception_table_entry *search_exception_tables (unsigned long addr); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |