[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/4] xen/virtual-region: Rework how bugframe linkage works
On 18.03.2024 12:04, Andrew Cooper wrote: > The start/stop1/etc linkage scheme predates struct virtual_region, and as > setup_virtual_regions() shows, it's awkward to express in the new scheme. > > Change the linker to provide explicit start/stop symbols for each bugframe > type, and change virtual_region to have a stop pointer rather than a count. > > This marginly simplifies both do_bug_frame()s and prepare_payload(), but it > massively simplifies setup_virtual_regions() by allowing the compiler to > initialise the .frame[] array at build time. > > virtual_region.c is the only user of the linker symbols, and this is unlikely > to change given the purpose of struct virtual_region, so move their externs > out of bug.h > > No functional change. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Of course ... > --- a/xen/common/virtual_region.c > +++ b/xen/common/virtual_region.c > @@ -9,12 +9,25 @@ > #include <xen/spinlock.h> > #include <xen/virtual_region.h> > > +extern const struct bug_frame > + __start_bug_frames_0[], __stop_bug_frames_0[], > + __start_bug_frames_1[], __stop_bug_frames_1[], > + __start_bug_frames_2[], __stop_bug_frames_2[], > + __start_bug_frames_3[], __stop_bug_frames_3[]; > + > static struct virtual_region core = { > .list = LIST_HEAD_INIT(core.list), > .text_start = _stext, > .text_end = _etext, > .rodata_start = _srodata, > .rodata_end = _erodata, > + > + .frame = { > + { __start_bug_frames_0, __stop_bug_frames_0 }, > + { __start_bug_frames_1, __stop_bug_frames_1 }, > + { __start_bug_frames_2, __stop_bug_frames_2 }, > + { __start_bug_frames_3, __stop_bug_frames_3 }, > + }, > }; > > /* Becomes irrelevant when __init sections are cleared. */ > @@ -22,6 +35,13 @@ static struct virtual_region core_init __initdata = { > .list = LIST_HEAD_INIT(core_init.list), > .text_start = _sinittext, > .text_end = _einittext, > + > + .frame = { > + { __start_bug_frames_0, __stop_bug_frames_0 }, > + { __start_bug_frames_1, __stop_bug_frames_1 }, > + { __start_bug_frames_2, __stop_bug_frames_2 }, > + { __start_bug_frames_3, __stop_bug_frames_3 }, > + }, > }; ... this is now calling yet louder for splitting runtime from init bug frame records. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |