[ Mistakenly committed older version of patch. This is the right one. ]

Breakpad Linux client: Simplify VerifyStackReadWithMultipleThreads unit test.

As written, the VerifyStackReadWithMultipleThreads unit test makes
assumptions about the layout of thread_function's stack frame. As a result,
the test will fail when compiled with some compilers, or built with certain
optimization levels.

As an extension to C++, the GNU compilers allow you to request that a
variable be placed in a specific register. Using this, we can have
thread_function put the thread id in place where the test can find it
reliably.

a=jimblandy, r=nealsid


git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@559 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
jimblandy 2010-03-29 18:27:11 +00:00
parent b68b800189
commit f3319839c4

View file

@ -48,10 +48,10 @@
#endif #endif
void *thread_function(void *data) { void *thread_function(void *data) {
pid_t thread_id = syscall(SYS_gettid); volatile pid_t thread_id = syscall(SYS_gettid);
register pid_t *thread_id_ptr asm(TID_PTR_REGISTER) = &thread_id; register volatile pid_t *thread_id_ptr asm(TID_PTR_REGISTER) = &thread_id;
while (true) while (true)
asm("" : : "r" (thread_id_ptr)); asm volatile ("" : : "r" (thread_id_ptr));
return NULL; return NULL;
} }