Cas
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Středa Listopad 4 10:14:40 CET 2015
On Wed, 4 Nov 2015, Martin Mokry wrote:
> Ospravedlnujem sa za nevedomost, ale ked som gdb spustil a dal help
> breakpoints, vyvalilo to na mna spustu moznosti nastavenia breakpointu.
> Neviem ako to presne nastavit. Ak by ste mi pomohli sa v tom trochu
> zorientovat bol by som rad. Vopred dakujem.
Krok 1: Spustíte program pod debuggerem.
# gdb --args /sbin/hwclock --systohc --directisa
Krok 2: Najdete správné místo v kódu. Tady je to trochu komplikované
(nejspíš v tom hraje roli inlajnování funkcí). Když se pokusím vypsat
hledanou funkci (l cmos_set_time), tak mi to vypíše úplně jiné místo v
kódu (jediné plus je, že je to aspoň správný soubor). Abych Vám ušetřil
hledání, tak rovnou napovím pravděpodobné číslo řádku (platí pro F22):
(gdb) l sys-utils/hwclock-cmos.c:409
404 tm.tm_year -= cmos_epoch;
405 tm.tm_year %= 100;
406 tm.tm_mon += 1;
407 tm.tm_wday += 1;
408
409 if (!(save_control & 0x02)) { /* 12hr mode; the default is 24hr mode */
410 if (tm.tm_hour == 0)
411 tm.tm_hour = 24;
412 if (tm.tm_hour > 12) {
413 tm.tm_hour -= 12;
Je důležité, aby na řádku 409 byl uvedený příkaz, protože to je vhodné
místo, kde je možno provést chirurgický zásah do save_control.
Krok 3: Nastavte breakpoint a spusťte program:
(gdb) b 409
(gdb) r
Krok 4: Počkejte, až se program zastaví (což bude prakticky ihned). Nechte
si pro kontrolu vypsat hodnotu save_control, změňte ji, a pro kontrolu ji
znovu nechte vypsat:
(gdb) p save_control
$1 = 0 '\000'
(gdb) set save_control |= 2
(gdb) p save_control
$2 = 2 '\002'
Krok 5: Nechte program doběhnout do konce a opusťte debugger:
(gdb) c
(gdb) quit
Krok 6: Zkontrolujte, zda jsou v RTC smysluplné údaje a zda funguje
přístup přes jádro (například spustím hwclock --show s --directisa i bez).
Také zkuste znovu ten hwc.stp a zkontrolujte, zda je příznak opravdu
nahozený.
Případně udělejte znovu --systohc už bez --directisa a bez blbnutí
debuggerem, aby se opravila chyba vnesená při změně příznaku.
Krok 7: Doufejte, že to vydrží a nepřepne se to samo zpět do 12-hodinového
režimu. :)
--
Pavel Kankovsky aka Peak "Que sais-je?"
Další informace o konferenci Linux