diff options
| author | 2011-09-04 10:50:01 -0700 | |
|---|---|---|
| committer | 2011-09-04 10:50:01 -0700 | |
| commit | 7f40ffcb953870fb0df7646c447ffdc7b3ef0b2c (patch) | |
| tree | eb00446683fb046e7ba5b5f97b0b4be161c0ad2b | |
| parent | 4a3164faefd255b1c1e911e7ad7c3d57749caaf6 (diff) | |
Fix the LDT code to be -O2 safe and valgrind clean.
Change-Id: Iad987f828a8d8932a9f7212c71eddd3c943f6311
| -rw-r--r-- | build/Android.common.mk | 2 | ||||
| -rw-r--r-- | src/thread_x86.cc | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/build/Android.common.mk b/build/Android.common.mk index 575c810d07..de2622a83e 100644 --- a/build/Android.common.mk +++ b/build/Android.common.mk @@ -25,7 +25,7 @@ ART_C_INCLUDES := \ dalvik/libdex ART_CFLAGS := \ - -O0 \ + -O2 \ -ggdb3 \ -Wall \ -Werror \ diff --git a/src/thread_x86.cc b/src/thread_x86.cc index 0e7cd7d366..57eeffdb02 100644 --- a/src/thread_x86.cc +++ b/src/thread_x86.cc @@ -13,10 +13,12 @@ namespace art { void Thread::InitCpu() { // Read LDT CHECK_EQ((size_t)LDT_ENTRY_SIZE, sizeof(uint64_t)); - uint64_t ldt_[LDT_ENTRIES]; - syscall(SYS_modify_ldt, 0, ldt_, sizeof(ldt_)); + uint64_t ldt[LDT_ENTRIES]; + memset(ldt, 0, sizeof(ldt)); + syscall(SYS_modify_ldt, 0, ldt, sizeof(ldt)); // Create empty slot to point at current Thread* - struct user_desc ldt_entry; + user_desc ldt_entry; + memset(&ldt_entry, 0, sizeof(ldt_entry)); ldt_entry.entry_number = -1; ldt_entry.base_addr = (unsigned int)this; ldt_entry.limit = kPageSize; @@ -27,7 +29,7 @@ void Thread::InitCpu() { ldt_entry.seg_not_present = 0; ldt_entry.useable = 1; for (int i = 0; i < LDT_ENTRIES; i++) { - if (ldt_[i] == 0) { + if (ldt[i] == 0) { ldt_entry.entry_number = i; break; } @@ -42,7 +44,7 @@ void Thread::InitCpu() { uint16_t rpl = 3; // Requested privilege level uint16_t selector = (ldt_entry.entry_number << 3) | table_indicator | rpl; // TODO: use our assembler to generate code - asm("movw %w0, %%fs" + asm volatile("movw %w0, %%fs" : // output : "q"(selector) // input :); // clobber @@ -51,7 +53,7 @@ void Thread::InitCpu() { // Sanity check reads from FS goes to this Thread* Thread* self_check; // TODO: use our assembler to generate code - asm("movl %%fs:(%1), %0" + asm volatile("movl %%fs:(%1), %0" : "=r"(self_check) // output : "r"(OFFSETOF_MEMBER(Thread, self_)) // input :); // clobber |