Translate

Mostrar mensagens com a etiqueta PSW. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta PSW. Mostrar todas as mensagens

terça-feira, 27 de maio de 2014

☕🔥 ABEND S0CB — O “DIVISOR IMPOSSÍVEL” DO MAINFRAME

 

Bellacosa Mainframe e o abend s0cb

☕🔥 ABEND S0CB — O “DIVISOR IMPOSSÍVEL” DO MAINFRAME

Quando o IBM Z Diz:

“VOCÊ TENTOU FAZER UMA CONTA QUE DESAFIA A MATEMÁTICA.”

Se existe um ABEND que faz o Junior Padawan perceber que:

até a matemática pode explodir no z/OS…

é o lendário:

🚨 S0CB

E normalmente ele aparece assim:

SYSTEM COMPLETION CODE=0CB

ou:

DECIMAL DIVIDE EXCEPTION

ou ainda:

FIXED-POINT DIVIDE EXCEPTION

E então nasce o desespero:

“O COBOL desaprendeu matemática?”
“O divisor virou entidade cósmica?”
“O COMP-3 entrou em colapso?”
“Eu dividi por zero?”
“COMPUTE virou arma nuclear?”

☕ Respira.

Porque o S0CB é um dos ABENDs MAIS CLÁSSICOS da aritmética IBM Z.

E um dos mais importantes para entender:

divisão decimal

overflow matemático

divide by zero

packed decimal

COMP-3

hardware arithmetic

dumps matemáticos


🔥 O QUE É O S0CB?

O S0CB é um:

🚨 DIVIDE EXCEPTION

Traduzindo:

A CPU IBM Z DETECTOU UMA OPERAÇÃO DE DIVISÃO INVÁLIDA.


☕ O GRANDE SEGREDO

O S0CB NÃO nasce no COBOL.

Ele nasce:

no hardware decimal do IBM Z.


🔥 O MOMENTO EXATO

Fluxo:

COMPUTE/DIVIDE
 ↓
COBOL gera instrução máquina
 ↓
CPU executa divisão
 ↓
Resultado inválido
 ↓
S0CB

☕ ANALOGIA BELLACOSA MAINFRAME

Imagine uma calculadora gigante bancária.

Você digita:

100 / 0

A calculadora olha para você em silêncio…

e explode dramaticamente.

Isso é:

☠️ S0CB


🔥 O MAIOR VILÃO

🚨 DIVISÃO POR ZERO

O rei absoluto do S0CB.


☕ EXEMPLO COBOL

COMPUTE WS-RESULT = WS-TOTAL / WS-QTD

Mas:

WS-QTD = ZERO

Resultado:

💥 S0CB


🔥 O “ZERO FANTASMA”

O mais traiçoeiro.


☕ EXEMPLO

MOVE SPACES TO WS-QTD

Depois:

COMPUTE WS-MEDIA = WS-TOTAL / WS-QTD

Dependendo do conteúdo:

☠️ desastre matemático.


🔥 O S0CB E O COMP-3

Agora entramos na matemática obscura do mainframe.


☕ EXEMPLO

PIC S9(7)V99 COMP-3

Packed decimal inválido pode causar:

divisão impossível.


🔥 O OVERFLOW MATEMÁTICO

Outro clássico.


☕ EXEMPLO

Resultado da divisão excede capacidade do campo.

01 WS-RESULT PIC 9(02).

Mas cálculo produz:

999999

CPU entra em sofrimento existencial.

Resultado:

💥 S0CB


🔥 O S0CB E O COMPUTE

Junior acha:

COMPUTE é inocente.

Não.

COMPUTE pode gerar:

  • DIVIDE

  • MULTIPLY

  • decimal arithmetic

  • overflow


☕ EXEMPLO CLÁSSICO

COMPUTE WS-PERC =
   (WS-VALOR * 100) / WS-TOTAL

Mas:

WS-TOTAL = 0

Resultado:

☠️ S0CB


🔥 O S0CB E O “ON SIZE ERROR”

Aqui nasce o conhecimento Jedi.


☕ EXEMPLO

DIVIDE A BY B
   GIVING C
   ON SIZE ERROR
      DISPLAY 'ERRO'
END-DIVIDE

Isso pode evitar alguns colapsos matemáticos.


