This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
"Weihaw Chuang" <weihawchuang@hotmail.com> writes: > This problem is motivated by trying to add the x86 bounds instruction > to Greg McGary's bounds checker. The x86 bounds instruction takes two > arguments: > bounds reg, [mem] > meaning bounds address, [ptr of <low bounds, high bounds>] > If address exceeds the bounds, an exception occurs. > > McGary's bounds checker turns pointers into fat pointers with the > representation <ptr, low, high>. > > Consider the case of global, statically defined arrays. Its bounds > are known at compile time, and with the current McGary infrastructure, > it does not create a fat pointer to access the array. To use this > bounds instruction I always need to have a bounds object <low bounds, > high bounds> allocated in memory and initialized. > > My hack is to create a fat pointer from the array base address, and > bounds. I then rebind the array identifier name, to the fat pointer. > Unfortunately the problem described earlier manifests itself when the > "array" (now a pointer) is used as an initializer to another pointer: > > int somearray[18]; // hack is to first handle > declaration normally, then create a > // fat ptr, and bind > somearray name to fat pointer > int* someptr = somearray; // initialization of someptr to fat > ptr not allowed. If I understand what you are saying, then it seems to me that someptr ought to be a fat pointer, which would presumably fix the problem. > >That is an error because in C you are only permitted to initialize a > >global variable to a constant. "&object" is a constant--object is not > >going to move at runtime. "ptr" is not a constant. > > > >The rules are different for C++. In C++ ptr2 will be initialized > >using a static constructor function. C does not support this usage. > > > Do you have pointers to the C++ machinery? Which TREE attributes are > set to allow the digest_init to work properly? C++ doesn't use digest_init. I'm not really sure how the C++ code works, although it is probably in cp/decl.c and cp/decl2.c. It will presumably creates a constructor function. Ian
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |