GOFF

GOFF- specifikationen (Generalized Object File Format) utvecklades för IBMs MVS -operativsystem för att ersätta IBM OS/360 Object File Format för att kompensera för svagheter i det äldre formatet.

Bakgrund

Det ursprungliga IBM OS/360 Object File Format utvecklades 1964 för den nya IBM System/360 stordatorn. Formatet användes också av tillverkare av pluggkompatibla och arbetsliknande stordatorer, inklusive Univac 90/60, 90/70 och 90/80 och Fujitsu B2800. Formatet utökades för att lägga till symboliska poster och utökad information om moduler, plus stöd för procedurer och funktioner med namn längre än 8 tecken. Även om detta hjälpte, tillhandahöll det inte den förbättrade information som behövs för dagens mer komplicerade programmeringsspråk och mer avancerade funktioner som objekt, egenskaper och metoder, Unicode-stöd och virtuella metoder .

GOFF-objektfilformatet utvecklades av IBM ungefär 1995 som ett sätt att övervinna dessa problem. Det tidigaste omnämnandet av detta format var i den inledande informationen om den nya High Level Assembler. Observera att OS/360-objektfilformatet helt enkelt ersattes av GOFF-formatet, det var inte föråldrat och används fortfarande av assemblers och språkkompilatorer där språket kan motstå begränsningarna i det äldre formatet.

Konventioner

Den här artikeln kommer att använda termen "modul" för att hänvisa till vilket namn eller motsvarande symbol som helst, som används för att tillhandahålla en identifierare för en kod eller data utanför det omfång som det refereras till . En modul kan referera till en subrutin, en funktion, Fortran Common eller Block Data, ett objekt eller klass, en metod eller egenskap för ett objekt eller klass, eller någon annan namngiven rutin eller identifierare utanför det specifika omfånget som refererar till det externa namnet.

Termerna "assembler" för ett program som konverterar assemblerspråk till maskinkod, såväl som att "assemblera" som processen att använda en, och att "kompilera", som processen att använda en "kompilator", som gör samma sak sak för högnivåspråk, bör, för syftet med denna artikel. anses utbytbara; så där "kompilera" och "kompilator" används, ersätt "sammanställa" och "sammanställare" efter behov.

Siffror som används i den här artikeln uttrycks enligt följande: såvida de inte anges som hexadecimala (bas 16), är alla tal som används i decimaler (bas 10). När det är nödvändigt för att uttrycka ett tal i hexadecimala format, skulle standardformatet för stordatorsammansättning att använda den stora bokstaven X före siffran, uttrycka eventuella hexadecimala bokstäver i siffran med versaler, och omge siffran med enkla citattecken, t.ex. siffran 15deadbeef 16 . uttryckt som X'15DEADBEEF'.

En "byte" som används i den här artikeln är 8-bitar, och om inget annat anges är en "byte" och ett "tecken" samma sak; tecken i EBCDIC är också 8-bitars. När multi-byte teckenuppsättningar (som Unicode ) används i användarprogram kommer de att använda två (eller fler) byte.

Krav och begränsningar

