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 @@ ...@@ -11,13 +11,13 @@
GBLS Module_HelpVersion GBLS Module_HelpVersion
GBLS Module_ComponentName GBLS Module_ComponentName
GBLS Module_ComponentPath GBLS Module_ComponentPath
Module_MajorVersion SETS "5.59" Module_MajorVersion SETS "5.60"
Module_Version SETA 559 Module_Version SETA 560
Module_MinorVersion SETS "" Module_MinorVersion SETS ""
Module_Date SETS "06 Dec 2010" Module_Date SETS "06 Aug 2011"
Module_ApplicationDate SETS "06-Dec-10" Module_ApplicationDate SETS "06-Aug-11"
Module_ComponentName SETS "RISC_OSLib" Module_ComponentName SETS "RISC_OSLib"
Module_ComponentPath SETS "castle/RiscOS/Sources/Lib/RISC_OSLib" Module_ComponentPath SETS "castle/RiscOS/Sources/Lib/RISC_OSLib"
Module_FullVersion SETS "5.59" Module_FullVersion SETS "5.60"
Module_HelpVersion SETS "5.59 (06 Dec 2010)" Module_HelpVersion SETS "5.60 (06 Aug 2011)"
END END
/* (5.59) /* (5.60)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1. * 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_MinorVersion_CMHG
#define Module_Date_CMHG 06 Dec 2010 #define Module_Date_CMHG 06 Aug 2011
#define Module_MajorVersion "5.59" #define Module_MajorVersion "5.60"
#define Module_Version 559 #define Module_Version 560
#define Module_MinorVersion "" #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_ComponentName "RISC_OSLib"
#define Module_ComponentPath "castle/RiscOS/Sources/Lib/RISC_OSLib" #define Module_ComponentPath "castle/RiscOS/Sources/Lib/RISC_OSLib"
#define Module_FullVersion "5.59" #define Module_FullVersion "5.60"
#define Module_HelpVersion "5.59 (06 Dec 2010)" #define Module_HelpVersion "5.60 (06 Aug 2011)"
#define Module_LibraryVersionInfo "5:59" #define Module_LibraryVersionInfo "5:60"
...@@ -162,8 +162,17 @@ NoCLibError ...@@ -162,8 +162,17 @@ NoCLibError
OldSharedLibrary OldSharedLibrary
ADR r0, E_OldSharedLibrary ADR r0, E_OldSharedLibrary
LookupError LookupError
MOV r4, #0 MOV r3, r0
LDR r1, [r4, #CLibWorkSpace] ; 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 TEQ r1, #0
SWIEQ GenerateError ; Can we borrow CLib's message file? SWIEQ GenerateError ; Can we borrow CLib's message file?
ADD r0, r0, #4 ADD r0, r0, #4
...@@ -173,6 +182,7 @@ LookupError ...@@ -173,6 +182,7 @@ LookupError
ADD r0, r0, #3 ADD r0, r0, #3
BIC r0, r0, #3 BIC r0, r0, #3
MOV r2, #0 MOV r2, #0
MOV r4, #0
MOV r5, #0 MOV r5, #0
MOV r6, #0 MOV r6, #0
MOV r7, #0 MOV r7, #0
......
...@@ -568,7 +568,7 @@ CopyHandler ...@@ -568,7 +568,7 @@ CopyHandler
LTORG LTORG
RSI6_List RSI6_List
DCD 15, 16, -1 DCD OSRSI6_UNDSTK, OSRSI6_SVCSTK, -1
|Sys$RCLimit| |Sys$RCLimit|
DCB "Sys$RCLimit", 0 DCB "Sys$RCLimit", 0
...@@ -3357,8 +3357,14 @@ module_name ...@@ -3357,8 +3357,14 @@ module_name
; ;
open_messagefile open_messagefile
FunctionEntry "r0,r2-r5" FunctionEntry "r0,r2-r5"
MOV r5, #0 MOV r0, #6
LDR r1, [r5, #CLibWorkSpace] 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 CMP r1, #0
Return "r0,r2-r5",,NE Return "r0,r2-r5",,NE
MOV r0, #Module_Claim MOV r0, #Module_Claim
...@@ -3367,7 +3373,7 @@ open_messagefile ...@@ -3367,7 +3373,7 @@ open_messagefile
Return "r0,r2-r5",,VS ; NB R1 = 0 Return "r0,r2-r5",,VS ; NB R1 = 0
SavePSR r1 SavePSR r1
SWI XOS_EnterOS SWI XOS_EnterOS
STR r2, [r5, #CLibWorkSpace] STR r2, [r5]
RestPSR r1 RestPSR r1
MOV r0, r2 MOV r0, r2
ADR r1, message_filename ADR r1, message_filename
...@@ -3376,7 +3382,7 @@ open_messagefile ...@@ -3376,7 +3382,7 @@ open_messagefile
MOVVC r1, r0 MOVVC r1, r0
Return "r0,r2-r5",,VC Return "r0,r2-r5",,VC
MOV r0, #Module_Free MOV r0, #Module_Free
LDR r2, [r5, #CLibWorkSpace] LDR r2, [r5]
SWI XOS_Module SWI XOS_Module
MOV r1, #0 MOV r1, #0
Return "r0,r2-r5" Return "r0,r2-r5"
...@@ -3394,24 +3400,31 @@ open_messagefile ...@@ -3394,24 +3400,31 @@ open_messagefile
] ]
|__counter| |__counter|
MOV a3, lr MOV ip, lr
[ {CONFIG}=26 [ {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 SWI EnterSVC
LDR a4, =CLibCounter MOV a2, ip
BL |_kernel_irqs_off| ; Disable IRQs round update. BL |_kernel_irqs_off| ; Disable IRQs round update.
LDRB a1, [a4] LDRB a1, [a3]
ADD ip, a1, #1 ADD ip, a1, #1
STRB ip, [a4] STRB ip, [a3]
[ {CONFIG}=26 [ {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 END
...@@ -508,7 +508,7 @@ void menu_submenu(menu m, int place, menu submenu) ...@@ -508,7 +508,7 @@ void menu_submenu(menu m, int place, menu submenu)
wimp_menuitem *p = menu__itemptr(m, place-1); wimp_menuitem *p = menu__itemptr(m, place-1);
menu__workarea menu__w; menu__workarea menu__w;
p->submenu = (wimp_menustr*) submenu->m; p->submenu = (wimp_menustr*) (submenu?submenu->m:NULL);
menu__copytoworkarea(m, &menu__w); menu__copytoworkarea(m, &menu__w);
(void) memmove( (void) memmove(
/* to */ ((menu*) menu__w.m.entryspace) + 1, /* to */ ((menu*) menu__w.m.entryspace) + 1,
......
...@@ -12,13 +12,14 @@ ...@@ -12,13 +12,14 @@
; See the License for the specific language governing permissions and ; See the License for the specific language governing permissions and
; limitations under the License. ; 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 ; The bit definitions for the ClientFlags byte
ClientFlag_APCS_A * 1 :SHL: 0 ; client is using APCS-A ClientFlag_APCS_A * 1 :SHL: 0 ; client is using APCS-A
......
...@@ -78,9 +78,21 @@ risc_oslibrary_resources ...@@ -78,9 +78,21 @@ risc_oslibrary_resources
[ Code_Destination = "RAM" [ Code_Destination = "RAM"
BL |__RelocCode| BL |__RelocCode|
] ]
MOV r14, #0 MOV r0, #6
STR r14, [r14, #CLibWorkSpace] MOV r1, #0
STR r14, [r14, #RISCOSLibWorkSpace] 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 r0, sharedclibrary_path
ADR r1, sharedclibrary_resources ADR r1, sharedclibrary_resources
...@@ -115,15 +127,21 @@ XMessageTrans_CloseFile EQU &61504 ; Put in hdr file someday ...@@ -115,15 +127,21 @@ XMessageTrans_CloseFile EQU &61504 ; Put in hdr file someday
|_Shared_Lib_Module_Die_Code| |_Shared_Lib_Module_Die_Code|
STMDB r13!, {lr} STMDB r13!, {lr}
MOV r3, #0 MOV r0, #6
LDR r2, [r3, #CLibWorkSpace] 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 CMP r2, #0
BEQ %F00 BEQ %F00
MOV r0, r2 MOV r0, r2
SWI XMessageTrans_CloseFile SWI XMessageTrans_CloseFile
MOV r0, #Module_Free MOV r0, #Module_Free
SWI Module SWI Module
STR r3, [r3, #CLibWorkSpace] STR r1, [r3]
00 00
CLRV CLRV
LDMIA r13!, {pc} 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