> C also makes a similar assumption, namely that an address
> greater than that of any object can be used as a list
> terminator.

I'm not familiar with that convention. How would a C program determine that
a particular pointer was greater than that of any object?

void *foo[];
...
if ( foo[i] > what? ) /* then reached the end of the list */ 

I'm familiar with the use of NULL as a "special" value. I think the C
standard says that 0 may never be a valid address.

Charles


-----Original Message-----
From: IBM Mainframe Assembler List [mailto:[email protected]]
On Behalf Of Paul Gilmartin
Sent: Saturday, September 5, 2020 9:29 AM
To: [email protected]
Subject: Re: Deep cuts

On 2020-09-05, at 09:31:51, Ed Jaffe wrote:
> 
> On 9/4/2020 10:46 AM, Seymour J Metz wrote:
>> VM uses a token of 8X'FF' at the end of the (R1) parameter list. I don't
recall what the convention is for the (R0) extended parameter list
introduced by VM/SP.
> 
> We've adopted "eight bytes of foxes" as an end marker for variable-length
parameter lists that use 64-bit pointers. Of course, we realize it means we
have a permanent restriction that the singular byte address of "sixteen
exabytes minus one" cannot be passed unambiguously as a parameter in such
parameter lists. We really don't see that as posing any practical problem
for our software even if that byte is available for acquisition.
> 
> We're also sort of assuming RSM will never hand out the last 1M or perhaps
even 2G virtual in a manner similar to what's done today for the 4K page at
x'7FFFF000'.
>  
C also makes a similar assumption, namely that an address
greater than that of any object can be used as a list
terminator.  No practical limitation except perhaps for
certain memory segmentation architectures.

Reply via email to