Formatet liknar OS/360 Object File Format men lägger till ytterligare information för användning i byggnadsapplikationer.

  • GOFF-filer är antingen poster med fast eller variabel längd.
  • En GOFF-post måste helt passa in i en enda post i det underliggande filsystemet. En GOFF-fil är inte en fil av typen stream .
  • Poster med fast längd måste vara 80 byte. Minsta storlek på en post med variabel längd är 56 byte. När det gäller poster med fast längd, kommer det att finnas oanvända byte i slutet av en post. Dessa byte måste ställas in på binär noll.
  • Programmet som läser (eller skriver) GOFF-poster ska inte göra antaganden om det interna formatet för poster, operativsystemet antas kunna tillhandahålla poster med fast eller variabel längd utan att programmet som läser dem behöver vara medveten om driften system intern filhantering. Längden på en post är inte en del av själva posten.
  • Binära värden lagras i big endian- format, t.ex. värdet 1 är X'01' för ett 8-bitars värde, X'0001' för ett 16-bitars värde, X'00000001' för ett 32-bitars värde och X' 0000000000000001' för ett 64-bitars värde.
  • Bitar räknas från vänster till höger; bit 0 är biten längst till vänster i en byte eller ett ord.
  • Poster med fast längd krävs för GOFF-filer som distribueras på Unix -system.
  • En post kan fortsätta på en efterföljande post. Om en registrering fortsätts, ska inga mellanliggande poster förekomma mellan registreringen som fortsätter och fortsättningsposten.
  • En GOFF-objektfil börjar med en HDR-post och slutar med en END-post. END-posten bör inkludera antalet GOFF-poster (inte antalet fysiska poster) i filen.
  • En språkkompilator eller assembler kan producera flera GOFF-filer i en kompilering/sammansättning, men de individuella GOFF-filerna måste vara åtskilda från varandra. Detta innebär att en modul eller kompileringsenhet, bestående av en HDR-post, mellanliggande ESD, TXT och andra, som avslutas med en END-post, sedan kan följas av en annan kompileringsenhet som börjar med HDR och slutar med END, och så vidare, efter behov. .
  • Modul- och klassnamn är skiftlägeskänsliga. En modul med namnet "exit" (som används av C -språket) behöver inte vara samma som "EXIT" som används av Fortran -språket.
  • Vissa konventioner som är tillämpliga på OS/360 Object File Format överförs till GOFF Object File Format, inklusive:
    • Om inget annat anges finns alla tecken i EBCDIC -teckenuppsättningen, förutom externa namn, som anges nedan.
    • ESD-poster (Huvudprogram, subrutiner, funktioner, FORTRAN Common, metoder och egenskaper i objekt) måste numreras med början med 1 och varje ny post ska ha nästa nummer i följd, utan några "luckor" i numreringssekvensen.
    • En ESD-post måste definieras innan någon annan post (som en TXT- eller RLD-post) refererar till den.
    • Varje ESD-post innehåller exakt en ESD-post. (Detta skiljer sig från det gamla formatet, som tillät upp till 3 ESD-objekt i varje ESD-post.)
    • En RLD-post (relocation dictionary) kan innehålla en eller flera poster, och en RLD-post kan fortsätta till en efterföljande post.
    • För att säkerställa framtida kompatibilitet bör fält indikerade som "reserverade" sättas till binär noll.
    • Teckenuppsättningar som används för externa namn definieras inte av GOFF-standarden, men det finns en bestämmelse för en fil för att indikera vilken teckenuppsättning som används. (Detta är för att stödja dubbelbyte teckenuppsättning Unicode -baserade modulnamn.) Vissa IBM-produkter tillåter dock endast tecken för externa namn och andra identifierare inom ett begränsat intervall, vanligtvis (EBCDIC) hexadecimala värden på X'41' till X 'FE' plus tecknen för in- och utskiftning, X'0F' respektive X'0E'.
  • Det nya formatet stöder klassnamn, av vilka det finns två typer, reserverade och användarlevererade eller icke-reserverade . Alla klassnamn har en maximal längd på 16 tecken.
  • Reserverade klassnamn består av en enda bokstav, ett understreck och 1 till 14 tecken. Reserverade klassnamn som börjar med B_ är reserverade för pärmen; Reserverade klassnamn som börjar med C_ markerade som laddningsbara är reserverade för program skapade för användning med IBMs språkmiljö (LE). Klassnamn som börjar med C_ och som inte är markerade som laddningsbara, samt klasser som börjar med X_, Y_ eller Z_ är tillgängliga för allmänt bruk som icke-reserverade .
  • Klassnamn som tillhandahålls av användaren kan vara små bokstäver.
  • Klassnamn är inte externa symboler.
Följande klasser som används av pärmen kan refereras till om det behövs för kompileringsändamål:
B_ESD Extern symbolordboksklass
B_TEXT Textklass
B_RLD Omplaceringsordboksklass
B_SYM Klass för intern symboltabell
B_IDRL Språk-översättare identifieringsdataklass
B_PRV Pseudoregistreringsklass
B_IDRU Användarspecificerad identifieringsdataklass
Följande klassnamn är reserverade av bindemedlet och är inte tillgängliga för användarapplikationer:
B_IDRB Pärmdatainformation
B_IDRZ SUPER-Zap datainformation
B_IMPEXP Import-Export Tabell
B_LIT Laddar informationstabell
B_MAP Kartläggningsdata
  • SYM-objektfilens symboliska tabellinformation från 360 Object File-formatposten är inte tillgänglig för GOFF-objektfiler; ADATA-posten (sub-post till TXT) måste användas istället.

Rekordtyper

På samma sätt som det äldre OS/360-formatet är objektfilposter uppdelade i 6 olika posttyper, några tillagda, några raderade, några ändrade:

  • HDR-posten (detta är ny) måste ske först, den definierar rubriken för objektfilen.
  • ESD-poster definierar huvudprogram, subrutiner, funktioner, dummysektioner, Fortran Common, metoder och egenskaper, och alla moduler eller rutiner som kan anropas av en annan modul. De används för att definiera programmen eller programsegmenten som kompilerades i denna körning av kompilatorn, och externa rutiner som används av programmet (som exit() i C , CALL EXIT i Fortran ; new( ) och dispose ( ) i Pascal ). ESD-poster bör förekomma före varje hänvisning till en ESD-symbol.
  • TXT-poster har utökats, och förutom att innehålla maskininstruktioner eller data som lagras av modulen, innehåller de även identifieringsdata (IDR) poster (20 eller fler typer), associerade data (ADATA) poster och ytterligare information relaterad till modulen.
  • RLD-poster används för att flytta adresser. Till exempel, ett program som hänvisar till en adress som ligger 500 byte inuti modulen, kommer internt att lagra adressen som 500, men när modulen laddas in i minnet måste den vara placerad någon annanstans, så en RLD-post informerar länkredigeraren eller laddaren om vad adresser att ändra. Dessutom, när en modul refererar till en extern symbol, kommer den vanligtvis att ställa in symbolens värde till noll, och sedan inkludera en RLD-post för den symbolen för att tillåta laddaren eller länkredigeraren att ändra adressen till rätt värde.
  • LEN-poster är nya och ger viss längdinformation.
  • END-poster indikerar slutet på en modul, och valfritt var programmet ska börja köras. Detta måste vara den sista posten i filen.

Formatera

