Commit 14a49538 authored by Jeffrey Lee's avatar Jeffrey Lee
Browse files

Update to work with zero page relocation

Detail:
  clib/s/cl_stub, kernel/s/k_body, s/initmodule - Use OS_ReadSysInfo 6 to look up CLibWord/RISCOSLibWord/CLibCounter location each time it's needed instead of using hardcoded addresses. SWI overhead shouldn't be too bad since the zero page areas are rarely used.
  rlib/c/menu - Fix null pointer access when attempting to clear a submenu pointer via menu_submenu(...,...,NULL)
  s/h_workspc - Remove old local definitions of CLibCounter, RISCOSLibWorkSpace and CLibWorkSpace. Use Hdr:PublicWS instead.
Admin:
  Tested on rev A2 BB-xM


Version 5.60. Tagged as 'RISC_OSLib-5_60'
parent c7a61823
......@@ -11,13 +11,13 @@
GBLS Module_HelpVersion
GBLS Module_ComponentName
GBLS Module_ComponentPath
Module_MajorVersion SETS "5.59"
Module_Version SETA 559
Module_MajorVersion SETS "5.60"
Module_Version SETA 560
Module_MinorVersion SETS ""
Module_Date SETS "06 Dec 2010"
Module_ApplicationDate SETS "06-Dec-10"
Module_Date SETS "06 Aug 2011"
Module_ApplicationDate SETS "06-Aug-11"
Module_ComponentName SETS "RISC_OSLib"
Module_ComponentPath SETS "castle/RiscOS/Sources/Lib/RISC_OSLib"
Module_FullVersion SETS "5.59"
Module_HelpVersion SETS "5.59 (06 Dec 2010)"
Module_FullVersion SETS "5.60"
Module_HelpVersion SETS "5.60 (06 Aug 2011)"
END
/* (5.59)
/* (5.60)
*
* This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1.
*
*/
#define Module_MajorVersion_CMHG 5.59
#define Module_MajorVersion_CMHG 5.60
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 06 Dec 2010
#define Module_Date_CMHG 06 Aug 2011
#define Module_MajorVersion "5.59"
#define Module_Version 559
#define Module_MajorVersion "5.60"
#define Module_Version 560
#define Module_MinorVersion ""
#define Module_Date "06 Dec 2010"
#define Module_Date "06 Aug 2011"
#define Module_ApplicationDate "06-Dec-10"
#define Module_ApplicationDate "06-Aug-11"
#define Module_ComponentName "RISC_OSLib"
#define Module_ComponentPath "castle/RiscOS/Sources/Lib/RISC_OSLib"
#define Module_FullVersion "5.59"
#define Module_HelpVersion "5.59 (06 Dec 2010)"
#define Module_LibraryVersionInfo "5:59"
#define Module_FullVersion "5.60"
#define Module_HelpVersion "5.60 (06 Aug 2011)"
#define Module_LibraryVersionInfo "5:60"
......@@ -162,8 +162,17 @@ NoCLibError
OldSharedLibrary
ADR r0, E_OldSharedLibrary
LookupError
MOV r4, #0
LDR r1, [r4, #CLibWorkSpace]
MOV r3, r0
; Find ClibWord
MOV r0, #6
MOV r1, #0
MOV r2, #OSRSI6_CLibWord
SWI XOS_ReadSysInfo
MOVVS r2, #0
CMP r2, #0
LDREQ r2, =Legacy_CLibWord
MOV r0, r3
LDR r1, [r2]
TEQ r1, #0
SWIEQ GenerateError ; Can we borrow CLib's message file?
ADD r0, r0, #4
......@@ -173,6 +182,7 @@ LookupError
ADD r0, r0, #3
BIC r0, r0, #3
MOV r2, #0
MOV r4, #0
MOV r5, #0
MOV r6, #0
MOV r7, #0
......
......@@ -568,7 +568,7 @@ CopyHandler
LTORG
RSI6_List
DCD 15, 16, -1
DCD OSRSI6_UNDSTK, OSRSI6_SVCSTK, -1
|Sys$RCLimit|
DCB "Sys$RCLimit", 0
......@@ -3357,8 +3357,14 @@ module_name
;
open_messagefile
FunctionEntry "r0,r2-r5"
MOV r5, #0
LDR r1, [r5, #CLibWorkSpace]
MOV r0, #6
MOV r1, #0
MOV r2, #OSRSI6_CLibWord
SWI XOS_ReadSysInfo
MOVVS r2, #0
MOVS r5, r2
LDREQ r5, =Legacy_CLibWord
LDR r1, [r5]
CMP r1, #0
Return "r0,r2-r5",,NE
MOV r0, #Module_Claim
......@@ -3367,7 +3373,7 @@ open_messagefile
Return "r0,r2-r5",,VS ; NB R1 = 0
SavePSR r1
SWI XOS_EnterOS
STR r2, [r5, #CLibWorkSpace]
STR r2, [r5]
RestPSR r1
MOV r0, r2
ADR r1, message_filename
......@@ -3376,7 +3382,7 @@ open_messagefile
MOVVC r1, r0
Return "r0,r2-r5",,VC
MOV r0, #Module_Free
LDR r2, [r5, #CLibWorkSpace]
LDR r2, [r5]
SWI XOS_Module
MOV r1, #0
Return "r0,r2-r5"
......@@ -3394,24 +3400,31 @@ open_messagefile
]
|__counter|
MOV a3, lr
MOV ip, lr
[ {CONFIG}=26
MOV a2, pc
MOV a4, pc
|
MRS a2, CPSR
MRS a4, CPSR
]
MOV a1, #6
MOV a2, #0
MOV a3, #OSRSI6_CLibCounter
SWI XOS_ReadSysInfo
MOVVS a3, #0
CMP a3, #0
LDREQ a3, =Legacy_CLibCounter
SWI EnterSVC
LDR a4, =CLibCounter
MOV a2, ip
BL |_kernel_irqs_off| ; Disable IRQs round update.
LDRB a1, [a4]
LDRB a1, [a3]
ADD ip, a1, #1
STRB ip, [a4]
STRB ip, [a3]
[ {CONFIG}=26
TEQP pc, a2 ; Restore mode and IRQs
TEQP pc, a4 ; Restore mode and IRQs
|
MSR CPSR_c, a2 ; Restore mode and IRQs
MSR CPSR_c, a4 ; Restore mode and IRQs
]
Return ,LinkNotStacked,,a3
Return ,LinkNotStacked,,a2
END
......@@ -508,7 +508,7 @@ void menu_submenu(menu m, int place, menu submenu)
wimp_menuitem *p = menu__itemptr(m, place-1);
menu__workarea menu__w;
p->submenu = (wimp_menustr*) submenu->m;
p->submenu = (wimp_menustr*) (submenu?submenu->m:NULL);
menu__copytoworkarea(m, &menu__w);
(void) memmove(
/* to */ ((menu*) menu__w.m.entryspace) + 1,
......
......@@ -12,13 +12,14 @@
; See the License for the specific language governing permissions and
; limitations under the License.
;
Module_WorkSpace EQU 16
CLibCounter * &fe8
RISCOSLibWorkSpace * &fec
[ :LNOT: :DEF: OldOpt
GET Hdr:ListOpts
]
GET Hdr:PublicWS
GET Hdr:OSRSI6
CLibWorkSpace * &ff0
Module_WorkSpace EQU 16
; The bit definitions for the ClientFlags byte
ClientFlag_APCS_A * 1 :SHL: 0 ; client is using APCS-A
......
......@@ -78,9 +78,21 @@ risc_oslibrary_resources
[ Code_Destination = "RAM"
BL |__RelocCode|
]
MOV r14, #0
STR r14, [r14, #CLibWorkSpace]
STR r14, [r14, #RISCOSLibWorkSpace]
MOV r0, #6
MOV r1, #0
MOV r2, #OSRSI6_RISCOSLibWord
SWI XOS_ReadSysInfo
MOVVS r2, #0
CMP r2, #0
LDREQ r2, =Legacy_RISCOSLibWord
STR r1, [r2]
MOV r0, #6
MOV r2, #OSRSI6_CLibWord
SWI XOS_ReadSysInfo
MOVVS r2, #0
CMP r2, #0
LDREQ r2, =Legacy_CLibWord
STR r1, [r2]
ADR r0, sharedclibrary_path
ADR r1, sharedclibrary_resources
......@@ -115,15 +127,21 @@ XMessageTrans_CloseFile EQU &61504 ; Put in hdr file someday
|_Shared_Lib_Module_Die_Code|
STMDB r13!, {lr}
MOV r3, #0
LDR r2, [r3, #CLibWorkSpace]
MOV r0, #6
MOV r1, #0
MOV r2, #OSRSI6_CLibWord
SWI XOS_ReadSysInfo
MOVVS r2, #0
MOVS r3, r2
LDREQ r3, =Legacy_CLibWord
LDR r2, [r3]
CMP r2, #0
BEQ %F00
MOV r0, r2
SWI XMessageTrans_CloseFile
MOV r0, #Module_Free
SWI Module
STR r3, [r3, #CLibWorkSpace]
STR r1, [r3]
00
CLRV
LDMIA r13!, {pc}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment