Commit 69505e3d authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Peter Zijlstra
Browse files

bug: Use normal relative pointers in 'struct bug_entry'



With CONFIG_GENERIC_BUG_RELATIVE_POINTERS, the addr/file relative
pointers are calculated weirdly: based on the beginning of the bug_entry
struct address, rather than their respective pointer addresses.

Make the relative pointers less surprising to both humans and tools by
calculating them the normal way.

Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Sven Schnelle <svens@linux.ibm.com> # s390
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com> [arm64]
Link: https://lkml.kernel.org/r/f0e05be797a16f4fc2401eeb88c8450dcbe61df6.1652362951.git.jpoimboe@kernel.org
parent a7fed5c0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
	14472:	.string file;					\
		.popsection;					\
								\
		.long 14472b - 14470b;				\
		.long 14472b - .;				\
		.short line;
#else
#define _BUGVERBOSE_LOCATION(file, line)
@@ -25,7 +25,7 @@
#define __BUG_ENTRY(flags) 				\
		.pushsection __bug_table,"aw";		\
		.align 2;				\
	14470:	.long 14471f - 14470b;			\
	14470:	.long 14471f - .;			\
_BUGVERBOSE_LOCATION(__FILE__, __LINE__)		\
		.short flags; 				\
		.popsection;				\
+8 −6
Original line number Diff line number Diff line
@@ -13,7 +13,8 @@
#ifdef CONFIG_DEBUG_BUGVERBOSE
.macro __EMIT_BUG_ENTRY addr,file,line,flags
	 .section __bug_table,"aw"
5001:	 .4byte \addr - 5001b, 5002f - 5001b
5001:	 .4byte \addr - .
	 .4byte 5002f - .
	 .short \line, \flags
	 .org 5001b+BUG_ENTRY_SIZE
	 .previous
@@ -24,7 +25,7 @@
#else
.macro __EMIT_BUG_ENTRY addr,file,line,flags
	 .section __bug_table,"aw"
5001:	 .4byte \addr - 5001b
5001:	 .4byte \addr - .
	 .short \flags
	 .org 5001b+BUG_ENTRY_SIZE
	 .previous
@@ -49,15 +50,16 @@
#ifdef CONFIG_DEBUG_BUGVERBOSE
#define _EMIT_BUG_ENTRY				\
	".section __bug_table,\"aw\"\n"		\
	"2:\t.4byte 1b - 2b, %0 - 2b\n"		\
	"\t.short %1, %2\n"			\
	"2:	.4byte 1b - .\n"		\
	"	.4byte %0 - .\n"		\
	"	.short %1, %2\n"		\
	".org 2b+%3\n"				\
	".previous\n"
#else
#define _EMIT_BUG_ENTRY				\
	".section __bug_table,\"aw\"\n"		\
	"2:\t.4byte 1b - 2b\n"			\
	"\t.short %2\n"				\
	"2:	.4byte 1b - .\n"		\
	"	.short %2\n"			\
	".org 2b+%3\n"				\
	".previous\n"
#endif
+2 −2
Original line number Diff line number Diff line
@@ -30,8 +30,8 @@
typedef u32 bug_insn_t;

#ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
#define __BUG_ENTRY_ADDR	RISCV_INT " 1b - 2b"
#define __BUG_ENTRY_FILE	RISCV_INT " %0 - 2b"
#define __BUG_ENTRY_ADDR	RISCV_INT " 1b - ."
#define __BUG_ENTRY_FILE	RISCV_INT " %0 - ."
#else
#define __BUG_ENTRY_ADDR	RISCV_PTR " 1b"
#define __BUG_ENTRY_FILE	RISCV_PTR " %0"
+3 −2
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@
		"1:	.asciz	\""__FILE__"\"\n"		\
		".previous\n"					\
		".section __bug_table,\"awM\",@progbits,%2\n"	\
		"2:	.long	0b-2b,1b-2b\n"			\
		"2:	.long	0b-.\n"				\
		"	.long	1b-.\n"				\
		"	.short	%0,%1\n"			\
		"	.org	2b+%2\n"			\
		".previous\n"					\
@@ -30,7 +31,7 @@
	asm_inline volatile(					\
		"0:	mc	0,0\n"				\
		".section __bug_table,\"awM\",@progbits,%1\n"	\
		"1:	.long	0b-1b\n"			\
		"1:	.long	0b-.\n"				\
		"	.short	%0\n"				\
		"	.org	1b+%1\n"			\
		".previous\n"					\
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#ifdef CONFIG_X86_32
# define __BUG_REL(val)	".long " __stringify(val)
#else
# define __BUG_REL(val)	".long " __stringify(val) " - 2b"
# define __BUG_REL(val)	".long " __stringify(val) " - ."
#endif

#ifdef CONFIG_DEBUG_BUGVERBOSE
Loading