GOFF-poster kan ha fast eller variabel längd; den minsta längden vid användning av poster med variabel längd är 56 tecken, även om de flesta poster kommer att vara längre än detta. Förutom modul- och klassnamn finns alla tecken i teckenuppsättningen EBCDIC . Unix-baserade system måste använda poster med fast längd (80 byte). Poster i filer med fast längd som är kortare än den fasta längden bör nollfyllas. För att skilja GOFF-poster från det äldre OS/360-objektformatet (där den första byten i en post är X'02') eller från kommandon som kan finnas i filen, är den första byten i varje GOFF-post alltid det binära värdet X '03', medan kommandon måste börja med ett teckenvärde på minst mellanslag (X'40'). De nästa 2 byten av en GOFF-post indikerar posttypen, fortsättningen och versionen av filformatet. Dessa första 3 byte är kända som PTV -fältet.

PTV

PTV-fältet representerar de första 3 byten av varje GOFF-post.

PTV-fält
Byte Bits Värde Syfte
0 Allt 03 Indikerar början av en GOFF-post
1 0-3 0 ESD-post (External Symbol).
1 TXT (text) post
2 RLD (Omlokalisering) rekord
3 LEN (Längd) rekord
4 END (Slut) post
X'5'-X'E' Reserverad
X'F' HDR (Header) rekord
4-5 Reserverad
6-7 00 Inledande post som inte fortsätter på nästa post. Detta bör vara det enda värdet som används för GOFF-poster med variabel längd
01 Inledande rekord som fortsätter på nästa skiva
10 Fortsättningsposten fortsätter inte på nästa post
11 Fortsättningsrekord som fortsätter på nästa post
2 Allt 00 Versionsnummer för objektfilformatet. Alla värden utom X'00' är reserverade

HDR

HDR-posten krävs och måste vara den första posten.

HDR-skiva
Byte(ar) Storlek Fält Värde Syfte
0-2 3 PTV X'03F000' Endast tillåtet värde; HDR-inspelning kan för närvarande inte fortsätta
3-47 45 0 Reserverad
48-51 4 Arkitektur nivå Binär 0 eller 1 GOFF arkitekturnivå; alla värden utom 0 och 1 är reserverade
52-53 2 Modulegenskaper Storlek binär Längd på fältet Modulegenskaper
54-59 6 0 Reserverad
60- 0+ Modulegenskaper Lista över modulegenskaper (valfritt)

ESD

En ESD-post ger det offentliga namnet för en modul, ett huvudprogram, en subrutin, procedur, funktion, egenskap eller metod i ett objekt, Fortran Common eller alternativ ingångspunkt. En ESD-post för ett offentligt namn måste finnas i filen innan någon hänvisning till det namnet görs av någon annan post.

ESD Record
Byte(ar) Storlek Fält Värde (eller bitar) Syfte
0-2 3 PTV X'030000' ESD-post utan fortsättningar
X'030100' ESD-post som fortsätter på nästa skiva
3 1 Symboltyp 00 SD - Sektionsdefinition; Detta används för de tidigare värdena SD, CM (Common) och PC (Privat Code, ett SD vars namn är tomt). "Prent" ESDID-värdet måste vara 0. Detta används för att definiera ett huvudprogram, en subrutin eller funktion för vilken koden är en del av denna fil. Används även för Fortran Common.
01 ED - Extern definition. "Förälder" ESDID måste vara icke-noll och vara värdet på en SD-post som refererar till denna externa symbol. Om ett RLD-värde hänvisar till en klass som denna post tillhör, måste klassen som detta element refererar till anges i fältet Externt namn. Detta används för att namnge en anropad procedur eller funktion.
02 LD - Etikettdefinition. "Förälder" ESDID måste vara icke-noll och vara värdet på en SD-post som definierar denna symbol i sig själv. Detta kan användas för att skapa ett alias för modulen eller för att exponera en del av den som en separat rutin. Till exempel kan runtime-biblioteket för ett visst programmeringsspråk ha vissa funktioner som det måste använda sig av, men som är användbara av program som är skrivna med det språket, och därför kan en funktion ges en etikett så att den kan anropas direkt. Till exempel kan det finnas ett komplett matematikpaket som en enda modul, och alla standardfunktioner (sinus, cosinus, kvadratrot, etc.) kan benämnas ingångspunkter i den modulen.
03 PR - Delreferens eller Pseudoregister. Utmärks av fältet Name Space ID. "Förälder" ESDID måste vara icke-noll och vara värdet på en SD-post som definierar denna symbol i sig själv.
04 ER och WX - Extern referens / Svag extern referens. Utmärks av värdet "Bindande styrka" i fältet "Attribut". WX används där den främmande rutinen kan saknas. Till exempel, om ett kalkylatorprogram hade ett snabbt högpresterande matematikpaket som var valfritt, kunde det kallas som ett WX, och om det saknades eller inte var tillgängligt, kan programmet nedgraderas till ett mindre matematikpaket.
4-7 4 ESDID Binär ESDID-identifierare som börjar med 1. Varje nytt ESDID måste vara exakt 1 högre än den föregående posten.
8-11 4 Förälder ESDID binär Detta är ESDID för objektet som definierar denna post, om det är en del av ett annat objekt. Den är 0 om den inte har någon förälder.
12-15 4 0 Reserverad
16-19 4 Offset Binär Adress till denna symbol inom dess överordnade ESDID för LD- eller ED-poster; noll annars.
20-23 4 0 Reserverad
24-27 4 Längd Binär Längd på denna artikel för ED- och PR-typer; noll annars. Om det faktiska längdvärdet skjuts upp; detta värde är satt till -1.
28-31 4 Utökat attribut ESDID Binär ESDID för element som innehåller utökad attributinformation för ED- och LD-typer; används vanligtvis där DLL-filer stöds för symboler som löses vid körning (som virtuella metoder). Noll annars.
32-35 4 Utökad attributoffset Binär Adress där utökade attribut kan hittas för föregående fält, används för ED- och LD-poster med utökade attribut; noll annars.
36-39 4 0 Reserverad
40 1 Namn Space ID Identifierar namnutrymmet som detta tillhör
0 Reserverad för Program Management Binder
1 Normalt namn
2 Pseudoregister
3 Delar (externa poster tilldelat utrymme inklusive objekt som innehåller initierade statiska data)
41 1 Flaggor
Fyll Present Bit 0 0 Ingen fyllning
1 Fyll byte närvarande (endast giltigt för ED-typer)
Manglad Bit 1 0 Symbolen är inte skadad
1 Symbolen kan vara manglad
Kan ändra namn Bit 2 0 Kan inte döpas om (samma som "mappad" flagga i XOBJ)
1 Symbol kan byta namn (Kan delta i språkmiljö (LE) typ byta namn)
Avtagbar klass Bit 3 0 (Standard) Ej borttagbar
1 Denna klass kan valfritt tas bort utan att det påverkar programmets funktion (gäller endast ED-typer)
Bits 4-6 Reserverad
Boka extra utrymme Bit 7 0 Inget extra utrymme reserverat
1 Reservera 16 byte utrymme i början av klassen (endast MRG-klass ED-typ)
42 1 Fyll värde Värde på Fill byte, om Fill Present-flaggan är inställd
43 1 0 Reserverad
44-47 4 Tillhörande data Binär Används för ID för miljö eller statiskt område för LD-artiklar med XLINK
48-51 4 Prioritet Binär Sorteringsordning av PR-artiklar
52-59 8 0 Reserverad
60-69 10 Beteendeegenskaper Beteendeattribut för detta objekt (se tabellen Beteendeattribut nedan)
70-71 2 Namn Längd Binär Längden på denna artikels namn; kan inte vara noll
72- namn Text Namnet på denna artikel med efterföljande ämnen trunkerade. Måste vara minst ett tecken; Privat kod består av ett enda ämne. Namnet är skiftlägeskänsligt.
REM 0 Trailer: Oanvänt utrymme om det behövs för poster i fast storlek; måste fyllas i noll. Behövs inte i poster med variabel längd.