🔥 MAS CUIDADO

Nem todo S0CB é tratado elegantemente.

Dependendo:

  • do runtime

  • do compilador

  • do tipo decimal

  • da instrução gerada

o ABEND ainda pode ocorrer.


☕ O S0CB E O ASRA

No CICS geralmente aparece como:

🚨 ASRA + S0CB

Porque o CICS intercepta a exceção matemática.


🔥 O S0CB E O DB2

Outro cenário clássico.

Valor vindo do DB2:

NULL
ZERO
DADO INVÁLIDO

Programa assume divisor válido.

Boom:

💥 S0CB


☕ O S0CB E O ARQUIVO

Campo numérico chega:

zerado

Mas ninguém validou.

Agora:

DIVIDE WS-QTD INTO WS-TOTAL

Resultado:

☠️ desastre financeiro.


🔥 O S0CB FANTASMA

O mais cruel.

Erro nasce MUITO antes.


☕ EXEMPLO

Linha 100:

MOVE ZERO TO WS-QTD

Linha 9000:

COMPUTE WS-MEDIA =
   WS-TOTAL / WS-QTD

Explosão distante da origem.


🔥 COMO INVESTIGAR O S0CB PASSO A PASSO


✅ PASSO 1 — IDENTIFIQUE O OFFSET

Exemplo:

PSW AT TIME OF ERROR
OFFSET X'01FA'

✅ PASSO 2 — PEGUE O LISTING COBOL

Cruze offset com:

  • compile listing

  • SYSADATA

  • Abend-AID

  • Fault Analyzer


✅ PASSO 3 — IDENTIFIQUE A DIVISÃO

Exemplo:

DIVIDE WS-A BY WS-B

ou:

COMPUTE WS-C = WS-A / WS-B

✅ PASSO 4 — INSPECIONE O DIVISOR

Pergunta sagrada:

“ELE ESTAVA ZERO?”


✅ PASSO 5 — ANALISE O STORAGE

Veja:

  • packed decimal

  • campos COMP-3

  • conteúdo hexadecimal

  • overflow


🔥 O DUMP DO S0CB

Aqui mora a matemática Jedi.

Veteranos analisam:

  • PSW

  • registers

  • decimal instructions

  • packed fields

  • operandos reais


☕ O PSW

Mostra:

ONDE A MATEMÁTICA MORREU.


🔥 O HEXADECIMAL IMPORTA

Exemplo válido:

F0F1F2

Número correto.


☕ EXEMPLO SUSPEITO

404040

Spaces em campo numérico.

Agora a divisão entra no reino do caos.


🔥 O S0CB E O “SOC7 DISFARÇADO”

Às vezes o problema real é:

dado inválido.

Mas explode durante divisão.

Veteranos investigam ambos:

  • S0CB

  • S0C7


☕ O MAIOR ERRO DOS JUNIORS

Corrigir apenas:

IF divisor = 0

sem entender:

POR QUE o divisor virou zero.


🔥 COMO EVITAR S0CB


✅ Validar divisor


✅ Usar ON SIZE ERROR


✅ Validar dados externos


✅ Revisar COMP-3


✅ Tratar NULL/zeros DB2


✅ Evitar overflow


✅ Revisar layouts


☕ O SEGREDO DOS VETERANOS

Veteranos protegem TODA divisão:

IF WS-QTD NOT = ZERO

Porque sabem:

matemática corporativa é território hostil.


🔥 CURIOSIDADE HISTÓRICA

O S0CB vem da arquitetura decimal do:

IBM System/360

Década de:

🏛️ 1960

IBM implementou aritmética decimal em hardware porque:

  • bancos

  • seguros

  • finanças

precisavam de precisão absoluta.


☕ EASTER EGG MAINFRAME

Veteranos brincam:

“S0CB significa:

Seu Programa Descobriu Que Não Existe Divisão Por Nada.”


🔥 O MAIOR ENSINAMENTO DO S0CB

Ele ensina algo profundo:

no mainframe, matemática é levada absurdamente a sério.

A CPU IBM Z NÃO tolera:

  • divisões impossíveis

  • overflow decimal

  • operandos inválidos


☕ A VERDADE FINAL

