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
-~----------~----~----~----~------~----~------~--~---

Reply via email to