Fortsättning

När det gäller skivor med fast längd där namnet kräver fortsättningsposter används följande:

ESD-fortsättningspost
Byte(ar) Storlek Fält Värde Syfte
0-2 3 PTV X'030200' ESD-fortsättningspost utan ytterligare fortsättningar
X'030300' ESD fortsättningspost som fortsätter på nästa post
3- namn Text Resten av namnet om denna post inte fortsätter, eller nästa 77 byte av namnet om den fortsätter.
REM 0 Återstoden för en post med fast längd som är längre än de uppgifter som tillhandahålls. Den innehåller de avslutande byten om detta är den sista posten för detta namn och namnet är kortare än poststorleken; måste vara 0 ifylld. Det här fältet finns inte i poster med variabel längd.

Beteendeattribut

Fält för beteendeattribut (byte 60-69 av ESD-post)
Offset Storlek (Byte) Bits Fält Värde Syfte
0 1 Adressegenskaper Adresseringsläge associerat med denna externa symbol. Dessa värden används också av AMODE -fältet i END -posten.
00 AMODE inte specificerad (standard är AMODE (24))
01 AMODE(24)
02 AMODE(31)
03 AMODE(NÅGON) (24 eller 31)
04 AMODE(64)
10 AMODE(MIN) (Använd den minsta AMODE som används av alla moduler)
1 1 Bostadsfastigheter Extern symbols associerade uppehållsläge
00 RMODE inte specificerad (standard är RMODE (24))
01 RMODE(24)
03 RMODE(31) (motsvarar RMODE(NÅGON))
04 RMODE(64)
2 1 0-3 (4) Text Record Style Textstil för denna klass (endast ED- och PR-typer) All text måste ha samma stil
0000 Byte-orienterad
0001 Strukturerad data (Binder Oriented)
0010 Strukturerad data (användardefinierad)
4-7 (4) Bindande algoritm Databindningsmetod
0000 Sammanfoga alla objekt efter varandra
0001 Sammanfoga (alla identiskt namngivna objekt kommer att placeras på samma utrymme, med den största storleken angivna och mest restriktiva justeringen). Objekt med olika namn kommer att sammanfogas. Detta är den vanliga metoden för CM- och PR-typer.
3 1 0-2 (3) Uppgiftsbeteende Indikering om modulen är återinträdande och/eller återanvändbar
000 Ospecificerad
001 Varken återanvändbar eller återanvändbar (icke-REUS)
010 Seriellt återanvändbar (REUS)
011 Reentrant (RENT), innebär också (REUS)
3 0 Reserverad
4 Endast läs 0 Inte endast läs
1 Endast läs
5-7 (3) Körbar 000 Ej angivet
001 Ej körbar (endast data)
010 Körbar (kod eller kod och data)
4 1 0-1 (2) 0 Reserverad
2-3 (2) Duplikatsymbolens svårighetsgrad Felnivån som en dubblettsymbol bör höja (endast PR-poster)
00 Pärm bestämmer svårighetsgraden
01 Minst 4 (varning)
10 Minst 8 (fel)
11 Reserverad
4-7 (4) Bindande styrka Svaga referenser kommer inte att söka i andra bibliotek; Starka referenser kommer att söka efter symbolen i andra bibliotek. Starka definitioner kan lösas till vilken referens som helst; detta är standard.
0000 Stark
0001 Svag
5 1 0-1 (2) Klassladdningsbeteende Bestämmer om elementen i en klass kommer att laddas om ett operativsystem LOAD-begäran används med avseende på ett objekt
00 LOAD - Ladda denna klass
01 UPPDRAD LASTNING - Den här klassen kommer förmodligen att användas och bör laddas
10 NOLOAD - Ladda inte denna klass
11 Reserverad
2 Gemensam flagga Om 1, behandla som "gammal" CM-typ COMMON där flera referenser anger storleken på det största området som används av någon referens. En SD-typ med samma namn kommer att behålla storleken och texten. Den enda texttyp som stöds för detta är B_TEXT.
3 Direkt vs. Indirekt referens 0 Direkta referenser (för pärmen)
1 För PR-typ är detta en länkbeskrivning; för ER-typ är detta en referens till en XPLINK-kopplingsbeskrivning
4-7 (4) Bindande omfattning 0000 Ospecificerad
0001 Avsnittsomfång ("lokalt")
0010 Modulomfattning ("global")
0011 Bibliotekets omfattning
0100 Import-Export omfattning
6 1 0-1 (2) Reserverad
2 Länktyp För typerna ER, LD, PD och PR
0 Standard O/S länkage (standard)
1 XPLINK-koppling
3-7 (5) Inriktning Underförstådd justering av detta objekt
00 000 Byte
00001 Halvord
00010 Fullword
00011 Dubbelord
00100 Quadword
00101 4KB sida
Alla visade justeringar är tillgängliga för ED- och PR-typer, förutom att PR inte kan använda sidjustering
7-9 3 Reserverad

