@@ -274,15 +274,15 @@ var LibraryDylink = {
274
274
__dlsym : function ( handle , symbol ) {
275
275
abort ( dlopenMissingError ) ;
276
276
} ,
277
- _dlinit : function ( main_dso_handle ) { } ,
278
- _dlinit : function ( main_dso_handle ) { } ,
279
277
#else // MAIN_MODULE != 0
280
278
// dynamic linker/loader (a-la ld.so on ELF systems)
279
+ $LDSO__deps : [ '$newDSO' ] ,
281
280
$LDSO : {
282
281
// name -> dso [refcount, name, module, global]; Used by dlopen
283
282
loadedLibsByName : { } ,
284
283
// handle -> dso; Used by dlsym
285
284
loadedLibsByHandle : { } ,
285
+ init : ( ) => newDSO ( '__main__' , { { { cDefine ( 'RTLD_DEFAULT' ) } } } , wasmImports ) ,
286
286
} ,
287
287
288
288
$dlSetError__internal : true ,
@@ -824,6 +824,20 @@ var LibraryDylink = {
824
824
} ,
825
825
#endif
826
826
827
+ $newDSO : function ( name , handle , syms ) {
828
+ var dso = {
829
+ refcount : Infinity ,
830
+ name : name ,
831
+ module : syms ,
832
+ global : true ,
833
+ } ;
834
+ LDSO . loadedLibsByName [ name ] = dso ;
835
+ if ( handle != undefined ) {
836
+ LDSO . loadedLibsByHandle [ handle ] = dso ;
837
+ }
838
+ return dso ;
839
+ } ,
840
+
827
841
// loadDynamicLibrary loads dynamic library @ lib URL / path and returns
828
842
// handle for loaded DSO.
829
843
//
@@ -845,9 +859,9 @@ var LibraryDylink = {
845
859
// If a library was already loaded, it is not loaded a second time. However
846
860
// flags.global and flags.nodelete are handled every time a load request is made.
847
861
// Once a library becomes "global" or "nodelete", it cannot be removed or unloaded.
848
- $loadDynamicLibrary__deps : [ '$LDSO' , '$loadWebAssemblyModule' , '$isInternalSym' , '$mergeLibSymbols' ] ,
862
+ $loadDynamicLibrary__deps : [ '$LDSO' , '$loadWebAssemblyModule' , '$isInternalSym' , '$mergeLibSymbols' , '$newDSO' ] ,
849
863
$loadDynamicLibrary__docs : '/** @param {number=} handle */' ,
850
- $loadDynamicLibrary : function ( lib , flags = { global : true , nodelete : true } , handle = 0 ) {
864
+ $loadDynamicLibrary : function ( lib , flags = { global : true , nodelete : true } , handle ) {
851
865
#if DYLINK_DEBUG
852
866
dbg ( 'loadDynamicLibrary: ' + lib + ' handle:' + handle ) ;
853
867
dbg ( 'existing: ' + Object . keys ( LDSO . loadedLibsByName ) ) ;
@@ -880,16 +894,9 @@ var LibraryDylink = {
880
894
}
881
895
882
896
// allocate new DSO
883
- dso = {
884
- refcount : flags . nodelete ? Infinity : 1 ,
885
- name : lib ,
886
- module : 'loading' ,
887
- global : flags . global ,
888
- } ;
889
- LDSO . loadedLibsByName [ lib ] = dso ;
890
- if ( handle ) {
891
- LDSO . loadedLibsByHandle [ handle ] = dso ;
892
- }
897
+ dso = newDSO ( lib , handle , 'loading' ) ;
898
+ dso . refcount = flags . nodelete ? Infinity : 1 ;
899
+ dso . global = flags . global ;
893
900
894
901
// libData <- libFile
895
902
function loadLibData ( libFile ) {
@@ -1095,11 +1102,8 @@ var LibraryDylink = {
1095
1102
#if DYLINK_DEBUG
1096
1103
dbg ( "_dlsym_catchup: handle=" + ptrToString ( handle ) + " symbolIndex=" + symbolIndex ) ;
1097
1104
#endif
1098
- var symDict = wasmImports ;
1099
- if ( handle != { { { cDefine ( 'RTLD_DEFAULT' ) } } } ) {
1100
- var lib = LDSO . loadedLibsByHandle [ handle ] ;
1101
- symDict = lib . module ;
1102
- }
1105
+ var lib = LDSO . loadedLibsByHandle [ handle ] ;
1106
+ var symDict = lib . module ;
1103
1107
var symName = Object . keys ( symDict ) [ symbolIndex ] ;
1104
1108
var sym = symDict [ symName ] ;
1105
1109
var result = addFunction ( sym , sym . sig ) ;
@@ -1122,34 +1126,24 @@ var LibraryDylink = {
1122
1126
var result ;
1123
1127
var newSymIndex ;
1124
1128
1125
- if ( handle == { { { cDefine ( 'RTLD_DEFAULT' ) } } } ) {
1126
- var resolved = resolveGlobalSymbol ( symbol , true ) ;
1127
- result = resolved . sym ;
1128
- if ( ! result ) {
1129
- dlSetError ( 'Tried to lookup unknown symbol "' + symbol + '" in dynamic lib: RTLD_DEFAULT' ) ;
1130
- return 0 ;
1131
- }
1132
- newSymIndex = Object . keys ( wasmImports ) . indexOf ( resolved . name ) ;
1133
- } else {
1134
- var lib = LDSO . loadedLibsByHandle [ handle ] ;
1129
+ var lib = LDSO . loadedLibsByHandle [ handle ] ;
1135
1130
#if ASSERTIONS
1136
- assert ( lib , 'Tried to dlsym() from an unopened handle: ' + handle ) ;
1131
+ assert ( lib , 'Tried to dlsym() from an unopened handle: ' + handle ) ;
1137
1132
#endif
1138
- if ( ! lib . module . hasOwnProperty ( symbol ) ) {
1139
- dlSetError ( 'Tried to lookup unknown symbol "' + symbol + '" in dynamic lib: ' + lib . name )
1140
- return 0 ;
1141
- }
1142
- newSymIndex = Object . keys ( lib . module ) . indexOf ( symbol ) ;
1133
+ if ( ! lib . module . hasOwnProperty ( symbol ) ) {
1134
+ dlSetError ( 'Tried to lookup unknown symbol "' + symbol + '" in dynamic lib: ' + lib . name )
1135
+ return 0 ;
1136
+ }
1137
+ newSymIndex = Object . keys ( lib . module ) . indexOf ( symbol ) ;
1143
1138
#if ! WASM_BIGINT
1144
- var origSym = 'orig$' + symbol ;
1145
- result = lib . module [ origSym ] ;
1146
- if ( result ) {
1147
- newSymIndex = Object . keys ( lib . module ) . indexOf ( origSym ) ;
1148
- }
1149
- else
1150
- #endif
1151
- result = lib . module [ symbol ] ;
1139
+ var origSym = 'orig$' + symbol ;
1140
+ result = lib . module [ origSym ] ;
1141
+ if ( result ) {
1142
+ newSymIndex = Object . keys ( lib . module ) . indexOf ( origSym ) ;
1152
1143
}
1144
+ else
1145
+ #endif
1146
+ result = lib . module [ symbol ] ;
1153
1147
1154
1148
if ( typeof result == 'function' ) {
1155
1149
#if DYLINK_DEBUG
@@ -1185,17 +1179,6 @@ var LibraryDylink = {
1185
1179
#endif
1186
1180
return result ;
1187
1181
} ,
1188
-
1189
- _dlinit : function ( main_dso_handle ) {
1190
- var dso = {
1191
- refcount : Infinity , // = nodelete
1192
- name : '__main__' ,
1193
- module : Module [ 'asm' ] ,
1194
- global : true
1195
- } ;
1196
- LDSO . loadedLibsByName [ dso . name ] = dso ;
1197
- LDSO . loadedLibsByHandle [ main_dso_handle ] = dso ;
1198
- }
1199
1182
#endif // MAIN_MODULE != 0
1200
1183
} ;
1201
1184
0 commit comments