SDK export and native headers¶
The SDK installs native headers, architecture-specific runtime and component archives, frozen-ordinal OS import proxies and CMake helpers. See project configuration for installation and selection, and the native API guide for application targets. Firmware and original system DLL implementations are supplied separately.
OS library targets¶
Applications link installed CMake targets such as Symbian::EUser and
Symbian::WindowServer. The SDK supplies their complete frozen ABI and records
only the functions and data actually imported by the linked application.
Application authors do not create proxies or enumerate imported symbols.
include(SymbianApp)
symbian_add_executable(my_app main.cc)
target_link_libraries(my_app PRIVATE Symbian::FileServer)
Diagnostic proxy generation¶
A proxy is an ELF link artifact whose exported symbol points to an ordinal word. It is not executable DLL implementation code. The native SDK component reads frozen export definitions and generates Clang/LLD proxy sources.
The parser accepts EXPORTS, symbol @ ordinal NONAME, optional ABSENT
and DATA size declarations. Generation without a symbol selection includes
all present function and data exports, preserving original ordinals and holes.
Explicit selection supports up to 65535 exports. Aliases, absent selections
and decorated DLL UID/version names are unsupported; use plain DLL/DSO names.
The following command is for investigating an OS ABI, rather than building an
ordinary application.
From a prepared source checkout:
symbian toolchain import-proxy \
research/upstream/kernelhwsrv/kernel/eka/eabi/euseru.def \
--symbol _ZN4User4ExitEi --target-dll euser.dll \
--headers research/upstream/kernelhwsrv/kernel/eka/include \
--output .symbian/euser-proxy
symbian inspect --format import-proxy .symbian/euser-proxy/euser.dso
--headers is optional. When supplied, the command compiles an original-header
call and links it against the proxy. Keep the DEF outside the generated output
tree. The build retains a compilation database and records tool versions and
consumed inputs in report.json.
The public EABI definition places _ZN4User4ExitEi at ordinal 641. Selecting
it creates one ordinal slot rather than inventing preceding entries. The proxy
version names euser.dll; its soname is euser.dso. The SDK linker script
places ordinal data first and uses file offsets for dynamic pointers, as
required by the converter.
Platform headers and ABI¶
The original EKA2 header profile defines __GCC32__, __GCCV3__, __EABI__,
__EPOC32__, __MARM__ and __MARM_ARMV5__. In these headers,
TRequestStatus has status and flags words and is eight bytes;
TDesC16, TDes16, TPtrC16 and TPtr16 have sizes 4, 8, 8 and 12 bytes.
Use the actual target headers rather than host structures that imitate them.
An import proxy must match the selected firmware's export table. Linking
User::Exit does not supply heap setup, process initialization or runtime
cleanup: use SDK startup. EKA1 uses different GNU2 symbols and legacy import
layout; see the EKA1 guide.
Inspection¶
The native inspector bounds ELF sections, strings, symbols and version records and checks ordinal words and DLL names. It validates the generated proxy profile, rather than arbitrary ELF files. Binary parsing and source generation live in the native library; Python handles paths and build orchestration.