ADATA-poster

ADATA ("associerade data")-poster används för att tillhandahålla ytterligare symbolinformation om en modul. De ersatte de äldre SYM-posterna i 360-objektfilformatet. För att skapa en ADATA-post

  • Skapa en ESD-post av typen ED för klassnamnet som posterna ingår i
  • Ställ in alla fält i posten Behavioral Attributes till 0 utom
    • Klassladdning (bitar 0-1 av byte 5) är X'10'
    • Bindningsalgoritmen är 0
    • Text Record Style (bitar 0-3 av byte 2) är X'0010'
    • Ställ eventuellt in skrivskyddad (bit 4 av byte 3) och Not Executable (bitar 5-7 i byte 3) om så är lämpligt
  • Skapa en TXT-post för varje ADATA-objekt
    • Element ESDID är värdet på ADATA ED-posten för just den ADATA-posten
    • Offset är noll
    • Data Length är längden på ADATA-posten
    • Datafältet innehåller själva ADATA-posten

ADATA-poster kommer att läggas till i slutet av klassen i den ordning de deklareras.

Klassnamn som tilldelats ADATA-poster översätts av IBM-program genom att konvertera det binära värdet till text och lägga till det i namnet C_ADATA , så ett objekt numrerat X'0033' skulle bli textsträngen C_ADATA0033 .

ADATA-posttyper
Typ Beskrivning
X'0000' - X'7FFF' Översättarposter (observera att vissa värden i intervallet 0-X'0130' används av vissa IBM-språköversättarprodukter inklusive Assembler, Cobol och PL/I ).
X'8000' - X'8FFF' Program Management poster
X'9000' - X'DFFF' Reserverad
X'E000' - X'EFFF' Reserverat för kompilatorer och assemblerare som inte har släppts av IBM.
X'F000' - X'FFFF' Tillgänglig för användarregister. IBM kommer inte att använda dessa värden.

Text

TXT-poster anger maskinkodinstruktioner och data som ska placeras på en specifik adressplats i modulen. Observera att varhelst en "längd" måste anges för denna post, måste längdvärdet inkludera eventuella fortsättningar till denna post.

TXT-post
Byte(ar) Storlek Fält Bits Värde Syfte
0-2 3 PTV X'031000' TXT-post utan fortsättningar
X'031100' TXT-post som fortsätter på nästa post
3 1 0-3 (4) Reserverad
Stil 4-7 (4) Alla andra värden är reserverade
0000 Byteorienterad data
0001 Strukturerad data (för närvarande är de enda strukturerade data som stöds de 19-byte IDR-fälten; se IDR-datatabellen )
0010 Ostrukturerad data
4-7 4 Element ESDID Binärt tal ESDID som innehållet i denna post tillhör
8-11 4 Reserverad
12-15 4 Offset Binär adress Adress inom ESDID där denna data ska placeras. Detta bör vara 0 för strukturerad och ostrukturerad data.
16-19 4 Textfältets sanna längd binärt värde: 0 eller full storlek efter expansion Om textkodningsfältet är 0 måste detta vara 0. Annars är detta fält i full storlek på texten efter dekomprimering eller uppackning
20-21 2 Textkodning binärt värde 0 om text inte kräver replikering, uppackning eller avkodning; icke-noll för att indikera att text måste avkodas, packas upp eller utökas; se Kompressionstabell
22-23 2 Datalängd binärt värde större än noll Den totala längden av data på denna post i byte som ett värde utan tecken och får inte vara noll
24- Data Maskinkod och/eller data som ska infogas. Om IDR-data ingår är det föremål för särskilda regler och krav, se IDR-datatabellen
REM Finns inte för poster med variabel längd; återstående byte för fast post längre än återstående data, och måste vara binära nollor

