I'm sure there are lots of ways to do this. I did it in C, not C++, but I
think the following would still work:
('nargs' below can't be > 8 and I obfuscated a bit, so no guarantees...)
void callhli(int hli, long nargs, ...)
{
va_list ap;
int *args;
int i, j;
args = __malloc31(36);
va_start(ap, nargs);
for (i = 0; i < nargs; i++)
{
j = (int) va_arg(ap, long);
args[i] = j;
}
va_end(ap);
args[i-1] |= 0x80000000;
call31(hli, args);
free(args);
return;
}
CALL31
LR R15,R1
LR R1,R2
LA R13,SAVE Point R13 at a save area
SAM31
BASR R14,R15
SAM64
In article <[email protected]> you wrote:
> I have an assembler routine that gets called by 64-bit C++. The assembler
> routine uses CELQPRLG and CELQEPLG and calls DSNALI. The C++ function
> prototype has a variable number of arguments, the first being the number of
> parameters that follow in the argument list. The C++ program passes the count
> of 7 followed by 7 31-bit pointers. These were dumped prior to the call. I
> forced an S0C3 at entry to the assembler routine. R01 contains a valid 64-bit
> address. It points to a doubleword containing 7. But the 7 31-bit addresses
> do NOT follow the value of 7. They are at +A8 from r01. I want to move the
> pointers into 31-bit memory and call DSNALI to do a CONNECT (Hence a prior
> post about DB2 manuals). I can't figure out what I've done wrong. There is
> precious little doc on this and it's in the LE bookshelf, LE Programming
> Guide for 64-bit Virtual Addressing Mode. Is there other doc somewhere else ?
> I've looked but can't find anything.
> R01 points has 50_082FEBF8 and the 7 addresses are at 82FECA0.
> _82FEBF8 00000000 00000007 ! ........ !
> _82FEC00 00000000 2B0DBB88 00000050 29E54920 ! .......h...&.V.. !
> _82FEC10 00000050 082FED20 00000000 00000000 ! ...&............ !
> _82FEC20 00000000 297ED1C6 00000050 29E55330 ! .....=JF...&.V.. !
> _82FEC30 00000000 2B1D1B60 00000000 2B0DB74A ! .......-.......?? !
> _82FEC40 00000000 2B0DBB88 00000000 281B72A0 ! .......h........ !
> _82FEC50 00000000 2B0DCD88 00000050 29D29640 ! .......h...&.Ko !
> _82FEC60 00000050 29E2EB60 00000000 25218CF0 ! ...&.S.-.......0 !
> _82FEC70 00000000 2B14D808 00000000 2B1D152A ! ......Q......... !
> _82FEC80 00000000 2B0DBB88 00000000 281B72A0 ! .......h........ !
> _82FEC90 00000000 2B0DCD88 00000050 29D29640 ! .......h...&.Ko !
> _82FECA0 00000000 297ED0A2 00000000 297ED198 ! .....=??s.....=Jq !
> _82FECB0 00000000 297ED180 00000000 297ED184 ! .....=J......=Jd !
> _82FECC0 00000000 297ED188 00000000 297ED190 ! .....=Jh.....=J. !
> _82FECD0 00000000 297ED194 00000000 00000000 ! .....=Jm........ !
> Registers at abend are :
> General purpose register values
> 0-1 00000000_297ED194 00000050_082FEBF8
> 2-3 00000000_297ED0A2 00000000_297ED198
> 4-5 00000050_082FD940 00000000_00000000
> 6-7 00000000_2B14B778 00000000_2B1D9088
> 8-9 00000000_2B1D971E 00000000_281B72A0
> 10-11 00000000_2B1D9B58 00000050_29E55330
> 12-13 00000000_297ED188 00000000_297ED184
> 14-15 00000000_297ED180 00000000_24D50010
> Thanks in advance, Pierre.
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
--
Don Poitras - SAS Development - SAS Institute Inc. - SAS Campus Drive
[email protected] (919) 531-5637 Cary, NC 27513
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN