Open derekbruening opened 9 years ago
From bruen...@google.com on May 06, 2011 08:50:23
from my original commit notes:
Sideline vs online: drsyms.h presents the same interface for querying symbols locally or remotely. An initialization function specifies the server to use, if any. When using sideline, both the client and server have a copy of the drsysm library, with the client's drsyms forwarding requests to the server, whose drsyms performs actual lookups.
I'm abandoning these ideas:
From bruen...@google.com on June 15, 2011 11:05:05
xref issue #498 on exposing whatever IPC method is used here through the API
From bruen...@google.com on May 06, 2011 11:42:05
split from issue #44 see all the comments in that issue regarding sideline support this issue covers a sideline implementation on both linux and windows
sideline is needed in cases where symbols don't fit into the app's process (see https://code.google.com/p/dynamorio/issues/detail?id=44#c11 )
my drsyms API assumes sideline will use the same synchronous interface as online, and uses shared memory, with a shmid passed to drsym_init(), so the sideline server must be launched ahead of time. we can revisit that decision but if we want to provide an asynchronous model I would suggest adding another set of interfaces for that and keeping the synchronous ones working with sideline.
here are some notes from earlier discussions including proposals of having the sym server queries have tunable timeouts:
Shared memory is definitely the best choice for Linux and Windows. For Windows the keys are strings. See api/samples/stats.c for code using syscall/ntdll layer (for DR), and tools/DRgui/DynamoRIOView.cpp for code using Win32 API (for symbol server).
I would vote for what you listed under Optimization:
The client symbol query API is also very simple (unless we have use cases that need more):
The client query API is abstracted away from the underlying symbol table format, which is not exposed, so that we can change the format later and add scopes, etc. if we need them.
Then we don't have any client queries going to the symbol server: DR answers them synchronously from its platform-independent symbol tables, and only DR's entire-module queries go to the symbol server.
Original issue: http://code.google.com/p/dynamorio/issues/detail?id=446