This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: Get backtrace at PLT and stepi into PLT


Daniel Jacobowitz writes:

?> On Thu, Jul 16, 2009 at 06:18:22PM +0800, User Thinker wrote:
?> > Hi all,
?> >
?> > I have a patch that makes GDB can properly stepi into PLT for ARM
Thumb
?> > instruction. ?The patch also allow GDB to perform backtrace at
PLT.
?>
?> What version of GDB are these patches against? ?Have you tried the
?> version from CVS? ?This should work perfectly.
I tried it with GDB 6.8. ?I had just tried the version from CVS this
morning.
It can stepi into PLT, but backtrace is still not work.

I did some tests for GDB.
I configured GDB with command
? ? ? ? configure --build=x86_64-unknown-linux-gnu \
? ? ? ? ? ? ? ? --host=x86_64-unknown-linux-gnu \
? ? ? ? ? ? ? ? --target=arm-eabi-linux --disable-werror
for 6.8, CVS, 6.8 with the patch version, and CVS with the patch
version.
I did a test for each version. ?All these tests are following the
same commands, basically.
?1. I set a breakpoint at 0xa78c5424
?2. issue 3 stepi commands after inferior being stopped for the
breakpoint.
?3. I also issue backtrace commands if it steps into PLT,
successfully.
Logs for tests are at end of the email.

?>
?> > It means GDB should put a invalid instruction of Thumb version at
?> > base address of the trampoline. ?But, it actually puts
?> > ARM version one. ?I have checked GDB source code for this issue.
?> > GDB check flags in symbol that contain memory space that
breakpoint
?> > was setted at. ?If the symbol is flaged as Thumb, it uses
?> > Thumb version invalid instruction code, or it would use
?> > ARM version. ?It is reasonable. ?But, the trampoline in PLT
contains
?> > both types of instructions. ?And, the result of checking is
?> > the block where the trampoline is in is not Thumb.
?>
?> The CVS version of GDB checks ABI-defined mapping symbols ($a, $t).
?> These also allow disassembly to work correctly.
Cool! It works for me.

?>
?> > If you try to backtrace stack when GDB stop at PLT, you would
?> > get nothing. ?It is because no any unwinder can handle code in
PLT.
?>
?> arm_stub_unwinder_sniffer is supposed to handle this case. ?It's
been
?> there since 2005, and I've used it successfully. ?What's going
wrong
?> with that?
I can not even found arm_stub_unwinder_sniffer in the source tree of
GDB. ?So, where is arm_stub_unwinder_sniffer?
Is it part of GDB, officially?