O S0C7 pune números inválidos.
O S0C4 pune memória inválida.
O S806 pune programas inexistentes.
O S913 pune acessos proibidos.

Mas…

☕ O S0CB É O MOMENTO EM QUE A PRÓPRIA MATEMÁTICA DO IBM Z DECIDE QUE SUA CONTA NÃO FAZ SENTIDO PARA O UNIVERSO.


quinta-feira, 23 de maio de 2013

☕🔥 ABEND S0C4 — O “BURACO NEGRO DA MEMÓRIA” NO MAINFRAME

 

Bellacosa Mainframe abend s0c4

☕🔥 ABEND S0C4 — O “BURACO NEGRO DA MEMÓRIA” NO MAINFRAME

Quando o IBM Z Diz:

“VOCÊ TOCOU EM UMA ÁREA QUE NÃO DEVERIA EXISTIR.”

Se existe um ABEND que faz veterano suspirar fundo…

é o lendário:

🚨 S0C4

E normalmente ele aparece assim:

SYSTEM COMPLETION CODE=0C4

ou:

PROTECTION EXCEPTION

ou ainda:

ADDRESSING EXCEPTION

E então o Junior Padawan entra em desespero:

“O COBOL explodiu?”
“O dataset corrompeu?”
“O CICS morreu?”
“A memória evaporou?”

☕ Respira.

Porque o S0C4 é um dos ABENDs MAIS IMPORTANTES da computação corporativa.


🔥 O QUE É O S0C4?

O S0C4 é um:

🚨 PROTECTION / ADDRESSING EXCEPTION

Traduzindo:

O PROGRAMA TENTOU ACESSAR UMA ÁREA DE MEMÓRIA INVÁLIDA.

Ou:

  • memória proibida

  • endereço inexistente

  • ponteiro inválido

  • storage corrompido

  • área não autorizada


☕ A FILOSOFIA DO S0C4

O IBM Z protege memória como um cofre nuclear.

Seu programa NÃO pode simplesmente sair acessando qualquer lugar.

Quando tenta…

💥 S0C4


🔥 ANALOGIA BELLACOSA MAINFRAME

Imagine um funcionário entrando em um banco.

Ele pode acessar:

✅ sua mesa
✅ seu departamento

Mas de repente tenta entrar:

❌ no cofre principal
❌ na sala do presidente
❌ na área militar subterrânea

O segurança aparece.

Isso é o:

☠️ S0C4


☕ O QUE REALMENTE ACONTECE

O programa executa:

MOVE
MVC
LOAD
STORE

Tudo normal.

Mas então tenta:

acessar endereço inválido

A MMU (Memory Management Unit) do IBM Z detecta:

❌ acesso ilegal

Resultado:

🚨 INTERRUPTION CODE → S0C4


🔥 OS TIPOS MAIS COMUNS DE S0C4


☠️ Protection Exception

Tentou acessar storage protegido.


☠️ Addressing Exception

Endereço inválido.


☠️ Translation Exception

Página inexistente.


☠️ Storage Overlay

Memória corrompida anteriormente.


☕ O MAIOR VILÃO DO S0C4

🚨 SUBSCRIPT FORA DA TABELA

O clássico dos clássicos.


🔥 EXEMPLO COBOL JUNIOR

01 WS-TABELA.
   05 WS-ITEM OCCURS 10 TIMES
      PIC X(10).

01 IDX PIC 9(04).

Tudo bem.

Mas aí:

MOVE WS-ITEM(999) TO WS-CAMPO

O COBOL tenta acessar memória além da tabela.

Resultado:

☠️ S0C4


☕ O DEMÔNIO CHAMADO SSRANGE

Sem:

SSRANGE

o COBOL NÃO protege tabelas adequadamente.

Então:

  • leitura inválida

  • corrupção silenciosa

  • overlay

  • S0C4 mais tarde


🔥 O S0C4 FANTASMA

O mais assustador.

Erro aparece LONGE da causa real.


☕ EXEMPLO

Linha 100:

MOVE lixo para tabela

Linha 5000:

💥 S0C4

O dano ocorreu antes.

Mas a explosão veio depois.


🔥 O S0C4 E O CICS

No CICS normalmente vira:

🚨 ASRA + S0C4

O CICS intercepta o program check.


☕ O CASO MAIS FAMOSO NO CICS

