[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 5/6] xen/x86: Avoid using local labels for UNLIKELY() regions
Using local labels causes the stack trace to use the last non-local label emitted by the compiler in the translation unit, which is almost always unrelated. e.g. A (contrived debug) example switches from: (XEN) ----[ Xen-4.7-unstable x86_64 debug=y Not tainted ]---- (XEN) CPU: 0 (XEN) RIP: e008:[<ffff82d0801961e2>] asm_domain_crash_synchronous+0x44/0x4c ... (XEN) Xen call trace: (XEN) [<ffff82d0801961e2>] asm_domain_crash_synchronous+0x44/0x4c (XEN) [<ffff82d080114bdf>] handle_keypress+0xa4/0xd9 to: (XEN) ----[ Xen-4.7-unstable x86_64 debug=y Not tainted ]---- (XEN) CPU: 0 (XEN) RIP: e008:[<ffff82d0801961e2>] unlikely.vmptrld.921+0/0x8 ... (XEN) Xen call trace: (XEN) [<ffff82d0801961e2>] unlikely.vmptrld.921+0/0x8 (XEN) [<ffff82d080114bdf>] handle_keypress+0xa4/0xd9 which is far more relevant when identifying %eip. Additionally, correct the inclusion of the tag parameter in the C UNLIKELY blocks, to use the passed tag, rather than a literal ".tag". Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> It is not obvious from the documentation whether an expansion of %= is unique to the current translation unit, or entire linked binary; I suspect the former. There are no duplicate symbols introduced by this change in my current compile, but I realise that this is hardly a guarantee. --- xen/include/asm-x86/asm_defns.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xen/include/asm-x86/asm_defns.h b/xen/include/asm-x86/asm_defns.h index 95ea21d..1028375 100644 --- a/xen/include/asm-x86/asm_defns.h +++ b/xen/include/asm-x86/asm_defns.h @@ -95,9 +95,9 @@ void ret_from_intr(void); #define UNLIKELY_START(cond, tag) \ .Ldispatch.tag: \ - j##cond .Lunlikely.tag; \ + j##cond unlikely.tag; \ .subsection 1; \ - .Lunlikely.tag: + unlikely.tag: #define UNLIKELY_DISPATCH_LABEL(tag) \ .Ldispatch.tag @@ -153,15 +153,15 @@ void ret_from_intr(void); #endif -#define UNLIKELY_START(cond, tag) \ - "j" #cond " .Lunlikely%=.tag;\n\t" \ - UNLIKELY_START_SECTION "\n" \ - ".Lunlikely%=.tag:" +#define UNLIKELY_START(cond, tag) \ + "j" #cond " unlikely." #tag ".%=;\n\t" \ + UNLIKELY_START_SECTION "\n" \ + "unlikely." #tag ".%=:" #define UNLIKELY_END(tag) \ - "jmp .Llikely%=.tag;\n\t" \ + "jmp .Llikely." #tag ".%=;\n\t" \ UNLIKELY_END_SECTION "\n" \ - ".Llikely%=.tag:" + ".Llikely." #tag ".%=:" #endif -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |