On 20/07/15 18:12, Will Deacon wrote:
diff --git a/arch/arm64/include/asm/alternative.h 
b/arch/arm64/include/asm/alternative.h
index c385a0c4057f..31b19ad18f7e 100644
--- a/arch/arm64/include/asm/alternative.h
+++ b/arch/arm64/include/asm/alternative.h
@@ -77,6 +77,46 @@ void free_alternatives_memory(void);
        .org    . - (662b-661b) + (664b-663b)
  .endm

+/*
+ * Begin an alternative code sequence.
+ *
+ * The code that follows this marco will be assembled and linked as
+ * normal. There are no restrictions on this code.

s/marco/macro/

Will fix this.



+ */
+.macro alternative_if_not cap
+       .pushsection .altinstructions, "a"
+       altinstruction_entry 661f, 663f, \cap, 662f-661f, 664f-663f
+       .popsection
+661:
+.endm
+
+/*
+ * Provide the alternative code sequence.
+ *
+ * The code that follows this macro is assembled into a special
+ * section to be used for dynamic patching. Code that follows this
+ * macro must:
+ *
+ * 1. Be exactly the same length (in bytes) as the default code
+ *    sequence.
+ *
+ * 2. Not jump to local labels defined outside of the alternative
+ *    sequence.

Actually, we fix up the branch target during patching. What you can't do
is jump into *another* alternative sequence.

Ok. I will update this.

I saw that there must be branch target patching (due to branches to __save_vgic_v3_state) but got it into my head that branches to local labels confused the assembler. I guess I must made an unrelated syntax error because I just done a few tests and can't reproduce anything like that.


Daniel.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to