Fortsättning

TXT-fortsättningspost
Byte(ar) Storlek Fält Bits Värde Syfte
0-2 3 PTV X'031200' Fortsättningsprotokoll utan ytterligare fortsättningar
X'031300' Fortsättningsrekord som fortsätter nästa rekord
3- Data fortsatte från tidigare rekord
REM Om återstoden av posten är längre än data; noll fylld

Kompressionstabell

En komprimeringstabell används om byte 20-21 i TXT-posten inte är noll. R-värdet används för att bestämma hur många gånger strängen ska upprepas; L-värdet anger längden på texten som ska upprepas "R" gånger. Detta kan användas för att förinitiera tabeller eller arrayer till tomma eller noll eller för något annat ändamål där det är användbart att uttrycka upprepade data som en upprepningsräkning och ett värde.

Kompressionstabell
Byte(ar) Storlek Fält Värde Syfte
Om värdet i byte 20-21 i denna TXT-post är 0001
0-1 2 R Repeat Count, ett heltal utan tecken som är större än 0 Antal gånger för att upprepa strängen med början i byte 4.
2-3 2 L Binär längd, ett heltal utan tecken som är större än 0 Längd på sträng som börjar i byte 4
4- Sträng Strängen, med längden "L" som ska upprepas "R" gånger.
Alla andra värden för byte 20-21 är reserverade

IDR-datatabell

IDR-tabellen, som finns från byte 24 i TXT-posten, identifierar kompilatorn eller assemblern (och dess versionsnummer) som skapade den här objektfilen.

IDR-fält
Byte(ar) Storlek Fält Värde Syfte
0 1 x'00' Reserverad
1 1 Typ Typ av IDR-fält (observera att primär och sekundär identifiering hänvisar till det första respektive andra identifieringsfältet som visas på END-kortet i det tidigare OS/360 Object Module File Format.)
00 Primär identifiering; Gammalt IDR-format 1
01 Sekundär identifiering; Gammalt IDR-format 1
02 Utökad identifiering; IDR-format 2
03 Primär identifiering; IDR-format 3
04 Sekundär identifiering; IDR-format 3
2-3 2 Längd Binärt tal Längden på IDR-data som osignerat heltal större än noll
4+ IDR-data enligt det specificerade formatet i byte 1 i detta fält; se lämplig IDR-formattabell för detaljer

IDR-format 1

Observera att till skillnad från de flesta siffervärden som lagras i en GOFF-fil, är "version", "release" och "trans_date" värdena siffror som texttecken istället för binära

Format 1 (gammalt format)
Byte(ar) Storlek Fält Värde Syfte
0-9 10 Översättare Vilken text som helst Detta värde är vad assemblern eller kompilatorn identifierar sig som; IBM kallar detta "PID-värde" eller "Program ID-värde" från IBMs katalognummer för olika program, t.ex. Cobol-kompilatorn för OS/VS1 heter "IKFCBL00"
10-11 2 Version två siffror Detta är versionsnumret för assemblern eller kompilatorn, 0 till 99.
12-13 2 Släpp två siffror Detta är underdelen av versionsnumret ovan, även 0 till 99
14-18 5 Trans_Date ÅÅÅÅÅ 5 texttecken som indikerar det 2-siffriga året och den 3-siffriga dagen på året denna modul kompilerades eller monterades; år 01-65 antas vara under 2000-talet, medan år 00 eller år över 65 antas vara under 20-talet, t.ex. 2000 eller 1966-1999. Den tresiffriga dagen börjar vid 001 för 1 januari; 032 för 1 februari; 060 är 1 mars i normalår och 29 februari under skottår; och fortsätter genom 365 för den 31 december under standardår och 366 för skottår.

IDR-format 2

Normalt genererar inte kompilatorer och sammanställare den här formatposten, den skapas vanligtvis av bindaren.

Format 2
Byte(ar) Storlek Fält Värde Syfte
0-3 4 Datum Packad decimalform ÅÅÅÅDDDF Datummodulen sattes ihop eller kompilerades, med år och dag på året
4-5 2 Data_Length Binärt värde Faktisk längd på nästa fält, ett osignerat värde som inte är noll
6-85 80 IDR_Data Formatet på denna data har inte avslöjats

IDR-format 3

All text i detta objekt är teckendata; ingen binär information används.

Format 3
Byte(ar) Storlek Fält Värde Syfte
0-9 10 Översättare Alla textvärden som kompilatorn/assemblerförfattaren vill använda för att identifiera sig själv (se fältet Översättare i gamla IDR-format 1 ovan)
10-11 2 Version 00 till 99 Versionsnummer för assemblern eller kompilatorn
12-13 2 Släpp 00 till 99 Releasenummer för ovanstående version
14=20 7 Compile_Date ÅÅÅÅÅ År och dag på året som programmet kompilerades eller sammanställdes (detta skulle vara samma format som fältet "Trans Date" från IDR Format 1 ovan, förutom att året är ett helt 4-siffrigt år).
21-29 9 Compile_Time HHMMSSTTT Timme, minut, sekund och tusendels sekund som programmet kompilerades eller sattes ihop