DFHCOMMAREA inválida

Programa espera:

01 DFHCOMMAREA.
   05 WS-CODIGO PIC 9(05).

Mas recebe:

  • tamanho menor

  • layout diferente

  • lixo

  • ponteiro inválido

Agora:

MOVE WS-CODIGO

explode.


🔥 O LINKAGE SECTION MALDITO

Outro clássico.


☕ EXEMPLO

PROCEDURE DIVISION USING LK-AREA.

Mas o chamador envia:

parâmetro incompatível

Agora o programa lê memória errada.

Resultado:

☠️ S0C4


🔥 O VERDADEIRO HORROR: OVERLAY

Aqui começa o lado sombrio do mainframe.


☕ O QUE É OVERLAY?

Programa sobrescreve memória alheia.

Exemplo:

STRING A B C
 INTO CAMPO-PEQUENO

Overflow.

Agora memória próxima é destruída.

Mais tarde:

💥 S0C4


🔥 O S0C4 E O PONTEIRO NULO

Muito comum em:

  • assembler

  • C

  • LE

  • APIs

Equivalente mainframe do:

NULL POINTER


☕ O QUE O DUMP ESTÁ DIZENDO

O dump do S0C4 é um mapa do crime.

Veteranos leem como CSI mainframe.


🔥 COMO INVESTIGAR PASSO A PASSO


✅ PASSO 1 — IDENTIFIQUE O PSW

Exemplo:

PSW AT TIME OF ERROR

Esse é o GPS do desastre.


✅ PASSO 2 — PEGUE O INTERRUPTION CODE

Exemplo:

0004

ou:

00000010

Ajuda identificar:

  • protection

  • addressing

  • translation


✅ PASSO 3 — IDENTIFIQUE O OFFSET

Exemplo:

OFFSET X'02FA'

✅ PASSO 4 — CRUZE COM O LISTING COBOL

Agora você encontra:

MOVE WS-TABELA(IDX)

Boom.

Caso resolvido.


☕ O SEGREDO DOS REGISTERS

Especialmente:

R1
R13
R14
R15

☕ R13

Stack/save area.


☕ R14

Return address.


☕ R15

Entry point/programa.


🔥 O HEXADECIMAL ENTRE AS SOMBRAS

Veteranos analisam:

00000000

Endereço zero.

Clássico ponteiro inválido.


☕ O “LOW VALUES DA MORTE”

Outro clássico:

X'00'

Memória zerada sendo usada como endereço.


🔥 O S0C4 E O AMODE/RMODE

Modo arquimago mainframe ativado.

Problemas entre:

  • 24 bits

  • 31 bits

  • 64 bits

podem gerar endereços inválidos.


☕ O S0C4 E O COBOL MODERNO

Hoje ainda ocorre muito por:

  • APIs

  • ponteiros

  • XML PARSE

  • JSON PARSE

  • LE

  • integração C


🔥 COMO EVITAR S0C4


✅ Compile com SSRANGE


✅ Valide índices


✅ Revise OCCURS


✅ Cuidado com REDEFINES


✅ Valide COMMAREA


✅ Nunca confiar em parâmetro externo


✅ Revisar overlays


☕ O SSRANGE — O ESCUDO DOS JEDIS

Compilar:

SSRANGE

faz o COBOL detectar acesso inválido ANTES da corrupção.

Sem isso:

corrupção silenciosa.


🔥 CURIOSIDADE HISTÓRICA

O S0C4 vem das arquiteturas:

IBM System/360

Década de:

🏛️ 1960

É literalmente um dos mecanismos clássicos de proteção de memória da história da computação.


☕ EASTER EGG MAINFRAME

Veteranos brincam:

“S0C4 é o mainframe dizendo:

VOCÊ TOCOU ONDE NÃO DEVIA.”


🔥 O MAIOR ERRO DO PADAWAN

Olhar apenas:

S0C4

e pensar:

“o COBOL morreu aqui.”

Não.

Frequentemente:

o crime aconteceu muito antes.


☕ A VERDADE FINAL

O S0C7 destrói números.
O S0C1 destrói instruções.
Mas…

☕ O S0C4 DESTRÓI A PRÓPRIA GEOGRAFIA DA MEMÓRIA.

Porque naquele instante…