?>
?> > begin 644 arm-plt.diff.gz
?> > M'XL(`#OJ7DH``YU7;4_;2!#^C'_%E)-Z`3O43D*20JDH$"A5"%62ZGKWQ?++
?>
?> Please include patches as text. ?See the list archives for
examples.
?> Thanks.

-------------------- patch for 6.8 --------------------
diff -r 3a752b09834a gdb/arm-linux-tdep.c
--- a/gdb/arm-linux-tdep.c ? ? ?Mon Jul 06 14:17:22 2009 +0800
+++ b/gdb/arm-linux-tdep.c ? ? ?Fri Jul 17 10:32:20 2009 +0800
@@ -316,6 +316,21 @@ arm_linux_rt_sigreturn_init (const struc
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + ARM_SIGCONTEXT_R0);
?}

+static void
+arm_linux_plt_init (const struct tramp_frame *self,
+ ? ? ? ? ? ? ? ? ? struct frame_info *next_frame,
+ ? ? ? ? ? ? ? ? ? struct trad_frame_cache *this_cache,
+ ? ? ? ? ? ? ? ? ? CORE_ADDR func)
+{
+ ?CORE_ADDR sp = frame_unwind_register_unsigned (next_frame,
ARM_SP_REGNUM);
+ ?CORE_ADDR fake_sp = sp - 4;
+ ?CORE_ADDR lr = frame_unwind_register_unsigned(next_frame,
ARM_LR_REGNUM);
+ ?
+ ?write_memory_unsigned_integer(fake_sp, 4, lr);
+ ?trad_frame_set_reg_addr(this_cache, ARM_PC_REGNUM, fake_sp);
+ ?trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
?static struct tramp_frame arm_linux_sigreturn_tramp_frame = {
? ?SIGTRAMP_FRAME,
? ?4,
@@ -358,6 +373,23 @@ static struct tramp_frame arm_eabi_linux
? ?arm_linux_rt_sigreturn_init
?};

+#define ARM_THUMB_BX_PC_INSN 0x00004778
+#define ARM_PLT_ADD_PC_INSN 0xe28fc600
+#define ARM_PLT_ADD_R12_INSN 0xe28cc000
+#define ARM_PLT_LDR_INSN 0xe5bcf000
+static struct tramp_frame arm_eabi_linux_plt_tramp_frame = {
+ ?GHOST_FRAME,
+ ?4,
+ ?{
+ ? ?{ ARM_THUMB_BX_PC_INSN, 0x0000ffff },
+ ? ?{ ARM_PLT_ADD_PC_INSN, -1 },
+ ? ?{ ARM_PLT_ADD_R12_INSN, 0xfffff000 },
+ ? ?{ ARM_PLT_LDR_INSN, 0xfffff000 },
+ ? ?{ TRAMP_SENTINEL_INSN }
+ ?},
+ ?arm_linux_plt_init
+};
+
?/* Core file and register set support. ?*/

?#define ARM_LINUX_SIZEOF_GREGSET (18 * INT_REGISTER_SIZE)
@@ -643,6 +675,8 @@ arm_linux_init_abi (struct gdbarch_info
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
&arm_eabi_linux_sigreturn_tramp_frame);
? ?tramp_frame_prepend_unwinder (gdbarch,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
&arm_eabi_linux_rt_sigreturn_tramp_frame);
+ ?tramp_frame_prepend_unwinder (gdbarch,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &arm_eabi_linux_plt_tramp_frame);

? ?/* Core file support. ?*/
? ?set_gdbarch_regset_from_core_section (gdbarch,
diff -r 3a752b09834a gdb/arm-tdep.c
--- a/gdb/arm-tdep.c ? ?Mon Jul 06 14:17:22 2009 +0800
+++ b/gdb/arm-tdep.c ? ?Fri Jul 17 10:32:20 2009 +0800
@@ -1677,9 +1677,12 @@ thumb_get_next_pc (struct frame_info *fr
? ? ? ?unsigned short inst2 = read_memory_unsigned_integer (pc + 2,
2);
? ? ? ?offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) <<
1);
? ? ? ?nextpc = pc_val + offset;
- ? ? ?/* For BLX make sure to clear the low bits. ?*/
+ ? ? ?/* For BLX make sure to clear the low bits, but keep LSB
setted. ?*/
? ? ? ?if (bits (inst2, 11, 12) == 1)
- ? ? ? nextpc = nextpc & 0xfffffffc;
+ ? ? ? nextpc = (nextpc & 0xfffffffc);
+ ? ? ?else
+ ? ? ? nextpc = nextpc | 1; ? ?/* It would be fail to break on PLT
without
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?* this. ?*/
? ? ?}
? ?else if ((inst1 & 0xff00) == 0x4700) ? ? /* bx REG, blx REG */
? ? ?{
diff -r 3a752b09834a gdb/frame.c
--- a/gdb/frame.c ? ? ? Mon Jul 06 14:17:22 2009 +0800
+++ b/gdb/frame.c ? ? ? Fri Jul 17 10:32:20 2009 +0800
@@ -1458,7 +1458,8 @@ get_prev_frame (struct frame_info *this_
? ? ? stop at main, we should at least stop at the entry point of the
? ? ? application. ?*/
? ?if (!backtrace_past_entry
- ? ? ?&& get_frame_type (this_frame) != DUMMY_FRAME && this_frame-
>level >= 0
+ ? ? ?&& get_frame_type (this_frame) != DUMMY_FRAME
+ ? ? ?&& get_frame_type (this_frame) != GHOST_FRAME && this_frame-
>level >= 0
? ? ? ?&& inside_entry_func (this_frame))
? ? ?{
? ? ? ?frame_debug_got_null_frame (gdb_stdlog, this_frame, "inside
entry func");
diff -r 3a752b09834a gdb/frame.h
--- a/gdb/frame.h ? ? ? Mon Jul 06 14:17:22 2009 +0800
+++ b/gdb/frame.h ? ? ? Fri Jul 17 10:32:20 2009 +0800
@@ -199,7 +199,10 @@ enum frame_type
? ?SIGTRAMP_FRAME,
? ?/* Sentinel or registers frame. ?This frame obtains register values
? ? ? direct from the inferior's registers. ?*/
- ?SENTINEL_FRAME
+ ?SENTINEL_FRAME,
+ ?/* This type of frame is not existed in the stack of inferior.
+ ? ? It can be used for frames that similar to sentinel frame. ?*/
+ ?GHOST_FRAME
?};

?/* For every stopped thread, GDB tracks two frames: current and
--------------------------------------------------

-------------------- patch for CVS --------------------
diff -r 92c4c442a2c6 gdb/arm-linux-tdep.c
--- a/gdb/arm-linux-tdep.c ? ? ?Fri Jul 17 09:43:11 2009 +0800
+++ b/gdb/arm-linux-tdep.c ? ? ?Fri Jul 17 14:17:34 2009 +0800
@@ -321,6 +321,23 @@ arm_linux_rt_sigreturn_init (const struc
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + ARM_SIGCONTEXT_R0);
?}

+static void
+arm_linux_plt_init (const struct tramp_frame *self,
+ ? ? ? ? ? ? ? ? ? struct frame_info *this_frame,
+ ? ? ? ? ? ? ? ? ? struct trad_frame_cache *this_cache,
+ ? ? ? ? ? ? ? ? ? CORE_ADDR func)
+{
+ ?CORE_ADDR sp = get_frame_register_unsigned (this_frame,
ARM_SP_REGNUM);
+ ?CORE_ADDR fake_sp = sp - 4;
+ ?CORE_ADDR lr = get_frame_register_unsigned(this_frame,
ARM_LR_REGNUM);
+ ?struct gdbarch *gdbarch = get_frame_arch(this_frame);
+ ?enum bfd_endian byte_order = gdbarch_byte_order(gdbarch);
+ ?
+ ?write_memory_unsigned_integer(fake_sp, 4, byte_order, lr);
+ ?trad_frame_set_reg_addr(this_cache, ARM_PC_REGNUM, fake_sp);
+ ?trad_frame_set_id (this_cache, frame_id_build (sp, func));
+}
+
?static struct tramp_frame arm_linux_sigreturn_tramp_frame = {
? ?SIGTRAMP_FRAME,
? ?4,
@@ -363,6 +380,23 @@ static struct tramp_frame arm_eabi_linux
? ?arm_linux_rt_sigreturn_init
?};

+#define ARM_THUMB_BX_PC_INSN 0x00004778
+#define ARM_PLT_ADD_PC_INSN 0xe28fc600
+#define ARM_PLT_ADD_R12_INSN 0xe28cc000
+#define ARM_PLT_LDR_INSN 0xe5bcf000
+static struct tramp_frame arm_eabi_linux_plt_tramp_frame = {
+ ?GHOST_FRAME,
+ ?4,
+ ?{
+ ? ?{ ARM_THUMB_BX_PC_INSN, 0x0000ffff },
+ ? ?{ ARM_PLT_ADD_PC_INSN, -1 },
+ ? ?{ ARM_PLT_ADD_R12_INSN, 0xfffff000 },
+ ? ?{ ARM_PLT_LDR_INSN, 0xfffff000 },
+ ? ?{ TRAMP_SENTINEL_INSN }
+ ?},
+ ?arm_linux_plt_init
+};
+
?/* Core file and register set support. ?*/

?#define ARM_LINUX_SIZEOF_GREGSET (18 * INT_REGISTER_SIZE)
@@ -651,6 +685,8 @@ arm_linux_init_abi (struct gdbarch_info
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
&arm_eabi_linux_sigreturn_tramp_frame);
? ?tramp_frame_prepend_unwinder (gdbarch,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
&arm_eabi_linux_rt_sigreturn_tramp_frame);
+ ?tramp_frame_prepend_unwinder (gdbarch,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &arm_eabi_linux_plt_tramp_frame);

? ?/* Core file support. ?*/
? ?set_gdbarch_regset_from_core_section (gdbarch,
diff -r 92c4c442a2c6 gdb/frame.c
--- a/gdb/frame.c ? ? ? Fri Jul 17 09:43:11 2009 +0800
+++ b/gdb/frame.c ? ? ? Fri Jul 17 14:17:34 2009 +0800
@@ -1650,6 +1650,7 @@ get_prev_frame (struct frame_info *this_
? ? ? application. ?*/
? ?if (this_frame->level >= 0
? ? ? ?&& get_frame_type (this_frame) == NORMAL_FRAME
+ ? ? ?&& get_frame_type (this_frame) == GHOST_FRAME
? ? ? ?&& !backtrace_past_entry
? ? ? ?&& inside_entry_func (this_frame))
? ? ?{
diff -r 92c4c442a2c6 gdb/frame.h
--- a/gdb/frame.h ? ? ? Fri Jul 17 09:43:11 2009 +0800
+++ b/gdb/frame.h ? ? ? Fri Jul 17 14:17:34 2009 +0800
@@ -207,7 +207,10 @@ enum frame_type
? ?ARCH_FRAME,
? ?/* Sentinel or registers frame. ?This frame obtains register values
? ? ? direct from the inferior's registers. ?*/
- ?SENTINEL_FRAME
+ ?SENTINEL_FRAME,
+ ?/* This type of frame is not existed in the stack of inferior.
+ ? ? It can be used for frames that similar to sentinel frame. ?*/
+ ?GHOST_FRAME
?};

?/* For every stopped thread, GDB tracks two frames: current and
--------------------------------------------------

------------- log for 6.8 -------------------------
warning: Lowest section in /home/thinker/progm/android/out/target/
product/generic/symbols/system/lib/libicudata.so is .hash at 00000094
__ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
15 ? ? ? ? ?ldmfd ? sp!, {r4, r7}
Current language: ?auto; currently asm
Breakpoint 1 at 0xa78c5424: file external/opencore/engines/player/src/
pv_player_engine.cpp, line 1150.
[New Thread 766]
[Switching to Thread 766]

Breakpoint 1, 0xa78c5424 in PVPlayerEngine::Construct (this=0x12888,
? ? aCmdStatusObserver=0xed7c, aErrorEventObserver=0xed84,
? ? aInfoEventObserver=0xed80)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1150
1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5424
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+32>: ? ? ?adds ? ?r0, r5, r3
Current language: ?auto; currently c++
0xa78c5426 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5426
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+34>: ? ? ?movs ? ?r1, #0
0xa78c5428 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5428
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+36>: ? ? ?bl ? ? ?0xa785991c

Program received signal SIGSEGV, Segmentation fault.
OsclRegistryClient::UnRegister (this=0x76be00, aComp=@0x0)
? ? at external/opencore/oscl/oscl/osclregcli/src/
oscl_registry_client.cpp:90
90 ? ? ? ? ?if (iTlsImpl)
1: x/i $pc
0xa7361504 <_ZN18OsclRegistryClient10UnRegisterER11OSCL_String+4>: ? ?
? ?
? ? ldr r0, [r0, #8]
The program is running. ?Exit anyway? (y or n)
warning: Lowest section in /home/thinker/progm/android/out/target/
product/generic/symbols/system/lib/libicudata.so is .hash at 00000094
__ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
15 ? ? ? ? ?ldmfd ? sp!, {r4, r7}
Current language: ?auto; currently asm
Breakpoint 1 at 0xa78c5424: file external/opencore/engines/player/src/
pv_player_engine.cpp, line 1150.
[New Thread 766]
[Switching to Thread 766]

Breakpoint 1, 0xa78c5424 in PVPlayerEngine::Construct (this=0x12888,
? ? aCmdStatusObserver=0xed7c, aErrorEventObserver=0xed84,
? ? aInfoEventObserver=0xed80)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1150
1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5424
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+32>: ? ? ?adds ? ?r0, r5, r3
Current language: ?auto; currently c++
0xa78c5426 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5426
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+34>: ? ? ?movs ? ?r1, #0
0xa78c5428 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5428
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+36>: ? ? ?bl ? ? ?0xa785991c

Program received signal SIGSEGV, Segmentation fault.
OsclRegistryClient::UnRegister (this=0x76be00, aComp=@0x0)
? ? at external/opencore/oscl/oscl/osclregcli/src/
oscl_registry_client.cpp:90
90 ? ? ? ? ?if (iTlsImpl)
1: x/i $pc
0xa7361504 <_ZN18OsclRegistryClient10UnRegisterER11OSCL_String+4>: ? ?
? ?
? ? ldr r0, [r0, #8]
The program is running. ?Exit anyway? (y or n)
----------------------------------------

-------------------- log for cvs --------------------
__ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
15 ? ? ? ? ?ldmfd ? sp!, {r4, r7}
Current language: ?auto; currently asm
Breakpoint 1 at 0xa78c5424: file external/opencore/engines/player/src/
pv_player_engine.cpp, line 1150.
[Switching to Thread 769]

Breakpoint 1, 0xa78c5424 in PVPlayerEngine::Construct (this=0x12888,
? ? aCmdStatusObserver=0xed7c, aErrorEventObserver=0xed84,
? ? aInfoEventObserver=0xed80)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1150
1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5424
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+32>: ? ? ?adds ? ?r0, r5, r3
Current language: ?auto; currently c++
0xa78c5426 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5426
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+34>: ? ? ?movs ? ?r1, #0
0xa78c5428 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5428
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+36>: ? ? ?bl ? ? ?0xa785991c
0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
1: x/i $pc
0xa785991c: ? ? bx ? ? ?pc
#0 ?0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
#0 ?0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
The program is running. ?Quit anyway (and kill it)? (y or n)
----------------------------------------

-------------------- log for 6.8 with the patch --------------------
warning: Lowest section in /home/thinker/progm/android/out/target/
product/generic/symbols/system/lib/libicudata.so is .hash at 00000094
__ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
15 ? ? ? ? ?ldmfd ? sp!, {r4, r7}
Current language: ?auto; currently asm
Breakpoint 1 at 0xa78c5424: file external/opencore/engines/player/src/
pv_player_engine.cpp, line 1150.
[New Thread 768]
[Switching to Thread 768]

Breakpoint 1, 0xa78c5424 in PVPlayerEngine::Construct (this=0x134a8,
? ? aCmdStatusObserver=0xd434, aErrorEventObserver=0xd43c,
? ? aInfoEventObserver=0xd438)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1150
1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5424
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+32>: ? ? ?adds ? ?r0, r5, r3
Current language: ?auto; currently c++
0xa78c5426 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5426
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+34>: ? ? ?movs ? ?r1, #0
0xa78c5428 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5428
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+36>: ? ? ?bl ? ? ?0xa785991c
0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
1: x/i $pc
0xa785991c: ? ? undefined
#0 ?0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
#1 ?PVPlayerEngine::Construct (this=0x134a8,
aCmdStatusObserver=0xd434,
? ? aErrorEventObserver=0xd43c, aInfoEventObserver=0xd438)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1151
#2 ?0xa78ca06c in PVPlayerEngine::New (aCmdStatusObserver=0xd434,
? ? aErrorEventObserver=0xd43c, aInfoEventObserver=0xd438)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:107
#3 ?0xa78d4b40 in PVPlayerFactory::CreatePlayer
(aCmdStatusObserver=0x135d4,
? ? aErrorEventObserver=0x0, aInfoEventObserver=0x0)
? ? at external/opencore/engines/player/src/pv_player_factory.cpp:49
#4 ?0xa78d8d0e in PlayerDriver::playerThread (this=0x0)
? ? at external/opencore/android/playerdriver.cpp:870
#5 ?0xa78d8e10 in PlayerDriver::startPlayerThread (cookie=0x135d4)
? ? at external/opencore/android/playerdriver.cpp:847
#6 ?0xa9d285d6 in thread_data_t::trampoline (t=<value optimized out>)
? ? at frameworks/base/libs/utils/Threads.cpp:109
#7 ?0xafe0f884 in __thread_entry (
? ? func=0xa9d2856d <thread_data_t::trampoline(thread_data_t const*)
+1>,
? ? arg=0xd5a8, tls=0x40407f00) at bionic/libc/bionic/pthread.c:188
#8 ?0xafe0f3f8 in pthread_create (thread_out=0x0, attr=0xbea5f7f4,
? ? start_routine=0xa9d2856d <thread_data_t::trampoline(thread_data_t
const*)+1>, arg=0x0) at bionic/libc/bionic/pthread.c:324
#9 ?0x00000000 in ?? ()
The program is running. ?Exit anyway? (y or n)
----------------------------------------

-------------------- log for cvs with patch --------------------
__ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
15 ? ? ? ? ?ldmfd ? sp!, {r4, r7}
Current language: ?auto; currently asm
Breakpoint 1 at 0xa78c5424: file external/opencore/engines/player/src/
pv_player_engine.cpp, line 1150.
[Switching to Thread 771]

Breakpoint 1, 0xa78c5424 in PVPlayerEngine::Construct (this=0x12a50,
? ? aCmdStatusObserver=0xeee4, aErrorEventObserver=0xeeec,
? ? aInfoEventObserver=0xeee8)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1150
1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5424
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+32>: ? ? ?adds ? ?r0, r5, r3
Current language: ?auto; currently c++
0xa78c5426 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5426
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+34>: ? ? ?movs ? ?r1, #0
0xa78c5428 ? ? ?1150 ? ? ? ?iOOTSyncCommandSem.Create();
1: x/i $pc
0xa78c5428
<_ZN14PVPlayerEngine9ConstructEP23PVCommandStatusObserverP20PVErrorEventObserverP28PVInformationalEventObserver
+36>: ? ? ?bl ? ? ?0xa785991c
0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
1: x/i $pc
0xa785991c: ? ? bx ? ? ?pc
#0 ?0xa785991c in ?? ()
? ?from /home/thinker/progm/android/out/target/product/generic/symbols/
system/lib/libopencore_player.so
#1 ?PVPlayerEngine::Construct (this=0x12a50,
aCmdStatusObserver=0xeee4,
? ? aErrorEventObserver=0xeeec, aInfoEventObserver=0xeee8)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:1151
#2 ?0xa78ca06c in PVPlayerEngine::New (aCmdStatusObserver=0xeee4,
? ? aErrorEventObserver=0xeeec, aInfoEventObserver=0xeee8)
? ? at external/opencore/engines/player/src/pv_player_engine.cpp:107
#3 ?0xa78d4b40 in PVPlayerFactory::CreatePlayer
(aCmdStatusObserver=0x12b7c,
? ? aErrorEventObserver=0x0, aInfoEventObserver=0x0)
? ? at external/opencore/engines/player/src/pv_player_factory.cpp:49
#4 ?0xa78d8d0e in PlayerDriver::playerThread (this=0x0)
? ? at external/opencore/android/playerdriver.cpp:870
#5 ?0xa78d8e10 in PlayerDriver::startPlayerThread (cookie=0x12b7c)
? ? at external/opencore/android/playerdriver.cpp:847
#6 ?0xa9d285d6 in thread_data_t::trampoline (t=<value optimized out>)
? ? at frameworks/base/libs/utils/Threads.cpp:109
#7 ?0xafe0f884 in __thread_entry (
? ? func=0xa9d2856d <thread_data_t::trampoline(thread_data_t const*)
+1>,
? ? arg=0xf0e8, tls=0x40507f00) at bionic/libc/bionic/pthread.c:188
#8 ?0xafe0f3f8 in pthread_create (thread_out=0x0, attr=0xbe9037f4,
? ? start_routine=0xa9d2856d <thread_data_t::trampoline(thread_data_t
const*)+1>, arg=0x0) at bionic/libc/bionic/pthread.c:324
#9 ?0x00000000 in ?? ()
The program is running. ?Quit anyway (and kill it)? (y or n)
--------------------------------------------------


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]