From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: RFA: allocate regsets on gdbarch obstack Date: Thu, 20 May 2004 06:58:00 -0000 Message-id: X-SW-Source: 2004-05/msg00601.html 2004-05-20 Jim Blandy Allocate regset structures in the gdbarch's obstack, not using xmalloc. * regset.c (regset_obstack_alloc): Renamed from regset_xmalloc. Add 'arch' argument. Allocate the regset on arch's obstack, not using xmalloc. * regset.h (regset_obstack_alloc): Update declaration. * am64-tdep.c (amd64_regset_from_core_section): Update call; pass gdbarch argument. * amd64obsd-tdep.c (amd64obsd_regset_from_core_section): Same. * i386-tdep.c (i386_regset_from_core_section): Same. * i386nbsd-tdep.c (i386nbsd_aout_regset_from_core_section): Same. * i386obsd-tdep.c (i386obsd_aout_regset_from_core_section): Same. * sparc64fbsd-tdep.c (sparc64fbsd_init_abi): Same. * sparc64nbsd-tdep.c (sparc64nbsd_init_abi): Same. * sparc64obsd-tdep.c (sparc64obsd_init_abi): Same. * sparcnbsd-tdep.c (sparc32nbsd_init_abi): Same. Index: gdb/regset.h =================================================================== RCS file: /cvs/src/src/gdb/regset.h,v retrieving revision 1.2 diff -c -p -r1.2 regset.h *** gdb/regset.h 20 May 2004 00:53:06 -0000 1.2 --- gdb/regset.h 20 May 2004 05:19:23 -0000 *************** struct regset *** 51,60 **** function is COLLECT_REGSET. If the regset has no collect function, pass NULL for COLLECT_REGSET. ! The object returned is allocated using xmalloc. */ ! extern struct regset *regset_xmalloc (void *descr, ! supply_regset_ftype *supply_regset, ! collect_regset_ftype *collect_regset); #endif /* regset.h */ --- 51,62 ---- function is COLLECT_REGSET. If the regset has no collect function, pass NULL for COLLECT_REGSET. ! The object returned is allocated on ARCH's obstack. */ ! extern struct regset *(regset_obstack_alloc ! (struct gdbarch *arch, ! void *descr, ! supply_regset_ftype *supply_regset, ! collect_regset_ftype *collect_regset)); #endif /* regset.h */ Index: gdb/regset.c =================================================================== RCS file: /cvs/src/src/gdb/regset.c,v retrieving revision 1.1 diff -c -p -r1.1 regset.c *** gdb/regset.c 20 May 2004 00:53:06 -0000 1.1 --- gdb/regset.c 20 May 2004 05:19:23 -0000 *************** *** 25,35 **** struct regset * ! regset_xmalloc (void *descr, ! supply_regset_ftype *supply_regset, ! collect_regset_ftype *collect_regset) { ! struct regset *r = (struct regset *) xmalloc (sizeof (*r)); r->descr = descr; r->supply_regset = supply_regset; --- 25,37 ---- struct regset * ! regset_obstack_alloc (struct gdbarch *arch, ! void *descr, ! supply_regset_ftype *supply_regset, ! collect_regset_ftype *collect_regset) { ! struct regset *r ! = (struct regset *) gdbarch_obstack_zalloc (arch, sizeof (*r)); r->descr = descr; r->supply_regset = supply_regset; Index: gdb/amd64-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/amd64-tdep.c,v retrieving revision 1.11 diff -c -p -r1.11 amd64-tdep.c *** gdb/amd64-tdep.c 20 May 2004 00:53:06 -0000 1.11 --- gdb/amd64-tdep.c 20 May 2004 05:19:21 -0000 *************** amd64_regset_from_core_section (struct g *** 1074,1080 **** if (strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset) { if (tdep->fpregset == NULL) ! tdep->fpregset = regset_xmalloc (tdep, amd64_supply_fpregset, NULL); return tdep->fpregset; } --- 1074,1081 ---- if (strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset) { if (tdep->fpregset == NULL) ! tdep->fpregset ! = regset_obstack_alloc (gdbarch, tdep, amd64_supply_fpregset, NULL); return tdep->fpregset; } Index: gdb/amd64obsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/amd64obsd-tdep.c,v retrieving revision 1.11 diff -c -p -r1.11 amd64obsd-tdep.c *** gdb/amd64obsd-tdep.c 20 May 2004 00:53:06 -0000 1.11 --- gdb/amd64obsd-tdep.c 20 May 2004 05:19:21 -0000 *************** amd64obsd_regset_from_core_section (stru *** 63,69 **** && sect_size >= tdep->sizeof_gregset + I387_SIZEOF_FXSAVE) { if (tdep->gregset == NULL) ! tdep->gregset = regset_xmalloc (tdep, amd64obsd_supply_regset, NULL); return tdep->gregset; } --- 63,70 ---- && sect_size >= tdep->sizeof_gregset + I387_SIZEOF_FXSAVE) { if (tdep->gregset == NULL) ! tdep->gregset = regset_obstack_alloc (gdbarch, tdep, ! amd64obsd_supply_regset, NULL); return tdep->gregset; } Index: gdb/i386-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386-tdep.c,v retrieving revision 1.192 diff -c -p -r1.192 i386-tdep.c *** gdb/i386-tdep.c 20 May 2004 00:53:06 -0000 1.192 --- gdb/i386-tdep.c 20 May 2004 05:19:22 -0000 *************** i386_regset_from_core_section (struct gd *** 1662,1668 **** if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset) { if (tdep->gregset == NULL) ! tdep->gregset = regset_xmalloc (tdep, i386_supply_gregset, NULL); return tdep->gregset; } --- 1662,1669 ---- if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset) { if (tdep->gregset == NULL) ! tdep->gregset = regset_obstack_alloc (gdbarch, tdep, ! i386_supply_gregset, NULL); return tdep->gregset; } *************** i386_regset_from_core_section (struct gd *** 1671,1677 **** && sect_size == I387_SIZEOF_FXSAVE)) { if (tdep->fpregset == NULL) ! tdep->fpregset = regset_xmalloc (tdep, i386_supply_fpregset, NULL); return tdep->fpregset; } --- 1672,1679 ---- && sect_size == I387_SIZEOF_FXSAVE)) { if (tdep->fpregset == NULL) ! tdep->fpregset = regset_obstack_alloc (gdbarch, tdep, ! i386_supply_fpregset, NULL); return tdep->fpregset; } Index: gdb/i386nbsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386nbsd-tdep.c,v retrieving revision 1.25 diff -c -p -r1.25 i386nbsd-tdep.c *** gdb/i386nbsd-tdep.c 20 May 2004 00:53:06 -0000 1.25 --- gdb/i386nbsd-tdep.c 20 May 2004 05:19:22 -0000 *************** i386nbsd_aout_regset_from_core_section ( *** 87,93 **** { if (tdep->gregset == NULL) tdep->gregset ! = regset_xmalloc (tdep, i386nbsd_aout_supply_regset, NULL); return tdep->gregset; } --- 87,94 ---- { if (tdep->gregset == NULL) tdep->gregset ! = regset_obstack_alloc (gdbarch, tdep, ! i386nbsd_aout_supply_regset, NULL); return tdep->gregset; } Index: gdb/i386obsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386obsd-tdep.c,v retrieving revision 1.16 diff -c -p -r1.16 i386obsd-tdep.c *** gdb/i386obsd-tdep.c 20 May 2004 00:53:06 -0000 1.16 --- gdb/i386obsd-tdep.c 20 May 2004 05:19:23 -0000 *************** i386obsd_aout_regset_from_core_section ( *** 142,148 **** { if (tdep->gregset == NULL) tdep->gregset ! = regset_xmalloc (tdep, i386obsd_aout_supply_regset, NULL); return tdep->gregset; } --- 142,149 ---- { if (tdep->gregset == NULL) tdep->gregset ! = regset_obstack_alloc (gdbarch, tdep, ! i386obsd_aout_supply_regset, NULL); return tdep->gregset; } Index: gdb/sparc64fbsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/sparc64fbsd-tdep.c,v retrieving revision 1.7 diff -c -p -r1.7 sparc64fbsd-tdep.c *** gdb/sparc64fbsd-tdep.c 20 May 2004 00:53:06 -0000 1.7 --- gdb/sparc64fbsd-tdep.c 20 May 2004 05:19:23 -0000 *************** sparc64fbsd_init_abi (struct gdbarch_inf *** 200,209 **** struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset ! = regset_xmalloc (&sparc64fbsd_gregset, sparc64fbsd_supply_gregset, NULL); tdep->sizeof_gregset = 256; ! tdep->fpregset = regset_xmalloc (NULL, sparc64fbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 272; frame_unwind_append_sniffer (gdbarch, sparc64fbsd_sigtramp_frame_sniffer); --- 200,211 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset ! = regset_obstack_alloc (gdbarch, &sparc64fbsd_gregset, ! sparc64fbsd_supply_gregset, NULL); tdep->sizeof_gregset = 256; ! tdep->fpregset = regset_obstack_alloc (gdbarch, NULL, ! sparc64fbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 272; frame_unwind_append_sniffer (gdbarch, sparc64fbsd_sigtramp_frame_sniffer); Index: gdb/sparc64nbsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/sparc64nbsd-tdep.c,v retrieving revision 1.8 diff -c -p -r1.8 sparc64nbsd-tdep.c *** gdb/sparc64nbsd-tdep.c 20 May 2004 00:53:06 -0000 1.8 --- gdb/sparc64nbsd-tdep.c 20 May 2004 05:19:23 -0000 *************** sparc64nbsd_init_abi (struct gdbarch_inf *** 227,236 **** struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset ! = regset_xmalloc (&sparc64nbsd_gregset, sparc64nbsd_supply_gregset, NULL); tdep->sizeof_gregset = 160; ! tdep->fpregset = regset_xmalloc (NULL, sparc64nbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 272; frame_unwind_append_sniffer (gdbarch, sparc64nbsd_sigtramp_frame_sniffer); --- 227,238 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->gregset ! = regset_obstack_alloc (gdbarch, &sparc64nbsd_gregset, ! sparc64nbsd_supply_gregset, NULL); tdep->sizeof_gregset = 160; ! tdep->fpregset = regset_obstack_alloc (gdbarch, NULL, ! sparc64nbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 272; frame_unwind_append_sniffer (gdbarch, sparc64nbsd_sigtramp_frame_sniffer); Index: gdb/sparc64obsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/sparc64obsd-tdep.c,v retrieving revision 1.4 diff -c -p -r1.4 sparc64obsd-tdep.c *** gdb/sparc64obsd-tdep.c 20 May 2004 00:53:06 -0000 1.4 --- gdb/sparc64obsd-tdep.c 20 May 2004 05:19:23 -0000 *************** sparc64obsd_init_abi (struct gdbarch_inf *** 184,192 **** { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ! tdep->gregset = regset_xmalloc (&sparc64obsd_core_gregset, ! sparc64obsd_supply_gregset, ! NULL); tdep->sizeof_gregset = 832; frame_unwind_append_sniffer (gdbarch, sparc64obsd_sigtramp_frame_sniffer); --- 184,193 ---- { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ! tdep->gregset = regset_obstack_alloc (gdbarch, ! &sparc64obsd_core_gregset, ! sparc64obsd_supply_gregset, ! NULL); tdep->sizeof_gregset = 832; frame_unwind_append_sniffer (gdbarch, sparc64obsd_sigtramp_frame_sniffer); Index: gdb/sparcnbsd-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/sparcnbsd-tdep.c,v retrieving revision 1.19 diff -c -p -r1.19 sparcnbsd-tdep.c *** gdb/sparcnbsd-tdep.c 20 May 2004 00:53:06 -0000 1.19 --- gdb/sparcnbsd-tdep.c 20 May 2004 05:19:23 -0000 *************** sparc32nbsd_init_abi (struct gdbarch_inf *** 275,284 **** set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big); tdep->gregset ! = regset_xmalloc (&sparc32nbsd_gregset, sparc32nbsd_supply_gregset, NULL); tdep->sizeof_gregset = 20 * 4; ! tdep->fpregset = regset_xmalloc (NULL, sparc32nbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 33 * 4; frame_unwind_append_sniffer (gdbarch, sparc32nbsd_sigtramp_frame_sniffer); --- 275,286 ---- set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big); tdep->gregset ! = regset_obstack_alloc (gdbarch, &sparc32nbsd_gregset, ! sparc32nbsd_supply_gregset, NULL); tdep->sizeof_gregset = 20 * 4; ! tdep->fpregset = regset_obstack_alloc (gdbarch, NULL, ! sparc32nbsd_supply_fpregset, NULL); tdep->sizeof_fpregset = 33 * 4; frame_unwind_append_sniffer (gdbarch, sparc32nbsd_sigtramp_frame_sniffer);