Dopo aver trascorso qualche tempo su un previous question, un utente mi ha fatto conoscere un thread di posta elettronica per quanto riguarda la questione qui di seguito:Quali sono le conseguenze della modifica di un simbolo da .globl a .weak?
[PATCH] ftrace/x86: Fix function graph tracer reset path
Sul mio sistema, è sufficiente abilitare e disabilitare la funzione grafico tracciante può Arresta il kernel. Non so come ha funzionato fino ad ora.
Il
ftrace_disable_ftrace_graph_caller()
modifica istruzione JMP aftrace_graph_call
supponendo che è un 5 byte vicino JMP (e9). Tuttavia è un breve jmp composto da solo 2 byte (eb). Eftrace_stub()
si trova proprio sotto laftrace_graph_caller
modo modifica sopra rompe l'istruzione con conseguente kernel oops sul laftrace_stub()
con il codice operativo non valida come di seguito:
Una soluzione di questo problema è la seguente patch:
diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S
index ed48a9f465f8..e13a695c3084 100644
--- a/arch/x86/kernel/mcount_64.S
+++ b/arch/x86/kernel/mcount_64.S
@@ -182,7 +182,8 @@ GLOBAL(ftrace_graph_call)
jmp ftrace_stub
#endif
-GLOBAL(ftrace_stub)
+/* This is weak to keep gas from relaxing the jumps */
+WEAK(ftrace_stub)
retq
END(ftrace_caller)
via https://lkml.org/lkml/2016/5/16/493
non capisco che cosa l'effetto è in sostituzione di GLOBAL(ftrace_stub)
con WEAK(ftrace_stub)
. Né il commento incluso nella patch né l'esame di GLOBAL() e WEAK() mi hanno aiutato a capire perché questa soluzione funziona.
La mia domanda, come suggerisce il titolo, è: Quali sono le conseguenze della modifica di un simbolo da .globl a .weak? Gradirei una risposta che consideri come la sostituzione di GLOBAL(ftrace_stub)
a WEAK(ftrace_stub)
potrebbe risolvere il problema segnalato.
[Questo link ti fornisce quello che ti serve.] (Https://lkml.org/lkml/2016/5/18/326) – LPs
@LPs "Dichiarare ftrace_stub come una chiamata debole impedisce al gas di utilizzare due salti di byte per esso "contiene parte di ciò che non capisco; vale a dire, in che modo dichiarare ftrace_stub come debole impedisce di usare due salti di byte? modifica: la risposta di Jester ha riempito il pezzo di informazione che mi mancava. – buratino