Commit bbf92368 authored by Peter Zijlstra's avatar Peter Zijlstra
Browse files

x86/text-patching: Make text_gen_insn() play nice with ANNOTATE_NOENDBR

parent c8c301ab
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -101,13 +101,21 @@ void *text_gen_insn(u8 opcode, const void *addr, const void *dest)
	static union text_poke_insn insn; /* per instance */
	int size = text_opcode_size(opcode);

	/*
	 * Hide the addresses to avoid the compiler folding in constants when
	 * referencing code, these can mess up annotations like
	 * ANNOTATE_NOENDBR.
	 */
	OPTIMIZER_HIDE_VAR(addr);
	OPTIMIZER_HIDE_VAR(dest);

	insn.opcode = opcode;

	if (size > 1) {
		insn.disp = (long)dest - (long)(addr + size);
		if (size == 2) {
			/*
			 * Ensure that for JMP9 the displacement
			 * Ensure that for JMP8 the displacement
			 * actually fits the signed byte.
			 */
			BUG_ON((insn.disp >> 31) != (insn.disp >> 7));