category: Specification h2. List of AArch32 affected SWIs This list is from a survey as part of [[Addressing the end-of-life of AArch32]]. h3. OS (Kernel and FileSwitch) [[OS_Word 0]] (Read line) * Subreason has 2 byte pointer to the input buffer. This SWI is already of limited use on 32b memory map as the buffer must reside between &8000 and &FFFF * No changes proposed [[OS_Word 16]] (Econet transmit) * Has (unaligned!) 4 byte pointers to start/end of data * Currently translated by [[BBCEconet]] into the corresponding Econet SWIs [[OS_Word 17]] (Econet open or receive) * Has (unaligned!) 4 byte pointers to start/end of data * Currently translated by [[BBCEconet]] into the corresponding Econet SWIs [[OS_Word 21]] (Define pointer shape) * Has 4 byte pointer to pointer shape data [[OS_Word 22]] (Write screen base address) * Has 4 byte pointer to screen [[OS_FSControl 26]] (Copy objects) * Optional information descriptor in R8 has 4 byte pointer to a buffer [[System Control Handlers|OS_ChangeEnvironment handler 6]] (Error handler) * The block has a 32b PC at offset 0 [[System Control Handlers|OS_ChangeEnvironment handler 7]] (Callback handler) * The block has space for 16x32b register dump [[System Control Handlers|OS_ChangeEnvironment handler 8]] (BreakPoint handler) * The block has space for 16x32b register dump [[OS_ReadArgs]] * The output buffer uses 32b pointers to parsed args [[OS_DelinkApplication]] and [[OS_RelinkApplication]] * Vector buffer uses 12 bytes per vector * The format is opaque to the caller but internally the address of the vector routines are stored as 3x4 byte parameters [[OS_HeapSort]]==[32]== * Pointer arrays for sort type >= 2 are 32b each [[OS_ReadMemMapEntries]] and [[OS_SetMemMapEntries]] and [[OS_FindMemMapEntries]] * The logical address in the returned table is 32b [[OS_Memory 0]] (General page block operations) * The page block uses 32b logical address [[OS_IICOp]] * Block word 1 is a pointer to the buffer to transfer, but is 32b [[OS_Hardware]] * The HAL device descriptors include several absolute function pointers and pointers to description strings which are 32b [[OS_SpriteOp 52]] and [[OS_SpriteOp 56]] and [[OS_SpriteOp 65]] * When a [[Colour Mapping Descriptor]] is used in R7 the block passed contains a 32b workspace *and* function pointer * Pixel translation tables for 4k/32k/64k colours have a 32b table pointer trapped between two '32K.' or '32K+' guard words h3. Econet * Immediate operation Econet_JSR branches to a 32b address received via Econet, optionally to AArch32 code that follows it in the immediate buffer. * This is true of both the Econet (native) and NetI (over IP) h3. Window Manager [[Wimp_AutoScroll]] * The state change handler at block + 24 uses a 32b function pointer to a routine [[Wimp_DragBox]] * Drag types 8-11 have 32b function pointers to user routines at block + 40 onwards [[Wimp_Poll]] 13 (Pollword non-zero) * The poll block includes a 32b pointer to the pollword at block + 0 Wimp [[Icon Block|icon blocks]] include 32b pointers to sprite areas or validation strings overloaded with the 12 byte icon data. Wimp [[Menu Block|menu blocks]] can include a 32b pointer to a submenu at offset +4 of the menu item data. h3. Sound (Level 0) [[Sound_Configure]] * The first 4 words of the Channel Handler (R3) are absolute pointers to tables and routines * The first word of the Scheduler (R4) is a pointer to the scheduler code h3. Podule Manager [[Podule_ReadInfo]] * Some returned quantities (1, 4, 8, 9, 13, 14, 15, 18, 19, 20, 23, 24, 25, 29) are pointers in a 32b address space h3. FPEmulator [[FPEmulator_Abort]] * The register dump pointed to by the returned R0 assumes a 32b integer register set. h3. FileCore [[FileCore_MiscOp]] 6 (Read processed FileCore_Create block) * Although it returns a copy of the [[FileCore_Create]] block which only uses offsets, and therefore is in itself OK assuming the maximum module size isn't changed, this SWI has turned the 32b offsets into absolute addresses. [[FileCore_DiscOp]]==[64]== * Scatter [[FileCore Sector List|lists]] are pairs of 32b memory/disc addresses h3. Draw Draw [[Draw Path Block|path block]] code 1 is a 32b continuation path block pointer. There are plenty of spare code numbers to assign a new one for 64b pointers. h3. MessageTrans [[MessageTrans_MakeMenus]] * A 32b submenu pointer appears in the menu block as noted for the Window Manager's [[Menu Block|menu blocks]] h3. Drag An Object [[DragAnObject_Start]] * The register block pointed to by R2 (loaded into registers for the renderer) assumes 4B per register h3. Task Manager [[TaskManager_EnumerateTasks]] * The returned block for each task includes a 32b pointer to the task name h3. Territory Manager [[Territory_Register]] * This SWI expects a table of 32b function pointers to communicate with the territory h3. DMA Manager [[DMA_RegisterChannel]] * The 5 word block in R4 contains function pointers to 5 control routines for the channel [[DMA_QueueTransfer]] * The scatterlist of transfers provided include 32b logical address/length pairs h3. Colour Picker [[ColourPicker_OpenDialogue]] * The colour picker block at +4 includes a 32b pointer to the dialogue title h3. Remote Printer Support [[RemotePrinterSupport_EnumerateUSBPrinters]] * The returned linked list of printer descriptors is linked via 32b pointers h3. Mime Map [[MimeMap_Translate]] * For output type MMM_TYPE_DOT_EXTNS the result is an array of pointers to extensions, where the pointers are limited to 32b h3. SharedSound [[SharedSound_InstallHandler]] * Passes a fill handler table which contains 2x32b function pointers to fill routines [[SharedSound_InstallDriver]] * Passes a driver table which contains 6x32b function ti driver routines h3. PCI [[PCI_ReadInfo]] * Some returned items (10, 16) are pointers in a 32b address space, the SWI is modelled on [[Podule_ReadInfo]] which is similarly affected h3. CompressPNG [[CompressPNG_Start]] * Parameter items 1 (add text comment), 5 (add palette data), 6 (add transparency data) include 32b pointers to the respective item h3. URL [[URL_ParseURL]] * Returns a block of 10x32b pointers at R5 to the elements of the broken down URL h3. SDIODriver [[SDIO_Op]] * When bit 26 is set uses a scatter list of pairs of 32b memory/disc addresses, like FileCore h3. PDumperSupport [[PDumperSupport_Claim]]/[[PDumperSupport_Free]]/[[PDumperSupport_Find]] * The pointer to an anchor word in R0 is actually a 32b linked list pointer, though the list format isn't publically documented so could be changed to a larger pointer with minimal impact h3. VideoOverlay [[VideoOverlay_MapBuffer]] * Returns a buffer list in R0 which includes 32b logical addresses in the block h3. SharedCLibrary [[SharedCLibrary_LibInitAPCS_A|SharedCLibrary_LibInit]]==[_A|_R|Module|APCS_32|ModuleAPCS_32]== * All affected in as far as the stubs supplied in R0 are 32b per entry and encoded as a MOV pc,#0 instruction, which are then changed to LDR pc,table_entry_N after init (OK since AArch64 instructions are 32b as well), but the table_entry_N which follows only has space for 32b branch addresses. h3. Resolver [[Resolver_GetHost]] and [[Resolver_GetHostByName]] * Return a hostent structure containing arrays of pointers, and pointers to the host name which are 32b in size h3. ATA (aka SATADriver) [[ATA_Op]] * Uses 32b address/length pair scatter lists in R3, like FileCore [[ATA_PacketOp]] * Uses 32b address/length pair scatter lists in R3, like FileCore h3. USBDriver [[USBDriver_RegisterBus]] * Uses a table of method pointers in R0 when the host controller registers with the USB stack [[USBDriver_InsertTransfer]] * Takes a pointer to a usbd_xfer structure which includes a number of 32b pointers [[USBDriver_TransferComplete]] * Takes a pointer to a usbd_xfer structure which includes a number of 32b pointers [[USBDriver_ScheduleSoftInterrupt]] * Takes a pointer to a usbd_bus structure which includes a number of 32b pointers h3. DCI drivers (Ether, PPP, EconetA) Driver Information Blocks (DIB) include pointers to the name, address, module, and location which are 32b in size and surrounded by other structure members. Pointers to DIBs also appear in registers for [[ Service_DCIFrameTypeFree]] and [[Service_DCIDriverStatus]]. The transmit SWI also uses an mbuf chain which has 32 bit linked list pointers in it (see notes on MBuf Manager).