RLD

RLD-poster tillåter en modul att visa var den refererar till en adress som måste flyttas, till exempel referenser till specifika platser i sig eller till externa moduler.

Flyttkatalog
Byte(ar) Storlek Fält Värde Syfte
0-2 3 PTV X'032000' Rekordet fortsätter inte
X'032100' Inspelningen fortsätter på nästa skiva
3 1 Reserverad
4-5 2 Längd Binärt nummer Storlek på omlokaliseringsdata; osignerad och måste vara större än noll
6- Relocation_Data Omlokaliseringsuppgifterna; se tabellen Flyttdata
REM Finns inte på skivor med variabel längd; resten av posten där posten är längre än data måste nollfyllas

Flyttdata

Flyttdataobjekt
Byte(ar) Storlek Fält Värde Syfte
0-5 6 Flaggor Flaggor angående denna post; se flaggningstabellen för värden
6-7 2 Reserverad
8-11 4 R_Pointer ESDID för modulen (typ ED eller ER) att använda som mål att flytta Detta är den "avlägsna" adressen, antingen i samma eller en annan modul, som programmet behöver lösa. Detta fält utelämnas om bit 0 i byte 0 i Flaggor är 1.
12-15 [A] 4 P_Pointer ESDID för modulen som kräver att adressen flyttas Det här är modulen som vill att dess referens till en avlägsen identifierare ska ändras till rätt värde. Detta fält utelämnas om bit 1 i byte 0 i Flaggor är 1.
16-19 [B] 4 Offset Plats inom modulen specificerad av P_Pointer där adressen som ska justeras finns. Det här är adressen som ska flyttas. Detta fält utelämnas om bit 2 i byte 0 i Flaggor är 1.
20-23 [C] 4 Reserverad
24-27 [C] 4 Reserverad



[A] Om R_Pointer (bit 0 i byte 0 i Flags -fältet är 1) utelämnas, börjar detta fält 4 byte lägre, i byte 8-11. [B] Om R_Pointer eller P_Pointer (bit 1 i byte 0 i Flags -fältet är 1) utelämnas, börjar detta fält 4 byte lägre, i byte 12-15. Om båda fälten utelämnas börjar detta fält 8 byte lägre, i byte 8-11. [C] Om R_Pointer, P_Pointer eller Offset (bit 2 i byte 0 i Flags -fältet är 1) utelämnas, börjar detta fält 4 byte lägre. Om två av dem utelämnas börjar detta fält 8 byte lägre. Om alla utelämnas börjar detta fält 12 byte lägre.

För att förtydliga, om en modul i ett C-program med namnet "Basura" skulle göra ett anrop till "exit"-funktionen för att avsluta sig själv, skulle R_Pointer-adressen vara ESDID för rutinen "exit" medan P_Pointer skulle vara ESDID för "Basura". Om adressen var i samma modul (som interna subrutiner, eller en referens till data inom samma modul) skulle R_Pointer och P_Pointer vara samma.

Flaggor

RLD-objektflaggor
Byte(ar) Storlek Fält Bits Syfte
0 1 Samma_R_ID 0 1 Om R_Pointer-värdet för denna post är detsamma som föregående post i denna post; i så fall utelämnas R_Pointer-värdet från denna post.
Samma_P_ID 1 1 Om P_Pointer-värdet för denna post är detsamma som föregående post i denna post; i så fall utelämnas P_Pointer-värdet från denna post.
Samma_Offset 2 1 Om Offset-värdet för denna post är detsamma som föregående post i denna post; i så fall utelämnas Offset-värdet från denna post.
3-4 Reserverad
5 Reserverad
Offset_length 6 0 för att indikera längd på 4 byte
Adresseringsläges känslighet 7 0 Ingen känslighet
1 Ställ in de höga bitarna i adressen till samma som R-lägesadresseringsläget för R_Pointer-adressen (gäller endast adresser av V-typ)
1 1 R_Pointer_Indicators 0-3 Datatyp för andra operand för flyttadressen
0 - R-adress
1 - Offset från början av R-adress
2 - R-Längd (0 för LD-objekt)
6 - Relativ omedelbar (för att tillåta instruktioner för att adressera externa symboler)
7 - R-konstant (ej delat dataområde)
9 - 20 -Bit lång förskjutningsadress
Alla andra värden är reserverade
4-7 Typ av föremål som avser det värde som behöver flyttas.
0 - Etikett, R-ID är begränsat till LD
1 - Element, R-ID är begränsat till ED
2 - Klass, R-ID är begränsat till ED; Klasser har inga externa namn så de har inget ESDID
3 - Del, R-ID är begränsat till PR.
Alla andra värden är reserverade
2 1 Action_or_Operation 0-6 Typ av operation som ska användas med andra operanden (den första operanden skulle vara 0) resultatet är ett 32-bitars signerat värde som ersätter den första operanden
0 - Lägg till andra operanden till första
1 - Subtrahera andra operanden från första
Alla andra värden är reserverade
Fixup Target Fetch/Store 7 Indikerar om målvärde ska användas eller ignoreras
0 - Använd fixup/target-fält som första operand
1 - Ignorera värdet på målfält använd fixup-värde som första operand; om inget fixeringsvärde, använd 0
3 1 Reserverad
4 1 Mållängd Osignerad längd på målfält i byte
5 1 Reserverad

