Introduce a new type, PtrdiffT. Replace lots of uses of OffT (all those
that are memory offsets) with PtrdiffT; OffT should only be used for file
sizes and offsets.
Change Off64T from a ULong to a Long, as it should be. Replace some uses
of ULong in the address space manager with Off64T to match.
Also add a comment explaining the meanings of the basic types like Addr,
OffT, SizeT, etc.
Also fix the prototype for VG_(pread) -- the last arg is an OffT, not an
Int.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8959 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/callgrind/bb.c b/callgrind/bb.c
index 7939cae..8df3539 100644
--- a/callgrind/bb.c
+++ b/callgrind/bb.c
@@ -57,7 +57,7 @@
* - BB base as object file offset
*/
static __inline__
-UInt bb_hash_idx(obj_node* obj, OffT offset, UInt size)
+UInt bb_hash_idx(obj_node* obj, PtrdiffT offset, UInt size)
{
return (((Addr)obj) + offset) % size;
}
@@ -118,7 +118,7 @@
* Not initialized:
* - instr_len, cost_count, instr[]
*/
-static BB* new_bb(obj_node* obj, OffT offset,
+static BB* new_bb(obj_node* obj, PtrdiffT offset,
UInt instr_count, UInt cjmp_count, Bool cjmp_inverted)
{
BB* new;
@@ -176,7 +176,7 @@
/* get the BB structure for a BB start address */
static __inline__
-BB* lookup_bb(obj_node* obj, OffT offset)
+BB* lookup_bb(obj_node* obj, PtrdiffT offset)
{
BB* bb;
Int idx;
@@ -199,7 +199,7 @@
{
obj_node* obj;
DebugInfo* di;
- OffT offset;
+ PtrdiffT offset;
di = VG_(find_seginfo)(addr);
obj = CLG_(get_obj_node)( di );
@@ -292,7 +292,7 @@
Int idx, size;
obj_node* obj = obj_of_address(addr);
- OffT offset = addr - obj->offset;
+ PtrdiffT offset = addr - obj->offset;
idx = bb_hash_idx(obj, offset, bbs.size);
bb = bbs.table[idx];
diff --git a/callgrind/global.h b/callgrind/global.h
index b6a0334..926e858 100644
--- a/callgrind/global.h
+++ b/callgrind/global.h
@@ -304,7 +304,7 @@
*/
struct _BB {
obj_node* obj; /* ELF object of BB */
- OffT offset; /* offset of BB in ELF object file */
+ PtrdiffT offset; /* offset of BB in ELF object file */
BB* next; /* chaining for a hash entry */
VgSectKind sect_kind; /* section of this BB, e.g. PLT */
@@ -463,7 +463,7 @@
Addr start; /* Start address of text segment mapping */
SizeT size; /* Length of mapping */
- OffT offset; /* Offset between symbol address and file offset */
+ PtrdiffT offset; /* Offset between symbol address and file offset */
file_node* files[N_FILE_ENTRIES];
UInt number;
diff --git a/coregrind/m_aspacemgr/aspacemgr-aix5.c b/coregrind/m_aspacemgr/aspacemgr-aix5.c
index e0b7312..d862c85 100644
--- a/coregrind/m_aspacemgr/aspacemgr-aix5.c
+++ b/coregrind/m_aspacemgr/aspacemgr-aix5.c
@@ -162,7 +162,7 @@
Bool fromP; // AnonC, AnonV only: originated from PreAlloc?
UChar* fname; // MText, FileV only: filename
UChar* mname; // MText only: member name if present
- ULong offset; // FileV only: file offset
+ Off64T offset; // FileV only: file offset
}
AixSegment;
diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c
index 38c11f7..da388aa 100644
--- a/coregrind/m_aspacemgr/aspacemgr-linux.c
+++ b/coregrind/m_aspacemgr/aspacemgr-linux.c
@@ -330,7 +330,7 @@
static void parse_procselfmaps (
void (*record_mapping)( Addr addr, SizeT len, UInt prot,
- ULong dev, ULong ino, ULong offset,
+ ULong dev, ULong ino, Off64T offset,
const UChar* filename ),
void (*record_gap)( Addr addr, SizeT len )
);
@@ -498,7 +498,7 @@
VG_(debugLog)(logLevel, "aspacem",
"NSegment{%s, start=0x%llx, end=0x%llx, smode=%s, dev=%llu, "
- "ino=%llu, offset=%llu, fnIdx=%d, hasR=%d, hasW=%d, hasX=%d, "
+ "ino=%llu, offset=%lld, fnIdx=%d, hasR=%d, hasW=%d, hasX=%d, "
"hasT=%d, mark=%d, name=\"%s\"}\n",
show_SegKind(seg->kind),
(ULong)seg->start,
@@ -553,7 +553,7 @@
seg->hasR ? 'r' : '-', seg->hasW ? 'w' : '-',
seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-',
seg->isCH ? 'H' : '-',
- seg->dev, seg->ino, (Long)seg->offset, seg->fnIdx
+ seg->dev, seg->ino, seg->offset, seg->fnIdx
);
break;
@@ -872,7 +872,7 @@
static Bool sync_check_ok = False;
static void sync_check_mapping_callback ( Addr addr, SizeT len, UInt prot,
- ULong dev, ULong ino, ULong offset,
+ ULong dev, ULong ino, Off64T offset,
const UChar* filename )
{
Int iLo, iHi, i;
@@ -1527,7 +1527,7 @@
/*-----------------------------------------------------------------*/
static void read_maps_callback ( Addr addr, SizeT len, UInt prot,
- ULong dev, ULong ino, ULong offset,
+ ULong dev, ULong ino, Off64T offset,
const UChar* filename )
{
NSegment seg;
@@ -3060,7 +3060,7 @@
*/
static void parse_procselfmaps (
void (*record_mapping)( Addr addr, SizeT len, UInt prot,
- ULong dev, ULong ino, ULong offset,
+ ULong dev, ULong ino, Off64T offset,
const UChar* filename ),
void (*record_gap)( Addr addr, SizeT len )
)
diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index f244f02..a521a0e 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -1088,11 +1088,11 @@
static
Bool get_sym_name ( Bool demangle, Addr a, Char* buf, Int nbuf,
Bool match_anywhere_in_sym, Bool show_offset,
- Bool findText, /*OUT*/OffT* offsetP )
+ Bool findText, /*OUT*/PtrdiffT* offsetP )
{
DebugInfo* di;
Word sno;
- Int offset;
+ PtrdiffT offset;
search_all_symtabs ( a, &di, &sno, match_anywhere_in_sym, findText );
if (di == NULL)
@@ -1105,7 +1105,7 @@
}
offset = a - di->symtab[sno].addr;
- if (offsetP) *offsetP = (OffT)offset;
+ if (offsetP) *offsetP = offset;
if (show_offset && offset != 0) {
Char buf2[12];
@@ -1113,7 +1113,7 @@
Char* end = buf + nbuf;
Int len;
- len = VG_(sprintf)(buf2, "%c%d",
+ len = VG_(sprintf)(buf2, "%c%ld",
offset < 0 ? '-' : '+',
offset < 0 ? -offset : offset);
vg_assert(len < (Int)sizeof(buf2));
@@ -1221,7 +1221,7 @@
from the symbol start is put into *offset. */
Bool VG_(get_datasym_and_offset)( Addr data_addr,
/*OUT*/Char* dname, Int n_dname,
- /*OUT*/OffT* offset )
+ /*OUT*/PtrdiffT* offset )
{
Bool ok;
vg_assert(n_dname > 1);
@@ -1923,7 +1923,7 @@
offset of data_addr from the start of the variable. Note that
regs, which supplies ip,sp,fp values, will be NULL for global
variables, and non-NULL for local variables. */
-static Bool data_address_is_in_var ( /*OUT*/UWord* offset,
+static Bool data_address_is_in_var ( /*OUT*/PtrdiffT* offset,
XArray* /* TyEnt */ tyents,
DiVariable* var,
RegSummary* regs,
@@ -1993,8 +1993,8 @@
Int n_dname,
Addr data_addr,
DiVariable* var,
- OffT var_offset,
- OffT residual_offset,
+ PtrdiffT var_offset,
+ PtrdiffT residual_offset,
XArray* /*UChar*/ described,
Int frameNo,
ThreadId tid )
@@ -2237,14 +2237,14 @@
&& VG_(sizeXA)(vars) > 0) );
for (j = 0; j < VG_(sizeXA)( vars ); j++) {
DiVariable* var = (DiVariable*)VG_(indexXA)( vars, j );
- SizeT offset;
+ PtrdiffT offset;
if (debug)
VG_(printf)("QQQQ: var:name=%s %#lx-%#lx %#lx\n",
var->name,arange->aMin,arange->aMax,ip);
if (data_address_is_in_var( &offset, di->admin_tyents,
var, ®s,
data_addr, di->data_bias )) {
- OffT residual_offset = 0;
+ PtrdiffT residual_offset = 0;
XArray* described = ML_(describe_type)( &residual_offset,
di->admin_tyents,
var->typeR, offset );
@@ -2331,7 +2331,7 @@
of any of them bracket data_addr. */
vars = global_arange->vars;
for (i = 0; i < VG_(sizeXA)( vars ); i++) {
- SizeT offset;
+ PtrdiffT offset;
DiVariable* var = (DiVariable*)VG_(indexXA)( vars, i );
vg_assert(var->name);
/* Note we use a NULL RegSummary* here. It can't make any
@@ -2343,7 +2343,7 @@
if (data_address_is_in_var( &offset, di->admin_tyents, var,
NULL/* RegSummary* */,
data_addr, di->data_bias )) {
- OffT residual_offset = 0;
+ PtrdiffT residual_offset = 0;
XArray* described = ML_(describe_type)( &residual_offset,
di->admin_tyents,
var->typeR, offset );
@@ -2896,7 +2896,7 @@
return di->filename;
}
-ULong VG_(seginfo_get_text_bias)(const DebugInfo* di)
+PtrdiffT VG_(seginfo_get_text_bias)(const DebugInfo* di)
{
return di->text_present ? di->text_bias : 0;
}
diff --git a/coregrind/m_debuginfo/priv_readstabs.h b/coregrind/m_debuginfo/priv_readstabs.h
index c2d5387..3028099 100644
--- a/coregrind/m_debuginfo/priv_readstabs.h
+++ b/coregrind/m_debuginfo/priv_readstabs.h
@@ -41,7 +41,7 @@
Stabs reader
-------------------- */
extern
-void ML_(read_debuginfo_stabs) ( struct _DebugInfo* di, OffT debug_offset,
+void ML_(read_debuginfo_stabs) ( struct _DebugInfo* di, PtrdiffT debug_offset,
UChar* stabC, Int stab_sz,
UChar* stabstr, Int stabstr_sz );
diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h
index eb17460..5088aff 100644
--- a/coregrind/m_debuginfo/priv_storage.h
+++ b/coregrind/m_debuginfo/priv_storage.h
@@ -349,29 +349,29 @@
(4) is ensured by canonicaliseCFI.
*/
/* .text */
- Bool text_present;
- Addr text_avma;
- Addr text_svma;
- SizeT text_size;
- OffT text_bias;
+ Bool text_present;
+ Addr text_avma;
+ Addr text_svma;
+ SizeT text_size;
+ PtrdiffT text_bias;
/* .data */
- Bool data_present;
- Addr data_svma;
- Addr data_avma;
- SizeT data_size;
- OffT data_bias;
+ Bool data_present;
+ Addr data_svma;
+ Addr data_avma;
+ SizeT data_size;
+ PtrdiffT data_bias;
/* .sdata */
- Bool sdata_present;
- Addr sdata_svma;
- Addr sdata_avma;
- SizeT sdata_size;
- OffT sdata_bias;
+ Bool sdata_present;
+ Addr sdata_svma;
+ Addr sdata_avma;
+ SizeT sdata_size;
+ PtrdiffT sdata_bias;
/* .bss */
- Bool bss_present;
- Addr bss_svma;
- Addr bss_avma;
- SizeT bss_size;
- OffT bss_bias;
+ Bool bss_present;
+ Addr bss_svma;
+ Addr bss_avma;
+ SizeT bss_size;
+ PtrdiffT bss_bias;
/* .plt */
Bool plt_present;
Addr plt_avma;
diff --git a/coregrind/m_debuginfo/priv_tytypes.h b/coregrind/m_debuginfo/priv_tytypes.h
index 4b6f3e8..1906418 100644
--- a/coregrind/m_debuginfo/priv_tytypes.h
+++ b/coregrind/m_debuginfo/priv_tytypes.h
@@ -166,10 +166,10 @@
/* Describe where in the type 'offset' falls. Caller must
deallocate the resulting XArray. */
-XArray* /*UChar*/ ML_(describe_type)( /*OUT*/OffT* residual_offset,
+XArray* /*UChar*/ ML_(describe_type)( /*OUT*/PtrdiffT* residual_offset,
XArray* /* of TyEnt */ tyents,
UWord ty_cuOff,
- OffT offset );
+ PtrdiffT offset );
/* A fast-lookup cache for ML_(TyEnts__index_by_cuOff). Nothing
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
index 48e8dbe..98a9d33 100644
--- a/coregrind/m_debuginfo/readdwarf3.c
+++ b/coregrind/m_debuginfo/readdwarf3.c
@@ -524,9 +524,9 @@
typedef
struct {
/* FIXED */
- Addr rx_map_avma;
- SizeT rx_map_size;
- OffT text_bias;
+ Addr rx_map_avma;
+ SizeT rx_map_size;
+ PtrdiffT text_bias;
/* VARIABLE -- count stats */
UWord n_straightforward_biasings;
UWord n_kludgey_biasings;
diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
index b5e6be4..ebb6615 100644
--- a/coregrind/m_debuginfo/readelf.c
+++ b/coregrind/m_debuginfo/readelf.c
@@ -206,7 +206,7 @@
Char* sym_name, /* name */
Addr sym_svma, /* address as stated in the object file */
UChar* opd_img, /* oimage of .opd sec (ppc64-linux only) */
- OffT opd_bias, /* for biasing AVMAs found in .opd */
+ PtrdiffT opd_bias, /* for biasing AVMAs found in .opd */
/* OUTPUTS */
Char** sym_name_out, /* name we should record */
Addr* sym_avma_out, /* addr we should record */
diff --git a/coregrind/m_debuginfo/readstabs.c b/coregrind/m_debuginfo/readstabs.c
index 20b8869..85a779f 100644
--- a/coregrind/m_debuginfo/readstabs.c
+++ b/coregrind/m_debuginfo/readstabs.c
@@ -80,7 +80,7 @@
/* Read stabs-format debug info. This is all rather horrible because
stabs is a underspecified, kludgy hack.
*/
-void ML_(read_debuginfo_stabs) ( DebugInfo* di, OffT debug_offset,
+void ML_(read_debuginfo_stabs) ( DebugInfo* di, PtrdiffT debug_offset,
UChar* stabC, Int stab_sz,
UChar* stabstr, Int stabstr_sz )
{
diff --git a/coregrind/m_debuginfo/tytypes.c b/coregrind/m_debuginfo/tytypes.c
index ad80691..cfd850b 100644
--- a/coregrind/m_debuginfo/tytypes.c
+++ b/coregrind/m_debuginfo/tytypes.c
@@ -702,10 +702,10 @@
VG_(addBytesToXA)( xa, buf, VG_(strlen)(buf));
}
-XArray* /*UChar*/ ML_(describe_type)( /*OUT*/OffT* residual_offset,
+XArray* /*UChar*/ ML_(describe_type)( /*OUT*/PtrdiffT* residual_offset,
XArray* /* of TyEnt */ tyents,
UWord ty_cuOff,
- OffT offset )
+ PtrdiffT offset )
{
TyEnt* ty;
XArray* xa = VG_(newXA)( ML_(dinfo_zalloc), "di.tytypes.dt.1",
@@ -737,7 +737,7 @@
XArray* fieldRs;
UWord fieldR;
TyEnt* field = NULL;
- OffT offMin = 0, offMax1 = 0;
+ PtrdiffT offMin = 0, offMax1 = 0;
if (!ty->Te.TyStOrUn.isStruct) goto done;
fieldRs = ty->Te.TyStOrUn.fieldRs;
if ((!fieldRs) || VG_(sizeXA)(fieldRs) == 0) goto done;
@@ -771,7 +771,7 @@
if (mul.b != True)
goto done; /* size of field is unknown (?!) */
offMin = res.word;
- offMax1 = offMin + (OffT)mul.ul;
+ offMax1 = offMin + (PtrdiffT)mul.ul;
if (offMin == offMax1)
continue;
vg_assert(offMin < offMax1);
diff --git a/coregrind/m_libcfile.c b/coregrind/m_libcfile.c
index 79e2700..bef8b86 100644
--- a/coregrind/m_libcfile.c
+++ b/coregrind/m_libcfile.c
@@ -470,7 +470,7 @@
return 0;
}
-SysRes VG_(pread) ( Int fd, void* buf, Int count, Int offset )
+SysRes VG_(pread) ( Int fd, void* buf, Int count, OffT offset )
{
OffT off = VG_(lseek)( fd, (OffT)offset, VKI_SEEK_SET);
if (off < 0)
diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c
index b4b92f7..cc1d63b 100644
--- a/coregrind/m_machine.c
+++ b/coregrind/m_machine.c
@@ -107,7 +107,7 @@
void
VG_(get_shadow_regs_area) ( ThreadId tid,
/*DST*/UChar* dst,
- /*SRC*/Int shadowNo, OffT offset, SizeT size )
+ /*SRC*/Int shadowNo, PtrdiffT offset, SizeT size )
{
void* src;
ThreadState* tst;
@@ -130,7 +130,7 @@
void
VG_(set_shadow_regs_area) ( ThreadId tid,
- /*DST*/Int shadowNo, OffT offset, SizeT size,
+ /*DST*/Int shadowNo, PtrdiffT offset, SizeT size,
/*SRC*/const UChar* src )
{
void* dst;
diff --git a/coregrind/m_oset.c b/coregrind/m_oset.c
index b213597..2955ef2 100644
--- a/coregrind/m_oset.c
+++ b/coregrind/m_oset.c
@@ -282,7 +282,7 @@
/*--------------------------------------------------------------------*/
// The underscores avoid GCC complaints about overshadowing global names.
-AvlTree* VG_(OSetGen_Create)(OffT _keyOff, OSetCmp_t _cmp,
+AvlTree* VG_(OSetGen_Create)(PtrdiffT _keyOff, OSetCmp_t _cmp,
OSetAlloc_t _alloc, HChar* _cc,
OSetFree_t _free)
{
diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h
index 0e71fc1..a2d327c 100644
--- a/coregrind/m_syswrap/priv_syswrap-generic.h
+++ b/coregrind/m_syswrap/priv_syswrap-generic.h
@@ -67,7 +67,7 @@
extern
void
ML_(notify_aspacem_and_tool_of_mmap) ( Addr a, SizeT len, UInt prot,
- UInt mm_flags, Int fd, ULong offset );
+ UInt mm_flags, Int fd, Off64T offset );
DECL_TEMPLATE(generic, sys_ni_syscall); // * P -- unimplemented
diff --git a/coregrind/m_tooliface.c b/coregrind/m_tooliface.c
index cc4ac1d..6504aa9 100644
--- a/coregrind/m_tooliface.c
+++ b/coregrind/m_tooliface.c
@@ -391,10 +391,10 @@
DEF0(track_pre_mem_write, CorePart, ThreadId, Char*, Addr, SizeT)
DEF0(track_post_mem_write, CorePart, ThreadId, Addr, SizeT)
-DEF0(track_pre_reg_read, CorePart, ThreadId, Char*, OffT, SizeT)
-DEF0(track_post_reg_write, CorePart, ThreadId, OffT, SizeT)
+DEF0(track_pre_reg_read, CorePart, ThreadId, Char*, PtrdiffT, SizeT)
+DEF0(track_post_reg_write, CorePart, ThreadId, PtrdiffT, SizeT)
-DEF0(track_post_reg_write_clientcall_return, ThreadId, OffT, SizeT, Addr)
+DEF0(track_post_reg_write_clientcall_return, ThreadId, PtrdiffT, SizeT, Addr)
DEF0(track_start_client_code, ThreadId, ULong)
DEF0(track_stop_client_code, ThreadId, ULong)
diff --git a/coregrind/pub_core_libcfile.h b/coregrind/pub_core_libcfile.h
index bbb38ba..8da1871 100644
--- a/coregrind/pub_core_libcfile.h
+++ b/coregrind/pub_core_libcfile.h
@@ -74,7 +74,7 @@
extern Int VG_(check_executable)(/*OUT*/Bool* is_setuid,
HChar* f, Bool allow_setuid);
-extern SysRes VG_(pread) ( Int fd, void* buf, Int count, Int offset );
+extern SysRes VG_(pread) ( Int fd, void* buf, Int count, OffT offset );
/* Create and open (-rw------) a tmp file name incorporating said arg.
Returns -1 on failure, else the fd of the file. If fullname is
diff --git a/coregrind/pub_core_tooliface.h b/coregrind/pub_core_tooliface.h
index ca6494b..1e1535a 100644
--- a/coregrind/pub_core_tooliface.h
+++ b/coregrind/pub_core_tooliface.h
@@ -212,9 +212,10 @@
void (*track_pre_mem_write) (CorePart, ThreadId, Char*, Addr, SizeT);
void (*track_post_mem_write) (CorePart, ThreadId, Addr, SizeT);
- void (*track_pre_reg_read) (CorePart, ThreadId, Char*, OffT, SizeT);
- void (*track_post_reg_write)(CorePart, ThreadId, OffT, SizeT);
- void (*track_post_reg_write_clientcall_return)(ThreadId, OffT, SizeT, Addr);
+ void (*track_pre_reg_read) (CorePart, ThreadId, Char*, PtrdiffT, SizeT);
+ void (*track_post_reg_write)(CorePart, ThreadId, PtrdiffT, SizeT);
+ void (*track_post_reg_write_clientcall_return)(ThreadId, PtrdiffT, SizeT,
+ Addr);
void (*track_start_client_code)(ThreadId, ULong);
void (*track_stop_client_code) (ThreadId, ULong);
diff --git a/drd/drd_error.h b/drd/drd_error.h
index 6b56051..b72b82e 100644
--- a/drd/drd_error.h
+++ b/drd/drd_error.h
@@ -81,7 +81,7 @@
struct { // Used by:
AddrKind akind; // ALL
SizeT size; // ALL
- OffT rwoffset; // ALL
+ PtrdiffT rwoffset; // ALL
ExeContext* lastchange; // Mallocd
DrdThreadId stack_tid; // Stack
DebugInfo* debuginfo; // Segment
diff --git a/exp-ptrcheck/h_main.c b/exp-ptrcheck/h_main.c
index f69a471..2678b7a 100644
--- a/exp-ptrcheck/h_main.c
+++ b/exp-ptrcheck/h_main.c
@@ -1915,7 +1915,7 @@
/* these assume guest and host have the same endianness and
word size (probably). */
static UWord get_guest_intreg ( ThreadId tid, Int shadowNo,
- OffT offset, SizeT size )
+ PtrdiffT offset, SizeT size )
{
UChar tmp[ 2 + sizeof(UWord) ];
tl_assert(size == sizeof(UWord));
@@ -1929,7 +1929,7 @@
return * ((UWord*) &tmp[1] ); /* MISALIGNED LOAD */
}
static void put_guest_intreg ( ThreadId tid, Int shadowNo,
- OffT offset, SizeT size, UWord w )
+ PtrdiffT offset, SizeT size, UWord w )
{
tl_assert(size == sizeof(UWord));
tl_assert(0 == (offset % sizeof(UWord)));
@@ -1950,7 +1950,7 @@
}
}
-static void post_reg_write_nonptr ( ThreadId tid, OffT offset, SizeT size )
+static void post_reg_write_nonptr ( ThreadId tid, PtrdiffT offset, SizeT size )
{
// syscall_return: Default is non-pointer. If it really is a pointer
// (eg. for mmap()), SK_(post_syscall) sets it again afterwards.
@@ -1968,7 +1968,7 @@
}
static void post_reg_write_nonptr_or_unknown ( ThreadId tid,
- OffT offset, SizeT size )
+ PtrdiffT offset, SizeT size )
{
// deliver_signal: called from two places; one sets the reg to zero, the
// other sets the stack pointer.
@@ -1985,7 +1985,7 @@
}
void h_post_reg_write_demux ( CorePart part, ThreadId tid,
- OffT guest_state_offset, SizeT size)
+ PtrdiffT guest_state_offset, SizeT size)
{
if (0)
VG_(printf)("post_reg_write_demux: tid %d part %d off %ld size %ld\n",
@@ -2015,7 +2015,7 @@
}
}
-void h_post_reg_write_clientcall(ThreadId tid, OffT guest_state_offset,
+void h_post_reg_write_clientcall(ThreadId tid, PtrdiffT guest_state_offset,
SizeT size, Addr f )
{
UWord p;
diff --git a/exp-ptrcheck/h_main.h b/exp-ptrcheck/h_main.h
index 84efddc..83e17b1 100644
--- a/exp-ptrcheck/h_main.h
+++ b/exp-ptrcheck/h_main.h
@@ -77,8 +77,8 @@
Char* s, Addr lo );
void h_post_reg_write_demux ( CorePart part, ThreadId tid,
- OffT guest_state_offset, SizeT size);
-void h_post_reg_write_clientcall(ThreadId tid, OffT guest_state_offset,
+ PtrdiffT guest_state_offset, SizeT size);
+void h_post_reg_write_clientcall(ThreadId tid, PtrdiffT guest_state_offset,
SizeT size, Addr f );
void h_pre_syscall ( ThreadId tid, UInt syscallno );
diff --git a/exp-ptrcheck/pc_common.c b/exp-ptrcheck/pc_common.c
index 26c8127..b72d2fc 100644
--- a/exp-ptrcheck/pc_common.c
+++ b/exp-ptrcheck/pc_common.c
@@ -130,13 +130,13 @@
HChar actual[128];
} SorG;
struct {
- Addr addr;
- SSizeT sszB; /* -ve is write, +ve is read */
- Seg* vseg;
- Char descr1[96];
- Char descr2[96];
- Char datasym[96];
- OffT datasymoff;
+ Addr addr;
+ SSizeT sszB; /* -ve is write, +ve is read */
+ Seg* vseg;
+ Char descr1[96];
+ Char descr2[96];
+ Char datasym[96];
+ PtrdiffT datasymoff;
} Heap;
struct {
Seg* seg1;
diff --git a/include/pub_tool_aspacemgr.h b/include/pub_tool_aspacemgr.h
index 6144d27..1186551 100644
--- a/include/pub_tool_aspacemgr.h
+++ b/include/pub_tool_aspacemgr.h
@@ -101,7 +101,7 @@
/* Associated file (SkFile{C,V} only) */
ULong dev;
ULong ino;
- ULong offset;
+ Off64T offset;
UInt mode;
Int fnIdx; // file name table index, if name is known
/* Permissions (SkAnon{C,V}, SkFile{C,V} only) */
diff --git a/include/pub_tool_basics.h b/include/pub_tool_basics.h
index 3292f00..d91bb81 100644
--- a/include/pub_tool_basics.h
+++ b/include/pub_tool_basics.h
@@ -62,22 +62,40 @@
// By choosing the right types, we can get these right for 32-bit and 64-bit
// platforms without having to do any conditional compilation or anything.
+// POSIX references:
+// - http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/types.h.html
+// - http://www.opengroup.org/onlinepubs/009695399/basedefs/stddef.h.html
//
// Size in bits on: 32-bit archs 64-bit archs
// ------------ ------------
typedef unsigned long UWord; // 32 64
+typedef signed long Word; // 32 64
-typedef signed long Word; // 32 64
-
+// Addr is for holding an address. AddrH was intended to be "Addr on the
+// host", for the notional case where host word size != guest word size.
+// But since the assumption that host arch == guest arch has become so
+// deeply wired in, it's a pretty pointless distinction now.
typedef UWord Addr; // 32 64
typedef UWord AddrH; // 32 64
+// Our equivalents of POSIX 'size_t' and 'ssize_t':
+// - size_t is an "unsigned integer type of the result of the sizeof operator".
+// - ssize_t is "used for a count of bytes or an error indication".
typedef UWord SizeT; // 32 64
typedef Word SSizeT; // 32 64
-typedef Word OffT; // 32 64
+// Our equivalent of POSIX 'ptrdiff_t':
+// - ptrdiff_t is a "signed integer type of the result of subtracting two
+// pointers".
+// We use it for memory offsets, eg. the offset into a memory block.
+typedef Word PtrdiffT; // 32 64
-typedef ULong Off64T; // 64 64
+// Our equivalent of POSIX 'off_t':
+// - off_t is "used for file sizes".
+// At one point we were using it for memory offsets, but PtrdiffT should be
+// used in those cases.
+typedef Word OffT; // 32 64
+typedef Long Off64T; // 64 64
#if !defined(NULL)
# define NULL ((void*)0)
diff --git a/include/pub_tool_debuginfo.h b/include/pub_tool_debuginfo.h
index 30725d5..baf9981 100644
--- a/include/pub_tool_debuginfo.h
+++ b/include/pub_tool_debuginfo.h
@@ -80,7 +80,7 @@
from the symbol start is put into *offset. */
extern Bool VG_(get_datasym_and_offset)( Addr data_addr,
/*OUT*/Char* dname, Int n_dname,
- /*OUT*/OffT* offset );
+ /*OUT*/PtrdiffT* offset );
/* Try to form some description of data_addr by looking at the DWARF3
debug info we have. This considers all global variables, and all
@@ -113,11 +113,11 @@
typedef
struct {
- OffT base; /* offset from sp or fp */
- SizeT szB; /* size in bytes */
- Bool spRel; /* True => sp-rel, False => fp-rel */
- Bool isVec; /* does block have an array type, or not? */
- HChar name[16]; /* first 15 chars of name (asciiz) */
+ PtrdiffT base; /* offset from sp or fp */
+ SizeT szB; /* size in bytes */
+ Bool spRel; /* True => sp-rel, False => fp-rel */
+ Bool isVec; /* does block have an array type, or not? */
+ HChar name[16]; /* first 15 chars of name (asciiz) */
}
StackBlock;
@@ -167,7 +167,7 @@
extern SizeT VG_(seginfo_get_gotplt_size)( const DebugInfo *di );
extern const UChar* VG_(seginfo_soname) ( const DebugInfo *di );
extern const UChar* VG_(seginfo_filename) ( const DebugInfo *di );
-extern ULong VG_(seginfo_get_text_bias)( const DebugInfo *di );
+extern PtrdiffT VG_(seginfo_get_text_bias)( const DebugInfo *di );
/* Function for traversing the seginfo list. When called with NULL it
returns the first element; otherwise it returns the given element's
diff --git a/include/pub_tool_machine.h b/include/pub_tool_machine.h
index ae9669c..fc86bf9 100644
--- a/include/pub_tool_machine.h
+++ b/include/pub_tool_machine.h
@@ -90,10 +90,10 @@
void
VG_(get_shadow_regs_area) ( ThreadId tid,
/*DST*/UChar* dst,
- /*SRC*/Int shadowNo, OffT offset, SizeT size );
+ /*SRC*/Int shadowNo, PtrdiffT offset, SizeT size );
void
VG_(set_shadow_regs_area) ( ThreadId tid,
- /*DST*/Int shadowNo, OffT offset, SizeT size,
+ /*DST*/Int shadowNo, PtrdiffT offset, SizeT size,
/*SRC*/const UChar* src );
// Sets the shadow values for the syscall return value register(s).
diff --git a/include/pub_tool_oset.h b/include/pub_tool_oset.h
index 1573136..c496523 100644
--- a/include/pub_tool_oset.h
+++ b/include/pub_tool_oset.h
@@ -183,7 +183,7 @@
// a deallocation function (such as VG_(free)()) directly will likely
// lead to assertions in Valgrind's allocator.
-extern OSet* VG_(OSetGen_Create) ( OffT keyOff, OSetCmp_t cmp,
+extern OSet* VG_(OSetGen_Create) ( PtrdiffT keyOff, OSetCmp_t cmp,
OSetAlloc_t alloc, HChar* ec,
OSetFree_t free );
extern void VG_(OSetGen_Destroy) ( OSet* os );
diff --git a/include/pub_tool_tooliface.h b/include/pub_tool_tooliface.h
index 210df36..8194706 100644
--- a/include/pub_tool_tooliface.h
+++ b/include/pub_tool_tooliface.h
@@ -567,15 +567,15 @@
/* Register events. Use VG_(set_shadow_state_area)() to set the shadow regs
for these events. */
void VG_(track_pre_reg_read) (void(*f)(CorePart part, ThreadId tid,
- Char* s, OffT guest_state_offset,
+ Char* s, PtrdiffT guest_state_offset,
SizeT size));
void VG_(track_post_reg_write)(void(*f)(CorePart part, ThreadId tid,
- OffT guest_state_offset,
+ PtrdiffT guest_state_offset,
SizeT size));
/* This one is called for malloc() et al if they are replaced by a tool. */
void VG_(track_post_reg_write_clientcall_return)(
- void(*f)(ThreadId tid, OffT guest_state_offset, SizeT size, Addr f));
+ void(*f)(ThreadId tid, PtrdiffT guest_state_offset, SizeT size, Addr f));
/* Scheduler events (not exhaustive) */
diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c
index e95ad5e..33dcc26 100644
--- a/memcheck/mc_errors.c
+++ b/memcheck/mc_errors.c
@@ -98,15 +98,15 @@
BlockKind block_kind;
Char* block_desc; // "block", "mempool" or user-defined
SizeT block_szB;
- OffT rwoffset;
+ PtrdiffT rwoffset;
ExeContext* lastchange;
} Block;
- // In a global .data symbol. This holds the first 63 chars of
- // the variable's (zero terminated), plus an offset.
+ // In a global .data symbol. This holds the first 127 chars of
+ // the variable's name (zero terminated), plus a (memory) offset.
struct {
- Char name[128];
- OffT offset;
+ Char name[128];
+ PtrdiffT offset;
} DataSym;
// Is described by Dwarf debug info. Arbitrary strings. Must
@@ -286,10 +286,10 @@
break;
case Addr_Block: {
- SizeT block_szB = ai->Addr.Block.block_szB;
- OffT rwoffset = ai->Addr.Block.rwoffset;
- SizeT delta;
- const Char* relative;
+ SizeT block_szB = ai->Addr.Block.block_szB;
+ PtrdiffT rwoffset = ai->Addr.Block.rwoffset;
+ SizeT delta;
+ const Char* relative;
if (rwoffset < 0) {
delta = (SizeT)(-rwoffset);
diff --git a/memcheck/mc_main.c b/memcheck/mc_main.c
index 60eea31..3c069bf 100644
--- a/memcheck/mc_main.c
+++ b/memcheck/mc_main.c
@@ -3722,7 +3722,7 @@
big as the biggest guest state.
*/
static void mc_post_reg_write ( CorePart part, ThreadId tid,
- OffT offset, SizeT size)
+ PtrdiffT offset, SizeT size)
{
# define MAX_REG_WRITE_SIZE 1408
UChar area[MAX_REG_WRITE_SIZE];
@@ -3734,8 +3734,7 @@
static
void mc_post_reg_write_clientcall ( ThreadId tid,
- OffT offset, SizeT size,
- Addr f)
+ PtrdiffT offset, SizeT size, Addr f)
{
mc_post_reg_write(/*dummy*/0, tid, offset, size);
}
@@ -3745,7 +3744,7 @@
a parameter error.
*/
static void mc_pre_reg_read ( CorePart part, ThreadId tid, Char* s,
- OffT offset, SizeT size)
+ PtrdiffT offset, SizeT size)
{
Int i;
Bool bad;