O PROGRAMA TENTOU ATRAVESSAR UMA FRONTEIRA QUE O IBM Z JAMAIS PERMITIRIA.

domingo, 14 de abril de 2013

☕🔥 ABEND S0C1 — O “SALTO PARA O VAZIO” DO MAINFRAME

 

Brllacosa Mainframe abend soc1

☕🔥 ABEND S0C1 — O “SALTO PARA O VAZIO” DO MAINFRAME

Quando a CPU IBM Z Tenta Executar…

“ALGO QUE NÃO É UM PROGRAMA.”

Se existe um ABEND que faz o programador COBOL olhar o dump como se fosse hieróglifo alienígena…

é o lendário:

🚨 S0C1

E normalmente ele aparece assim:

IEC999I SYSTEM COMPLETION CODE=0C1

ou:

ABEND=S0C1 U0000 REASON=00000001

ou ainda:

OPERATION EXCEPTION

E aí o Junior Padawan pensa:

“Meu COBOL está quebrado?”
“O compilador enlouqueceu?”
“O load module morreu?”
“A CPU tentou executar magia negra?”

☕ Calma.

Porque o S0C1 é um dos ABENDs MAIS PROFUNDOS do universo z/OS.


🔥 O QUE É O S0C1?

O S0C1 é um:

🚨 OPERATION EXCEPTION

Traduzindo:

A CPU tentou executar uma instrução inválida.

Ou seja:

O processador IBM Z olhou para um byte da memória e disse:

❌ “ISSO NÃO É UMA INSTRUÇÃO MACHINE CODE VÁLIDA.”


☕ A FILOSOFIA DO S0C1

O S0C1 é assustador porque normalmente significa:

o fluxo do programa saiu da realidade esperada.

Algo desviou execução para:

  • lixo

  • dados

  • memória corrompida

  • endereço inválido

  • programa errado

  • módulo quebrado


🔥 O QUE REALMENTE ACONTECE

Imagine:

CPU IBM Z

Executando:

LOAD
ADD
MVC
BRANCH

Tudo normal.

Mas de repente…

o Program Counter aponta para:

FF FF FF FF

ou:

40404040

A CPU tenta interpretar aquilo como instrução.

Resultado:

💥 S0C1


☕ ANALOGIA BELLACOSA MAINFRAME

Imagine um piloto automático de avião.

Ele espera comandos válidos:

SUBIR
DESCER
CURVA

Mas recebe:

ABACAXI CÓSMICO

O sistema entra em colapso.

Isso é o S0C1.


🔥 O MAIOR SEGREDO

S0C1 raramente é “o problema”.

Ele normalmente é:

consequência de corrupção anterior.


☕ AS CAUSAS MAIS COMUNS


🚨 CALL para programa inexistente

Clássico absoluto.

CALL 'PGMXYZ'

Mas o módulo:

não existe

ou está errado.


🚨 Link-edit incorreto

Load module quebrado.


🚨 Branch para storage inválido

O programa desviou para memória errada.


🚨 Overlay de memória

Programa sobrescreveu área crítica.


🚨 Parameter list inválida

Muito comum em LINKAGE SECTION.


🚨 Executar dados como código

O horror máximo.


☕ O CASO MAIS FAMOSO

COBOL CHAMANDO MÓDULO ERRADO

Exemplo:

CALL WS-NOME-PGM

Mas:

WS-NOME-PGM = '     '

ou:

WS-NOME-PGM = '12345'

Agora o sistema tenta carregar lixo.

Resultado:

☠️ S0C1


🔥 O “CALL DINÂMICO MALDITO”

Veteranos têm pesadelos com isso.


☕ CALL ESTÁTICO

Seguro:

CALL 'CALCPGM'

☕ CALL DINÂMICO

Perigoso:

CALL WS-PGM

Porque:

  • pode vir espaço

  • pode vir lixo

  • pode vir nome inválido

  • pode vir lower-case

  • pode vir módulo inexistente


🔥 O S0C1 E O LOAD MODULE

Outro clássico.

Programa compilou.

Mas:

  • link-edit errado

  • módulo corrompido

  • versão incompatível

  • biblioteca incorreta

Então o entry point fica inválido.


☕ O S0C1 E O CICS

No CICS ele normalmente vira:

