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

Reply via email to