Würde ich so auch vermuten, vermutlich ist die libcoolstream-mt.so älter wie 5bd3d58.
Ich habe ein wenig mit git bisect gespielt. Ist in diesem Fall ein wenig verwirrend da git bisect genau anders herum arbeitet wie hier benötigt (man sucht eine letzte noch "gute" Version, hier sucht man die erste "gute" Version).
Folgende Versionen sind im Git Repo bei CST vorhanden.
als Basis
Code: Alles auswählen
HEAD 1 9630e8a 2.10 drivers for 2.6.35.14-nevis
HEAD~1 2 b3b5e29 2.10 drivers for 2.6.39.4-nevis
HEAD~2 3 eb6ffc2 2.10 drivers for 2.6.26.8-nevis
HEAD~3 4 2e9238c libs/libcoolstream-mt.so: change place to send CI CA_MESSAGE_MSG_INIT_OK message, should fix black screen with CI on boot
HEAD~4 5 ed28d74 driver update
HEAD~5 6 9f05cf4 libs: experimental! add limited support to playback file been recorded by other box (i.e. nfs) playback must be started when file > 10mb and record time > 20 seconds, new libs must HEAD~6 7 be on both boxes
HEAD~7 8 0b21c28 drivers for kernel version 2.6.34.13
HEAD~8 9 3b5ca1b 2.6.39.4 drivers update
HEAD~9 10 5bd3d58 libs: fix crash on record stop
HEAD~10 11 577d586 Update for image 2.09
HEAD~11 12 3798bbc restore stable libs
HEAD~12 13 e872330 start branch for public testing
HEAD~13 14 fce3742 testing/ dir with support for multi-record of the same channel
HEAD~14 15 b49d833 add new lib
HEAD~15 16 9ff0dc3 add new drivers
HEAD~16 17 94c3c7f Update to 2.08 drivers and library
HEAD~17 18 c3966db update for image 2.07
HEAD~18 19 7b4afaf Initial commit, drivers and libs from svn
Mit git bisect und etwas Logik kann man nun suchen ab welcher Revision ein Symbol in der entsprechenden Lib vorhanden ist.
Zunächst sucht man sich in der Symboltabelle der Lib das enstprechende Symbol, --> undefined reference to `cRecord::GetStatus()' in etwa so etwas.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [master] $ readelf -a libs/lib*.so | grep cRecord | grep GetStatus
468: 000345fc 88 FUNC GLOBAL DEFAULT 10 _ZN7cRecord9GetStatusEv
Nun kann man mit git bisect starten.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [master] $ git bisect start
Die aktuelle Version als schlecht markieren (die ist eigentlich die "gute" Version, also invers denken).
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [master|BISECTING] $ git bisect bad
Nun die die noch gute Version markieren (also die eigentlich schlechte Version, git bisect funktioniert aber nur so herum).
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [master|BISECTING] $ git bisect good HEAD~15
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[5bd3d5805cbb55a94ff4ae293e008d8852c7501f] libs: fix crash on record stop
Git sagt uns das es 9 (HEAD~15 + 7 = HEAD~8) Schritte in die Vergangenheit gegangen ist, nun müssen wir Git sagen ob diese Version good oder eben bad ist.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(5bd3d58...)|BISECTING] $ readelf -a libs/lib*.so | grep cRecord | grep GetStatus
472: 000366d0 88 FUNC GLOBAL DEFAULT 10 _ZN7cRecord9GetStatusEv
Symbol gefunden, also noch schlecht
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(5bd3d58...)|BISECTING] $ git bisect bad
Bisecting: 3 revisions left to test after this (roughly 2 steps)
[fce3742a6c5f501654fc9912b815ef963190f1aa] testing/ dir with support for multi-record of the same channel
Git ist weitere 4 (insgesamt 13) Schritte in die Vergangenheit gegangen, wir stehen nun an Commit fce3742. Und wieder testet man ob das Symbol schon vorhanden ist.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(fce3742...)|BISECTING] $ readelf -a libs/lib*.so | grep cRecord | grep GetStatus
doc@wheezy:~/gitprojects/cst-public-drivers [(fce3742...)|BISECTING] $
Kein Symbol mehr gefunden, wir sind zu weit in der Vergangenheit, für Git ist diese Version good.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(fce3742...)|BISECTING] $ git bisect good
Bisecting: 1 revision left to test after this (roughly 1 step)
[3798bbc4704f3ce0afc21e2352c35c236831e1fa] restore stable libs
Git ist jetzt zur 11en Version in der Vergangenheit gesprungen und man muss wieder testen ob das Symbol schon vorhanden (bad) oder noch nicht vorhanden (good) ist.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(2.08)|BISECTING] $ readelf -a libs/lib*.so | grep cRecord | grep GetStatus
doc@wheezy:~/gitprojects/cst-public-drivers [(2.08)|BISECTING] $ git bisect good
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[577d586f2b739d4508e9a071098478c0d16a501b] Update for image 2.09
Wieder nichts gefunden und Git ist zur Version zehn gesprungen, es verbleiben zwei Versionen die gut oder schlecht sein können.
Code: Alles auswählen
doc@wheezy:~/gitprojects/cst-public-drivers [(2.09)|BISECTING] $ readelf -a libs/lib*.so | grep cRecord | grep GetStatus
doc@wheezy:~/gitprojects/cst-public-drivers [(2.09)|BISECTING] $ git bisect good
5bd3d5805cbb55a94ff4ae293e008d8852c7501f is the first bad commit
commit 5bd3d5805cbb55a94ff4ae293e008d8852c7501f
Author: [CST] Focus <focus.cst@gmail.com>
Date: Tue Sep 25 15:42:13 2012 +0400
libs: fix crash on record stop
:040000 040000 5ad321b7541dcd4e28f65c9898be9a1a102c0d28 3242efd1c31dc335ba250aac67c60139a40182fe M libs
git bisect sagt das es fertig ist, es steht nun an der 10 Version und teilt mit das dies der erste schlechte Commit war, die 9 Version wurde ja auch schon schlecht befunden. Das heißt in der 9en Version hatten wir das Symbol schon gefunden und in der 10en Version noch nicht. Nun wird es etwas schwierig, da wir aber invers gesucht haben und nun nicht Version 10 die erste Version war in der das gesuchte Symbol gefunden wurde sondern Version 9 muss man nun eben eine Version wieder in die Zukunft gehen (eben Version 9) um zu wissen ab wann ein Symbol eben vorhanden war.
Umgekehrt (und richtig) wird es wieder wenn wir ein Symbol suchen was es aber einer bestimmten Revision nicht mehr gab. Genau für solche Fälle, die Suche nach einer alten noch guten Revision wurde git bisect entwickelt.
Hier kann man auch wieder sehen warum richtige Commitmessages so wichtig sind! Man kann sich sonst wirklich einen absuchen, besonders bei diesen Binärsachen die nur sehr aufwendig zu durchsuchen sind.
Ups, ist was länger geworden.