🚨 ASRA + S0C1

Porque o CICS encapsula o erro.


🔥 O VERDADEIRO TERROR: OVERLAY

Aqui começa o lado sombrio do mainframe.


☕ O QUE É OVERLAY?

Programa sobrescreve memória que não deveria.

Exemplo:

MOVE WS-TEXTO(1:500)
  TO WS-CAMPO(1:10)

ou:

SUBSCRIPT fora da tabela

Agora bytes críticos são destruídos.

Mais tarde…

a CPU tenta executar aquela região.

Resultado:

☠️ S0C1


🔥 O S0C1 FANTASMA

O mais assustador.

Erro acontece LONGE da causa real.

Exemplo:

Linha 100 corrompe memória

Mas o programa explode:

na linha 9000

☕ COMO INVESTIGAR O S0C1 PASSO A PASSO


✅ PASSO 1 — IDENTIFIQUE O PSW

O dump mostra:

PSW AT TIME OF ERROR

Esse é o GPS da tragédia.


✅ PASSO 2 — VEJA O ENDEREÇO

Exemplo:

INSTRUCTION ADDRESS = 00F13A92

✅ PASSO 3 — OLHE O OPCODE

O dump mostra algo como:

0000 0000
FFFFFFFF
40404040

Veterano já suspeita:

“isso não é código executável.”


🔥 O HEXADECIMAL MAIS ASSUSTADOR

40404040

No EBCDIC:

espaços

Ou seja:

A CPU tentou executar espaços como instrução.

Isso é clássico S0C1.


☕ COMO LER O DUMP


☕ PSW

Mostra:

  • endereço

  • modo da CPU

  • interrupção


☕ REGISTERS

Especialmente:

R14
R15

☕ R15

Muitas vezes aponta:

  • programa atual

  • entry point


☕ OFFSET

Exemplo:

OFFSET X'01FA'

Cruze com o listing COBOL.


🔥 O MOMENTO JEDI

Você pega:

  • PSW

  • offset

  • compile listing

E encontra:

CALL WS-PGM

Boom.

Caso resolvido.


☕ O S0C1 E O JCL

Outro clássico:

//STEPLIB DD DSN=LIB.ERRADA

Programa carrega versão incompatível.

Resultado:

💥 S0C1


🔥 O S0C1 E O AMODE/RMODE

Agora entramos no modo arquimago mainframe.

Problemas entre:

  • AMODE 24

  • AMODE 31

  • AMODE 64

podem causar branches inválidos.


☕ O S0C1 E O LE (LANGUAGE ENVIRONMENT)

Às vezes:

  • LE incompatível

  • runtime quebrado

  • mismatch de compilação

também geram S0C1.


🔥 COMO EVITAR S0C1


✅ Validar CALL dinâmico


✅ Não usar nomes vazios


✅ Evitar overlays


✅ Validar subscripts


✅ Revisar LINKEDIT


✅ Conferir STEPLIB/JOBLIB


✅ Usar SSRANGE

Grande arma contra corrupção de tabela.


☕ O SSRANGE — ESCUDO DOS PADAWANS

Compilar com:

SSRANGE

faz COBOL detectar acesso inválido em tabela.

Sem isso:

corrupção silenciosa.


🔥 CURIOSIDADE HISTÓRICA

O S0C1 vem das arquiteturas System/360.

Década de:

🏛️ 1960

Estamos falando de um erro nascido literalmente junto com a computação corporativa moderna.


☕ EASTER EGG MAINFRAME

Veteranos brincam:

“S0C1 é a CPU dizendo:

EU NÃO FAÇO IDEIA DO QUE VOCÊ MANDOU EXECUTAR.”


🔥 O MAIOR ERRO DO JÚNIOR

Ver:

S0C1

e assumir:

“o COBOL está errado.”

Não.

Frequentemente:

  • ambiente

  • load module

  • memória

  • linkage

  • call

  • JCL

são os culpados.


☕ A VERDADE FINAL

O S0C7 quebra números.
O S0C4 quebra memória.
Mas…

☕ O S0C1 QUEBRA A PRÓPRIA LINGUAGEM DA CPU.

Porque naquele instante…

O IBM Z PAROU DE ENTENDER O QUE ESTAVA SENDO EXECUTADO.