diff --git a/CHANGELOG.md b/CHANGELOG.md index afe255e6f..2d7ede9fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Enhancement: module registry (#405) - Enhancement: Adding more arguments to httpClientSessionInit to allow passing back internal rc and removing the reference from changelog in `3.0.0`. (#499). +- Bugfix: make sure CEE3ERP is invoked in LE 31-bit XPLINK (#504) ## `3.0.0` - Feature: added javascript `zos.getStatvfs(path)` function to obtain file system information (#482). diff --git a/c/recovery.c b/c/recovery.c index 2c5da2a0a..50b386ac8 100644 --- a/c/recovery.c +++ b/c/recovery.c @@ -470,7 +470,7 @@ static void * __ptr32 getRecoveryRouterAddress() { " USING RCVCTX,11 \n" " CLC RCXEYECT,=C'RSRCVCTX' EYECATHER IS VALID? \n" " BNE RCVRET NO, LEAVE \n" -#if !defined(METTLE) && !defined(__XPLINK__) +#if !defined(METTLE) && !defined(_LP64) /* check if the LE ESTAE needs to handle this */ " L 12,RCXCAA LOAD CAA \n" " USING CEECAA,12 \n" diff --git a/tests/build_recoverytest.sh b/tests/build_recoverytest.sh index 8ec3726fb..54d2e0722 100755 --- a/tests/build_recoverytest.sh +++ b/tests/build_recoverytest.sh @@ -99,6 +99,21 @@ xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(), ../c/zos.c +xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,XPLINK,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(),so(),goff,xref,gonum,roconst,gonum,ASM,ASMLIB('SYS1.MACLIB'),ASMLIB('CEE.SCEEMAC')" '-Wl,ac=1' \ +-DRCVR_CPOOL_STATES \ +-I ../h -o recoverytest31_xplink recoverytest.c \ +../c/alloc.c \ +../c/cellpool.c \ +../c/collections.c \ +../c/le.c \ +../c/logging.c \ +../c/recovery.c \ +../c/scheduling.c \ +../c/timeutls.c \ +../c/utils.c \ +../c/zos.c + + xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,LP64,XPLINK,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(),so(),goff,xref,gonum,roconst,gonum,ASM,ASMLIB('SYS1.MACLIB'),ASMLIB('CEE.SCEEMAC')" '-Wl,ac=1' \ -DRCVR_CPOOL_STATES \ -I ../h -o recoverytest64 recoverytest.c \ diff --git a/tests/recoverytest.c b/tests/recoverytest.c index 36f8131f0..b6277720b 100644 --- a/tests/recoverytest.c +++ b/tests/recoverytest.c @@ -85,6 +85,11 @@ LE 31-bit: xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(),so(),goff,xref,gonum,roconst,gonum,ASM,ASMLIB('SYS1.MACLIB'),ASMLIB('CEE.SCEEMAC')" '-Wl,ac=1' \ -I ../h -o recoverytest recoverytest.c ../c/alloc.c ../c/collections.c ../c/le.c ../c/logging.c ../c/recovery.c ../c/scheduling.c ../c/timeutls.c ../c/utils.c ../c/zos.c +LE 31-bit XPLINK: + +xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(),so(),goff,xref,gonum,roconst,gonum,ASM,ASMLIB('SYS1.MACLIB'),ASMLIB('CEE.SCEEMAC')" '-Wl,ac=1' \ +-I ../h -o recoverytest recoverytest.c ../c/alloc.c ../c/collections.c ../c/le.c ../c/logging.c ../c/recovery.c ../c/scheduling.c ../c/timeutls.c ../c/utils.c ../c/zos.c + LE 64-bit: xlc -D_OPEN_THREADS=1 "-Wa,goff" "-Wc,LP64,XPLINK,LANGLVL(EXTC99),FLOAT(HEX),agg,exp,list(),so(),goff,xref,gonum,roconst,gonum,ASM,ASMLIB('SYS1.MACLIB'),ASMLIB('CEE.SCEEMAC')" '-Wl,ac=1' \ @@ -434,6 +439,15 @@ static void *thread2(void *data) { return NULL; } +static int testXPLINKStackInterrupt(void) { + // this should trigger LE's stack interrupt, so we're making sure our + // recovery doesn't interfere with it +#define STACK_BUFFER_SIZE (32 * 1024 * 1024) + int stackBuffer[STACK_BUFFER_SIZE] = {0}; + stackBuffer[STACK_BUFFER_SIZE - 1] = (int)stackBuffer; + stackBuffer[STACK_BUFFER_SIZE - 1]++; + return stackBuffer[STACK_BUFFER_SIZE - 1]; +} int main() { #ifdef METTLE @@ -460,6 +474,10 @@ int main() { printMessage, "top level recovery", NULL, NULL); +#ifdef __XPLINK__ + printf("xplink call result value = %d\n", testXPLINKStackInterrupt()); +#endif + if (pushRC != RC_RCV_OK) { printf("warn: something went wrong #1\n"); }