Sure, but changing types so that things build is a first step. WIthout being able to attach a debugger to it, I can't go through and see what further changes need to be made.
In these cases, pointers are being tossed into 32-bit ints where it looks like a reasonable change is to store them in something that's promised to be the right size. Found the tools/test.py script, ia32 build continues to pass with this. Jeff Bailey >|< Google, Inc. >|< +1 514 670-8754 On Thu, Jan 22, 2009 at 3:19 PM, Dean McNamee <[email protected]> wrote: > > V8 is 32-bit only in a lot more ways that using intptr_t instead of > uint32. Infact, they are using uint32 correctly, because the code is > only going to work right on 32-bits. > > Someday V8 will be made 64-bit safe, but that's a much bigger effort > than changing some types around... > > On Thu, Jan 22, 2009 at 8:30 PM, Jeff Bailey <[email protected]> > wrote: > > There are a bunch of places where to do pointer arithmetic, v8 mashes > things > > into uint32_t's. intptr_t's are the more correct way of doing this so > that > > it's always the right size. These are the fixes for space.h, > space-inl.h, > > and one fix to heap.cc to make sure that things work. > > > > Test built on ia32-linux. Is there an equivalent to 'make check' on > SCons? > > > > Index: src/spaces-inl.h > > =================================================================== > > --- src/spaces-inl.h (revision 1129) > > +++ src/spaces-inl.h (working copy) > > @@ -102,7 +102,7 @@ > > // page_address + words * 4 > > > > Address Page::ComputeRSetBitPosition(Address address, int offset, > > - uint32_t* bitmask) { > > + intptr_t* bitmask) { > > ASSERT(Page::is_rset_in_use()); > > > > Page* page = Page::FromAddress(address); > > @@ -137,7 +137,7 @@ > > > > > > void Page::SetRSet(Address address, int offset) { > > - uint32_t bitmask = 0; > > + intptr_t bitmask = 0; > > Address rset_address = ComputeRSetBitPosition(address, offset, > &bitmask); > > Memory::uint32_at(rset_address) |= bitmask; > > > > @@ -147,7 +147,7 @@ > > > > // Clears the corresponding remembered set bit for a given address. > > void Page::UnsetRSet(Address address, int offset) { > > - uint32_t bitmask = 0; > > + intptr_t bitmask = 0; > > Address rset_address = ComputeRSetBitPosition(address, offset, > &bitmask); > > Memory::uint32_at(rset_address) &= ~bitmask; > > > > @@ -156,7 +156,7 @@ > > > > > > bool Page::IsRSetSet(Address address, int offset) { > > - uint32_t bitmask = 0; > > + intptr_t bitmask = 0; > > Address rset_address = ComputeRSetBitPosition(address, offset, > &bitmask); > > return (Memory::uint32_at(rset_address) & bitmask) != 0; > > } > > Index: src/heap.cc > > =================================================================== > > --- src/heap.cc (revision 1129) > > +++ src/heap.cc (working copy) > > @@ -616,10 +616,10 @@ > > > > > > void Heap::ClearRSetRange(Address start, int size_in_bytes) { > > - uint32_t start_bit; > > + intptr_t start_bit; > > Address start_word_address = > > Page::ComputeRSetBitPosition(start, 0, &start_bit); > > - uint32_t end_bit; > > + intptr_t end_bit; > > Address end_word_address = > > Page::ComputeRSetBitPosition(start + size_in_bytes - kIntSize, > > 0, > > Index: src/spaces.h > > =================================================================== > > --- src/spaces.h (revision 1129) > > +++ src/spaces.h (working copy) > > @@ -187,7 +187,7 @@ > > // object address/offset pair, and the bit encoded as a single-bit > > // mask in the output parameter 'bitmask'. > > INLINE(static Address ComputeRSetBitPosition(Address address, int > offset, > > - uint32_t* bitmask)); > > + intptr_t* bitmask)); > > > > // Sets the corresponding remembered set bit for a given address. > > INLINE(static void SetRSet(Address address, int offset)); > > @@ -912,14 +912,14 @@ > > // True if the address is in the address range of this semispace (not > > // necessarily below the allocation pointer). > > bool Contains(Address a) { > > - return (reinterpret_cast<uint32_t>(a) & address_mask_) > > - == reinterpret_cast<uint32_t>(start_); > > + return (reinterpret_cast<intptr_t>(a) & address_mask_) > > + == reinterpret_cast<intptr_t>(start_); > > } > > > > // True if the object is a heap object in the address range of this > > // semispace (not necessarily below the allocation pointer). > > bool Contains(Object* o) { > > - return (reinterpret_cast<uint32_t>(o) & object_mask_) == > > object_expected_; > > + return (reinterpret_cast<intptr_t>(o) & object_mask_) == > > object_expected_; > > } > > > > // The offset of an address from the beginning of the space. > > @@ -948,9 +948,9 @@ > > Address age_mark_; > > > > // Masks and comparison values to test for containment in this > semispace. > > - uint32_t address_mask_; > > - uint32_t object_mask_; > > - uint32_t object_expected_; > > + intptr_t address_mask_; > > + intptr_t object_mask_; > > + intptr_t object_expected_; > > > > public: > > TRACK_MEMORY("SemiSpace") > > @@ -1036,11 +1036,11 @@ > > // True if the address or object lies in the address range of either > > // semispace (not necessarily below the allocation pointer). > > bool Contains(Address a) { > > - return (reinterpret_cast<uint32_t>(a) & address_mask_) > > - == reinterpret_cast<uint32_t>(start_); > > + return (reinterpret_cast<intptr_t>(a) & address_mask_) > > + == reinterpret_cast<intptr_t>(start_); > > } > > bool Contains(Object* o) { > > - return (reinterpret_cast<uint32_t>(o) & object_mask_) == > > object_expected_; > > + return (reinterpret_cast<intptr_t>(o) & object_mask_) == > > object_expected_; > > } > > > > // Return the allocated bytes in the active semispace. > > @@ -1066,7 +1066,7 @@ > > // The start address of the space and a bit mask. Anding an address in > > the > > // new space with the mask will result in the start address. > > Address start() { return start_; } > > - uint32_t mask() { return address_mask_; } > > + intptr_t mask() { return address_mask_; } > > > > // The allocation top and limit addresses. > > Address* allocation_top_address() { return &allocation_info_.top; } > > @@ -1150,9 +1150,9 @@ > > > > // Start address and bit mask for containment testing. > > Address start_; > > - uint32_t address_mask_; > > - uint32_t object_mask_; > > - uint32_t object_expected_; > > + intptr_t address_mask_; > > + intptr_t object_mask_; > > + intptr_t object_expected_; > > > > // Allocation pointer and limit for normal allocation and allocation > > during > > // mark-compact collection. > > > > > > Jeff Bailey >|< Google, Inc. >|< +1 514 670-8754 > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