LEN

LEN-poster används för att deklarera längden på en modul där den inte var känd när ESD-posten skapades, t.ex. för enpassskompilatorer.

Fält Offset Storlek Beskrivning
PTV 0-2 3 Record Type X'033000'
3-5 3 Reserverad
Längd 6-7 2 Längden på föremål som följer detta fält; värdet måste vara icke-noll
Element 8- Elementlängdsdata; se elementtabellen nedan
REM Efterföljande data till slutet av posten för poster med fast längd måste innehålla binära nollor; finns inte för poster med variabel längd.

Element

En post med uppskjuten längd kan inte fortsätta eller delas

Fält Offset Storlek Beskrivning
ESDID 0-3 4 ESDID för element som detta värde gäller
4-7 4 Reserverad
Längd 8-11 4 Längden på det refererade objektet

SLUTET

END måste vara den sista posten för en modul. En 'Entry Point' används när en annan adress än början av modulen ska användas som startpunkt för dess exekvering. Detta används antingen för att programmet har icke-körbara data som visas innan modulen startar (mycket vanligt för äldre assemblerprogrammerare, eftersom äldre versioner av assemblern var mycket långsammare att sätta ihop data lagrade i program när instruktionerna väl specificerades), eller eftersom modulen anropar en extern modul först, till exempel ett runtime-bibliotek för att initiera sig själv.

Fält Offset Storlek Bits Beskrivning
PTV 0-2 3 X'034000' - Ej fortsättning
X'034100' - Fortsättning på nästa skiva
3 0-5 6 Reserverad
Flaggor 6-7 2 Deklarationer om närvaro eller frånvaro av en ingångspunkt
00 - Ingen ingångspunkt given; alla andra värden i denna post är ogiltiga
01 - Ingångspunkt specificerad av ESDID
10 - Ingångspunkt specificerad med namn
11 - Reserverad
AMODE 4 1 Adresseringslägesvärde för ingångspunkt; värdena är de som anges i fält 0 i Beteendeattribut i ESD- posten.
5-7 3 Reserverad
Rekordräkning 8-11 4 Antal GOFF-poster i denna modul (detta är antalet "logiska" poster, dvs. fortsättningar räknas inte)
ESDID 12-15 4 Värdet på ESDID om ingångspunkten refereras av ESDID; binär noll om det refereras med namn
16-19 4 Reserverad
Offset 20-23 4 Adressförskjutning av modulens ingångspunkt; detta kan inte specificeras för en extern (ER) ingångspunkt
Namn Längd 24-25 2 Namnets längd, detta måste vara noll om ingångspunkten angavs av ESDID.
namn 26- Namnet på den externa symbolen som används som ingångspunkt för denna modul; är binära nollor om ingångspunkten specificerades av ESDID; om denna post fortsätter är detta de första 54 tecknen i namnet. Detta är det enda icke-binära värdet i posten; det skulle vara ett textfält som representerar det offentliga namnet för ingångspunkten
REM Trailer som sträcker sig till slutet av posten; bör vara binära nollor till slutet av posten för poster med fast längd; utelämnas för variabel längd

Fortsättning

Om ett startpunktsnamn specificerat på en END-post med fast längd är längre än 54 byte eller (om denna post också fortsätts) är längre än ytterligare 77 byte, används följande fortsättningspost.

Fält Offset Storlek Beskrivning
PTV 0-2 3 X'034200' - Den här fortsättningsposten fortsätter inte
X'034300' - Denna fortsättningspost fortsätter i sig på nästa post
namn 3- Den återstående delen av ingångspunktsnamnet, om inte denna post fortsätter, i vilket fall det är de nästa 77 tecknen i namnet.
REM Om denna post inte fortsätter, är detta den avslutande delen av posten för poster med fast längd och bör vara binära nollor; finns inte för poster med variabel längd
  1. ^ John R. Ehrman (1 mars 2001). "Så fungerar länkredigeraren: en handledning om objekt-/laddningsmoduler, länkredigerare, laddare och vad de gör för (och för) dig" ( PDF) . IBM Silicon Valley (Santa Teresa) Laboratory, San Jose . Hämtad 8 september 2019 .
  2. ^ OS/MVS Programledning: Avancerade faciliteter (PDF) (åttonde upplagan). Poughkeepsie, NY: IBM. September 2007. SA22-7644-07 . Hämtad 9 augusti 2013 .
  3. ^ IBM High Level Assembler för MVS & VM & VSE Release 2 Presentation Guide (PDF) . December 1995. SG24-3910-01. Arkiverad från originalet (PDF) 2016-01-23 . Hämtad 13 november 2015 .
  4. ^ High Level Assembler för z/OS & z/VM & z/VSE Programmerares guide ( PDF) (sjätte upplagan). San Jose, Kalifornien: IBM. Juli 2008. Bilaga C. SC26-4941-05 . Hämtad 8 september 2019 .
  5. ^ "RLD" . www.ibm.com . IBM. 16 augusti 2013 . Hämtad 10 juli 2020 .