@@ -92,10 +92,9 @@ TArmHwCapProvider = class sealed
9292 strict private
9393 class var
9494 FGetAuxVal: TGetAuxValFunc;
95- FResolved: Boolean;
9695
97- strict private
98- class procedure ResolveOnce (); static;
96+ private
97+ class procedure ResolveDynamicImports (); static;
9998
10099 public
101100 class function GetHwCap (): UInt64; static;
@@ -110,10 +109,9 @@ TArmHwCapProvider = class sealed
110109 strict private
111110 class var
112111 FElfAuxInfo: TElfAuxInfoFunc;
113- FResolved: Boolean;
114112
115- strict private
116- class procedure ResolveOnce (); static;
113+ private
114+ class procedure ResolveDynamicImports (); static;
117115
118116 public
119117 class function GetHwCap (): UInt64; static;
@@ -139,15 +137,11 @@ implementation
139137
140138{ $IF DEFINED(HASHLIB_LINUX) OR DEFINED(HASHLIB_ANDROID)}
141139
142- class procedure TArmHwCapProvider.ResolveOnce ();
140+ class procedure TArmHwCapProvider.ResolveDynamicImports ();
143141var
144142 LHandle: Pointer;
145143begin
146- if FResolved then
147- Exit;
148-
149144 FGetAuxVal := nil ;
150- FResolved := True;
151145
152146 LHandle := dlopen(nil , RTLD_NOW);
153147 if LHandle = nil then
@@ -163,7 +157,6 @@ class procedure TArmHwCapProvider.ResolveOnce();
163157
164158class function TArmHwCapProvider.GetHwCap (): UInt64;
165159begin
166- ResolveOnce();
167160 if System.Assigned(FGetAuxVal) then
168161 Result := FGetAuxVal(AT_HWCAP)
169162 else
@@ -172,7 +165,6 @@ class function TArmHwCapProvider.GetHwCap(): UInt64;
172165
173166class function TArmHwCapProvider.GetHwCap2 (): UInt64;
174167begin
175- ResolveOnce();
176168 if System.Assigned(FGetAuxVal) then
177169 Result := FGetAuxVal(AT_HWCAP2)
178170 else
@@ -185,15 +177,11 @@ class function TArmHwCapProvider.GetHwCap2(): UInt64;
185177
186178{ $IF DEFINED(HASHLIB_BSD)}
187179
188- class procedure TArmHwCapProvider.ResolveOnce ();
180+ class procedure TArmHwCapProvider.ResolveDynamicImports ();
189181var
190182 LHandle: Pointer;
191183begin
192- if FResolved then
193- Exit;
194-
195184 FElfAuxInfo := nil ;
196- FResolved := True;
197185
198186 LHandle := dlopen(nil , RTLD_NOW);
199187 if LHandle = nil then
@@ -216,7 +204,6 @@ class function TArmHwCapProvider.GetHwCap(): UInt64;
216204var
217205 LValue: UInt64;
218206begin
219- ResolveOnce();
220207 if System.Assigned(FElfAuxInfo) then
221208 begin
222209 LValue := 0 ;
@@ -233,7 +220,6 @@ class function TArmHwCapProvider.GetHwCap2(): UInt64;
233220var
234221 LValue: UInt64;
235222begin
236- ResolveOnce();
237223 if System.Assigned(FElfAuxInfo) then
238224 begin
239225 LValue := 0 ;
@@ -259,6 +245,11 @@ class function TArmHwCapProvider.HasProcessorFeature(AFeature: UInt32): Boolean;
259245
260246{ $IFEND} // HASHLIB_MSWINDOWS
261247
248+ { $IF DEFINED(HASHLIB_LINUX) OR DEFINED(HASHLIB_ANDROID) OR DEFINED(HASHLIB_BSD)}
249+ initialization
250+ TArmHwCapProvider.ResolveDynamicImports;
251+ { $IFEND}
252+
262253{ $IFEND} // HASHLIB_ARM
263254
264255end .
0 commit comments