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