parent
4ea4b65b8d
commit
6021fdbb48
Binary file not shown.
@ -0,0 +1,18 @@ |
|||||||
|
BasedOnStyle: LLVM |
||||||
|
|
||||||
|
IndentWidth: 2 |
||||||
|
TabWidth: 2 |
||||||
|
UseTab: Never |
||||||
|
ColumnLimit: 120 |
||||||
|
|
||||||
|
FixNamespaceComments: true |
||||||
|
|
||||||
|
# default is false |
||||||
|
#AlignConsecutiveMacros: true |
||||||
|
#AlignConsecutiveAssignments: true |
||||||
|
#AlignConsecutiveDeclarations: true |
||||||
|
|
||||||
|
# default is true |
||||||
|
ReflowComments: false |
||||||
|
SortIncludes : false |
||||||
|
AllowShortFunctionsOnASingleLine: false |
||||||
@ -0,0 +1,80 @@ |
|||||||
|
.DS_Store |
||||||
|
.idea/ |
||||||
|
*-build*/ |
||||||
|
build-output/ |
||||||
|
|
||||||
|
CMakeLists.txt.user |
||||||
|
CMakeCache.txt |
||||||
|
CMakeFiles |
||||||
|
CMakeScripts |
||||||
|
Testing |
||||||
|
Makefile |
||||||
|
cmake_install.cmake |
||||||
|
install_manifest.txt |
||||||
|
compile_commands.json |
||||||
|
CTestTestfile.cmake |
||||||
|
_deps |
||||||
|
|
||||||
|
## Build generated |
||||||
|
build/ |
||||||
|
DerivedData/ |
||||||
|
|
||||||
|
## Various settings |
||||||
|
*.pbxuser |
||||||
|
!default.pbxuser |
||||||
|
*.mode1v3 |
||||||
|
!default.mode1v3 |
||||||
|
*.mode2v3 |
||||||
|
!default.mode2v3 |
||||||
|
*.perspectivev3 |
||||||
|
!default.perspectivev3 |
||||||
|
xcuserdata/ |
||||||
|
|
||||||
|
## Other |
||||||
|
*.moved-aside |
||||||
|
*.xccheckout |
||||||
|
*.xcscmblueprint |
||||||
|
|
||||||
|
## Obj-C/Swift specific |
||||||
|
*.hmap |
||||||
|
*.ipa |
||||||
|
*.dSYM.zip |
||||||
|
*.dSYM |
||||||
|
|
||||||
|
# Prerequisites |
||||||
|
*.d |
||||||
|
|
||||||
|
# Compiled Object files |
||||||
|
*.slo |
||||||
|
*.lo |
||||||
|
*.o |
||||||
|
*.obj |
||||||
|
|
||||||
|
# Precompiled Headers |
||||||
|
*.gch |
||||||
|
*.pch |
||||||
|
|
||||||
|
# Compiled Dynamic libraries |
||||||
|
*.so |
||||||
|
*.dylib |
||||||
|
*.dll |
||||||
|
|
||||||
|
# Fortran module files |
||||||
|
*.mod |
||||||
|
*.smod |
||||||
|
|
||||||
|
# Compiled Static libraries |
||||||
|
*.lai |
||||||
|
*.la |
||||||
|
*.a |
||||||
|
*.lib |
||||||
|
|
||||||
|
# Executables |
||||||
|
*.exe |
||||||
|
*.out |
||||||
|
*.app |
||||||
|
|
||||||
|
# Prefab |
||||||
|
/prefab/**/*.a |
||||||
|
/prefab/**/*.h |
||||||
|
/AndroidManifest.xml |
||||||
@ -0,0 +1,430 @@ |
|||||||
|
cmake_minimum_required(VERSION 3.5) |
||||||
|
project(Dobby) |
||||||
|
enable_language(ASM) |
||||||
|
|
||||||
|
include(cmake/Util.cmake) |
||||||
|
include(cmake/Globals.cmake) |
||||||
|
include(cmake/Macros.cmake) |
||||||
|
include(cmake/XcodeGenerator.cmake) |
||||||
|
include(cmake/AutoFiles.cmake) |
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 11) |
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||||
|
set(CMAKE_C_STANDARD 11) |
||||||
|
|
||||||
|
AutoFiles("." "CmakeSource" "\\.(cc|cpp|c|h)$") |
||||||
|
|
||||||
|
# :< You Shall Not Pass! |
||||||
|
if(0) |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror") |
||||||
|
endif() |
||||||
|
|
||||||
|
# ===== Handle Option ===== |
||||||
|
option(DOBBY_GENERATE_SHARED "Build shared library" ON) |
||||||
|
|
||||||
|
option(DOBBY_DEBUG "Enable debug logging" ON) |
||||||
|
|
||||||
|
option(NearBranch "Enable Near Branch Trampoline" ON) |
||||||
|
|
||||||
|
option(DynamicBinaryInstrument "Enable Dynamic Binary Instrument" ON) |
||||||
|
|
||||||
|
option(FullFloatingPointRegisterPack "Save and pack all floating-point registers" OFF) |
||||||
|
|
||||||
|
option(EnableObfuscation "Enable llvm obfuscation" OFF) |
||||||
|
|
||||||
|
option(Plugin.SymbolResolver "Resolve symbol by [DobbySymbolResolver] " ON) |
||||||
|
|
||||||
|
option(Plugin.GlobalOffsetTableHook "Global Offset Table Hook by [DobbyGlobalOffsetTableReplace] " ON) |
||||||
|
|
||||||
|
option(Plugin.LinkerLoadCallback "Register image load callback " OFF) |
||||||
|
|
||||||
|
# frida is better choice |
||||||
|
option(Plugin.ApplicationEventMonitor "Auto monitor linker, file, etc." OFF) |
||||||
|
|
||||||
|
option(Plugin.Android.BionicLinkerRestriction "Enable android bionic linker restriction" OFF) |
||||||
|
|
||||||
|
# Use native assembly bridge to replace the runtime codegen |
||||||
|
# if(CLOSURE_BRIDGE_TEMPLATE) |
||||||
|
# SET(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS}") |
||||||
|
# enable_language(ASM) |
||||||
|
# add_definitions(-DENABLE_CLOSURE_BRIDGE_TEMPLATE) |
||||||
|
# endif() |
||||||
|
|
||||||
|
# Enable debug will log more information |
||||||
|
#if (CMAKE_BUILD_TYPE STREQUAL "Debug") |
||||||
|
# set(DOBBY_DEBUG ON) |
||||||
|
#endif() |
||||||
|
if(DOBBY_DEBUG) |
||||||
|
add_definitions(-DDOBBY_DEBUG) |
||||||
|
add_definitions(-DLOGGING_DEBUG) |
||||||
|
message(STATUS "[Dobby] Enable debug logging") |
||||||
|
endif() |
||||||
|
|
||||||
|
# Enable full floating point register pack |
||||||
|
# for arm64, allow access q8 - q31 |
||||||
|
if(FullFloatingPointRegisterPack) |
||||||
|
add_definitions(-DFULL_FLOATING_POINT_REGISTER_PACK) |
||||||
|
message(STATUS "[Dobby] Save and pack all floating-point registers") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Darwin) |
||||||
|
# -lstdc++ |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -stdlib=libc++") |
||||||
|
if (NOT DOBBY_DEBUG) |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-x -Wl,-S") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_log_internal_impl -Wl,-exported_symbol,_log_set_level") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_CodePatch") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_DobbyBuildVersion -Wl,-exported_symbol,_DobbyHook -Wl,-exported_symbol,_DobbyInstrument -Wl,-exported_symbol,_DobbyDestroy") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_DobbyGlobalOffsetTableReplace") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_DobbySymbolResolver") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_intercept_routing_common_bridge_handler") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-exported_symbol,_dobby_enable_near_branch_trampoline -Wl,-exported_symbol,_dobby_disable_near_branch_trampoline") |
||||||
|
endif() |
||||||
|
elseif(SYSTEM.Android) |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer") |
||||||
|
if(NOT DOBBY_DEBUG) |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL") |
||||||
|
endif() |
||||||
|
elseif(SYSTEM.Linux) |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") |
||||||
|
elseif(SYSTEM.Windows) |
||||||
|
if(NOT DOBBY_DEBUG) |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /export:log_internal_impl") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /export:DobbyHook /export:DobbyInstrument /export:DobbySymbolResolver") |
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /export:dobby_enable_near_branch_trampoline /export:dobby_disable_near_branch_trampoline") |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
if(COMPILER.Clang) |
||||||
|
if(NOT DOBBY_DEBUG) |
||||||
|
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") |
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden") |
||||||
|
endif() |
||||||
|
if(PROCESSOR.ARM) |
||||||
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch armv7 -x assembler-with-cpp") |
||||||
|
elseif(PROCESSOR.AARCH64) |
||||||
|
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -arch arm64 -x assembler-with-cpp") |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") |
||||||
|
|
||||||
|
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}") |
||||||
|
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") |
||||||
|
message(STATUS "CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") |
||||||
|
message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") |
||||||
|
message(STATUS "CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}") |
||||||
|
|
||||||
|
# arch prefix |
||||||
|
if(PROCESSOR.ARM) |
||||||
|
set(ARCH1 ARM) |
||||||
|
set(arch1 arm) |
||||||
|
set(core_arch arm) |
||||||
|
elseif(PROCESSOR.AARCH64) |
||||||
|
set(ARCH1 ARM64) |
||||||
|
set(arch1 arm64) |
||||||
|
set(core_arch arm64) |
||||||
|
elseif(PROCESSOR.X86) |
||||||
|
set(ARCH1 X86) |
||||||
|
set(arch1 x86) |
||||||
|
set(core_arch ia32) |
||||||
|
elseif(PROCESSOR.X86_64) |
||||||
|
set(ARCH1 X64) |
||||||
|
set(arch1 x64) |
||||||
|
set(core_arch x64) |
||||||
|
else() |
||||||
|
endif() |
||||||
|
|
||||||
|
# system prefix |
||||||
|
if(SYSTEM.Darwin OR SYSTEM.iOS OR SYSTEM.macOS) |
||||||
|
set(platform1 posix) |
||||||
|
set(platform2 Darwin) |
||||||
|
elseif(SYSTEM.Linux OR SYSTEM.Android) |
||||||
|
set(platform1 posix) |
||||||
|
set(platform2 Linux) |
||||||
|
elseif(SYSTEM.Windows) |
||||||
|
set(platform1 windows) |
||||||
|
set(platform2 Windows) |
||||||
|
else() |
||||||
|
endif() |
||||||
|
|
||||||
|
if(CMAKE_GENERATOR STREQUAL Xcode) |
||||||
|
endif() |
||||||
|
include(cmake/dobby.xcode.source.cmake) |
||||||
|
|
||||||
|
include_directories( |
||||||
|
. |
||||||
|
|
||||||
|
./include |
||||||
|
|
||||||
|
./source |
||||||
|
./source/include |
||||||
|
./source/UserMode |
||||||
|
|
||||||
|
./external |
||||||
|
./external/logging |
||||||
|
./external/xnucxx |
||||||
|
./external/misc-helper |
||||||
|
|
||||||
|
builtin-plugin |
||||||
|
) |
||||||
|
|
||||||
|
set(DOBBY_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
# cpu |
||||||
|
source/core/arch/CpuFeature.cc |
||||||
|
source/core/arch/CpuRegister.cc |
||||||
|
|
||||||
|
# assembler |
||||||
|
source/core/modules/assembler/assembler.cc |
||||||
|
source/core/modules/assembler/assembler-${core_arch}.cc |
||||||
|
|
||||||
|
# codegen |
||||||
|
source/core/modules/codegen/codegen-${core_arch}.cc |
||||||
|
|
||||||
|
# memory kit |
||||||
|
source/MemoryAllocator/CodeBuffer/CodeBufferBase.cc |
||||||
|
source/MemoryAllocator/CodeBuffer/code-buffer-${arch1}.cc |
||||||
|
source/MemoryAllocator/AssemblyCodeBuilder.cc |
||||||
|
source/MemoryAllocator/MemoryArena.cc |
||||||
|
|
||||||
|
# instruction relocation |
||||||
|
source/InstructionRelocation/${arch1}/${ARCH1}InstructionRelocation.cc |
||||||
|
|
||||||
|
# intercept routing |
||||||
|
source/InterceptRouting/InterceptRouting.cpp |
||||||
|
|
||||||
|
# intercept routing trampoline |
||||||
|
source/TrampolineBridge/Trampoline/${arch1}/trampoline-${arch1}.cc |
||||||
|
|
||||||
|
# intercept routing plugin (buildin) |
||||||
|
source/InterceptRouting/Routing/FunctionInlineReplace/function-inline-replace.cc |
||||||
|
source/InterceptRouting/Routing/FunctionInlineReplace/FunctionInlineReplaceExport.cc |
||||||
|
|
||||||
|
# plugin register |
||||||
|
source/InterceptRouting/RoutingPlugin/RoutingPlugin.cc |
||||||
|
|
||||||
|
# platform util |
||||||
|
source/UserMode/PlatformUtil/${platform2}/ProcessRuntimeUtility.cc |
||||||
|
|
||||||
|
# user mode - platform interface |
||||||
|
source/UserMode/UnifiedInterface/platform-${platform1}.cc |
||||||
|
|
||||||
|
# user mode - executable memory |
||||||
|
source/UserMode/ExecMemory/code-patch-tool-${platform1}.cc |
||||||
|
source/UserMode/ExecMemory/clear-cache-tool-all.c |
||||||
|
|
||||||
|
# main |
||||||
|
source/dobby.cpp |
||||||
|
source/Interceptor.cpp |
||||||
|
) |
||||||
|
|
||||||
|
if (PROCESSOR.X86_64 OR PROCESSOR.X86) |
||||||
|
set(NearBranch ON) |
||||||
|
if (PROCESSOR.X86_64) |
||||||
|
add_definitions(-DDETOURS_X64) |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Darwin) |
||||||
|
include_directories( |
||||||
|
source/UserMode/ExecMemory/substrated/include |
||||||
|
) |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
source/UserMode/ExecMemory/code-patch-tool-darwin.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.iOS) |
||||||
|
add_definitions(-DCODE_PATCH_WITH_SUBSTRATED) |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
source/UserMode/ExecMemory/substrated/mach_interface_support/substrated_client.c |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
|
||||||
|
if(FunctionWrapper OR DynamicBinaryInstrument) |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
# closure trampoline bridge |
||||||
|
source/TrampolineBridge/ClosureTrampolineBridge/common-bridge-handler.cc |
||||||
|
source/TrampolineBridge/ClosureTrampolineBridge/${arch1}/helper-${arch1}.cc |
||||||
|
source/TrampolineBridge/ClosureTrampolineBridge/${arch1}/closure-bridge-${arch1}.cc |
||||||
|
source/TrampolineBridge/ClosureTrampolineBridge/${arch1}/${ARCH1}AssemblyClosureTrampoline.cc |
||||||
|
|
||||||
|
# user mode - multi thread support |
||||||
|
# source/UserMode/MultiThreadSupport/ThreadSupport.cpp |
||||||
|
# source/UserMode/Thread/PlatformThread.cc |
||||||
|
# source/UserMode/Thread/platform-thread-${platform1}.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(FunctionWrapper) |
||||||
|
message(FATAL_ERROR "[!] FunctionWrapper plugin is not supported") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(DynamicBinaryInstrument) |
||||||
|
message(STATUS "[Dobby] Enable dynamic binary instrument(hook instruction with register context)") |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
source/InterceptRouting/Routing/DynamicBinaryInstrument/dynamic-binary-instrument.cc |
||||||
|
source/InterceptRouting/Routing/DynamicBinaryInstrument/DynamicBinaryInstrumentExport.cc |
||||||
|
source/InterceptRouting/Routing/DynamicBinaryInstrument/intercept_routing_handler.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(NearBranch) |
||||||
|
message(STATUS "[Dobby] Enable near branch trampoline(trampoline within single instruction)") |
||||||
|
set(dobby.SOURCE_FILE_LIST ${dobby.SOURCE_FILE_LIST} |
||||||
|
source/InterceptRouting/RoutingPlugin/NearBranchTrampoline/NeaBranchTrampoline.cc |
||||||
|
source/MemoryAllocator/NearMemoryArena.cc) |
||||||
|
endif() |
||||||
|
|
||||||
|
add_subdirectory(external/misc-helper) |
||||||
|
get_target_property(misc_helper.SOURCE_FILE_LIST misc_helper SOURCES) |
||||||
|
|
||||||
|
# add logging library |
||||||
|
add_subdirectory(external/logging) |
||||||
|
get_target_property(logging.SOURCE_FILE_LIST logging SOURCES) |
||||||
|
|
||||||
|
# add xnucxx library |
||||||
|
add_subdirectory(external/xnucxx) |
||||||
|
get_target_property(xnucxx.SOURCE_FILE_LIST xnucxx SOURCES) |
||||||
|
|
||||||
|
if(Plugin.GlobalOffsetTableHook AND SYSTEM.Darwin) |
||||||
|
message(STATUS "[Dobby] Enable global offset table hook") |
||||||
|
|
||||||
|
include_directories(builtin-plugin/GlobalOffsetTableHook) |
||||||
|
add_subdirectory(builtin-plugin/GlobalOffsetTableHook) |
||||||
|
get_target_property(global_offset_table_hook.SOURCE_FILE_LIST global_offset_table_hook SOURCES) |
||||||
|
set(dobby.plugin.SOURCE_FILE_LIST ${dobby.plugin.SOURCE_FILE_LIST} |
||||||
|
${global_offset_table_hook.SOURCE_FILE_LIST} |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(Plugin.SymbolResolver) |
||||||
|
message(STATUS "[Dobby] Enable symbol resolver") |
||||||
|
|
||||||
|
include_directories(builtin-plugin/SymbolResolver) |
||||||
|
add_subdirectory(builtin-plugin/SymbolResolver) |
||||||
|
get_target_property(symbol_resolver.SOURCE_FILE_LIST symbol_resolver SOURCES) |
||||||
|
set(dobby.plugin.SOURCE_FILE_LIST ${dobby.plugin.SOURCE_FILE_LIST} |
||||||
|
${symbol_resolver.SOURCE_FILE_LIST} |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(Plugin.Android.BionicLinkerRestriction) |
||||||
|
if(NOT SYSTEM.Android) |
||||||
|
message(FATAL_ERROR "[!] Plugin.Android.BionicLinkerRestriction only works on Android.") |
||||||
|
endif() |
||||||
|
message(STATUS "[Dobby] Enable Plugin.Android.BionicLinkerRestriction") |
||||||
|
set(dobby.plugin.SOURCE_FILE_LIST ${dobby.plugin.SOURCE_FILE_LIST} |
||||||
|
builtin-plugin/BionicLinkerRestriction/bionic_linker_restriction.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(Plugin.HideSystemCall) |
||||||
|
set(dobby.plugin.SOURCE_FILE_LIST ${dobby.plugin.SOURCE_FILE_LIST} |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(Plugin.LinkerLoadCallback) |
||||||
|
set(dobby.plugin.SOURCE_FILE_LIST ${dobby.plugin.SOURCE_FILE_LIST} |
||||||
|
builtin-plugin/LinkerImageLoadCallback/linker_load_callback.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
set(dobby.HEADER_FILE_LIST |
||||||
|
include/dobby.h |
||||||
|
) |
||||||
|
|
||||||
|
# add build version |
||||||
|
string(TIMESTAMP TODAY "%Y%m%d") |
||||||
|
set(VERSION_REVISION "-${TODAY}") |
||||||
|
if (EXISTS "${CMAKE_SOURCE_DIR}/.git") |
||||||
|
execute_process( |
||||||
|
COMMAND git rev-parse --short --verify HEAD |
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
||||||
|
OUTPUT_VARIABLE VERSION_COMMIT_HASH |
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
||||||
|
) |
||||||
|
if(VERSION_COMMIT_HASH) |
||||||
|
set(VERSION_REVISION "${VERSION_REVISION}-${VERSION_COMMIT_HASH}") |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
set(DOBBY_BUILD_VERSION "Dobby${VERSION_REVISION}") |
||||||
|
add_definitions(-D__DOBBY_BUILD_VERSION__="${DOBBY_BUILD_VERSION}") |
||||||
|
message(STATUS "[Dobby] ${DOBBY_BUILD_VERSION}") |
||||||
|
|
||||||
|
if(DOBBY_GENERATE_SHARED) |
||||||
|
message(STATUS "[Dobby] Generate shared library") |
||||||
|
set(DOBBY_LIBRARY_TYPE SHARED) |
||||||
|
else() |
||||||
|
message(STATUS "[Dobby] Generate static library") |
||||||
|
set(DOBBY_LIBRARY_TYPE STATIC) |
||||||
|
endif() |
||||||
|
add_library(blackdex_d ${DOBBY_LIBRARY_TYPE} ${dobby.HEADER_FILE_LIST} ${dobby.SOURCE_FILE_LIST} ${logging.SOURCE_FILE_LIST} ${xnucxx.SOURCE_FILE_LIST} ${dobby.plugin.SOURCE_FILE_LIST}) |
||||||
|
|
||||||
|
target_include_directories(blackdex_d PUBLIC include) |
||||||
|
|
||||||
|
if(EnableObfuscation) |
||||||
|
set(linker_flags "${linker_flags} -Wl,-mllvm -Wl,-obfuscator-conf=all") |
||||||
|
endif() |
||||||
|
set_target_properties(blackdex_d |
||||||
|
PROPERTIES LINK_FLAGS "${linker_flags}" |
||||||
|
) |
||||||
|
if(SYSTEM.Darwin) |
||||||
|
# set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR TRUE) |
||||||
|
set(CMAKE_INSTALL_NAME_DIR "@rpath") |
||||||
|
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") |
||||||
|
add_library(DobbyX ${DOBBY_LIBRARY_TYPE} ${dobby.HEADER_FILE_LIST} ${dobby.SOURCE_FILE_LIST} ${logging.SOURCE_FILE_LIST} ${xnucxx.SOURCE_FILE_LIST} ${dobby.plugin.SOURCE_FILE_LIST}) |
||||||
|
|
||||||
|
set_target_properties(DobbyX |
||||||
|
PROPERTIES LINK_FLAGS "${linker_flags}" |
||||||
|
) |
||||||
|
|
||||||
|
# set framework property |
||||||
|
set_target_properties(DobbyX PROPERTIES |
||||||
|
FRAMEWORK TRUE |
||||||
|
FRAMEWORK_VERSION A |
||||||
|
MACOSX_FRAMEWORK_IDENTIFIER "com.dobby.dobby" |
||||||
|
# MACOSX_FRAMEWORK_INFO_PLIST Info.plist |
||||||
|
VERSION 1.0.0 # current version |
||||||
|
SOVERSION 1.0.0 # compatibility version |
||||||
|
PUBLIC_HEADER include/dobby.h |
||||||
|
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development" |
||||||
|
) |
||||||
|
# set_target_properties(Dobby PROPERTIES |
||||||
|
# LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" |
||||||
|
# ) |
||||||
|
|
||||||
|
# message(STATUS "[Dobby] Enable Gollum.framework(iOS: 11.0 <= version, version <= 12.2, version == 12.4 )") |
||||||
|
# add_custom_command(TARGET Dobby |
||||||
|
# POST_BUILD |
||||||
|
# COMMAND mkdir -p $<TARGET_FILE_DIR:${dobby_output_name}>/Frameworks |
||||||
|
# COMMAND cp -R ${CMAKE_SOURCE_DIR}/buildin-plugin/Gollum_2019.12.31.framework $<TARGET_FILE_DIR:${dobby_output_name}>/Frameworks/Gollum.framework |
||||||
|
# ) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Android) |
||||||
|
target_link_libraries(blackdex_d log) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Linux) |
||||||
|
target_link_libraries(blackdex_d dl) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Darwin) |
||||||
|
target_link_libraries(DobbyX |
||||||
|
"-framework Foundation") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(SYSTEM.Darwin) |
||||||
|
add_subdirectory(builtin-plugin/Dyld2HideLibrary) |
||||||
|
|
||||||
|
add_subdirectory(builtin-plugin/ObjcRuntimeHook) |
||||||
|
if(PROCESSOR.AARCH64) |
||||||
|
add_subdirectory(builtin-plugin/SupervisorCallMonitor) |
||||||
|
endif() |
||||||
|
endif() |
||||||
|
|
||||||
|
add_subdirectory(example) |
||||||
@ -0,0 +1,201 @@ |
|||||||
|
Apache License |
||||||
|
Version 2.0, January 2004 |
||||||
|
http://www.apache.org/licenses/ |
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
||||||
|
|
||||||
|
1. Definitions. |
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction, |
||||||
|
and distribution as defined by Sections 1 through 9 of this document. |
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by |
||||||
|
the copyright owner that is granting the License. |
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all |
||||||
|
other entities that control, are controlled by, or are under common |
||||||
|
control with that entity. For the purposes of this definition, |
||||||
|
"control" means (i) the power, direct or indirect, to cause the |
||||||
|
direction or management of such entity, whether by contract or |
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity. |
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity |
||||||
|
exercising permissions granted by this License. |
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications, |
||||||
|
including but not limited to software source code, documentation |
||||||
|
source, and configuration files. |
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical |
||||||
|
transformation or translation of a Source form, including but |
||||||
|
not limited to compiled object code, generated documentation, |
||||||
|
and conversions to other media types. |
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or |
||||||
|
Object form, made available under the License, as indicated by a |
||||||
|
copyright notice that is included in or attached to the work |
||||||
|
(an example is provided in the Appendix below). |
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object |
||||||
|
form, that is based on (or derived from) the Work and for which the |
||||||
|
editorial revisions, annotations, elaborations, or other modifications |
||||||
|
represent, as a whole, an original work of authorship. For the purposes |
||||||
|
of this License, Derivative Works shall not include works that remain |
||||||
|
separable from, or merely link (or bind by name) to the interfaces of, |
||||||
|
the Work and Derivative Works thereof. |
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including |
||||||
|
the original version of the Work and any modifications or additions |
||||||
|
to that Work or Derivative Works thereof, that is intentionally |
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner |
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of |
||||||
|
the copyright owner. For the purposes of this definition, "submitted" |
||||||
|
means any form of electronic, verbal, or written communication sent |
||||||
|
to the Licensor or its representatives, including but not limited to |
||||||
|
communication on electronic mailing lists, source code control systems, |
||||||
|
and issue tracking systems that are managed by, or on behalf of, the |
||||||
|
Licensor for the purpose of discussing and improving the Work, but |
||||||
|
excluding communication that is conspicuously marked or otherwise |
||||||
|
designated in writing by the copyright owner as "Not a Contribution." |
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity |
||||||
|
on behalf of whom a Contribution has been received by Licensor and |
||||||
|
subsequently incorporated within the Work. |
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of |
||||||
|
this License, each Contributor hereby grants to You a perpetual, |
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
||||||
|
copyright license to reproduce, prepare Derivative Works of, |
||||||
|
publicly display, publicly perform, sublicense, and distribute the |
||||||
|
Work and such Derivative Works in Source or Object form. |
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of |
||||||
|
this License, each Contributor hereby grants to You a perpetual, |
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
||||||
|
(except as stated in this section) patent license to make, have made, |
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work, |
||||||
|
where such license applies only to those patent claims licensable |
||||||
|
by such Contributor that are necessarily infringed by their |
||||||
|
Contribution(s) alone or by combination of their Contribution(s) |
||||||
|
with the Work to which such Contribution(s) was submitted. If You |
||||||
|
institute patent litigation against any entity (including a |
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work |
||||||
|
or a Contribution incorporated within the Work constitutes direct |
||||||
|
or contributory patent infringement, then any patent licenses |
||||||
|
granted to You under this License for that Work shall terminate |
||||||
|
as of the date such litigation is filed. |
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the |
||||||
|
Work or Derivative Works thereof in any medium, with or without |
||||||
|
modifications, and in Source or Object form, provided that You |
||||||
|
meet the following conditions: |
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or |
||||||
|
Derivative Works a copy of this License; and |
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices |
||||||
|
stating that You changed the files; and |
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works |
||||||
|
that You distribute, all copyright, patent, trademark, and |
||||||
|
attribution notices from the Source form of the Work, |
||||||
|
excluding those notices that do not pertain to any part of |
||||||
|
the Derivative Works; and |
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its |
||||||
|
distribution, then any Derivative Works that You distribute must |
||||||
|
include a readable copy of the attribution notices contained |
||||||
|
within such NOTICE file, excluding those notices that do not |
||||||
|
pertain to any part of the Derivative Works, in at least one |
||||||
|
of the following places: within a NOTICE text file distributed |
||||||
|
as part of the Derivative Works; within the Source form or |
||||||
|
documentation, if provided along with the Derivative Works; or, |
||||||
|
within a display generated by the Derivative Works, if and |
||||||
|
wherever such third-party notices normally appear. The contents |
||||||
|
of the NOTICE file are for informational purposes only and |
||||||
|
do not modify the License. You may add Your own attribution |
||||||
|
notices within Derivative Works that You distribute, alongside |
||||||
|
or as an addendum to the NOTICE text from the Work, provided |
||||||
|
that such additional attribution notices cannot be construed |
||||||
|
as modifying the License. |
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and |
||||||
|
may provide additional or different license terms and conditions |
||||||
|
for use, reproduction, or distribution of Your modifications, or |
||||||
|
for any such Derivative Works as a whole, provided Your use, |
||||||
|
reproduction, and distribution of the Work otherwise complies with |
||||||
|
the conditions stated in this License. |
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise, |
||||||
|
any Contribution intentionally submitted for inclusion in the Work |
||||||
|
by You to the Licensor shall be under the terms and conditions of |
||||||
|
this License, without any additional terms or conditions. |
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify |
||||||
|
the terms of any separate license agreement you may have executed |
||||||
|
with Licensor regarding such Contributions. |
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade |
||||||
|
names, trademarks, service marks, or product names of the Licensor, |
||||||
|
except as required for reasonable and customary use in describing the |
||||||
|
origin of the Work and reproducing the content of the NOTICE file. |
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or |
||||||
|
agreed to in writing, Licensor provides the Work (and each |
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS, |
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
||||||
|
implied, including, without limitation, any warranties or conditions |
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the |
||||||
|
appropriateness of using or redistributing the Work and assume any |
||||||
|
risks associated with Your exercise of permissions under this License. |
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory, |
||||||
|
whether in tort (including negligence), contract, or otherwise, |
||||||
|
unless required by applicable law (such as deliberate and grossly |
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be |
||||||
|
liable to You for damages, including any direct, indirect, special, |
||||||
|
incidental, or consequential damages of any character arising as a |
||||||
|
result of this License or out of the use or inability to use the |
||||||
|
Work (including but not limited to damages for loss of goodwill, |
||||||
|
work stoppage, computer failure or malfunction, or any and all |
||||||
|
other commercial damages or losses), even if such Contributor |
||||||
|
has been advised of the possibility of such damages. |
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing |
||||||
|
the Work or Derivative Works thereof, You may choose to offer, |
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity, |
||||||
|
or other liability obligations and/or rights consistent with this |
||||||
|
License. However, in accepting such obligations, You may act only |
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf |
||||||
|
of any other Contributor, and only if You agree to indemnify, |
||||||
|
defend, and hold each Contributor harmless for any liability |
||||||
|
incurred by, or claims asserted against, such Contributor by reason |
||||||
|
of your accepting any such warranty or additional liability. |
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS |
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work. |
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following |
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]" |
||||||
|
replaced with your own identifying information. (Don't include |
||||||
|
the brackets!) The text should be enclosed in the appropriate |
||||||
|
comment syntax for the file format. We also recommend that a |
||||||
|
file or class name and description of purpose be included on the |
||||||
|
same "printed page" as the copyright notice for easier |
||||||
|
identification within third-party archives. |
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner] |
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
you may not use this file except in compliance with the License. |
||||||
|
You may obtain a copy of the License at |
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software |
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
See the License for the specific language governing permissions and |
||||||
|
limitations under the License. |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
## Dobby |
||||||
|
|
||||||
|
[](https://t.me/IOFramebuffer) [](https://t.me/dobby_group) |
||||||
|
|
||||||
|
Dobby a lightweight, multi-platform, multi-architecture exploit hook framework. |
||||||
|
|
||||||
|
- Minimal and modular library |
||||||
|
- Multi-platform support(Windows/macOS/iOS/Android/Linux) |
||||||
|
- Multiple architecture support(X86, X86-64, ARM, ARM64) |
||||||
|
- Clean code without STL(port to kernel easily) |
||||||
|
- Plugin support(SymbolResolver, SupervisorCallMonitor) |
||||||
|
- iOS kernel exploit support(Gollum ?) |
||||||
|
|
||||||
|
## Getting started |
||||||
|
|
||||||
|
``` |
||||||
|
git clone https://github.com/jmpews/Dobby.git --depth=1 |
||||||
|
cd Dobby/example/ |
||||||
|
mkdir build; cd build; cmake .. |
||||||
|
``` |
||||||
|
|
||||||
|
Or download [latest release](https://github.com/jmpews/Dobby/releases/tag/latest) |
||||||
|
|
||||||
|
#### [Build Installation](docs/build-documentation.md) |
||||||
|
|
||||||
|
#### [Getting Started with iOS](docs/get-started-ios.md) |
||||||
|
|
||||||
|
#### [Getting Started with Android](docs/get-started-android.md) |
||||||
|
|
||||||
|
## Documentation |
||||||
|
|
||||||
|
[full Installation documentation site](https://jmpews.github.io/Dobby/#/) |
||||||
|
|
||||||
|
## Download |
||||||
|
|
||||||
|
[download static library](https://github.com/jmpews/Dobby/releases/tag/latest) |
||||||
|
|
||||||
|
## Credits |
||||||
|
|
||||||
|
1. [frida-gum](https://github.com/frida/frida-gum) |
||||||
|
2. [minhook](https://github.com/TsudaKageyu/minhook) |
||||||
|
3. [substrate](https://github.com/jevinskie/substrate). |
||||||
|
4. [v8](https://github.com/v8/v8) |
||||||
|
5. [dart](https://github.com/dart-lang/sdk) |
||||||
|
6. [vixl](https://git.linaro.org/arm/vixl.git) |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
## Dobby |
||||||
|
|
||||||
|
**待更新** |
||||||
@ -0,0 +1,149 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
# if error, exit |
||||||
|
set - |
||||||
|
|
||||||
|
CURRENT_DIR=$(dirname "$0") |
||||||
|
SOURCE_DIR=${CURRENT_DIR}/.. |
||||||
|
|
||||||
|
compress_dir_array="" |
||||||
|
|
||||||
|
summary_output_dir_name=auto-build-output |
||||||
|
|
||||||
|
rm -rf ${summary_output_dir_name} |
||||||
|
|
||||||
|
# Darwin ================================================================ |
||||||
|
|
||||||
|
darwin_library_name=libdobby.a |
||||||
|
darwin_fat_library_name=libdobby.a |
||||||
|
|
||||||
|
# build macos x86_64 |
||||||
|
output_dir_name=auto-build-workspace/darwin-x86_64-build |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
mkdir -p ${CURRENT_DIR}/${output_dir_name} |
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/darwin/x86_64 |
||||||
|
cp -r ${output_dir_name}/${darwin_library_name} ${summary_output_dir_name}/darwin/x86_64 |
||||||
|
|
||||||
|
# build iphone arm64 |
||||||
|
output_dir_name=auto-build-workspace/darwin-arm64-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
mkdir -p ${CURRENT_DIR}/${output_dir_name} |
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/darwin/arm64 |
||||||
|
cp -r ${output_dir_name}/${darwin_library_name} ${summary_output_dir_name}/darwin/arm64 |
||||||
|
|
||||||
|
# build iphone arm64e |
||||||
|
output_dir_name=auto-build-workspace/darwin-arm64e-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
mkdir -p ${CURRENT_DIR}/${output_dir_name} |
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_TOOLCHAIN_FILE=cmake/ios.toolchain.cmake \ |
||||||
|
-DPLATFORM=OS64 -DARCHS="arm64e" -DCMAKE_SYSTEM_PROCESSOR=arm64e \ |
||||||
|
-DENABLE_BITCODE=0 -DENABLE_ARC=0 -DENABLE_VISIBILITY=1 -DDEPLOYMENT_TARGET=9.3 \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/darwin/arm64e |
||||||
|
cp -r ${output_dir_name}/${darwin_library_name} ${summary_output_dir_name}/darwin/arm64e |
||||||
|
|
||||||
|
# build darwin universal |
||||||
|
output_dir_name=auto-build-workspace/darwin-universal-build |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
mkdir -p ${CURRENT_DIR}/${output_dir_name} |
||||||
|
cp -r ${summary_output_dir_name}/darwin/arm64/${darwin_library_name} ${output_dir_name} |
||||||
|
|
||||||
|
# create universal fat lib |
||||||
|
lipo -create \ |
||||||
|
${summary_output_dir_name}/darwin/arm64/${darwin_fat_library_name} \ |
||||||
|
${summary_output_dir_name}/darwin/arm64e/${darwin_fat_library_name} \ |
||||||
|
${summary_output_dir_name}/darwin/x86_64/${darwin_fat_library_name} \ |
||||||
|
-output ${output_dir_name}/${darwin_fat_library_name} |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/darwin/universal |
||||||
|
cp -r ${output_dir_name}/${darwin_library_name} ${summary_output_dir_name}/darwin/universal |
||||||
|
|
||||||
|
# Android ================================================================ |
||||||
|
|
||||||
|
android_library_name=libdobby.a |
||||||
|
|
||||||
|
# build android aarch64 |
||||||
|
output_dir_name=auto-build-workspace/android-arm64-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="arm64-v8a" -DCMAKE_ANDROID_NDK=$ANDROID_NDK_DIR -DCMAKE_SYSTEM_VERSION=21 -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF -DPlugin.Android.BionicLinkerRestriction=ON |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/android/arm64 |
||||||
|
mv ${output_dir_name}/${android_library_name} ${summary_output_dir_name}/android/arm64/${android_library_name} |
||||||
|
mv ${output_dir_name}/${android_library_name} "prefab/modules/dobby/libs/android.arm64-v8a/${android_library_name}" |
||||||
|
|
||||||
|
# build android armv7 |
||||||
|
output_dir_name=auto-build-workspace/android-armv7-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="armeabi-v7a" -DCMAKE_ANDROID_NDK=$ANDROID_NDK_DIR -DCMAKE_SYSTEM_VERSION=16 -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF -DPlugin.Android.BionicLinkerRestriction=ON |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/android/armv7 |
||||||
|
mv ${output_dir_name}/${android_library_name} ${summary_output_dir_name}/android/armv7/${android_library_name} |
||||||
|
mv ${output_dir_name}/${android_library_name} "prefab/modules/dobby/libs/android.armeabi-v7a/${android_library_name}" |
||||||
|
|
||||||
|
# build android x86 |
||||||
|
output_dir_name=auto-build-workspace/android-x86-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="x86" -DCMAKE_ANDROID_NDK=$ANDROID_NDK_DIR -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF -DPlugin.Android.BionicLinkerRestriction=ON |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/android/x86 |
||||||
|
mv ${output_dir_name}/${android_library_name} ${summary_output_dir_name}/android/x86/${android_library_name} |
||||||
|
mv ${output_dir_name}/${android_library_name} "prefab/modules/dobby/libs/android.x86/${android_library_name}" |
||||||
|
|
||||||
|
# build android x86_64 |
||||||
|
output_dir_name=auto-build-workspace/android-x86_64-build |
||||||
|
compress_dir_array="$compress_dir_array $output_dir_name" |
||||||
|
echo "prepare build ${output_dir_name}" |
||||||
|
|
||||||
|
cmake -S ${SOURCE_DIR} -B ${output_dir_name} -DCMAKE_BUILD_TYPE=Release \ |
||||||
|
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="x86_64" -DCMAKE_ANDROID_NDK=$ANDROID_NDK_DIR -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
||||||
|
-DDOBBY_GENERATE_SHARED=OFF -DDOBBY_DEBUG=OFF -DPlugin.Android.BionicLinkerRestriction=ON |
||||||
|
cmake --build ${output_dir_name} --parallel 4 --target dobby |
||||||
|
|
||||||
|
mkdir -p ${summary_output_dir_name}/android/x86_64 |
||||||
|
mv ${output_dir_name}/${android_library_name} ${summary_output_dir_name}/android/x86_64/${android_library_name} |
||||||
|
#mv ${output_dir_name}/${android_library_name} "prefab/modules/dobby/libs/android.x86_64/${android_library_name}" |
||||||
|
|
||||||
|
## zip android prefab |
||||||
|
#mkdir -p prefab/modules/dobby/include |
||||||
|
#cp "include/dobby.h" "prefab/modules/dobby/include/" |
||||||
|
#cp "builtin-plugin/BionicLinkerRestriction/bionic_linker_restriction.h" "prefab/modules/dobby/include/" |
||||||
|
#cp "builtin-plugin/SymbolResolver/dobby_symbol_resolver.h" "prefab/modules/dobby/include/" |
||||||
|
#cp "prefab/AndroidManifest.xml" . |
||||||
|
#zip -r ${summary_output_dir_name}/android_prefab.aar prefab AndroidManifest.xml -x prefab/AndroidManifest.xml |
||||||
|
|
||||||
|
if [ $DOBBY_BUILD_OUTPUT_NAME ]; then |
||||||
|
tar czvf ${DOBBY_BUILD_OUTPUT_NAME} ${summary_output_dir_name} |
||||||
|
fi |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
package="io.github.jmpews.ndk.dobby" > |
||||||
|
|
||||||
|
<uses-sdk |
||||||
|
android:minSdkVersion="16" |
||||||
|
android:targetSdkVersion="30" /> |
||||||
|
|
||||||
|
</manifest> |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"abi": "arm64-v8a", |
||||||
|
"api": 21, |
||||||
|
"ndk": 21, |
||||||
|
"stl": "c++_static" |
||||||
|
} |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"abi": "armeabi-v7a", |
||||||
|
"api": 16, |
||||||
|
"ndk": 21, |
||||||
|
"stl": "c++_static" |
||||||
|
} |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"abi": "x86", |
||||||
|
"api": 16, |
||||||
|
"ndk": 21, |
||||||
|
"stl": "c++_static" |
||||||
|
} |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"abi": "x86_64", |
||||||
|
"api": 21, |
||||||
|
"ndk": 21, |
||||||
|
"stl": "c++_static" |
||||||
|
} |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
{ |
||||||
|
"export_libraries": [], |
||||||
|
"android": {} |
||||||
|
} |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
{ |
||||||
|
"name": "dobby", |
||||||
|
"schema_version": 1, |
||||||
|
"dependencies": [] |
||||||
|
} |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
#include "./dobby_monitor.h" |
||||||
|
|
||||||
|
#include <dlfcn.h> |
||||||
|
#include <CoreFoundation/CoreFoundation.h> |
||||||
|
|
||||||
|
#define LOG_TAG "MGCopyAnswer" |
||||||
|
|
||||||
|
static uintptr_t getCallFirstArg(RegisterContext *ctx) { |
||||||
|
uintptr_t result; |
||||||
|
#if defined(_M_X64) || defined(__x86_64__) |
||||||
|
#if defined(_WIN32) |
||||||
|
result = ctx->general.regs.rcx; |
||||||
|
#else |
||||||
|
result = ctx->general.regs.rdi; |
||||||
|
#endif |
||||||
|
#elif defined(__arm64__) || defined(__aarch64__) |
||||||
|
result = ctx->general.regs.x0; |
||||||
|
#elif defined(__arm__) |
||||||
|
result = ctx->general.regs.r0; |
||||||
|
#else |
||||||
|
#error "Not Support Architecture." |
||||||
|
#endif |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
void common_handler(RegisterContext *ctx, const HookEntryInfo *info) { |
||||||
|
CFStringRef key_ = 0; |
||||||
|
key_ = (CFStringRef)getCallFirstArg(ctx); |
||||||
|
|
||||||
|
char str_key[256] = {0}; |
||||||
|
CFStringGetCString(key_, str_key, 256, kCFStringEncodingUTF8); |
||||||
|
LOG("[#] MGCopyAnswer:: %s\n", str_key); |
||||||
|
} |
||||||
|
|
||||||
|
#if 0 |
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
void *lib = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_NOW); |
||||||
|
void *MGCopyAnswer_addr = DobbySymbolResolver("libMobileGestalt.dylib", "MGCopyAnswer"); |
||||||
|
|
||||||
|
sleep(1); |
||||||
|
|
||||||
|
dobby_enable_near_branch_trampoline(); |
||||||
|
DobbyInstrument((void *)MGCopyAnswer_addr, common_handler); |
||||||
|
dobby_disable_near_branch_trampoline(); |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
#ifndef DOBBY_MONITOR_H |
||||||
|
#define DOBBY_MONITOR_H |
||||||
|
|
||||||
|
#include <stdlib.h> /* getenv */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <set> |
||||||
|
#include <unordered_map> |
||||||
|
|
||||||
|
#include "dobby.h" |
||||||
|
|
||||||
|
#define LOG printf |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
int DobbyHook(void *function_address, void *replace_call, void **origin_call); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif // !1DOBBY_MONITOR
|
||||||
@ -0,0 +1,94 @@ |
|||||||
|
#include <stdlib.h> /* getenv */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <set> |
||||||
|
#include <unordered_map> |
||||||
|
|
||||||
|
#include <dlfcn.h> |
||||||
|
#include <sys/param.h> |
||||||
|
|
||||||
|
#include "dobby.h" |
||||||
|
|
||||||
|
#include "common_header.h" |
||||||
|
|
||||||
|
#define LOG_TAG "DynamicLoaderMonitor" |
||||||
|
|
||||||
|
std::unordered_map<void *, const char *> traced_dlopen_handle_list; |
||||||
|
|
||||||
|
static void *(*orig_dlopen)(const char *__file, int __mode); |
||||||
|
static void *fake_dlopen(const char *__file, int __mode) { |
||||||
|
void *result = orig_dlopen(__file, __mode); |
||||||
|
if (result != NULL && __file) { |
||||||
|
char *traced_filename = (char *)malloc(MAXPATHLEN); |
||||||
|
// FIXME: strncpy
|
||||||
|
strcpy(traced_filename, __file); |
||||||
|
LOG(1, "[-] dlopen handle: %s", __file); |
||||||
|
traced_dlopen_handle_list.insert(std::make_pair(result, (const char *)traced_filename)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static void *(*orig_loader_dlopen)(const char *filename, int flags, const void *caller_addr); |
||||||
|
static void *fake_loader_dlopen(const char *filename, int flags, const void *caller_addr) { |
||||||
|
void *result = orig_loader_dlopen(filename, flags, caller_addr); |
||||||
|
if (result != NULL) { |
||||||
|
char *traced_filename = (char *)malloc(MAXPATHLEN); |
||||||
|
// FIXME: strncpy
|
||||||
|
strcpy(traced_filename, filename); |
||||||
|
LOG(1, "[-] dlopen handle: %s", filename); |
||||||
|
traced_dlopen_handle_list.insert(std::make_pair(result, (const char *)traced_filename)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *get_traced_filename(void *handle, bool removed) { |
||||||
|
std::unordered_map<void *, const char *>::iterator it; |
||||||
|
it = traced_dlopen_handle_list.find(handle); |
||||||
|
if (it != traced_dlopen_handle_list.end()) { |
||||||
|
if (removed) |
||||||
|
traced_dlopen_handle_list.erase(it); |
||||||
|
return it->second; |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
static void *(*orig_dlsym)(void *__handle, const char *__symbol); |
||||||
|
static void *fake_dlsym(void *__handle, const char *__symbol) { |
||||||
|
const char *traced_filename = get_traced_filename(__handle, false); |
||||||
|
if (traced_filename) { |
||||||
|
LOG(1, "[-] dlsym: %s, symbol: %s", traced_filename, __symbol); |
||||||
|
} |
||||||
|
return orig_dlsym(__handle, __symbol); |
||||||
|
} |
||||||
|
|
||||||
|
static int (*orig_dlclose)(void *__handle); |
||||||
|
static int fake_dlclose(void *__handle) { |
||||||
|
const char *traced_filename = get_traced_filename(__handle, true); |
||||||
|
if (traced_filename) { |
||||||
|
LOG(1, "[-] dlclose: %s", traced_filename); |
||||||
|
free((void *)traced_filename); |
||||||
|
} |
||||||
|
return orig_dlclose(__handle); |
||||||
|
} |
||||||
|
|
||||||
|
#if 0 |
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
#if defined(__ANDROID__) |
||||||
|
#if 0 |
||||||
|
void *dl = dlopen("libdl.so", RTLD_LAZY); |
||||||
|
void *__loader_dlopen = dlsym(dl, "__loader_dlopen"); |
||||||
|
#endif |
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "__loader_dlopen"), (void *)fake_loader_dlopen, |
||||||
|
(void **)&orig_loader_dlopen); |
||||||
|
#else |
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "dlopen"), (void *)fake_dlopen, (void **)&orig_dlopen); |
||||||
|
#endif |
||||||
|
|
||||||
|
DobbyHook((void *)dlsym, (void *)fake_dlsym, (void **)&orig_dlsym); |
||||||
|
DobbyHook((void *)dlclose, (void *)fake_dlclose, (void **)&orig_dlclose); |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,97 @@ |
|||||||
|
#include <stdlib.h> /* getenv */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <set> |
||||||
|
#include <unordered_map> |
||||||
|
|
||||||
|
#include <sys/param.h> |
||||||
|
|
||||||
|
#include "./dobby_monitor.h" |
||||||
|
|
||||||
|
std::unordered_map<FILE *, const char *> *TracedFopenFileList; |
||||||
|
|
||||||
|
FILE *(*orig_fopen)(const char *filename, const char *mode); |
||||||
|
FILE *fake_fopen(const char *filename, const char *mode) { |
||||||
|
FILE *result = NULL; |
||||||
|
result = orig_fopen(filename, mode); |
||||||
|
if (result != NULL) { |
||||||
|
char *traced_filename = (char *)malloc(MAXPATHLEN); |
||||||
|
// FIXME: strncpy
|
||||||
|
strcpy(traced_filename, filename); |
||||||
|
std::cout << "[-] trace file: " << filename << std::endl; |
||||||
|
TracedFopenFileList->insert(std::make_pair(result, traced_filename)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *GetFileDescriptorTraced(FILE *stream, bool removed) { |
||||||
|
std::unordered_map<FILE *, const char *>::iterator it; |
||||||
|
it = TracedFopenFileList->find(stream); |
||||||
|
if (it != TracedFopenFileList->end()) { |
||||||
|
if (removed) |
||||||
|
TracedFopenFileList->erase(it); |
||||||
|
return it->second; |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
size_t (*orig_fread)(void *ptr, size_t size, size_t count, FILE *stream); |
||||||
|
size_t fake_fread(void *ptr, size_t size, size_t count, FILE *stream) { |
||||||
|
const char *file_name = GetFileDescriptorTraced(stream, false); |
||||||
|
if (file_name) { |
||||||
|
LOG("[-] fread: %s, buffer: %p\n", file_name, ptr); |
||||||
|
} |
||||||
|
return orig_fread(ptr, size, count, stream); |
||||||
|
} |
||||||
|
|
||||||
|
size_t (*orig_fwrite)(const void *ptr, size_t size, size_t count, FILE *stream); |
||||||
|
size_t fake_fwrite(void *ptr, size_t size, size_t count, FILE *stream) { |
||||||
|
const char *file_name = GetFileDescriptorTraced(stream, false); |
||||||
|
if (file_name) { |
||||||
|
LOG("[-] fwrite %s\n from %p\n", file_name, ptr); |
||||||
|
} |
||||||
|
return orig_fwrite(ptr, size, count, stream); |
||||||
|
} |
||||||
|
|
||||||
|
__attribute__((constructor)) void __main() { |
||||||
|
|
||||||
|
TracedFopenFileList = new std::unordered_map<FILE *, const char *>(); |
||||||
|
|
||||||
|
#if defined(__APPLE__) |
||||||
|
#include <TargetConditionals.h> |
||||||
|
#if (TARGET_OS_IPHONE || TARGET_OS_MAC) |
||||||
|
std::ifstream file; |
||||||
|
file.open("/System/Library/CoreServices/SystemVersion.plist"); |
||||||
|
std::cout << file.rdbuf(); |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
// DobbyHook((void *)fopen, (void *)fake_fopen, (void **)&orig_fopen);
|
||||||
|
// DobbyHook((void *)fwrite, (void *)fake_fwrite, (void **)&orig_fwrite);
|
||||||
|
// DobbyHook((void *)fread, (void *)fake_fread, (void **)&orig_fread);
|
||||||
|
|
||||||
|
char *home = getenv("HOME"); |
||||||
|
char *subdir = (char *)"/Library/Caches/"; |
||||||
|
|
||||||
|
std::string filePath = std::string(home) + std::string(subdir) + "temp.log"; |
||||||
|
|
||||||
|
char buffer[64]; |
||||||
|
memset(buffer, 'B', 64); |
||||||
|
|
||||||
|
FILE *fd = fopen(filePath.c_str(), "w+"); |
||||||
|
if (!fd) |
||||||
|
std::cout << "[!] open " << filePath << "failed!\n"; |
||||||
|
|
||||||
|
fwrite(buffer, 64, 1, fd); |
||||||
|
fflush(fd); |
||||||
|
fseek(fd, 0, SEEK_SET); |
||||||
|
memset(buffer, 0, 64); |
||||||
|
|
||||||
|
fread(buffer, 64, 1, fd); |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
@ -0,0 +1,58 @@ |
|||||||
|
#include "./dobby_monitor.h" |
||||||
|
|
||||||
|
#include <stdlib.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
static uintptr_t getCallFirstArg(RegisterContext *ctx) { |
||||||
|
uintptr_t result; |
||||||
|
#if defined(_M_X64) || defined(__x86_64__) |
||||||
|
#if defined(_WIN32) |
||||||
|
result = ctx->general.regs.rcx; |
||||||
|
#else |
||||||
|
result = ctx->general.regs.rdi; |
||||||
|
#endif |
||||||
|
#elif defined(__arm64__) || defined(__aarch64__) |
||||||
|
result = ctx->general.regs.x0; |
||||||
|
#elif defined(__arm__) |
||||||
|
result = ctx->general.regs.r0; |
||||||
|
#else |
||||||
|
#error "Not Support Architecture." |
||||||
|
#endif |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
void format_integer_manually(char *buf, uint64_t integer) { |
||||||
|
int tmp = 0; |
||||||
|
for (tmp = (int)integer; tmp > 0; tmp = (tmp >> 4)) { |
||||||
|
buf += (tmp % 16); |
||||||
|
buf--; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// [ATTENTION]:
|
||||||
|
// printf will call 'malloc' internally, and will crash in a loop.
|
||||||
|
// so, use 'puts' is a better choice.
|
||||||
|
void malloc_handler(RegisterContext *ctx, const HookEntryInfo *info) { |
||||||
|
size_t size_ = 0; |
||||||
|
size_ = getCallFirstArg(ctx); |
||||||
|
char *buffer_ = (char *)"[-] function malloc first arg: 0x00000000.\n"; |
||||||
|
format_integer_manually(strchr(buffer_, '.') - 1, size_); |
||||||
|
puts(buffer_); |
||||||
|
} |
||||||
|
|
||||||
|
void free_handler(RegisterContext *ctx, const HookEntryInfo *info) { |
||||||
|
uintptr_t mem_ptr; |
||||||
|
|
||||||
|
mem_ptr = getCallFirstArg(ctx); |
||||||
|
|
||||||
|
char *buffer = (char *)"[-] function free first arg: 0x00000000.\n"; |
||||||
|
format_integer_manually(strchr(buffer, '.') - 1, mem_ptr); |
||||||
|
puts(buffer); |
||||||
|
} |
||||||
|
|
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
// DobbyInstrument((void *)mmap, malloc_handler);
|
||||||
|
// DobbyInstrument((void *)free, free_handler);
|
||||||
|
return; |
||||||
|
} |
||||||
@ -0,0 +1,120 @@ |
|||||||
|
#include <stdlib.h> /* getenv */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <unistd.h> |
||||||
|
#include <fcntl.h> |
||||||
|
#include <stdarg.h> |
||||||
|
|
||||||
|
#include <dlfcn.h> |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <set> |
||||||
|
#include <unordered_map> |
||||||
|
|
||||||
|
#include <sys/param.h> |
||||||
|
|
||||||
|
#include "dobby.h" |
||||||
|
#include "common_header.h" |
||||||
|
|
||||||
|
#define LOG_TAG "PosixFileOperationMonitor" |
||||||
|
|
||||||
|
std::unordered_map<int, const char *> *posix_file_descriptors; |
||||||
|
|
||||||
|
int (*orig_open)(const char *pathname, int flags, ...); |
||||||
|
int fake_open(const char *pathname, int flags, ...) { |
||||||
|
mode_t mode = 0; |
||||||
|
if (flags & O_CREAT) { |
||||||
|
va_list args; |
||||||
|
va_start(args, flags); |
||||||
|
mode = (mode_t)va_arg(args, int); |
||||||
|
va_end(args); |
||||||
|
} |
||||||
|
|
||||||
|
int result = orig_open(pathname, flags, mode); |
||||||
|
if (result != -1) { |
||||||
|
char *traced_filename = (char *)malloc(MAXPATHLEN); |
||||||
|
// FIXME: strncpy
|
||||||
|
strcpy(traced_filename, pathname); |
||||||
|
LOG(1, "[-] trace open handle: %s", pathname); |
||||||
|
|
||||||
|
if (posix_file_descriptors == NULL) { |
||||||
|
posix_file_descriptors = new std::unordered_map<int, const char *>(); |
||||||
|
} |
||||||
|
posix_file_descriptors->insert(std::make_pair(result, (const char *)traced_filename)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
int (*orig___open)(const char *pathname, int flags, int mode); |
||||||
|
int fake___open(const char *pathname, int flags, int mode) { |
||||||
|
char *traced_filename = NULL; |
||||||
|
if (pathname) { |
||||||
|
traced_filename = (char *)malloc(MAXPATHLEN); |
||||||
|
// FIXME: strncpy
|
||||||
|
strcpy(traced_filename, pathname); |
||||||
|
LOG(1, "[-] trace open handle: ", pathname); |
||||||
|
} |
||||||
|
int result = orig___open(pathname, flags, mode); |
||||||
|
if (result != -1) { |
||||||
|
if (posix_file_descriptors == NULL) { |
||||||
|
posix_file_descriptors = new std::unordered_map<int, const char *>(); |
||||||
|
} |
||||||
|
posix_file_descriptors->insert(std::make_pair(result, (const char *)traced_filename)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *get_traced_filename(int fd, bool removed) { |
||||||
|
if (posix_file_descriptors == NULL) |
||||||
|
return NULL; |
||||||
|
std::unordered_map<int, const char *>::iterator it; |
||||||
|
it = posix_file_descriptors->find(fd); |
||||||
|
if (it != posix_file_descriptors->end()) { |
||||||
|
if (removed) |
||||||
|
posix_file_descriptors->erase(it); |
||||||
|
return it->second; |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
ssize_t (*orig_read)(int fd, void *buf, size_t count); |
||||||
|
ssize_t fake_read(int fd, void *buf, size_t count) { |
||||||
|
const char *traced_filename = get_traced_filename(fd, false); |
||||||
|
if (traced_filename) { |
||||||
|
LOG(1, "[-] read: %s, buffer: %p, size: %zu", traced_filename, buf, count); |
||||||
|
} |
||||||
|
return orig_read(fd, buf, count); |
||||||
|
} |
||||||
|
|
||||||
|
ssize_t (*orig_write)(int fd, const void *buf, size_t count); |
||||||
|
ssize_t fake_write(int fd, const void *buf, size_t count) { |
||||||
|
const char *traced_filename = get_traced_filename(fd, false); |
||||||
|
if (traced_filename) { |
||||||
|
LOG(1, "[-] write: %s, buffer: %p, size: %zu", traced_filename, buf, count); |
||||||
|
} |
||||||
|
return orig_write(fd, buf, count); |
||||||
|
} |
||||||
|
int (*orig_close)(int fd); |
||||||
|
int fake_close(int fd) { |
||||||
|
const char *traced_filename = get_traced_filename(fd, true); |
||||||
|
if (traced_filename) { |
||||||
|
LOG(1, "[-] close: %s", traced_filename); |
||||||
|
free((void *)traced_filename); |
||||||
|
} |
||||||
|
return orig_close(fd); |
||||||
|
} |
||||||
|
|
||||||
|
#if 0 |
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "open"), (void *)fake_open, (void **)&orig_open); |
||||||
|
|
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "write"), (void *)fake_write, (void **)&orig_write); |
||||||
|
|
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "read"), (void *)fake_read, (void **)&orig_read); |
||||||
|
|
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "close"), (void *)fake_close, (void **)&orig_close); |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,57 @@ |
|||||||
|
#include <stdlib.h> /* getenv */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
|
||||||
|
#include <set> |
||||||
|
|
||||||
|
#include <unordered_map> |
||||||
|
|
||||||
|
#include <sys/types.h> |
||||||
|
#include <sys/socket.h> |
||||||
|
|
||||||
|
std::unordered_map<int, const char *> posix_socket_file_descriptors; |
||||||
|
|
||||||
|
int (*orig_bind)(int sockfd, const struct sockaddr *addr, socklen_t addrlen); |
||||||
|
int fake_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { |
||||||
|
} |
||||||
|
|
||||||
|
static const char *get_traced_socket(int fd, bool removed) { |
||||||
|
std::unordered_map<int, const char *>::iterator it; |
||||||
|
it = posix_socket_file_descriptors.find(fd); |
||||||
|
if (it != posix_socket_file_descriptors.end()) { |
||||||
|
if (removed) |
||||||
|
posix_socket_file_descriptors.erase(it); |
||||||
|
return it->second; |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
int (*orig_connect)(int sockfd, const struct sockaddr *addr, socklen_t addrlen); |
||||||
|
int fake_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { |
||||||
|
const char *traced_socket = get_traced_socket(sockfd, false); |
||||||
|
if (traced_socket) { |
||||||
|
LOG(1, "[-] connect: %s\n", traced_socket); |
||||||
|
} |
||||||
|
return orig_connect(sockfd, addr, addrlen); |
||||||
|
} |
||||||
|
|
||||||
|
ssize_t (*orig_send)(int sockfd, const void *buf, size_t len, int flags); |
||||||
|
ssize_t fake_send(int sockfd, const void *buf, size_t len, int flags) { |
||||||
|
const char *traced_socket = get_traced_socket(sockfd, false); |
||||||
|
if (traced_socket) { |
||||||
|
LOG(1, "[-] send: %s, buf: %p, len: %zu\n", traced_socket, buf, len); |
||||||
|
} |
||||||
|
return orig_send(sockfd, buf, len, flags); |
||||||
|
} |
||||||
|
|
||||||
|
ssize_t (*orig_recv)(int sockfd, void *buf, size_t len, int flags); |
||||||
|
ssize_t fake_recv(int sockfd, void *buf, size_t len, int flags) { |
||||||
|
const char *traced_socket = get_traced_socket(sockfd, false); |
||||||
|
if (traced_socket) { |
||||||
|
LOG(1, "[-] recv: %s, buf: %p, len: %zu\n", traced_socket, buf, len); |
||||||
|
} |
||||||
|
return orig_recv(sockfd, buf, len, flags); |
||||||
|
} |
||||||
@ -0,0 +1,197 @@ |
|||||||
|
#include "bionic_linker_restriction.h" |
||||||
|
|
||||||
|
#include <elf.h> |
||||||
|
#include <jni.h> |
||||||
|
#include <string> |
||||||
|
#include <dlfcn.h> |
||||||
|
#include <link.h> |
||||||
|
#include <sys/mman.h> |
||||||
|
|
||||||
|
#include <unistd.h> |
||||||
|
#include <fcntl.h> |
||||||
|
|
||||||
|
#include <unordered_map> |
||||||
|
#include <vector> |
||||||
|
#include <set> |
||||||
|
|
||||||
|
#include "dobby.h" |
||||||
|
#include "dobby_symbol_resolver.h" |
||||||
|
|
||||||
|
#include "common_header.h" |
||||||
|
|
||||||
|
#undef LOG_TAG |
||||||
|
#define LOG_TAG "AndroidLinkerRestriction" |
||||||
|
|
||||||
|
#undef Q |
||||||
|
#define Q 29 |
||||||
|
// impl at "dobby_symbol_resolver.cc"
|
||||||
|
extern void *resolve_elf_internal_symbol(const char *library_name, const char *symbol_name); |
||||||
|
|
||||||
|
#include <sys/system_properties.h> |
||||||
|
static int get_android_system_version() { |
||||||
|
char os_version_str[PROP_VALUE_MAX + 1]; |
||||||
|
__system_property_get("ro.build.version.release", os_version_str); |
||||||
|
int os_version_int = atoi(os_version_str); |
||||||
|
return os_version_int; |
||||||
|
} |
||||||
|
|
||||||
|
static const char *get_android_linker_path() { |
||||||
|
#if __LP64__ |
||||||
|
if (get_android_system_version() >= Q) { |
||||||
|
return (const char *)"/apex/com.android.runtime/bin/linker64"; |
||||||
|
} else { |
||||||
|
return (const char *)"/system/bin/linker64"; |
||||||
|
} |
||||||
|
#else |
||||||
|
if (get_android_system_version() >= Q) { |
||||||
|
return (const char *)"/apex/com.android.runtime/bin/linker"; |
||||||
|
} else { |
||||||
|
return (const char *)"/system/bin/linker"; |
||||||
|
} |
||||||
|
#endif |
||||||
|
} |
||||||
|
|
||||||
|
PUBLIC void *linker_dlopen(const char *filename, int flag) { |
||||||
|
typedef void *(*__loader_dlopen_t)(const char *filename, int flags, const void *caller_addr); |
||||||
|
static __loader_dlopen_t __loader_dlopen = NULL; |
||||||
|
if (!__loader_dlopen) |
||||||
|
__loader_dlopen = (__loader_dlopen_t)DobbySymbolResolver(NULL, "__loader_dlopen"); |
||||||
|
|
||||||
|
// fake caller address
|
||||||
|
void *open_ptr = dlsym(RTLD_DEFAULT, "open"); |
||||||
|
return __loader_dlopen(filename, flag, (const void *)open_ptr); |
||||||
|
} |
||||||
|
|
||||||
|
std::vector<soinfo_t> linker_solist; |
||||||
|
std::vector<soinfo_t> linker_get_solist() { |
||||||
|
if (!linker_solist.empty()) { |
||||||
|
linker_solist.clear(); |
||||||
|
} |
||||||
|
|
||||||
|
static soinfo_t (*solist_get_head)() = NULL; |
||||||
|
if (!solist_get_head) |
||||||
|
solist_get_head = |
||||||
|
(soinfo_t(*)())resolve_elf_internal_symbol(get_android_linker_path(), "__dl__Z15solist_get_headv"); |
||||||
|
|
||||||
|
static soinfo_t (*solist_get_somain)() = NULL; |
||||||
|
if (!solist_get_somain) |
||||||
|
solist_get_somain = |
||||||
|
(soinfo_t(*)())resolve_elf_internal_symbol(get_android_linker_path(), "__dl__Z17solist_get_somainv"); |
||||||
|
|
||||||
|
static addr_t *solist_head = NULL; |
||||||
|
if (!solist_head) |
||||||
|
solist_head = (addr_t *)solist_get_head(); |
||||||
|
|
||||||
|
static addr_t somain = 0; |
||||||
|
if (!somain) |
||||||
|
somain = (addr_t)solist_get_somain(); |
||||||
|
|
||||||
|
// Generate the name for an offset.
|
||||||
|
#define PARAM_OFFSET(type_, member_) __##type_##__##member_##__offset_ |
||||||
|
#define STRUCT_OFFSET PARAM_OFFSET |
||||||
|
int STRUCT_OFFSET(solist, next) = 0; |
||||||
|
for (size_t i = 0; i < 1024 / sizeof(void *); i++) { |
||||||
|
if (*(addr_t *)((addr_t)solist_head + i * sizeof(void *)) == somain) { |
||||||
|
STRUCT_OFFSET(solist, next) = i * sizeof(void *); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
linker_solist.push_back(solist_head); |
||||||
|
|
||||||
|
addr_t sonext = 0; |
||||||
|
sonext = *(addr_t *)((addr_t)solist_head + STRUCT_OFFSET(solist, next)); |
||||||
|
while (sonext) { |
||||||
|
linker_solist.push_back((void *)sonext); |
||||||
|
sonext = *(addr_t *)((addr_t)sonext + STRUCT_OFFSET(solist, next)); |
||||||
|
} |
||||||
|
|
||||||
|
return linker_solist; |
||||||
|
} |
||||||
|
|
||||||
|
char *linker_soinfo_get_realpath(soinfo_t soinfo) { |
||||||
|
static char *(*_get_realpath)(soinfo_t) = NULL; |
||||||
|
if (!_get_realpath) |
||||||
|
_get_realpath = |
||||||
|
(char *(*)(soinfo_t))resolve_elf_internal_symbol(get_android_linker_path(), "__dl__ZNK6soinfo12get_realpathEv"); |
||||||
|
return _get_realpath(soinfo); |
||||||
|
} |
||||||
|
|
||||||
|
uintptr_t linker_soinfo_to_handle(soinfo_t soinfo) { |
||||||
|
static uintptr_t (*_linker_soinfo_to_handle)(soinfo_t) = NULL; |
||||||
|
if (!_linker_soinfo_to_handle) |
||||||
|
_linker_soinfo_to_handle = |
||||||
|
(uintptr_t(*)(soinfo_t))resolve_elf_internal_symbol(get_android_linker_path(), "__dl__ZN6soinfo9to_handleEv"); |
||||||
|
return _linker_soinfo_to_handle(soinfo); |
||||||
|
} |
||||||
|
|
||||||
|
typedef void *android_namespace_t; |
||||||
|
android_namespace_t linker_soinfo_get_primary_namespace(soinfo_t soinfo) { |
||||||
|
static android_namespace_t (*_get_primary_namespace)(soinfo_t) = NULL; |
||||||
|
if (!_get_primary_namespace) |
||||||
|
_get_primary_namespace = (android_namespace_t(*)(soinfo_t))resolve_elf_internal_symbol( |
||||||
|
get_android_linker_path(), "__dl__ZN6soinfo21get_primary_namespaceEv"); |
||||||
|
return _get_primary_namespace(soinfo); |
||||||
|
} |
||||||
|
|
||||||
|
void linker_iterate_soinfo(int (*cb)(soinfo_t soinfo)) { |
||||||
|
auto solist = linker_get_solist(); |
||||||
|
for (auto it = solist.begin(); it != solist.end(); it++) { |
||||||
|
int ret = cb(*it); |
||||||
|
if (ret != 0) |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
static int iterate_soinfo_cb(soinfo_t soinfo) { |
||||||
|
android_namespace_t ns = NULL; |
||||||
|
ns = linker_soinfo_get_primary_namespace(soinfo); |
||||||
|
LOG(1, "lib: %s", linker_soinfo_get_realpath(soinfo)); |
||||||
|
|
||||||
|
// set is_isolated_ as false
|
||||||
|
// no need for this actually
|
||||||
|
int STRUCT_OFFSET(android_namespace_t, is_isolated_) = 0x8; |
||||||
|
*(uint8_t *)((addr_t)ns + STRUCT_OFFSET(android_namespace_t, is_isolated_)) = false; |
||||||
|
|
||||||
|
std::vector<std::string> ld_library_paths = {"/system/lib64", "/sytem/lib"}; |
||||||
|
if (get_android_system_version() >= Q) { |
||||||
|
ld_library_paths.push_back("/apex/com.android.runtime/lib64"); |
||||||
|
ld_library_paths.push_back("/apex/com.android.runtime/lib"); |
||||||
|
} |
||||||
|
int STRUCT_OFFSET(android_namespace_t, ld_library_paths_) = 0x10; |
||||||
|
if (*(void **)((addr_t)ns + STRUCT_OFFSET(android_namespace_t, ld_library_paths_))) { |
||||||
|
std::vector<std::string> orig_ld_library_paths = |
||||||
|
*(std::vector<std::string> *)((addr_t)ns + STRUCT_OFFSET(android_namespace_t, ld_library_paths_)); |
||||||
|
orig_ld_library_paths.insert(orig_ld_library_paths.end(), ld_library_paths.begin(), ld_library_paths.end()); |
||||||
|
|
||||||
|
// remove duplicates
|
||||||
|
{ |
||||||
|
std::set<std::string> paths(orig_ld_library_paths.begin(), orig_ld_library_paths.end()); |
||||||
|
orig_ld_library_paths.assign(paths.begin(), paths.end()); |
||||||
|
} |
||||||
|
} else { |
||||||
|
*(std::vector<std::string> *)((addr_t)ns + STRUCT_OFFSET(android_namespace_t, ld_library_paths_)) = |
||||||
|
std::move(ld_library_paths); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
bool (*orig_linker_namespace_is_is_accessible)(android_namespace_t ns, const std::string &file); |
||||||
|
bool linker_namespace_is_is_accessible(android_namespace_t ns, const std::string &file) { |
||||||
|
LOG(1, "check %s", file.c_str()); |
||||||
|
return true; |
||||||
|
return orig_linker_namespace_is_is_accessible(ns, file); |
||||||
|
} |
||||||
|
|
||||||
|
void linker_disable_namespace_restriction() { |
||||||
|
linker_iterate_soinfo(iterate_soinfo_cb); |
||||||
|
|
||||||
|
// no need for this actually
|
||||||
|
void *linker_namespace_is_is_accessible_ptr = resolve_elf_internal_symbol( |
||||||
|
get_android_linker_path(), "__dl__ZN19android_namespace_t13is_accessibleERKNSt3__112basic_" |
||||||
|
"stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE"); |
||||||
|
DobbyHook(linker_namespace_is_is_accessible_ptr, (void *)linker_namespace_is_is_accessible, |
||||||
|
(void **)&orig_linker_namespace_is_is_accessible); |
||||||
|
|
||||||
|
LOG(1, "disable namespace restriction done"); |
||||||
|
} |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
#ifndef LINKER_RESTRICTION_H |
||||||
|
#define LINKER_RESTRICTION_H |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
typedef void *soinfo_t; |
||||||
|
|
||||||
|
soinfo_t linker_dlopen(const char *filename, int flag); |
||||||
|
|
||||||
|
char *linker_soinfo_get_realpath(soinfo_t soinfo); |
||||||
|
|
||||||
|
uintptr_t linker_soinfo_to_handle(soinfo_t soinfo); |
||||||
|
|
||||||
|
void linker_iterate_soinfo(int (*cb)(soinfo_t soinfo)); |
||||||
|
|
||||||
|
void linker_disable_namespace_restriction(); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
#include "dobby.h" |
||||||
|
|
||||||
|
#include "bionic_linker_restriction.h" |
||||||
|
|
||||||
|
#include "logging/logging.h" |
||||||
|
|
||||||
|
#include <dlfcn.h> |
||||||
|
|
||||||
|
#define LOG_TAG "AndroidLinkerRestriction" |
||||||
|
|
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
const char *lib = NULL; |
||||||
|
|
||||||
|
#if defined(__LP64__) |
||||||
|
lib = "/system/lib64/libandroid_runtime.so"; |
||||||
|
#else |
||||||
|
lib = "/system/lib/libandroid_runtime.so"; |
||||||
|
#endif |
||||||
|
|
||||||
|
void *vm = NULL; |
||||||
|
|
||||||
|
vm = DobbySymbolResolver(lib, "_ZN7android14AndroidRuntime7mJavaVME"); |
||||||
|
LOG(1, "DobbySymbolResolver::vm %p", vm); |
||||||
|
|
||||||
|
#if 0 |
||||||
|
linker_disable_namespace_restriction(); |
||||||
|
void *handle = NULL; |
||||||
|
handle = dlopen(lib, RTLD_LAZY); |
||||||
|
vm = dlsym(handle, "_ZN7android14AndroidRuntime7mJavaVME"); |
||||||
|
#else |
||||||
|
void *handle = NULL; |
||||||
|
handle = linker_dlopen(lib, RTLD_LAZY); |
||||||
|
vm = dlsym(handle, "_ZN7android14AndroidRuntime7mJavaVME"); |
||||||
|
#endif |
||||||
|
LOG(1, "vm %p", vm); |
||||||
|
} |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
add_library(dyld2_hide_library |
||||||
|
dyld2_hide_library.cc |
||||||
|
) |
||||||
@ -0,0 +1,136 @@ |
|||||||
|
#include "Dyld2HideLibrary/dyld2_hide_library.h" |
||||||
|
|
||||||
|
#include <mach-o/dyld.h> |
||||||
|
#include <mach-o/loader.h> |
||||||
|
#include <mach-o/nlist.h> |
||||||
|
#include <mach-o/dyld_images.h> |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
#include <stdio.h> |
||||||
|
|
||||||
|
#include <mach/mach.h> |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include "dobby_internal.h" |
||||||
|
|
||||||
|
typedef void ImageLoader; |
||||||
|
|
||||||
|
typedef void ImageLoaderMachO; |
||||||
|
|
||||||
|
static void *(*removeImageFromAllImages)(const struct mach_header *mh) = NULL; |
||||||
|
|
||||||
|
static char *(*ImageLoader__getShortName)(ImageLoader *loader) = NULL; |
||||||
|
|
||||||
|
static struct mach_header *(*ImageLoaderMachO__machHeader)(ImageLoaderMachO *loader) = NULL; |
||||||
|
|
||||||
|
static std::vector<ImageLoader *> *sAllImages = NULL; |
||||||
|
|
||||||
|
std::vector<char *> *g_prepare_remove_array; |
||||||
|
|
||||||
|
static int dobby_hide_library_internal(const char *library_name) { |
||||||
|
if (removeImageFromAllImages == NULL) { |
||||||
|
removeImageFromAllImages = |
||||||
|
(typeof(removeImageFromAllImages))DobbySymbolResolver("dyld", "__Z24removeImageFromAllImagesPK11mach_header"); |
||||||
|
} |
||||||
|
|
||||||
|
if (ImageLoader__getShortName == NULL) { |
||||||
|
ImageLoader__getShortName = |
||||||
|
(typeof(ImageLoader__getShortName))DobbySymbolResolver("dyld", "__ZNK11ImageLoader12getShortNameEv"); |
||||||
|
} |
||||||
|
|
||||||
|
if (ImageLoaderMachO__machHeader == NULL) { |
||||||
|
ImageLoaderMachO__machHeader = |
||||||
|
(typeof(ImageLoaderMachO__machHeader))DobbySymbolResolver("dyld", "__ZNK16ImageLoaderMachO10machHeaderEv"); |
||||||
|
} |
||||||
|
|
||||||
|
if (sAllImages == NULL) |
||||||
|
sAllImages = (typeof(sAllImages))DobbySymbolResolver("dyld", "__ZN4dyldL10sAllImagesE"); |
||||||
|
|
||||||
|
#if 0 |
||||||
|
if (dyld3__AllImages__imageLoadAddressByIndex == NULL) { |
||||||
|
dyld3__AllImages__imageLoadAddressByIndex = (typeof(removeImageFromAllImages))DobbySymbolResolver( |
||||||
|
"libdyld.dylib", "__ZNK5dyld39AllImages23imageLoadAddressByIndexEj"); |
||||||
|
} |
||||||
|
|
||||||
|
if (dyld3_sAllImages == NULL) |
||||||
|
dyld3_sAllImages = (typeof(dyld3_sAllImages))DobbySymbolResolver("libdyld.dylib", "__ZN5dyld310gAllImagesE"); |
||||||
|
#endif |
||||||
|
|
||||||
|
#if 0 |
||||||
|
typedef void AllImages; |
||||||
|
static void(*AllImages__decRefCount)(AllImages *_this, const struct mach_header *mh) = NULL; |
||||||
|
if(AllImages__decRefCount == NULL) { |
||||||
|
AllImages__decRefCount = (typeof(AllImages__decRefCount))DobbySymbolResolver("libdyld.dylib", "__ZN5dyld39AllImages11decRefCountEPK11mach_header"); |
||||||
|
} |
||||||
|
|
||||||
|
static AllImages *gAllImages = NULL; |
||||||
|
if(gAllImages == NULL) { |
||||||
|
gAllImages = (typeof(gAllImages))DobbySymbolResolver("libdyld.dylib", "__ZN5dyld310gAllImagesE"); |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
// int count = _dyld_image_count();
|
||||||
|
// for (int i = 0; i < count; i++) {
|
||||||
|
// const char *name = _dyld_get_image_name(i);
|
||||||
|
// const char *image_name = strrchr(name, '/');
|
||||||
|
// if (image_name == NULL) {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// image_name += 1;
|
||||||
|
// if (strcmp(image_name, library_name) == 0) {
|
||||||
|
// const struct mach_header *header = _dyld_get_image_header(i);
|
||||||
|
// AllImages__decRefCount(gAllImages, header);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
for (std::vector<ImageLoader *>::iterator it = sAllImages->begin(); it != sAllImages->end(); it++) { |
||||||
|
char *name = ImageLoader__getShortName(*it); |
||||||
|
// LOG(2, "load library : %s", name);
|
||||||
|
if (strcmp(name, library_name) == 0) { |
||||||
|
LOG(2, "strip load library : %s", library_name); |
||||||
|
struct mach_header *header = ImageLoaderMachO__machHeader(*it); |
||||||
|
removeImageFromAllImages(header); |
||||||
|
sAllImages->erase(it); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
PUBLIC int dyld2_hide_library(const char *library_name) { |
||||||
|
#if 1 |
||||||
|
dobby_hide_library_internal(library_name); |
||||||
|
return 0; |
||||||
|
#endif |
||||||
|
|
||||||
|
if (g_prepare_remove_array == NULL) |
||||||
|
g_prepare_remove_array = new std::vector<char *>(); |
||||||
|
g_prepare_remove_array->push_back((char *)library_name); |
||||||
|
} |
||||||
|
|
||||||
|
static void common_handler(RegisterContext *ctx, const HookEntryInfo *info) { |
||||||
|
if (g_prepare_remove_array == nullptr) |
||||||
|
return; |
||||||
|
for (auto name : *g_prepare_remove_array) { |
||||||
|
dobby_hide_library_internal(name); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
#if 0 |
||||||
|
void *dyld__notifyMonitoringDyldMain = DobbySymbolResolver("dyld", "__ZN4dyldL24notifyMonitoringDyldMainEv"); |
||||||
|
DobbyInstrument(dyld__notifyMonitoringDyldMain, common_handler); |
||||||
|
#endif |
||||||
|
|
||||||
|
log_switch_to_syslog(); |
||||||
|
|
||||||
|
#if defined(DOBBY_DEBUG) && 0 |
||||||
|
dyld2_hide_library("Dobby"); |
||||||
|
dyld2_hide_library("liblangid.dylib"); |
||||||
|
#endif |
||||||
|
} |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
int dyld2_hide_library(const char *library_name); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
if(SYSTEM.Darwin) |
||||||
|
set(SOURCE_FILE_LIST |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/global_offset_table_hook.cc |
||||||
|
) |
||||||
|
endif() |
||||||
|
|
||||||
|
add_library(global_offset_table_hook STATIC |
||||||
|
${SOURCE_FILE_LIST} |
||||||
|
) |
||||||
|
|
||||||
|
include_directories( |
||||||
|
. |
||||||
|
) |
||||||
@ -0,0 +1,192 @@ |
|||||||
|
#include "global_offset_table_hook.h" |
||||||
|
|
||||||
|
#include <mach-o/dyld.h> |
||||||
|
#include <mach-o/loader.h> |
||||||
|
#include <mach-o/nlist.h> |
||||||
|
#include <mach-o/dyld_images.h> |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#include <mach/vm_map.h> |
||||||
|
#include <mach/mach.h> |
||||||
|
#include <sys/mman.h> |
||||||
|
|
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include "common_header.h" |
||||||
|
|
||||||
|
#include "logging/logging.h" |
||||||
|
|
||||||
|
#include "PlatformUtil/ProcessRuntimeUtility.h" |
||||||
|
|
||||||
|
#if defined(__LP64__) |
||||||
|
typedef struct mach_header_64 mach_header_t; |
||||||
|
typedef struct segment_command_64 segment_command_t; |
||||||
|
typedef struct section_64 section_t; |
||||||
|
typedef struct nlist_64 nlist_t; |
||||||
|
#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT_64 |
||||||
|
#else |
||||||
|
typedef struct mach_header mach_header_t; |
||||||
|
typedef struct segment_command segment_command_t; |
||||||
|
typedef struct section section_t; |
||||||
|
typedef struct nlist nlist_t; |
||||||
|
#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT |
||||||
|
#endif |
||||||
|
|
||||||
|
static void *iterate_indirect_symtab(char *symbol_name, section_t *section, intptr_t slide, nlist_t *symtab, |
||||||
|
char *strtab, uint32_t *indirect_symtab) { |
||||||
|
const bool is_data_const = strcmp(section->segname, "__DATA_CONST") == 0; |
||||||
|
uint32_t *indirect_symbol_indices = indirect_symtab + section->reserved1; |
||||||
|
void **indirect_symbol_bindings = (void **)((uintptr_t)slide + section->addr); |
||||||
|
|
||||||
|
vm_prot_t old_protection = VM_PROT_READ; |
||||||
|
if (is_data_const) { |
||||||
|
mprotect(indirect_symbol_bindings, section->size, PROT_READ | PROT_WRITE); |
||||||
|
} |
||||||
|
|
||||||
|
for (uint i = 0; i < section->size / sizeof(void *); i++) { |
||||||
|
uint32_t symtab_index = indirect_symbol_indices[i]; |
||||||
|
if (symtab_index == INDIRECT_SYMBOL_ABS || symtab_index == INDIRECT_SYMBOL_LOCAL || |
||||||
|
symtab_index == (INDIRECT_SYMBOL_LOCAL | INDIRECT_SYMBOL_ABS)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
uint32_t strtab_offset = symtab[symtab_index].n_un.n_strx; |
||||||
|
char *local_symbol_name = strtab + strtab_offset; |
||||||
|
bool symbol_name_longer_than_1 = symbol_name[0] && symbol_name[1]; |
||||||
|
if (strcmp(local_symbol_name, symbol_name) == 0) { |
||||||
|
return &indirect_symbol_bindings[i]; |
||||||
|
} |
||||||
|
if (local_symbol_name[0] == '_') { |
||||||
|
if (strcmp(symbol_name, &local_symbol_name[1]) == 0) { |
||||||
|
return &indirect_symbol_bindings[i]; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (is_data_const && 0) { |
||||||
|
int protection = 0; |
||||||
|
if (old_protection & VM_PROT_READ) { |
||||||
|
protection |= PROT_READ; |
||||||
|
} |
||||||
|
if (old_protection & VM_PROT_WRITE) { |
||||||
|
protection |= PROT_WRITE; |
||||||
|
} |
||||||
|
if (old_protection & VM_PROT_EXECUTE) { |
||||||
|
protection |= PROT_EXEC; |
||||||
|
} |
||||||
|
mprotect(indirect_symbol_bindings, section->size, protection); |
||||||
|
} |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
static void *get_global_offset_table_stub(mach_header_t *header, char *symbol_name) { |
||||||
|
segment_command_t *curr_seg_cmd; |
||||||
|
segment_command_t *text_segment, *data_segment, *linkedit_segment; |
||||||
|
struct symtab_command *symtab_cmd = NULL; |
||||||
|
struct dysymtab_command *dysymtab_cmd = NULL; |
||||||
|
|
||||||
|
uintptr_t cur = (uintptr_t)header + sizeof(mach_header_t); |
||||||
|
for (uint i = 0; i < header->ncmds; i++, cur += curr_seg_cmd->cmdsize) { |
||||||
|
curr_seg_cmd = (segment_command_t *)cur; |
||||||
|
if (curr_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) { |
||||||
|
if (strcmp(curr_seg_cmd->segname, "__LINKEDIT") == 0) { |
||||||
|
linkedit_segment = curr_seg_cmd; |
||||||
|
} else if (strcmp(curr_seg_cmd->segname, "__DATA") == 0) { |
||||||
|
data_segment = curr_seg_cmd; |
||||||
|
} else if (strcmp(curr_seg_cmd->segname, "__TEXT") == 0) { |
||||||
|
text_segment = curr_seg_cmd; |
||||||
|
} |
||||||
|
} else if (curr_seg_cmd->cmd == LC_SYMTAB) { |
||||||
|
symtab_cmd = (struct symtab_command *)curr_seg_cmd; |
||||||
|
} else if (curr_seg_cmd->cmd == LC_DYSYMTAB) { |
||||||
|
dysymtab_cmd = (struct dysymtab_command *)curr_seg_cmd; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!symtab_cmd || !linkedit_segment || !linkedit_segment) { |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
uintptr_t slide = (uintptr_t)header - (uintptr_t)text_segment->vmaddr; |
||||||
|
uintptr_t linkedit_base = (uintptr_t)slide + linkedit_segment->vmaddr - linkedit_segment->fileoff; |
||||||
|
nlist_t *symtab = (nlist_t *)(linkedit_base + symtab_cmd->symoff); |
||||||
|
char *strtab = (char *)(linkedit_base + symtab_cmd->stroff); |
||||||
|
uint32_t symtab_count = symtab_cmd->nsyms; |
||||||
|
|
||||||
|
uint32_t *indirect_symtab = (uint32_t *)(linkedit_base + dysymtab_cmd->indirectsymoff); |
||||||
|
|
||||||
|
cur = (uintptr_t)header + sizeof(mach_header_t); |
||||||
|
for (uint i = 0; i < header->ncmds; i++, cur += curr_seg_cmd->cmdsize) { |
||||||
|
curr_seg_cmd = (segment_command_t *)cur; |
||||||
|
if (curr_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) { |
||||||
|
if (strcmp(curr_seg_cmd->segname, "__DATA") != 0 && strcmp(curr_seg_cmd->segname, "__DATA_CONST") != 0) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
for (uint j = 0; j < curr_seg_cmd->nsects; j++) { |
||||||
|
section_t *sect = (section_t *)(cur + sizeof(segment_command_t)) + j; |
||||||
|
if ((sect->flags & SECTION_TYPE) == S_LAZY_SYMBOL_POINTERS) { |
||||||
|
void *stub = iterate_indirect_symtab(symbol_name, sect, slide, symtab, strtab, indirect_symtab); |
||||||
|
if (stub) |
||||||
|
return stub; |
||||||
|
} |
||||||
|
if ((sect->flags & SECTION_TYPE) == S_NON_LAZY_SYMBOL_POINTERS) { |
||||||
|
void *stub = iterate_indirect_symtab(symbol_name, sect, slide, symtab, strtab, indirect_symtab); |
||||||
|
if (stub) |
||||||
|
return stub; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
PUBLIC int DobbyGlobalOffsetTableReplace(char *image_name, char *symbol_name, void *fake_func, void **orig_func_ptr) { |
||||||
|
std::vector<RuntimeModule> ProcessModuleMap = ProcessRuntimeUtility::GetProcessModuleMap(); |
||||||
|
|
||||||
|
for (auto module : ProcessModuleMap) { |
||||||
|
if (image_name != NULL && strstr(module.path, image_name) == NULL) |
||||||
|
continue; |
||||||
|
|
||||||
|
addr_t header = (addr_t)module.load_address; |
||||||
|
size_t slide = 0; |
||||||
|
|
||||||
|
#if 0 |
||||||
|
if (header) { |
||||||
|
if (((struct mach_header *)header)->magic == MH_MAGIC_64) |
||||||
|
slide = macho_kit_get_slide64(header); |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#if 0 |
||||||
|
LOG(1, "resolve image: %s", module.path); |
||||||
|
#endif |
||||||
|
|
||||||
|
uint32_t nlist_count = 0; |
||||||
|
nlist_t *nlist_array = 0; |
||||||
|
char *string_pool = 0; |
||||||
|
|
||||||
|
void *stub = get_global_offset_table_stub((mach_header_t *)header, symbol_name); |
||||||
|
if (stub) { |
||||||
|
void *orig_func; |
||||||
|
orig_func = *(void **)stub; |
||||||
|
#if __has_feature(ptrauth_calls) |
||||||
|
orig_func = ptrauth_strip(orig_func, ptrauth_key_asia); |
||||||
|
orig_func = ptrauth_sign_unauthenticated(orig_func, ptrauth_key_asia, 0); |
||||||
|
#endif |
||||||
|
*orig_func_ptr = orig_func; |
||||||
|
|
||||||
|
#if __has_feature(ptrauth_calls) |
||||||
|
fake_func = (void *)ptrauth_strip(fake_func, ptrauth_key_asia); |
||||||
|
fake_func = ptrauth_sign_unauthenticated(fake_func, ptrauth_key_asia, stub); |
||||||
|
#endif |
||||||
|
*(void **)stub = fake_func; |
||||||
|
} |
||||||
|
|
||||||
|
if (image_name) |
||||||
|
return 0; |
||||||
|
} |
||||||
|
return -1; |
||||||
|
} |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
int DobbyGlobalOffsetTableReplace(char *image_name, char *symbol_name, void *fake_func, void **orig_func); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1 @@ |
|||||||
|
private |
||||||
@ -0,0 +1 @@ |
|||||||
|
private |
||||||
@ -0,0 +1,61 @@ |
|||||||
|
#include "dobby.h" |
||||||
|
#include "common_header.h" |
||||||
|
|
||||||
|
#include <dlfcn.h> |
||||||
|
|
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#define LOG_TAG "LinkerLoadCallback" |
||||||
|
|
||||||
|
std::vector<linker_load_callback_t> *linker_load_callback_array; |
||||||
|
|
||||||
|
static void *(*orig_dlopen)(const char *__file, int __mode); |
||||||
|
static void *fake_dlopen(const char *__file, int __mode) { |
||||||
|
void *result = orig_dlopen(__file, __mode); |
||||||
|
if (result != NULL && __file) { |
||||||
|
for (auto &callback : *linker_load_callback_array) { |
||||||
|
callback(__file, result); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
static void *(*orig_loader_dlopen)(const char *filename, int flags, const void *caller_addr); |
||||||
|
static void *fake_loader_dlopen(const char *filename, int flags, const void *caller_addr) { |
||||||
|
void *result = orig_loader_dlopen(filename, flags, caller_addr); |
||||||
|
if (result != NULL) { |
||||||
|
for (auto &callback : *linker_load_callback_array) { |
||||||
|
callback(filename, result); |
||||||
|
} |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
PUBLIC void dobby_register_image_load_callback(linker_load_callback_t func) { |
||||||
|
if (linker_load_callback_array == NULL) |
||||||
|
linker_load_callback_array = new std::vector<linker_load_callback_t>(); |
||||||
|
linker_load_callback_array->push_back(func); |
||||||
|
} |
||||||
|
|
||||||
|
#if defined(DOBBY_DEBUG) && 1 |
||||||
|
static void monitor_linker_load(const char *image_name, void *handle) { |
||||||
|
LOG(1, "load %s at %p", image_name, handle); |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
__attribute__((constructor)) static void ctor() { |
||||||
|
if (linker_load_callback_array == NULL) |
||||||
|
linker_load_callback_array = new std::vector<linker_load_callback_t>(); |
||||||
|
|
||||||
|
#if defined(__ANDROID__) |
||||||
|
void *__loader_dlopen = DobbySymbolResolver(NULL, "__loader_dlopen"); |
||||||
|
LOG(1, "__loader_dlopen: %p", __loader_dlopen); |
||||||
|
DobbyHook(__loader_dlopen, (void *)fake_loader_dlopen, (void **)&orig_loader_dlopen); |
||||||
|
#else |
||||||
|
DobbyHook((void *)DobbySymbolResolver(NULL, "dlopen"), (void *)fake_dlopen, (void **)&orig_dlopen); |
||||||
|
#endif |
||||||
|
|
||||||
|
#if defined(DOBBY_DEBUG) && 1 |
||||||
|
dobby_register_image_load_callback(monitor_linker_load); |
||||||
|
#endif |
||||||
|
} |
||||||
@ -0,0 +1 @@ |
|||||||
|
private |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
add_library(objc_runtime_hook |
||||||
|
objc_runtime_hook.mm |
||||||
|
) |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <objc/runtime.h> |
||||||
|
#include <Foundation/Foundation.h> |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
IMP DobbyObjcReplace(Class _class, SEL _selector, IMP replacement); |
||||||
|
|
||||||
|
void DobbyObjcReplaceEx(const char *class_name, const char *selector_name, void *fake_impl, void **orig_impl); |
||||||
|
|
||||||
|
void *DobbyObjcResolveMethodImp(const char *class_name, const char *selector_name); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
#include "ObjcRuntimeHook/objc_runtime_hook.h" |
||||||
|
#include "dobby_internal.h" |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <objc/runtime.h> |
||||||
|
|
||||||
|
extern "C" { |
||||||
|
#include "misc-helper/variable_cache.h" |
||||||
|
} |
||||||
|
|
||||||
|
/* clang -rewrite-objc main.m */ |
||||||
|
|
||||||
|
IMP DobbyObjcReplace(Class class_, SEL sel_, IMP fake_impl) { |
||||||
|
Method method_ = class_getInstanceMethod(class_, sel_); |
||||||
|
if (!method_) |
||||||
|
method_ = class_getClassMethod(class_, sel_); |
||||||
|
|
||||||
|
if (!method_) { |
||||||
|
DLOG(0, "Not found class: %s, selector: %s method\n", class_getName(class_), sel_getName(sel_)); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
|
||||||
|
return method_setImplementation(method_, (IMP)fake_impl); |
||||||
|
} |
||||||
|
|
||||||
|
void DobbyObjcReplaceEx(const char *class_name, const char *selector_name, void *fake_impl, void **out_orig_impl) { |
||||||
|
Class class_ = objc_getClass(class_name); |
||||||
|
SEL sel_ = sel_registerName(selector_name); |
||||||
|
|
||||||
|
Method method_ = class_getInstanceMethod(class_, sel_); |
||||||
|
if (!method_) |
||||||
|
method_ = class_getClassMethod(class_, sel_); |
||||||
|
|
||||||
|
if (!method_) { |
||||||
|
DLOG(0, "Not found class: %s, selector: %s method\n", class_name, selector_name); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
void *orig_impl = NULL; |
||||||
|
orig_impl = (void *)method_setImplementation(method_, (IMP)fake_impl); |
||||||
|
if (out_orig_impl) { |
||||||
|
*out_orig_impl = orig_impl; |
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
void *DobbyObjcResolveMethodImp(const char *class_name, const char *selector_name) { |
||||||
|
Class class_ = objc_getClass(class_name); |
||||||
|
SEL sel_ = sel_registerName(selector_name); |
||||||
|
|
||||||
|
Method method_ = class_getInstanceMethod(class_, sel_); |
||||||
|
if (!method_) |
||||||
|
method_ = class_getClassMethod(class_, sel_); |
||||||
|
|
||||||
|
if (!method_) { |
||||||
|
DLOG(0, "Not found class: %s, selector: %s method\n", class_name, selector_name); |
||||||
|
return NULL; |
||||||
|
} |
||||||
|
return (void *)method_getImplementation(method_); |
||||||
|
} |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
add_library(supervisor_call_monitor STATIC |
||||||
|
mach_system_call_log_handler.cc |
||||||
|
system_call_log_handler.cc |
||||||
|
supervisor_call_monitor.cc |
||||||
|
sensitive_api_monitor.cc |
||||||
|
misc_utility.cc |
||||||
|
) |
||||||
|
target_link_libraries(supervisor_call_monitor |
||||||
|
misc_helper |
||||||
|
dobby |
||||||
|
) |
||||||
|
|
||||||
|
add_library(test_supervisor_call_monitor SHARED |
||||||
|
test_supervisor_call_monitor.cc |
||||||
|
) |
||||||
|
target_link_libraries(test_supervisor_call_monitor |
||||||
|
supervisor_call_monitor |
||||||
|
) |
||||||
|
|
||||||
|
include_directories( |
||||||
|
. |
||||||
|
) |
||||||
|
|
||||||
@ -0,0 +1 @@ |
|||||||
|
Monitor all supervisor call |
||||||
@ -0,0 +1 @@ |
|||||||
|
syscalls.c is automatically generated |
||||||
@ -0,0 +1,49 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2004-2008, Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_BSD_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* Redistribution and use in source and binary forms, with or without |
||||||
|
* modification, are permitted provided that the following conditions |
||||||
|
* are met: |
||||||
|
* |
||||||
|
* 1. Redistributions of source code must retain the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer. |
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright |
||||||
|
* notice, this list of conditions and the following disclaimer in the |
||||||
|
* documentation and/or other materials provided with the distribution. |
||||||
|
* 3. Neither the name of Apple Inc. ("Apple") nor the names of |
||||||
|
* its contributors may be used to endorse or promote products derived |
||||||
|
* from this software without specific prior written permission. |
||||||
|
* |
||||||
|
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||||
|
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||||
|
* |
||||||
|
* @APPLE_BSD_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* Interface definition for the audit logging facility. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif /* KERNEL_USER */ |
||||||
|
audit_triggers 123; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
|
||||||
|
simpleroutine audit_triggers( |
||||||
|
audit_port : mach_port_t; |
||||||
|
in flags : int); |
||||||
|
|
||||||
@ -0,0 +1,88 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: mach/boolean.h |
||||||
|
* |
||||||
|
* Boolean data type. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_BOOLEAN_H_ |
||||||
|
#define _MACH_BOOLEAN_H_ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Pick up "boolean_t" type definition |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef ASSEMBLER |
||||||
|
#include <mach/machine/boolean.h> |
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Define TRUE and FALSE if not defined. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef TRUE |
||||||
|
#define TRUE 1 |
||||||
|
#endif /* TRUE */ |
||||||
|
|
||||||
|
#ifndef FALSE |
||||||
|
#define FALSE 0 |
||||||
|
#endif /* FALSE */ |
||||||
|
|
||||||
|
#endif /* _MACH_BOOLEAN_H_ */ |
||||||
@ -0,0 +1,34 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach bootstrap interfaces (obsolete: header included only for compatibility) |
||||||
|
*/ |
||||||
|
#ifndef _MACH_BOOTSTRAP_H_ |
||||||
|
#define _MACH_BOOTSTRAP_H_ |
||||||
|
|
||||||
|
#endif /* _MACH_BOOTSTRAP_H_ */ |
||||||
@ -0,0 +1,81 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: mach/clock.defs |
||||||
|
* Purpose: Kernel clock subsystem definitions. This |
||||||
|
* file defines the clock request interface. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
clock 1000; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
#include <mach/clock_types.defs> |
||||||
|
|
||||||
|
/* |
||||||
|
* References to clock objects are returned by: |
||||||
|
* host_get_clock_service(host_t,...) |
||||||
|
* host_get_clock_control(host_priv_t,...) - Priviledged subclass |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* Get the clock time. |
||||||
|
* Available to all. |
||||||
|
*/ |
||||||
|
routine clock_get_time( |
||||||
|
clock_serv : clock_serv_t; |
||||||
|
out cur_time : mach_timespec_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get clock attributes. |
||||||
|
* Available to all. |
||||||
|
*/ |
||||||
|
routine clock_get_attributes( |
||||||
|
clock_serv : clock_serv_t; |
||||||
|
in flavor : clock_flavor_t; |
||||||
|
out clock_attr : clock_attr_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Setup a clock alarm. |
||||||
|
* Available to all. |
||||||
|
*/ |
||||||
|
routine clock_alarm( |
||||||
|
clock_serv : clock_serv_t; |
||||||
|
alarm_type : alarm_type_t; |
||||||
|
alarm_time : mach_timespec_t; |
||||||
|
alarm_port : clock_reply_t = |
||||||
|
MACH_MSG_TYPE_MAKE_SEND_ONCE|polymorphic); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,245 @@ |
|||||||
|
#ifndef _clock_user_ |
||||||
|
#define _clock_user_ |
||||||
|
|
||||||
|
/* Module clock */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef clock_MSG_COUNT |
||||||
|
#define clock_MSG_COUNT 3 |
||||||
|
#endif /* clock_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* Routine clock_get_time */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_get_time |
||||||
|
( |
||||||
|
clock_serv_t clock_serv, |
||||||
|
mach_timespec_t *cur_time |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine clock_get_attributes */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_get_attributes |
||||||
|
( |
||||||
|
clock_serv_t clock_serv, |
||||||
|
clock_flavor_t flavor, |
||||||
|
clock_attr_t clock_attr, |
||||||
|
mach_msg_type_number_t *clock_attrCnt |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine clock_alarm */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_alarm |
||||||
|
( |
||||||
|
clock_serv_t clock_serv, |
||||||
|
alarm_type_t alarm_type, |
||||||
|
mach_timespec_t alarm_time, |
||||||
|
clock_reply_t alarm_port |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__clock_subsystem__defined |
||||||
|
#define __Request__clock_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
} __Request__clock_get_time_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
clock_flavor_t flavor; |
||||||
|
mach_msg_type_number_t clock_attrCnt; |
||||||
|
} __Request__clock_get_attributes_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t alarm_port; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
NDR_record_t NDR; |
||||||
|
alarm_type_t alarm_type; |
||||||
|
mach_timespec_t alarm_time; |
||||||
|
} __Request__clock_alarm_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__clock_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__clock_subsystem__defined |
||||||
|
#define __RequestUnion__clock_subsystem__defined |
||||||
|
union __RequestUnion__clock_subsystem { |
||||||
|
__Request__clock_get_time_t Request_clock_get_time; |
||||||
|
__Request__clock_get_attributes_t Request_clock_get_attributes; |
||||||
|
__Request__clock_alarm_t Request_clock_alarm; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__clock_subsystem__defined |
||||||
|
#define __Reply__clock_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
mach_timespec_t cur_time; |
||||||
|
} __Reply__clock_get_time_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
mach_msg_type_number_t clock_attrCnt; |
||||||
|
int clock_attr[1]; |
||||||
|
} __Reply__clock_get_attributes_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__clock_alarm_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__clock_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__clock_subsystem__defined |
||||||
|
#define __ReplyUnion__clock_subsystem__defined |
||||||
|
union __ReplyUnion__clock_subsystem { |
||||||
|
__Reply__clock_get_time_t Reply_clock_get_time; |
||||||
|
__Reply__clock_get_attributes_t Reply_clock_get_attributes; |
||||||
|
__Reply__clock_alarm_t Reply_clock_alarm; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_clock |
||||||
|
#define subsystem_to_name_map_clock \ |
||||||
|
{ "clock_get_time", 1000 },\
|
||||||
|
{ "clock_get_attributes", 1001 },\
|
||||||
|
{ "clock_alarm", 1002 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _clock_user_ */ |
||||||
@ -0,0 +1,69 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: mach/clock_priv.defs |
||||||
|
* Purpose: Kernel clock subsystem definitions. This |
||||||
|
* file defines the clock request interface. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
clock_priv 1200; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
#include <mach/clock_types.defs> |
||||||
|
|
||||||
|
/* |
||||||
|
* References to clock_priv objects are returned by: |
||||||
|
* host_get_clock_control(host_priv_t,...) - Priviledged subclass |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* Set the clock time. |
||||||
|
* Privileged. |
||||||
|
*/ |
||||||
|
routine clock_set_time( |
||||||
|
clock_ctrl : clock_ctrl_t; |
||||||
|
new_time : mach_timespec_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Set clock attributes. |
||||||
|
* Privileged. |
||||||
|
*/ |
||||||
|
routine clock_set_attributes( |
||||||
|
clock_ctrl : clock_ctrl_t; |
||||||
|
in flavor : clock_flavor_t; |
||||||
|
in clock_attr : clock_attr_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,199 @@ |
|||||||
|
#ifndef _clock_priv_user_ |
||||||
|
#define _clock_priv_user_ |
||||||
|
|
||||||
|
/* Module clock_priv */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef clock_priv_MSG_COUNT |
||||||
|
#define clock_priv_MSG_COUNT 2 |
||||||
|
#endif /* clock_priv_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* Routine clock_set_time */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_set_time |
||||||
|
( |
||||||
|
clock_ctrl_t clock_ctrl, |
||||||
|
mach_timespec_t new_time |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine clock_set_attributes */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_set_attributes |
||||||
|
( |
||||||
|
clock_ctrl_t clock_ctrl, |
||||||
|
clock_flavor_t flavor, |
||||||
|
clock_attr_t clock_attr, |
||||||
|
mach_msg_type_number_t clock_attrCnt |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__clock_priv_subsystem__defined |
||||||
|
#define __Request__clock_priv_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
mach_timespec_t new_time; |
||||||
|
} __Request__clock_set_time_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
clock_flavor_t flavor; |
||||||
|
mach_msg_type_number_t clock_attrCnt; |
||||||
|
int clock_attr[1]; |
||||||
|
} __Request__clock_set_attributes_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__clock_priv_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__clock_priv_subsystem__defined |
||||||
|
#define __RequestUnion__clock_priv_subsystem__defined |
||||||
|
union __RequestUnion__clock_priv_subsystem { |
||||||
|
__Request__clock_set_time_t Request_clock_set_time; |
||||||
|
__Request__clock_set_attributes_t Request_clock_set_attributes; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_priv_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__clock_priv_subsystem__defined |
||||||
|
#define __Reply__clock_priv_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__clock_set_time_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__clock_set_attributes_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__clock_priv_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__clock_priv_subsystem__defined |
||||||
|
#define __ReplyUnion__clock_priv_subsystem__defined |
||||||
|
union __ReplyUnion__clock_priv_subsystem { |
||||||
|
__Reply__clock_set_time_t Reply_clock_set_time; |
||||||
|
__Reply__clock_set_attributes_t Reply_clock_set_attributes; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_priv_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_clock_priv |
||||||
|
#define subsystem_to_name_map_clock_priv \ |
||||||
|
{ "clock_set_time", 1200 },\
|
||||||
|
{ "clock_set_attributes", 1201 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _clock_priv_user_ */ |
||||||
@ -0,0 +1,56 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: clock_reply.defs |
||||||
|
* Purpose: Kernel clock subsystem definitions. This |
||||||
|
* file defines the clock reply interface. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif /* KERNEL_USER */ |
||||||
|
clock_reply 3125107; /* Matches up with old value */ |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/clock_types.defs> |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Reply routine for clock_alarm. |
||||||
|
*/ |
||||||
|
simpleroutine clock_alarm_reply( |
||||||
|
alarm_port : clock_reply_t; |
||||||
|
alarm_code : kern_return_t; |
||||||
|
alarm_type : alarm_type_t; |
||||||
|
alarm_time : mach_timespec_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,159 @@ |
|||||||
|
#ifndef _clock_reply_user_ |
||||||
|
#define _clock_reply_user_ |
||||||
|
|
||||||
|
/* Module clock_reply */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef clock_reply_MSG_COUNT |
||||||
|
#define clock_reply_MSG_COUNT 1 |
||||||
|
#endif /* clock_reply_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* SimpleRoutine clock_alarm_reply */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t clock_alarm_reply |
||||||
|
( |
||||||
|
clock_reply_t alarm_port, |
||||||
|
mach_msg_type_name_t alarm_portPoly, |
||||||
|
kern_return_t alarm_code, |
||||||
|
alarm_type_t alarm_type, |
||||||
|
mach_timespec_t alarm_time |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__clock_reply_subsystem__defined |
||||||
|
#define __Request__clock_reply_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t alarm_code; |
||||||
|
alarm_type_t alarm_type; |
||||||
|
mach_timespec_t alarm_time; |
||||||
|
} __Request__clock_alarm_reply_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__clock_reply_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__clock_reply_subsystem__defined |
||||||
|
#define __RequestUnion__clock_reply_subsystem__defined |
||||||
|
union __RequestUnion__clock_reply_subsystem { |
||||||
|
__Request__clock_alarm_reply_t Request_clock_alarm_reply; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_reply_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__clock_reply_subsystem__defined |
||||||
|
#define __Reply__clock_reply_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__clock_alarm_reply_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__clock_reply_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__clock_reply_subsystem__defined |
||||||
|
#define __ReplyUnion__clock_reply_subsystem__defined |
||||||
|
union __ReplyUnion__clock_reply_subsystem { |
||||||
|
__Reply__clock_alarm_reply_t Reply_clock_alarm_reply; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__clock_reply_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_clock_reply |
||||||
|
#define subsystem_to_name_map_clock_reply \ |
||||||
|
{ "clock_alarm_reply", 3125107 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _clock_reply_user_ */ |
||||||
@ -0,0 +1,73 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: clock_types.defs |
||||||
|
* Purpose: |
||||||
|
* Clock kernel interface type declarations |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_CLOCK_TYPES_DEFS_ |
||||||
|
#define _MACH_CLOCK_TYPES_DEFS_ |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
|
||||||
|
type clock_serv_t = mach_port_t |
||||||
|
cusertype: clock_serv_t |
||||||
|
#if KERNEL_SERVER |
||||||
|
intran: clock_serv_t convert_port_to_clock(mach_port_t) |
||||||
|
outtran: mach_port_t convert_clock_to_port(clock_serv_t) |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
; |
||||||
|
|
||||||
|
type clock_ctrl_t = mach_port_t |
||||||
|
cusertype: clock_ctrl_t |
||||||
|
#if KERNEL_SERVER |
||||||
|
intran: clock_ctrl_t convert_port_to_clock_ctrl(mach_port_t) |
||||||
|
outtran: mach_port_t convert_clock_ctrl_to_port(clock_ctrl_t) |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
; |
||||||
|
|
||||||
|
type clock_reply_t = polymorphic|MACH_MSG_TYPE_MAKE_SEND_ONCE; |
||||||
|
|
||||||
|
type clock_flavor_t = int; |
||||||
|
type clock_attr_t = array[*:1] of int; |
||||||
|
type mach_timespec_t = struct[2] of int; |
||||||
|
type time_t = int; |
||||||
|
type sleep_type_t = int; |
||||||
|
type alarm_type_t = int; |
||||||
|
type clock_res_t = int; |
||||||
|
type clock_id_t = int; |
||||||
|
|
||||||
|
import <mach/mach_types.h>; |
||||||
|
|
||||||
|
#endif /* _MACH_CLOCK_TYPES_DEFS_ */ |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,127 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: clock_types.h |
||||||
|
* Purpose: Clock facility header definitions. These |
||||||
|
* definitons are needed by both kernel and |
||||||
|
* user-level software. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* All interfaces defined here are obsolete. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_CLOCK_TYPES_H_ |
||||||
|
#define _MACH_CLOCK_TYPES_H_ |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
#include <mach/time_value.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* Type definitions. |
||||||
|
*/ |
||||||
|
typedef int alarm_type_t; /* alarm time type */ |
||||||
|
typedef int sleep_type_t; /* sleep time type */ |
||||||
|
typedef int clock_id_t; /* clock identification type */ |
||||||
|
typedef int clock_flavor_t; /* clock flavor type */ |
||||||
|
typedef int *clock_attr_t; /* clock attribute type */ |
||||||
|
typedef int clock_res_t; /* clock resolution type */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Normal time specification used by the kernel clock facility. |
||||||
|
*/ |
||||||
|
struct mach_timespec { |
||||||
|
unsigned int tv_sec; /* seconds */ |
||||||
|
clock_res_t tv_nsec; /* nanoseconds */ |
||||||
|
}; |
||||||
|
typedef struct mach_timespec mach_timespec_t; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Reserved clock id values for default clocks. |
||||||
|
*/ |
||||||
|
#define SYSTEM_CLOCK 0 |
||||||
|
#define CALENDAR_CLOCK 1 |
||||||
|
|
||||||
|
#define REALTIME_CLOCK 0 |
||||||
|
|
||||||
|
/*
|
||||||
|
* Attribute names. |
||||||
|
*/ |
||||||
|
#define CLOCK_GET_TIME_RES 1 /* get_time call resolution */ |
||||||
|
/* 2 * was map_time call resolution */ |
||||||
|
#define CLOCK_ALARM_CURRES 3 /* current alarm resolution */ |
||||||
|
#define CLOCK_ALARM_MINRES 4 /* minimum alarm resolution */ |
||||||
|
#define CLOCK_ALARM_MAXRES 5 /* maximum alarm resolution */ |
||||||
|
|
||||||
|
#define NSEC_PER_USEC 1000ull /* nanoseconds per microsecond */ |
||||||
|
#define USEC_PER_SEC 1000000ull /* microseconds per second */ |
||||||
|
#define NSEC_PER_SEC 1000000000ull /* nanoseconds per second */ |
||||||
|
#define NSEC_PER_MSEC 1000000ull /* nanoseconds per millisecond */ |
||||||
|
|
||||||
|
#define BAD_MACH_TIMESPEC(t) \ |
||||||
|
((t)->tv_nsec < 0 || (t)->tv_nsec >= (long)NSEC_PER_SEC) |
||||||
|
|
||||||
|
/* t1 <=> t2, also (t1 - t2) in nsec with max of +- 1 sec */ |
||||||
|
#define CMP_MACH_TIMESPEC(t1, t2) \ |
||||||
|
((t1)->tv_sec > (t2)->tv_sec ? (long) +NSEC_PER_SEC : \
|
||||||
|
((t1)->tv_sec < (t2)->tv_sec ? (long) -NSEC_PER_SEC : \
|
||||||
|
(t1)->tv_nsec - (t2)->tv_nsec)) |
||||||
|
|
||||||
|
/* t1 += t2 */ |
||||||
|
#define ADD_MACH_TIMESPEC(t1, t2) \ |
||||||
|
do { \
|
||||||
|
if (((t1)->tv_nsec += (t2)->tv_nsec) >= (long) NSEC_PER_SEC) { \
|
||||||
|
(t1)->tv_nsec -= (long) NSEC_PER_SEC; \
|
||||||
|
(t1)->tv_sec += 1; \
|
||||||
|
} \
|
||||||
|
(t1)->tv_sec += (t2)->tv_sec; \
|
||||||
|
} while (0) |
||||||
|
|
||||||
|
/* t1 -= t2 */ |
||||||
|
#define SUB_MACH_TIMESPEC(t1, t2) \ |
||||||
|
do { \
|
||||||
|
if (((t1)->tv_nsec -= (t2)->tv_nsec) < 0) { \
|
||||||
|
(t1)->tv_nsec += (long) NSEC_PER_SEC; \
|
||||||
|
(t1)->tv_sec -= 1; \
|
||||||
|
} \
|
||||||
|
(t1)->tv_sec -= (t2)->tv_sec; \
|
||||||
|
} while (0) |
||||||
|
|
||||||
|
/*
|
||||||
|
* Alarm parameter defines. |
||||||
|
*/ |
||||||
|
#define ALRMTYPE 0xff /* type (8-bit field) */ |
||||||
|
#define TIME_ABSOLUTE 0x00 /* absolute time */ |
||||||
|
#define TIME_RELATIVE 0x01 /* relative time */ |
||||||
|
|
||||||
|
#define BAD_ALRMTYPE(t) (((t) &~ TIME_RELATIVE) != 0) |
||||||
|
|
||||||
|
#endif /* _MACH_CLOCK_TYPES_H_ */ |
||||||
@ -0,0 +1,66 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_DYLIB_INFO_H_ |
||||||
|
#define _MACH_DYLIB_INFO_H_ |
||||||
|
|
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <stdint.h> |
||||||
|
#include <sys/_types/_fsid_t.h> |
||||||
|
#include <sys/_types/_u_int32_t.h> |
||||||
|
#include <sys/_types/_fsobj_id_t.h> |
||||||
|
#include <sys/_types/_uuid_t.h> |
||||||
|
|
||||||
|
/* These definitions must be kept in sync with the ones in
|
||||||
|
* osfmk/mach/mach_types.defs. |
||||||
|
*/ |
||||||
|
|
||||||
|
struct dyld_kernel_image_info { |
||||||
|
uuid_t uuid; |
||||||
|
fsobj_id_t fsobjid; |
||||||
|
fsid_t fsid; |
||||||
|
uint64_t load_addr; |
||||||
|
}; |
||||||
|
|
||||||
|
struct dyld_kernel_process_info { |
||||||
|
struct dyld_kernel_image_info cache_image_info; |
||||||
|
uint64_t timestamp; // mach_absolute_time of last time dyld change to image list
|
||||||
|
uint32_t imageCount; // number of images currently loaded into process
|
||||||
|
uint32_t initialImageCount; // number of images statically loaded into process (before any dlopen() calls)
|
||||||
|
uint8_t dyldState; // one of dyld_process_state_* values
|
||||||
|
boolean_t no_cache; // process is running without a dyld cache
|
||||||
|
boolean_t private_cache; // process is using a private copy of its dyld cache
|
||||||
|
}; |
||||||
|
|
||||||
|
/* typedefs so our MIG is sane */ |
||||||
|
|
||||||
|
typedef struct dyld_kernel_image_info dyld_kernel_image_info_t; |
||||||
|
typedef struct dyld_kernel_process_info dyld_kernel_process_info_t; |
||||||
|
typedef dyld_kernel_image_info_t *dyld_kernel_image_info_array_t; |
||||||
|
|
||||||
|
#endif /* _MACH_DYLIB_INFO_H_ */ |
||||||
@ -0,0 +1,114 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: mach/error.h |
||||||
|
* Purpose: |
||||||
|
* error module definitions |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_ERROR_H_ |
||||||
|
#define _MACH_ERROR_H_ |
||||||
|
|
||||||
|
#include <mach/kern_return.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* error number layout as follows: |
||||||
|
* |
||||||
|
* hi lo |
||||||
|
* | system(6) | subsystem(12) | code(14) | |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
#define err_none (mach_error_t)0 |
||||||
|
#define ERR_SUCCESS (mach_error_t)0 |
||||||
|
#define ERR_ROUTINE_NIL (mach_error_fn_t)0 |
||||||
|
|
||||||
|
|
||||||
|
#define err_system(x) ((signed)((((unsigned)(x))&0x3f)<<26)) |
||||||
|
#define err_sub(x) (((x)&0xfff)<<14) |
||||||
|
|
||||||
|
#define err_get_system(err) (((err)>>26)&0x3f) |
||||||
|
#define err_get_sub(err) (((err)>>14)&0xfff) |
||||||
|
#define err_get_code(err) ((err)&0x3fff) |
||||||
|
|
||||||
|
#define system_emask (err_system(0x3f)) |
||||||
|
#define sub_emask (err_sub(0xfff)) |
||||||
|
#define code_emask (0x3fff) |
||||||
|
|
||||||
|
|
||||||
|
/* major error systems */ |
||||||
|
#define err_kern err_system(0x0) /* kernel */ |
||||||
|
#define err_us err_system(0x1) /* user space library */ |
||||||
|
#define err_server err_system(0x2) /* user space servers */ |
||||||
|
#define err_ipc err_system(0x3) /* old ipc errors */ |
||||||
|
#define err_mach_ipc err_system(0x4) /* mach-ipc errors */ |
||||||
|
#define err_dipc err_system(0x7) /* distributed ipc */ |
||||||
|
#define err_local err_system(0x3e) /* user defined errors */ |
||||||
|
#define err_ipc_compat err_system(0x3f) /* (compatibility) mach-ipc errors */ |
||||||
|
|
||||||
|
#define err_max_system 0x3f |
||||||
|
|
||||||
|
|
||||||
|
/* unix errors get lumped into one subsystem */ |
||||||
|
#define unix_err(errno) (err_kern|err_sub(3)|errno) |
||||||
|
|
||||||
|
typedef kern_return_t mach_error_t; |
||||||
|
typedef mach_error_t (* mach_error_fn_t)( void ); |
||||||
|
|
||||||
|
#endif /* _MACH_ERROR_H_ */ |
||||||
@ -0,0 +1,133 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Abstract: |
||||||
|
* MiG definitions file for Mach exception interface. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
|
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif |
||||||
|
exc 2401; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
|
||||||
|
ServerPrefix catch_; |
||||||
|
|
||||||
|
type exception_data_t = array[*:2] of integer_t; |
||||||
|
type exception_type_t = int; |
||||||
|
|
||||||
|
routine exception_raise( |
||||||
|
exception_port : mach_port_t; |
||||||
|
thread : mach_port_t; |
||||||
|
task : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : exception_data_t |
||||||
|
#if EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
routine exception_raise_state( |
||||||
|
exception_port : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : exception_data_t, const; |
||||||
|
inout flavor : int; |
||||||
|
old_state : thread_state_t, const; |
||||||
|
out new_state : thread_state_t |
||||||
|
#if EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
routine exception_raise_state_identity( |
||||||
|
exception_port : mach_port_t; |
||||||
|
thread : mach_port_t; |
||||||
|
task : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : exception_data_t; |
||||||
|
inout flavor : int; |
||||||
|
old_state : thread_state_t; |
||||||
|
out new_state : thread_state_t |
||||||
|
#if EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,281 @@ |
|||||||
|
#ifndef _exc_user_ |
||||||
|
#define _exc_user_ |
||||||
|
|
||||||
|
/* Module exc */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef exc_MSG_COUNT |
||||||
|
#define exc_MSG_COUNT 3 |
||||||
|
#endif /* exc_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* Routine exception_raise */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t exception_raise |
||||||
|
( |
||||||
|
mach_port_t exception_port, |
||||||
|
mach_port_t thread, |
||||||
|
mach_port_t task, |
||||||
|
exception_type_t exception, |
||||||
|
exception_data_t code, |
||||||
|
mach_msg_type_number_t codeCnt |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine exception_raise_state */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t exception_raise_state |
||||||
|
( |
||||||
|
mach_port_t exception_port, |
||||||
|
exception_type_t exception, |
||||||
|
const exception_data_t code, |
||||||
|
mach_msg_type_number_t codeCnt, |
||||||
|
int *flavor, |
||||||
|
const thread_state_t old_state, |
||||||
|
mach_msg_type_number_t old_stateCnt, |
||||||
|
thread_state_t new_state, |
||||||
|
mach_msg_type_number_t *new_stateCnt |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine exception_raise_state_identity */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t exception_raise_state_identity |
||||||
|
( |
||||||
|
mach_port_t exception_port, |
||||||
|
mach_port_t thread, |
||||||
|
mach_port_t task, |
||||||
|
exception_type_t exception, |
||||||
|
exception_data_t code, |
||||||
|
mach_msg_type_number_t codeCnt, |
||||||
|
int *flavor, |
||||||
|
thread_state_t old_state, |
||||||
|
mach_msg_type_number_t old_stateCnt, |
||||||
|
thread_state_t new_state, |
||||||
|
mach_msg_type_number_t *new_stateCnt |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__exc_subsystem__defined |
||||||
|
#define __Request__exc_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t thread; |
||||||
|
mach_msg_port_descriptor_t task; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
NDR_record_t NDR; |
||||||
|
exception_type_t exception; |
||||||
|
mach_msg_type_number_t codeCnt; |
||||||
|
integer_t code[2]; |
||||||
|
} __Request__exception_raise_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
exception_type_t exception; |
||||||
|
mach_msg_type_number_t codeCnt; |
||||||
|
integer_t code[2]; |
||||||
|
int flavor; |
||||||
|
mach_msg_type_number_t old_stateCnt; |
||||||
|
natural_t old_state[614]; |
||||||
|
} __Request__exception_raise_state_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t thread; |
||||||
|
mach_msg_port_descriptor_t task; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
NDR_record_t NDR; |
||||||
|
exception_type_t exception; |
||||||
|
mach_msg_type_number_t codeCnt; |
||||||
|
integer_t code[2]; |
||||||
|
int flavor; |
||||||
|
mach_msg_type_number_t old_stateCnt; |
||||||
|
natural_t old_state[614]; |
||||||
|
} __Request__exception_raise_state_identity_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__exc_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__exc_subsystem__defined |
||||||
|
#define __RequestUnion__exc_subsystem__defined |
||||||
|
union __RequestUnion__exc_subsystem { |
||||||
|
__Request__exception_raise_t Request_exception_raise; |
||||||
|
__Request__exception_raise_state_t Request_exception_raise_state; |
||||||
|
__Request__exception_raise_state_identity_t Request_exception_raise_state_identity; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__exc_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__exc_subsystem__defined |
||||||
|
#define __Reply__exc_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__exception_raise_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
int flavor; |
||||||
|
mach_msg_type_number_t new_stateCnt; |
||||||
|
natural_t new_state[614]; |
||||||
|
} __Reply__exception_raise_state_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
int flavor; |
||||||
|
mach_msg_type_number_t new_stateCnt; |
||||||
|
natural_t new_state[614]; |
||||||
|
} __Reply__exception_raise_state_identity_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__exc_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__exc_subsystem__defined |
||||||
|
#define __ReplyUnion__exc_subsystem__defined |
||||||
|
union __ReplyUnion__exc_subsystem { |
||||||
|
__Reply__exception_raise_t Reply_exception_raise; |
||||||
|
__Reply__exception_raise_state_t Reply_exception_raise_state; |
||||||
|
__Reply__exception_raise_state_identity_t Reply_exception_raise_state_identity; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__exc_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_exc |
||||||
|
#define subsystem_to_name_map_exc \ |
||||||
|
{ "exception_raise", 2401 },\
|
||||||
|
{ "exception_raise_state", 2402 },\
|
||||||
|
{ "exception_raise_state_identity", 2403 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _exc_user_ */ |
||||||
@ -0,0 +1,62 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_EXCEPTION_H_ |
||||||
|
#define _MACH_EXCEPTION_H_ |
||||||
|
|
||||||
|
#include <mach/exception_types.h> |
||||||
|
|
||||||
|
#endif /* _MACH_EXCEPTION_H_ */ |
||||||
@ -0,0 +1,204 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_EXCEPTION_TYPES_H_ |
||||||
|
#define _MACH_EXCEPTION_TYPES_H_ |
||||||
|
|
||||||
|
#include <mach/machine/exception.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* Machine-independent exception definitions. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_BAD_ACCESS 1 /* Could not access memory */ |
||||||
|
/* Code contains kern_return_t describing error. */ |
||||||
|
/* Subcode contains bad memory address. */ |
||||||
|
|
||||||
|
#define EXC_BAD_INSTRUCTION 2 /* Instruction failed */ |
||||||
|
/* Illegal or undefined instruction or operand */ |
||||||
|
|
||||||
|
#define EXC_ARITHMETIC 3 /* Arithmetic exception */ |
||||||
|
/* Exact nature of exception is in code field */ |
||||||
|
|
||||||
|
#define EXC_EMULATION 4 /* Emulation instruction */ |
||||||
|
/* Emulation support instruction encountered */ |
||||||
|
/* Details in code and subcode fields */ |
||||||
|
|
||||||
|
#define EXC_SOFTWARE 5 /* Software generated exception */ |
||||||
|
/* Exact exception is in code field. */ |
||||||
|
/* Codes 0 - 0xFFFF reserved to hardware */ |
||||||
|
/* Codes 0x10000 - 0x1FFFF reserved for OS emulation (Unix) */ |
||||||
|
|
||||||
|
#define EXC_BREAKPOINT 6 /* Trace, breakpoint, etc. */ |
||||||
|
/* Details in code field. */ |
||||||
|
|
||||||
|
#define EXC_SYSCALL 7 /* System calls. */ |
||||||
|
|
||||||
|
#define EXC_MACH_SYSCALL 8 /* Mach system calls. */ |
||||||
|
|
||||||
|
#define EXC_RPC_ALERT 9 /* RPC alert */ |
||||||
|
|
||||||
|
#define EXC_CRASH 10 /* Abnormal process exit */ |
||||||
|
|
||||||
|
#define EXC_RESOURCE 11 /* Hit resource consumption limit */ |
||||||
|
/* Exact resource is in code field. */ |
||||||
|
|
||||||
|
#define EXC_GUARD 12 /* Violated guarded resource protections */ |
||||||
|
|
||||||
|
#define EXC_CORPSE_NOTIFY 13 /* Abnormal process exited to corpse state */ |
||||||
|
|
||||||
|
#define EXC_CORPSE_VARIANT_BIT 0x100 /* bit set for EXC_*_CORPSE variants of EXC_* */ |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Machine-independent exception behaviors |
||||||
|
*/ |
||||||
|
|
||||||
|
# define EXCEPTION_DEFAULT 1 |
||||||
|
/* Send a catch_exception_raise message including the identity.
|
||||||
|
*/ |
||||||
|
|
||||||
|
# define EXCEPTION_STATE 2 |
||||||
|
/* Send a catch_exception_raise_state message including the
|
||||||
|
* thread state. |
||||||
|
*/ |
||||||
|
|
||||||
|
# define EXCEPTION_STATE_IDENTITY 3 |
||||||
|
/* Send a catch_exception_raise_state_identity message including
|
||||||
|
* the thread identity and state. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define MACH_EXCEPTION_ERRORS 0x40000000 |
||||||
|
/* include additional exception specific errors, not used yet. */ |
||||||
|
|
||||||
|
#define MACH_EXCEPTION_CODES 0x80000000 |
||||||
|
/* Send 64-bit code and subcode in the exception header */ |
||||||
|
|
||||||
|
#define MACH_EXCEPTION_MASK (MACH_EXCEPTION_CODES | MACH_EXCEPTION_ERRORS) |
||||||
|
/*
|
||||||
|
* Masks for exception definitions, above |
||||||
|
* bit zero is unused, therefore 1 word = 31 exception types |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_MASK_BAD_ACCESS (1 << EXC_BAD_ACCESS) |
||||||
|
#define EXC_MASK_BAD_INSTRUCTION (1 << EXC_BAD_INSTRUCTION) |
||||||
|
#define EXC_MASK_ARITHMETIC (1 << EXC_ARITHMETIC) |
||||||
|
#define EXC_MASK_EMULATION (1 << EXC_EMULATION) |
||||||
|
#define EXC_MASK_SOFTWARE (1 << EXC_SOFTWARE) |
||||||
|
#define EXC_MASK_BREAKPOINT (1 << EXC_BREAKPOINT) |
||||||
|
#define EXC_MASK_SYSCALL (1 << EXC_SYSCALL) |
||||||
|
#define EXC_MASK_MACH_SYSCALL (1 << EXC_MACH_SYSCALL) |
||||||
|
#define EXC_MASK_RPC_ALERT (1 << EXC_RPC_ALERT) |
||||||
|
#define EXC_MASK_CRASH (1 << EXC_CRASH) |
||||||
|
#define EXC_MASK_RESOURCE (1 << EXC_RESOURCE) |
||||||
|
#define EXC_MASK_GUARD (1 << EXC_GUARD) |
||||||
|
#define EXC_MASK_CORPSE_NOTIFY (1 << EXC_CORPSE_NOTIFY) |
||||||
|
|
||||||
|
#define EXC_MASK_ALL (EXC_MASK_BAD_ACCESS | \ |
||||||
|
EXC_MASK_BAD_INSTRUCTION | \
|
||||||
|
EXC_MASK_ARITHMETIC | \
|
||||||
|
EXC_MASK_EMULATION | \
|
||||||
|
EXC_MASK_SOFTWARE | \
|
||||||
|
EXC_MASK_BREAKPOINT | \
|
||||||
|
EXC_MASK_SYSCALL | \
|
||||||
|
EXC_MASK_MACH_SYSCALL | \
|
||||||
|
EXC_MASK_RPC_ALERT | \
|
||||||
|
EXC_MASK_RESOURCE | \
|
||||||
|
EXC_MASK_GUARD | \
|
||||||
|
EXC_MASK_MACHINE) |
||||||
|
|
||||||
|
|
||||||
|
#define FIRST_EXCEPTION 1 /* ZERO is illegal */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Machine independent codes for EXC_SOFTWARE |
||||||
|
* Codes 0x10000 - 0x1FFFF reserved for OS emulation (Unix) |
||||||
|
* 0x10000 - 0x10002 in use for unix signals |
||||||
|
* 0x20000 - 0x2FFFF reserved for MACF |
||||||
|
*/ |
||||||
|
#define EXC_SOFT_SIGNAL 0x10003 /* Unix signal exceptions */ |
||||||
|
|
||||||
|
#define EXC_MACF_MIN 0x20000 /* MACF exceptions */ |
||||||
|
#define EXC_MACF_MAX 0x2FFFF |
||||||
|
|
||||||
|
#ifndef ASSEMBLER |
||||||
|
|
||||||
|
#include <mach/port.h> |
||||||
|
#include <mach/thread_status.h> |
||||||
|
#include <mach/machine/vm_types.h> |
||||||
|
/*
|
||||||
|
* Exported types |
||||||
|
*/ |
||||||
|
|
||||||
|
typedef int exception_type_t; |
||||||
|
typedef integer_t exception_data_type_t; |
||||||
|
typedef int64_t mach_exception_data_type_t; |
||||||
|
typedef int exception_behavior_t; |
||||||
|
typedef exception_data_type_t *exception_data_t; |
||||||
|
typedef mach_exception_data_type_t *mach_exception_data_t; |
||||||
|
typedef unsigned int exception_mask_t; |
||||||
|
typedef exception_mask_t *exception_mask_array_t; |
||||||
|
typedef exception_behavior_t *exception_behavior_array_t; |
||||||
|
typedef thread_state_flavor_t *exception_flavor_array_t; |
||||||
|
typedef mach_port_t *exception_port_array_t; |
||||||
|
typedef mach_exception_data_type_t mach_exception_code_t; |
||||||
|
typedef mach_exception_data_type_t mach_exception_subcode_t; |
||||||
|
|
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
#endif /* _MACH_EXCEPTION_TYPES_H_ */ |
||||||
@ -0,0 +1,260 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2015 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: mach/host_info.h |
||||||
|
* |
||||||
|
* Definitions for host_info call. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_HOST_INFO_H_ |
||||||
|
#define _MACH_HOST_INFO_H_ |
||||||
|
|
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/vm_statistics.h> |
||||||
|
#include <mach/machine.h> |
||||||
|
#include <mach/machine/vm_types.h> |
||||||
|
#include <mach/time_value.h> |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic information structure to allow for expansion. |
||||||
|
*/ |
||||||
|
typedef integer_t *host_info_t; /* varying array of int. */ |
||||||
|
typedef integer_t *host_info64_t; /* varying array of int. */ |
||||||
|
|
||||||
|
#define HOST_INFO_MAX (1024) /* max array size */ |
||||||
|
typedef integer_t host_info_data_t[HOST_INFO_MAX]; |
||||||
|
|
||||||
|
#define KERNEL_VERSION_MAX (512) |
||||||
|
typedef char kernel_version_t[KERNEL_VERSION_MAX]; |
||||||
|
|
||||||
|
#define KERNEL_BOOT_INFO_MAX (4096) |
||||||
|
typedef char kernel_boot_info_t[KERNEL_BOOT_INFO_MAX]; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Currently defined information. |
||||||
|
*/ |
||||||
|
/* host_info() */ |
||||||
|
typedef integer_t host_flavor_t; |
||||||
|
#define HOST_BASIC_INFO 1 /* basic info */ |
||||||
|
#define HOST_SCHED_INFO 3 /* scheduling info */ |
||||||
|
#define HOST_RESOURCE_SIZES 4 /* kernel struct sizes */ |
||||||
|
#define HOST_PRIORITY_INFO 5 /* priority information */ |
||||||
|
#define HOST_SEMAPHORE_TRAPS 7 /* Has semaphore traps */ |
||||||
|
#define HOST_MACH_MSG_TRAP 8 /* Has mach_msg_trap */ |
||||||
|
#define HOST_VM_PURGABLE 9 /* purg'e'able memory info */ |
||||||
|
#define HOST_DEBUG_INFO_INTERNAL 10 /* Used for kernel internal development tests only */ |
||||||
|
#define HOST_CAN_HAS_DEBUGGER 11 |
||||||
|
#define HOST_PREFERRED_USER_ARCH 12 /* Get the preferred user-space architecture */ |
||||||
|
|
||||||
|
|
||||||
|
struct host_can_has_debugger_info { |
||||||
|
boolean_t can_has_debugger; |
||||||
|
}; |
||||||
|
typedef struct host_can_has_debugger_info host_can_has_debugger_info_data_t; |
||||||
|
typedef struct host_can_has_debugger_info *host_can_has_debugger_info_t; |
||||||
|
#define HOST_CAN_HAS_DEBUGGER_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_can_has_debugger_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
#pragma pack(push, 4) |
||||||
|
|
||||||
|
struct host_basic_info { |
||||||
|
integer_t max_cpus; /* max number of CPUs possible */ |
||||||
|
integer_t avail_cpus; /* number of CPUs now available */ |
||||||
|
natural_t memory_size; /* size of memory in bytes, capped at 2 GB */ |
||||||
|
cpu_type_t cpu_type; /* cpu type */ |
||||||
|
cpu_subtype_t cpu_subtype; /* cpu subtype */ |
||||||
|
cpu_threadtype_t cpu_threadtype; /* cpu threadtype */ |
||||||
|
integer_t physical_cpu; /* number of physical CPUs now available */ |
||||||
|
integer_t physical_cpu_max; /* max number of physical CPUs possible */ |
||||||
|
integer_t logical_cpu; /* number of logical cpu now available */ |
||||||
|
integer_t logical_cpu_max; /* max number of physical CPUs possible */ |
||||||
|
uint64_t max_mem; /* actual size of physical memory */ |
||||||
|
}; |
||||||
|
|
||||||
|
#pragma pack(pop) |
||||||
|
|
||||||
|
typedef struct host_basic_info host_basic_info_data_t; |
||||||
|
typedef struct host_basic_info *host_basic_info_t; |
||||||
|
#define HOST_BASIC_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_basic_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
struct host_sched_info { |
||||||
|
integer_t min_timeout; /* minimum timeout in milliseconds */ |
||||||
|
integer_t min_quantum; /* minimum quantum in milliseconds */ |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct host_sched_info host_sched_info_data_t; |
||||||
|
typedef struct host_sched_info *host_sched_info_t; |
||||||
|
#define HOST_SCHED_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_sched_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
struct kernel_resource_sizes { |
||||||
|
natural_t task; |
||||||
|
natural_t thread; |
||||||
|
natural_t port; |
||||||
|
natural_t memory_region; |
||||||
|
natural_t memory_object; |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct kernel_resource_sizes kernel_resource_sizes_data_t; |
||||||
|
typedef struct kernel_resource_sizes *kernel_resource_sizes_t; |
||||||
|
#define HOST_RESOURCE_SIZES_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(kernel_resource_sizes_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
struct host_priority_info { |
||||||
|
integer_t kernel_priority; |
||||||
|
integer_t system_priority; |
||||||
|
integer_t server_priority; |
||||||
|
integer_t user_priority; |
||||||
|
integer_t depress_priority; |
||||||
|
integer_t idle_priority; |
||||||
|
integer_t minimum_priority; |
||||||
|
integer_t maximum_priority; |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct host_priority_info host_priority_info_data_t; |
||||||
|
typedef struct host_priority_info *host_priority_info_t; |
||||||
|
#define HOST_PRIORITY_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_priority_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
/* host_statistics() */ |
||||||
|
#define HOST_LOAD_INFO 1 /* System loading stats */ |
||||||
|
#define HOST_VM_INFO 2 /* Virtual memory stats */ |
||||||
|
#define HOST_CPU_LOAD_INFO 3 /* CPU load stats */ |
||||||
|
|
||||||
|
/* host_statistics64() */ |
||||||
|
#define HOST_VM_INFO64 4 /* 64-bit virtual memory stats */ |
||||||
|
#define HOST_EXTMOD_INFO64 5 /* External modification stats */ |
||||||
|
#define HOST_EXPIRED_TASK_INFO 6 /* Statistics for expired tasks */ |
||||||
|
|
||||||
|
|
||||||
|
struct host_load_info { |
||||||
|
integer_t avenrun[3]; /* scaled by LOAD_SCALE */ |
||||||
|
integer_t mach_factor[3]; /* scaled by LOAD_SCALE */ |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct host_load_info host_load_info_data_t; |
||||||
|
typedef struct host_load_info *host_load_info_t; |
||||||
|
#define HOST_LOAD_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_load_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
typedef struct vm_purgeable_info host_purgable_info_data_t; |
||||||
|
typedef struct vm_purgeable_info *host_purgable_info_t; |
||||||
|
#define HOST_VM_PURGABLE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_purgable_info_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
/* in <mach/vm_statistics.h> */ |
||||||
|
/* vm_statistics64 */ |
||||||
|
#define HOST_VM_INFO64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(vm_statistics64_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
/* size of the latest version of the structure */ |
||||||
|
#define HOST_VM_INFO64_LATEST_COUNT HOST_VM_INFO64_COUNT |
||||||
|
#define HOST_VM_INFO64_REV1_COUNT HOST_VM_INFO64_LATEST_COUNT |
||||||
|
/* previous versions: adjust the size according to what was added each time */ |
||||||
|
#define HOST_VM_INFO64_REV0_COUNT /* added compression and swapper info (14 ints) */ \ |
||||||
|
((mach_msg_type_number_t) \
|
||||||
|
(HOST_VM_INFO64_REV1_COUNT - 14)) |
||||||
|
|
||||||
|
/* in <mach/vm_statistics.h> */ |
||||||
|
/* vm_extmod_statistics */ |
||||||
|
#define HOST_EXTMOD_INFO64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(vm_extmod_statistics_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
/* size of the latest version of the structure */ |
||||||
|
#define HOST_EXTMOD_INFO64_LATEST_COUNT HOST_EXTMOD_INFO64_COUNT |
||||||
|
|
||||||
|
/* vm_statistics */ |
||||||
|
#define HOST_VM_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(vm_statistics_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
/* size of the latest version of the structure */ |
||||||
|
#define HOST_VM_INFO_LATEST_COUNT HOST_VM_INFO_COUNT |
||||||
|
#define HOST_VM_INFO_REV2_COUNT HOST_VM_INFO_LATEST_COUNT |
||||||
|
/* previous versions: adjust the size according to what was added each time */ |
||||||
|
#define HOST_VM_INFO_REV1_COUNT /* added "speculative_count" (1 int) */ \ |
||||||
|
((mach_msg_type_number_t) \
|
||||||
|
(HOST_VM_INFO_REV2_COUNT - 1)) |
||||||
|
#define HOST_VM_INFO_REV0_COUNT /* added "purgable" info (2 ints) */ \ |
||||||
|
((mach_msg_type_number_t) \
|
||||||
|
(HOST_VM_INFO_REV1_COUNT - 2)) |
||||||
|
|
||||||
|
struct host_cpu_load_info { /* number of ticks while running... */ |
||||||
|
natural_t cpu_ticks[CPU_STATE_MAX]; /* ... in the given mode */ |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct host_cpu_load_info host_cpu_load_info_data_t; |
||||||
|
typedef struct host_cpu_load_info *host_cpu_load_info_t; |
||||||
|
#define HOST_CPU_LOAD_INFO_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof (host_cpu_load_info_data_t) / sizeof (integer_t))) |
||||||
|
|
||||||
|
struct host_preferred_user_arch { |
||||||
|
cpu_type_t cpu_type; /* Preferred user-space cpu type */ |
||||||
|
cpu_subtype_t cpu_subtype; /* Preferred user-space cpu subtype */ |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct host_preferred_user_arch host_preferred_user_arch_data_t; |
||||||
|
typedef struct host_preferred_user_arch *host_preferred_user_arch_t; |
||||||
|
#define HOST_PREFERRED_USER_ARCH_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(host_preferred_user_arch_data_t)/sizeof(integer_t))) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MACH_HOST_INFO_H_ */ |
||||||
@ -0,0 +1,39 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_HOST_NOTIFY_H_ |
||||||
|
#define _MACH_HOST_NOTIFY_H_ |
||||||
|
|
||||||
|
#define HOST_NOTIFY_CALENDAR_CHANGE 0 |
||||||
|
#define HOST_NOTIFY_CALENDAR_SET 1 |
||||||
|
#define HOST_NOTIFY_TYPE_MAX 1 |
||||||
|
|
||||||
|
#define HOST_CALENDAR_CHANGED_REPLYID 950 |
||||||
|
#define HOST_CALENDAR_SET_REPLYID 951 |
||||||
|
|
||||||
|
#endif /* _MACH_HOST_NOTIFY_H_ */ |
||||||
@ -0,0 +1,43 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2003 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif /* KERN_USER */ |
||||||
|
host_notify_reply 950; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
|
||||||
|
simpleroutine host_calendar_changed( |
||||||
|
notify_port : mach_port_move_send_once_t); |
||||||
|
|
||||||
|
simpleroutine host_calendar_set( |
||||||
|
notify_port : mach_port_move_send_once_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,359 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000-2004 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* Matchmaker definitions file for Mach kernel interface. |
||||||
|
*/ |
||||||
|
subsystem |
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif /* KERNEL_USER */ |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
host_priv 400; |
||||||
|
|
||||||
|
#ifdef KERNEL_USER |
||||||
|
userprefix r_; |
||||||
|
#endif /* KERNEL_USER */ |
||||||
|
|
||||||
|
#define CONCAT(a,b) a ## b |
||||||
|
#if KERNEL_SERVER |
||||||
|
#define KERNEL_SERVER_SUFFIX(NAME) CONCAT(NAME, _external) |
||||||
|
#else |
||||||
|
#define KERNEL_SERVER_SUFFIX(NAME) NAME |
||||||
|
#endif |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
#include <mach/clock_types.defs> |
||||||
|
#include <mach_debug/mach_debug_types.defs> |
||||||
|
|
||||||
|
/* |
||||||
|
* Get boot configuration information from kernel. |
||||||
|
*/ |
||||||
|
routine host_get_boot_info( |
||||||
|
host_priv : host_priv_t; |
||||||
|
out boot_info : kernel_boot_info_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Reboot this host. |
||||||
|
* Only available to privileged users. |
||||||
|
*/ |
||||||
|
routine host_reboot( |
||||||
|
host_priv : host_priv_t; |
||||||
|
options : int); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Return privileged statistics from this host. |
||||||
|
*/ |
||||||
|
routine host_priv_statistics( |
||||||
|
host_priv : host_priv_t; |
||||||
|
flavor : host_flavor_t; |
||||||
|
out host_info_out : host_info_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Sets the default memory manager, the port to which |
||||||
|
* newly-created temporary memory objects are delivered. |
||||||
|
* [See (memory_object_default)memory_object_create.] |
||||||
|
* Also sets the default cluster size used for pagein/pageout |
||||||
|
* to this port. |
||||||
|
* The old memory manager port is returned. |
||||||
|
*/ |
||||||
|
routine host_default_memory_manager( |
||||||
|
host_priv : host_priv_t; |
||||||
|
inout default_manager : memory_object_default_t = |
||||||
|
MACH_MSG_TYPE_MAKE_SEND; |
||||||
|
cluster_size : memory_object_cluster_size_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Specify that the range of the virtual address space |
||||||
|
* of the target task must not cause page faults for |
||||||
|
* the indicated accesses. |
||||||
|
* |
||||||
|
* [ To unwire the pages, specify VM_PROT_NONE. ] |
||||||
|
*/ |
||||||
|
routine vm_wire( |
||||||
|
host_priv : host_priv_t; |
||||||
|
task : vm_map_t; |
||||||
|
address : vm_address_t; |
||||||
|
size : vm_size_t; |
||||||
|
desired_access : vm_prot_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Specify that the target thread must always be able |
||||||
|
* to run and to allocate memory. |
||||||
|
*/ |
||||||
|
routine thread_wire( |
||||||
|
host_priv : host_priv_t; |
||||||
|
thread : thread_act_t; |
||||||
|
wired : boolean_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Allocate zero-filled, wired, contiguous physical memory |
||||||
|
* in the address space of the target task, either at the |
||||||
|
* specified address, or wherever space can be found (if |
||||||
|
* anywhere is TRUE), of the specified size. The address |
||||||
|
* at which the allocation actually took place is returned. |
||||||
|
* All pages will be entered into the task's pmap immediately, |
||||||
|
* with VM_PROT_ALL. |
||||||
|
* |
||||||
|
* In addition to all the failure modes of its cousin, |
||||||
|
* vm_allocate, this call may also fail if insufficient |
||||||
|
* contiguous memory exists to satisfy the request. |
||||||
|
* |
||||||
|
* Memory obtained from this call should be freed the |
||||||
|
* normal way, via vm_deallocate. |
||||||
|
* |
||||||
|
* N.B. This is an EXPERIMENTAL interface! |
||||||
|
*/ |
||||||
|
routine vm_allocate_cpm( |
||||||
|
host_priv : host_priv_t; |
||||||
|
task : vm_map_t; |
||||||
|
inout address : vm_address_t; |
||||||
|
size : vm_size_t; |
||||||
|
flags : int); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get list of processors on this host. |
||||||
|
*/ |
||||||
|
routine host_processors( |
||||||
|
host_priv : host_priv_t; |
||||||
|
out out_processor_list : processor_array_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Get control port for a system-wide clock. |
||||||
|
* Privileged. |
||||||
|
*/ |
||||||
|
routine host_get_clock_control( |
||||||
|
host_priv : host_priv_t; |
||||||
|
clock_id : clock_id_t; |
||||||
|
out clock_ctrl : clock_ctrl_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* kernel module interface (obsolete as of SnowLeopard) |
||||||
|
* see mach/kmod.h |
||||||
|
*/ |
||||||
|
/* kmod_ MIG calls now return KERN_NOT_SUPPORTED on PPC/i386/x86_64. */ |
||||||
|
routine kmod_create( |
||||||
|
host_priv : host_priv_t; |
||||||
|
info : vm_address_t; |
||||||
|
out module : kmod_t); |
||||||
|
|
||||||
|
routine kmod_destroy( |
||||||
|
host_priv : host_priv_t; |
||||||
|
module : kmod_t); |
||||||
|
|
||||||
|
routine kmod_control( |
||||||
|
host_priv : host_priv_t; |
||||||
|
module : kmod_t; |
||||||
|
flavor : kmod_control_flavor_t; |
||||||
|
inout data : kmod_args_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get a given special port for a given node. |
||||||
|
* Special ports are defined in host_special_ports.h; |
||||||
|
* examples include the master device port. |
||||||
|
* There are a limited number of slots available for system servers. |
||||||
|
*/ |
||||||
|
routine host_get_special_port( |
||||||
|
host_priv : host_priv_t; |
||||||
|
node : int; |
||||||
|
which : int; |
||||||
|
out port : mach_port_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Set a given special port for the local node. |
||||||
|
* See host_get_special_port. |
||||||
|
*/ |
||||||
|
routine host_set_special_port( |
||||||
|
host_priv : host_priv_t; |
||||||
|
which : int; |
||||||
|
port : mach_port_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Set an exception handler for a host on one or more exception types. |
||||||
|
* These handlers are invoked for all threads on the host if there are |
||||||
|
* no task or thread-specific exception handlers or those handlers returned |
||||||
|
* an error. |
||||||
|
*/ |
||||||
|
routine host_set_exception_ports( |
||||||
|
host_priv : host_priv_t; |
||||||
|
exception_mask : exception_mask_t; |
||||||
|
new_port : mach_port_t; |
||||||
|
behavior : exception_behavior_t; |
||||||
|
new_flavor : thread_state_flavor_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Lookup some of the old exception handlers for a host |
||||||
|
*/ |
||||||
|
routine host_get_exception_ports( |
||||||
|
host_priv : host_priv_t; |
||||||
|
exception_mask : exception_mask_t; |
||||||
|
out masks : exception_mask_array_t; |
||||||
|
out old_handlers : exception_handler_array_t, SameCount; |
||||||
|
out old_behaviors : exception_behavior_array_t, SameCount; |
||||||
|
out old_flavors : exception_flavor_array_t, SameCount); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Set an exception handler for a host on one or more exception types. |
||||||
|
* At the same time, return the previously defined exception handlers for |
||||||
|
* those types. |
||||||
|
*/ |
||||||
|
routine host_swap_exception_ports( |
||||||
|
host_priv : host_priv_t; |
||||||
|
exception_mask : exception_mask_t; |
||||||
|
new_port : mach_port_t; |
||||||
|
behavior : exception_behavior_t; |
||||||
|
new_flavor : thread_state_flavor_t; |
||||||
|
out masks : exception_mask_array_t; |
||||||
|
out old_handlerss : exception_handler_array_t, SameCount; |
||||||
|
out old_behaviors : exception_behavior_array_t, SameCount; |
||||||
|
out old_flavors : exception_flavor_array_t, SameCount); |
||||||
|
|
||||||
|
skip; /* old host_load_symbol_table */ |
||||||
|
|
||||||
|
/* |
||||||
|
* Specify that the range of the virtual address space |
||||||
|
* of the target task must not cause page faults for |
||||||
|
* the indicated accesses. |
||||||
|
* |
||||||
|
* [ To unwire the pages, specify VM_PROT_NONE. ] |
||||||
|
*/ |
||||||
|
routine KERNEL_SERVER_SUFFIX(mach_vm_wire)( |
||||||
|
host_priv : host_priv_t; |
||||||
|
task : vm_map_t; |
||||||
|
address : mach_vm_address_t; |
||||||
|
size : mach_vm_size_t; |
||||||
|
desired_access : vm_prot_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* JMM - Keep all processor_set related items at the end for easy |
||||||
|
* removal. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* List all processor sets on host. |
||||||
|
*/ |
||||||
|
routine host_processor_sets( |
||||||
|
host_priv : host_priv_t; |
||||||
|
out processor_sets : processor_set_name_array_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get control port for a processor set. |
||||||
|
*/ |
||||||
|
routine host_processor_set_priv( |
||||||
|
host_priv : host_priv_t; |
||||||
|
set_name : processor_set_name_t; |
||||||
|
out set : processor_set_t); |
||||||
|
|
||||||
|
/************************** Warning *************************************/ |
||||||
|
/* The following routines are going away in a future release */ |
||||||
|
/* use the appropriate variant of host_set_special_port instead */ |
||||||
|
/************************************************************************/ |
||||||
|
|
||||||
|
skip;/* old set_dp_control_port */ |
||||||
|
skip;/* old get_dp_control_port */ |
||||||
|
|
||||||
|
/* |
||||||
|
* Set the UserNotification daemon access port for this host. |
||||||
|
* If this value is already set, the kernel will discard its |
||||||
|
* reference to the previously registered port. |
||||||
|
*/ |
||||||
|
routine host_set_UNDServer( |
||||||
|
host : host_priv_t; |
||||||
|
in server : UNDServerRef); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get the UserNotification daemon access port for this host. |
||||||
|
* This can then be used to communicate with that daemon, which |
||||||
|
* in turn communicates with the User through whatever means |
||||||
|
* available (pop-up-menus for GUI systems, text for non-GUI, etc..). |
||||||
|
* |
||||||
|
* Access to this port is restricted to privileged clients because |
||||||
|
* it is a special purpose port intended for kernel clients. User |
||||||
|
* level clients should go directly to the CFUserNotifcation services. |
||||||
|
*/ |
||||||
|
routine host_get_UNDServer( |
||||||
|
host : host_priv_t; |
||||||
|
out server : UNDServerRef); |
||||||
|
|
||||||
|
/* |
||||||
|
* Perform an operation with a kernel extension, on the kext loading system, |
||||||
|
* or request information about loaded kexts or the state of the kext loading |
||||||
|
* system. |
||||||
|
* Active operations (load, unload, disable/enable) require host_priv/root access. |
||||||
|
* Info retrieval does not. |
||||||
|
* |
||||||
|
* WARNING: THIS ROUTINE IS PRIVATE TO THE KEXT-MANAGEMENT STACK AND IS |
||||||
|
* SUBJECT TO CHANGE AT ANY TIME. |
||||||
|
*/ |
||||||
|
routine kext_request( |
||||||
|
host_priv : host_priv_t; |
||||||
|
in user_log_flags : uint32_t; |
||||||
|
in request_data : pointer_t; |
||||||
|
out response_data : pointer_t; |
||||||
|
out log_data : pointer_t; |
||||||
|
out op_result : kern_return_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,39 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_HOST_REBOOT_ |
||||||
|
#define _MACH_HOST_REBOOT_ |
||||||
|
|
||||||
|
#define HOST_REBOOT_HALT 0x0008 |
||||||
|
#define HOST_REBOOT_UPSDELAY 0x0100 |
||||||
|
#define HOST_REBOOT_DEBUGGER 0x1000 |
||||||
|
|
||||||
|
#endif /* _MACH_HOST_REBOOT_ */ |
||||||
@ -0,0 +1,101 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* File: mach/host_security.defs |
||||||
|
* |
||||||
|
* Abstract: |
||||||
|
* Mach host security operations support. |
||||||
|
*/ |
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
host_security 600; |
||||||
|
|
||||||
|
/* |
||||||
|
* Basic types |
||||||
|
*/ |
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Create a new task with an explicit security token |
||||||
|
*/ |
||||||
|
routine host_security_create_task_token( |
||||||
|
host_security : host_security_t; |
||||||
|
parent_task : task_t; |
||||||
|
sec_token : security_token_t; |
||||||
|
audit_token : audit_token_t; |
||||||
|
host : host_t; |
||||||
|
ledgers : ledger_array_t; |
||||||
|
inherit_memory : boolean_t; |
||||||
|
out child_task : task_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Change a task's security token |
||||||
|
*/ |
||||||
|
routine host_security_set_task_token( |
||||||
|
host_security : host_security_t; |
||||||
|
target_task : task_t; |
||||||
|
sec_token : security_token_t; |
||||||
|
audit_token : audit_token_t; |
||||||
|
host : host_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,221 @@ |
|||||||
|
#ifndef _host_security_user_ |
||||||
|
#define _host_security_user_ |
||||||
|
|
||||||
|
/* Module host_security */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef host_security_MSG_COUNT |
||||||
|
#define host_security_MSG_COUNT 2 |
||||||
|
#endif /* host_security_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* Routine host_security_create_task_token */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t host_security_create_task_token |
||||||
|
( |
||||||
|
host_security_t host_security, |
||||||
|
task_t parent_task, |
||||||
|
security_token_t sec_token, |
||||||
|
audit_token_t audit_token, |
||||||
|
host_t host, |
||||||
|
ledger_array_t ledgers, |
||||||
|
mach_msg_type_number_t ledgersCnt, |
||||||
|
boolean_t inherit_memory, |
||||||
|
task_t *child_task |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine host_security_set_task_token */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t host_security_set_task_token |
||||||
|
( |
||||||
|
host_security_t host_security, |
||||||
|
task_t target_task, |
||||||
|
security_token_t sec_token, |
||||||
|
audit_token_t audit_token, |
||||||
|
host_t host |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__host_security_subsystem__defined |
||||||
|
#define __Request__host_security_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t parent_task; |
||||||
|
mach_msg_port_descriptor_t host; |
||||||
|
mach_msg_ool_ports_descriptor_t ledgers; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
NDR_record_t NDR; |
||||||
|
security_token_t sec_token; |
||||||
|
audit_token_t audit_token; |
||||||
|
mach_msg_type_number_t ledgersCnt; |
||||||
|
boolean_t inherit_memory; |
||||||
|
} __Request__host_security_create_task_token_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t target_task; |
||||||
|
mach_msg_port_descriptor_t host; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
NDR_record_t NDR; |
||||||
|
security_token_t sec_token; |
||||||
|
audit_token_t audit_token; |
||||||
|
} __Request__host_security_set_task_token_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__host_security_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__host_security_subsystem__defined |
||||||
|
#define __RequestUnion__host_security_subsystem__defined |
||||||
|
union __RequestUnion__host_security_subsystem { |
||||||
|
__Request__host_security_create_task_token_t Request_host_security_create_task_token; |
||||||
|
__Request__host_security_set_task_token_t Request_host_security_set_task_token; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__host_security_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__host_security_subsystem__defined |
||||||
|
#define __Reply__host_security_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
/* start of the kernel processed data */ |
||||||
|
mach_msg_body_t msgh_body; |
||||||
|
mach_msg_port_descriptor_t child_task; |
||||||
|
/* end of the kernel processed data */ |
||||||
|
} __Reply__host_security_create_task_token_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__host_security_set_task_token_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__host_security_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__host_security_subsystem__defined |
||||||
|
#define __ReplyUnion__host_security_subsystem__defined |
||||||
|
union __ReplyUnion__host_security_subsystem { |
||||||
|
__Reply__host_security_create_task_token_t Reply_host_security_create_task_token; |
||||||
|
__Reply__host_security_set_task_token_t Reply_host_security_set_task_token; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__host_security_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_host_security |
||||||
|
#define subsystem_to_name_map_host_security \ |
||||||
|
{ "host_security_create_task_token", 600 },\
|
||||||
|
{ "host_security_set_task_token", 601 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _host_security_user_ */ |
||||||
@ -0,0 +1,281 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: mach/host_special_ports.h |
||||||
|
* |
||||||
|
* Defines codes for access to host-wide special ports. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_HOST_SPECIAL_PORTS_H_ |
||||||
|
#define _MACH_HOST_SPECIAL_PORTS_H_ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Cannot be set or gotten from user space |
||||||
|
*/ |
||||||
|
#define HOST_SECURITY_PORT 0 |
||||||
|
|
||||||
|
#define HOST_MIN_SPECIAL_PORT HOST_SECURITY_PORT |
||||||
|
|
||||||
|
/*
|
||||||
|
* Always provided by kernel (cannot be set from user-space). |
||||||
|
*/ |
||||||
|
#define HOST_PORT 1 |
||||||
|
#define HOST_PRIV_PORT 2 |
||||||
|
#define HOST_IO_MASTER_PORT 3 |
||||||
|
#define HOST_MAX_SPECIAL_KERNEL_PORT 7 /* room to grow */ |
||||||
|
|
||||||
|
#define HOST_LAST_SPECIAL_KERNEL_PORT HOST_IO_MASTER_PORT |
||||||
|
|
||||||
|
/*
|
||||||
|
* Not provided by kernel |
||||||
|
*/ |
||||||
|
#define HOST_DYNAMIC_PAGER_PORT (1 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_AUDIT_CONTROL_PORT (2 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_USER_NOTIFICATION_PORT (3 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_AUTOMOUNTD_PORT (4 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_LOCKD_PORT (5 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_KTRACE_BACKGROUND_PORT (6 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_SEATBELT_PORT (7 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_KEXTD_PORT (8 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_LAUNCHCTL_PORT (9 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_UNFREED_PORT (10 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_AMFID_PORT (11 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_GSSD_PORT (12 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_TELEMETRY_PORT (13 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_ATM_NOTIFICATION_PORT (14 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_COALITION_PORT (15 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_SYSDIAGNOSE_PORT (16 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_XPC_EXCEPTION_PORT (17 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_CONTAINERD_PORT (18 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_NODE_PORT (19 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_RESOURCE_NOTIFY_PORT (20 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_CLOSURED_PORT (21 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_SYSPOLICYD_PORT (22 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_FILECOORDINATIOND_PORT (23 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
#define HOST_FAIRPLAYD_PORT (24 + HOST_MAX_SPECIAL_KERNEL_PORT) |
||||||
|
|
||||||
|
#define HOST_MAX_SPECIAL_PORT HOST_FAIRPLAYD_PORT |
||||||
|
/* MAX = last since rdar://35861175 */ |
||||||
|
|
||||||
|
/* obsolete name */ |
||||||
|
#define HOST_CHUD_PORT HOST_LAUNCHCTL_PORT |
||||||
|
|
||||||
|
/*
|
||||||
|
* Special node identifier to always represent the local node. |
||||||
|
*/ |
||||||
|
#define HOST_LOCAL_NODE -1 |
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for ease of use. |
||||||
|
* |
||||||
|
* In the get call, the host parameter can be any host, but will generally |
||||||
|
* be the local node host port. In the set call, the host must the per-node |
||||||
|
* host port for the node being affected. |
||||||
|
*/ |
||||||
|
#define host_get_host_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_PORT, (port))) |
||||||
|
#define host_set_host_port(host, port) (KERN_INVALID_ARGUMENT) |
||||||
|
|
||||||
|
#define host_get_host_priv_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_PRIV_PORT, (port))) |
||||||
|
#define host_set_host_priv_port(host, port) (KERN_INVALID_ARGUMENT) |
||||||
|
|
||||||
|
#define host_get_io_master_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_IO_MASTER_PORT, (port))) |
||||||
|
#define host_set_io_master_port(host, port) (KERN_INVALID_ARGUMENT) |
||||||
|
|
||||||
|
/*
|
||||||
|
* User-settable special ports. |
||||||
|
*/ |
||||||
|
#define host_get_dynamic_pager_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_DYNAMIC_PAGER_PORT, (port))) |
||||||
|
#define host_set_dynamic_pager_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_DYNAMIC_PAGER_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_audit_control_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_AUDIT_CONTROL_PORT, (port))) |
||||||
|
#define host_set_audit_control_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_AUDIT_CONTROL_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_user_notification_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_USER_NOTIFICATION_PORT, (port))) |
||||||
|
#define host_set_user_notification_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_USER_NOTIFICATION_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_automountd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_AUTOMOUNTD_PORT, (port))) |
||||||
|
#define host_set_automountd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_AUTOMOUNTD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_lockd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_LOCKD_PORT, (port))) |
||||||
|
#define host_set_lockd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_LOCKD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_ktrace_background_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_KTRACE_BACKGROUND_PORT, (port))) |
||||||
|
#define host_set_ktrace_background_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_KTRACE_BACKGROUND_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_kextd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_KEXTD_PORT, (port))) |
||||||
|
#define host_set_kextd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_KEXTD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_launchctl_port(host, port) \ |
||||||
|
(host_get_special_port((host), HOST_LOCAL_NODE, HOST_LAUNCHCTL_PORT, \
|
||||||
|
(port))) |
||||||
|
#define host_set_launchctl_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_LAUNCHCTL_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_chud_port(host, port) host_get_launchctl_port(host, port) |
||||||
|
#define host_set_chud_port(host, port) host_set_launchctl_port(host, port) |
||||||
|
|
||||||
|
#define host_get_unfreed_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_UNFREED_PORT, (port))) |
||||||
|
#define host_set_unfreed_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_UNFREED_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_amfid_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_AMFID_PORT, (port))) |
||||||
|
#define host_set_amfid_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_AMFID_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_gssd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_GSSD_PORT, (port))) |
||||||
|
#define host_set_gssd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_GSSD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_telemetry_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_TELEMETRY_PORT, (port))) |
||||||
|
#define host_set_telemetry_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_TELEMETRY_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_atm_notification_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_ATM_NOTIFICATION_PORT, (port))) |
||||||
|
#define host_set_atm_notification_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_ATM_NOTIFICATION_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_coalition_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_COALITION_PORT, (port))) |
||||||
|
#define host_set_coalition_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_COALITION_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_sysdiagnose_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_SYSDIAGNOSE_PORT, (port))) |
||||||
|
#define host_set_sysdiagnose_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_SYSDIAGNOSE_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_container_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_CONTAINERD_PORT, (port))) |
||||||
|
#define host_set_container_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_CONTAINERD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_node_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_NODE_PORT, (port))) |
||||||
|
#define host_set_node_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_NODE_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_closured_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_CLOSURED_PORT, (port))) |
||||||
|
#define host_set_closured_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_CLOSURED_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_syspolicyd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_SYSPOLICYD_PORT, (port))) |
||||||
|
#define host_set_syspolicyd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_SYSPOLICYD_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_filecoordinationd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_FILECOORDINATIOND_PORT, (port))) |
||||||
|
#define host_set_filecoordinationd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_FILECOORDINATIOND_PORT, (port))) |
||||||
|
|
||||||
|
#define host_get_fairplayd_port(host, port) \ |
||||||
|
(host_get_special_port((host), \
|
||||||
|
HOST_LOCAL_NODE, HOST_FAIRPLAYD_PORT, (port))) |
||||||
|
#define host_set_fairplayd_port(host, port) \ |
||||||
|
(host_set_special_port((host), HOST_FAIRPLAYD_PORT, (port))) |
||||||
|
|
||||||
|
/* HOST_RESOURCE_NOTIFY_PORT doesn't #defines these conveniences.
|
||||||
|
* All lookups go through send_resource_violation() |
||||||
|
*/ |
||||||
|
|
||||||
|
#endif /* _MACH_HOST_SPECIAL_PORTS_H_ */ |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,380 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2018 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _I386_ASM_H_ |
||||||
|
#define _I386_ASM_H_ |
||||||
|
|
||||||
|
#if defined(__i386__) |
||||||
|
|
||||||
|
#define S_PC (%esp) |
||||||
|
#define S_ARG0 4(%esp) |
||||||
|
#define S_ARG1 8(%esp) |
||||||
|
#define S_ARG2 12(%esp) |
||||||
|
#define S_ARG3 16(%esp) |
||||||
|
#define S_ARG4 20(%esp) |
||||||
|
|
||||||
|
#define FRAME pushl %ebp; movl %esp, %ebp |
||||||
|
#define EMARF leave |
||||||
|
|
||||||
|
#define B_LINK (%ebp) |
||||||
|
#define B_PC 4(%ebp) |
||||||
|
#define B_ARG0 8(%ebp) |
||||||
|
#define B_ARG1 12(%ebp) |
||||||
|
#define B_ARG2 16(%ebp) |
||||||
|
#define B_ARG3 20(%ebp) |
||||||
|
|
||||||
|
#elif defined(__x86_64__) |
||||||
|
|
||||||
|
#define S_PC (%rsp) |
||||||
|
|
||||||
|
#define FRAME pushq %rbp; movq %rsp, %rbp |
||||||
|
#define EMARF leave |
||||||
|
|
||||||
|
#define B_LINK (%rbp) |
||||||
|
#define B_PC 8(%rbp) |
||||||
|
|
||||||
|
#else |
||||||
|
#error unsupported architecture |
||||||
|
#endif |
||||||
|
|
||||||
|
/* There is another definition of ALIGN for .c sources */ |
||||||
|
#ifdef ASSEMBLER |
||||||
|
#define ALIGN 4,0x90 |
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
#ifndef FALIGN |
||||||
|
#define FALIGN ALIGN |
||||||
|
#endif |
||||||
|
|
||||||
|
#define LB(x,n) n |
||||||
|
#if __STDC__ |
||||||
|
#ifndef __NO_UNDERSCORES__ |
||||||
|
#define LCL(x) L ## x |
||||||
|
#define EXT(x) _ ## x |
||||||
|
#define LEXT(x) _ ## x ## : |
||||||
|
#else |
||||||
|
#define LCL(x) .L ## x |
||||||
|
#define EXT(x) x |
||||||
|
#define LEXT(x) x ## : |
||||||
|
#endif |
||||||
|
#define LBc(x,n) n ## : |
||||||
|
#define LBb(x,n) n ## b |
||||||
|
#define LBf(x,n) n ## f |
||||||
|
#else /* __STDC__ */ |
||||||
|
#ifndef __NO_UNDERSCORES__ |
||||||
|
#define LCL(x) L/**/x |
||||||
|
#define EXT(x) _/**/x |
||||||
|
#define LEXT(x) _/**/x/**/: |
||||||
|
#else /* __NO_UNDERSCORES__ */ |
||||||
|
#define LCL(x) .L/**/x |
||||||
|
#define EXT(x) x |
||||||
|
#define LEXT(x) x/**/: |
||||||
|
#endif /* __NO_UNDERSCORES__ */ |
||||||
|
#define LBc(x,n) n/**/: |
||||||
|
#define LBb(x,n) n/**/b |
||||||
|
#define LBf(x,n) n/**/f |
||||||
|
#endif /* __STDC__ */ |
||||||
|
|
||||||
|
#define SVC .byte 0x9a; .long 0; .word 0x7 |
||||||
|
|
||||||
|
#define RPC_SVC .byte 0x9a; .long 0; .word 0xf |
||||||
|
|
||||||
|
#define String .asciz |
||||||
|
#define Value .word |
||||||
|
#define Times(a,b) (a*b) |
||||||
|
#define Divide(a,b) (a/b) |
||||||
|
|
||||||
|
#define INB inb %dx, %al |
||||||
|
#define OUTB outb %al, %dx |
||||||
|
#define INL inl %dx, %eax |
||||||
|
#define OUTL outl %eax, %dx |
||||||
|
|
||||||
|
#define data16 .byte 0x66 |
||||||
|
#define addr16 .byte 0x67 |
||||||
|
|
||||||
|
#define MCOUNT |
||||||
|
|
||||||
|
#if defined(__SHARED__) |
||||||
|
#define MCOUNT ; .data;\ |
||||||
|
.align ALIGN;\
|
||||||
|
LBc(x, 8) .long 0;\
|
||||||
|
.text;\
|
||||||
|
Gpush;\
|
||||||
|
Gload;\
|
||||||
|
leal Gotoff(LBb(x,8)),%edx;\
|
||||||
|
Egaddr(%eax,_mcount_ptr);\
|
||||||
|
Gpop;\
|
||||||
|
call *(%eax); |
||||||
|
#endif /* __SHARED__ */ |
||||||
|
|
||||||
|
#ifdef __ELF__ |
||||||
|
#define ELF_FUNC(x) .type x,@function |
||||||
|
#define ELF_DATA(x) .type x,@object |
||||||
|
#define ELF_SIZE(x,s) .size x,s |
||||||
|
#else |
||||||
|
#define ELF_FUNC(x) |
||||||
|
#define ELF_DATA(x) |
||||||
|
#define ELF_SIZE(x,s) |
||||||
|
#endif |
||||||
|
|
||||||
|
#define Entry(x) .globl EXT(x); ELF_FUNC(EXT(x)); .align FALIGN; LEXT(x) |
||||||
|
#define ENTRY(x) Entry(x) MCOUNT |
||||||
|
#define ENTRY2(x,y) .globl EXT(x); .globl EXT(y); \ |
||||||
|
ELF_FUNC(EXT(x)); ELF_FUNC(EXT(y)); \
|
||||||
|
.align FALIGN; LEXT(x); LEXT(y) \
|
||||||
|
MCOUNT |
||||||
|
#if __STDC__ |
||||||
|
#define ASENTRY(x) .globl x; .align FALIGN; x ## : ELF_FUNC(x) MCOUNT |
||||||
|
#else |
||||||
|
#define ASENTRY(x) .globl x; .align FALIGN; x: ELF_FUNC(x) MCOUNT |
||||||
|
#endif /* __STDC__ */ |
||||||
|
|
||||||
|
#define DATA(x) .globl EXT(x); ELF_DATA(EXT(x)); .align ALIGN; LEXT(x) |
||||||
|
|
||||||
|
#define End(x) ELF_SIZE(x,.-x) |
||||||
|
#define END(x) End(EXT(x)) |
||||||
|
#define ENDDATA(x) END(x) |
||||||
|
#define Enddata(x) End(x) |
||||||
|
|
||||||
|
/*
|
||||||
|
* ELF shared library accessor macros. |
||||||
|
* Gpush saves the %ebx register used for the GOT address |
||||||
|
* Gpop pops %ebx if we need a GOT |
||||||
|
* Gload loads %ebx with the GOT address if shared libraries are used |
||||||
|
* Gcall calls an external function. |
||||||
|
* Gotoff allows you to reference local labels. |
||||||
|
* Gotoff2 allows you to reference local labels with an index reg. |
||||||
|
* Gotoff3 allows you to reference local labels with an index reg & size. |
||||||
|
* Gaddr loads up a register with an address of an external item. |
||||||
|
* Gstack is the number of bytes that Gpush pushes on the stack. |
||||||
|
* |
||||||
|
* Varients of the above with E or L prefixes do EXT(name) or LCL(name) |
||||||
|
* respectively. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __SHARED__ |
||||||
|
#define Gpush |
||||||
|
#define Gpop |
||||||
|
#define Gload |
||||||
|
#define Gcall(func) call func |
||||||
|
#define Gotoff(lab) lab |
||||||
|
#define Gotoff2(l,r) l(r) |
||||||
|
#define Gotoff3(l,r,s) l(,r,s) |
||||||
|
#define Gaddr(to,lab) movl $lab,to |
||||||
|
#define Gcmp(lab,reg) cmpl $lab,reg |
||||||
|
#define Gmemload(lab,reg) movl lab,reg |
||||||
|
#define Gmemstore(reg,lab,tmp) movl reg,lab |
||||||
|
#define Gstack 0 |
||||||
|
|
||||||
|
#else |
||||||
|
#ifdef __ELF__ /* ELF shared libraries */ |
||||||
|
#define Gpush pushl %ebx |
||||||
|
#define Gpop popl %ebx |
||||||
|
#define Gload call 9f; 9: popl %ebx; addl $_GLOBAL_OFFSET_TABLE_+[.-9b],%ebx |
||||||
|
#define Gcall(func) call EXT(func)@PLT |
||||||
|
#define Gotoff(lab) lab@GOTOFF(%ebx) |
||||||
|
#define Gotoff2(l,r) l@GOTOFF(%ebx,r) |
||||||
|
#define Gotoff3(l,r,s) l@GOTOFF(%ebx,r,s) |
||||||
|
#define Gaddr(to,lab) movl lab@GOT(%ebx),to |
||||||
|
#define Gcmp(lab,reg) cmpl reg,lab@GOT(%ebx) |
||||||
|
#define Gmemload(lab,reg) movl lab@GOT(%ebx),reg; movl (reg),reg |
||||||
|
#define Gmemstore(reg,lab,tmp) movl lab@GOT(%ebx),tmp; movl reg,(tmp) |
||||||
|
#define Gstack 4 |
||||||
|
|
||||||
|
#else /* ROSE shared libraries */ |
||||||
|
#define Gpush |
||||||
|
#define Gpop |
||||||
|
#define Gload |
||||||
|
#define Gcall(func) call *9f; .data; .align ALIGN; 9: .long func; .text |
||||||
|
#define Gotoff(lab) lab |
||||||
|
#define Gotoff2(l,r) l(r) |
||||||
|
#define Gotoff3(l,r,s) l(,r,s) |
||||||
|
#define Gaddr(to,lab) movl 9f,to; .data; .align ALIGN; 9: .long lab; .text |
||||||
|
#define Gcmp(lab,reg) cmpl reg,9f; .data; .align ALIGN; 9: .long lab; .text |
||||||
|
#define Gmemload(lab,reg) movl 9f,reg; movl (reg),reg; .data; .align ALIGN; 9: .long lab; .text |
||||||
|
#define Gmemstore(reg,lab,tmp) movl 9f,tmp; movl reg,(tmp); .data; .align ALIGN; 9: .long lab; .text |
||||||
|
#define Gstack 0 |
||||||
|
#endif /* __ELF__ */ |
||||||
|
#endif /* __SHARED__ */ |
||||||
|
|
||||||
|
/* Egotoff is not provided, since external symbols should not use @GOTOFF
|
||||||
|
relocations. */ |
||||||
|
#define Egcall(func) Gcall(EXT(func)) |
||||||
|
#define Egaddr(to,lab) Gaddr(to,EXT(lab)) |
||||||
|
#define Egcmp(lab,reg) Gcmp(EXT(lab),reg) |
||||||
|
#define Egmemload(lab,reg) Gmemload(EXT(lab),reg) |
||||||
|
#define Egmemstore(reg,lab,tmp) Gmemstore(reg,EXT(lab),tmp) |
||||||
|
|
||||||
|
#define Lgotoff(lab) Gotoff(LCL(lab)) |
||||||
|
#define Lgotoff2(l,r) Gotoff2(LCL(l),r) |
||||||
|
#define Lgotoff3(l,r,s) Gotoff3(LCL(l),r,s) |
||||||
|
#define Lgcmp(lab,reg) Gcmp(LCL(lab),reg) |
||||||
|
#define Lgmemload(lab,reg) movl Lgotoff(lab),reg |
||||||
|
#define Lgmemstore(reg,lab,tmp) movl reg,Lgotoff(lab) |
||||||
|
|
||||||
|
#ifndef ASSEMBLER |
||||||
|
/* These defines are here for .c files that wish to reference global symbols
|
||||||
|
* within __asm__ statements.
|
||||||
|
*/ |
||||||
|
#ifndef __NO_UNDERSCORES__ |
||||||
|
#define CC_SYM_PREFIX "_" |
||||||
|
#else |
||||||
|
#define CC_SYM_PREFIX "" |
||||||
|
#endif /* __NO_UNDERSCORES__ */ |
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* The following macros make calls into C code. |
||||||
|
* They dynamically align the stack to 16 bytes. |
||||||
|
*/ |
||||||
|
#if defined(__i386__) |
||||||
|
/*
|
||||||
|
* Arguments are moved (not pushed) onto the correctly aligned stack. |
||||||
|
* NOTE: ESI is destroyed in the process, and hence cannot |
||||||
|
* be directly used as a parameter. Users of this macro must |
||||||
|
* independently preserve ESI (a non-volatile) if the routine is |
||||||
|
* intended to be called from C, for instance. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define CCALL(fn) \ |
||||||
|
movl %esp, %esi ;\
|
||||||
|
andl $0xFFFFFFF0, %esp ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
movl %esi, %esp |
||||||
|
|
||||||
|
#define CCALL1(fn, arg1) \ |
||||||
|
movl %esp, %esi ;\
|
||||||
|
subl $4, %esp ;\
|
||||||
|
andl $0xFFFFFFF0, %esp ;\
|
||||||
|
movl arg1, (%esp) ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
movl %esi, %esp |
||||||
|
|
||||||
|
#define CCALL2(fn, arg1, arg2) \ |
||||||
|
movl %esp, %esi ;\
|
||||||
|
subl $8, %esp ;\
|
||||||
|
andl $0xFFFFFFF0, %esp ;\
|
||||||
|
movl arg2, 4(%esp) ;\
|
||||||
|
movl arg1, (%esp) ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
movl %esi, %esp |
||||||
|
|
||||||
|
/* This variant exists to permit adjustment of the stack by "dtrace" */ |
||||||
|
#define CCALL1WITHSP(fn, arg1) \ |
||||||
|
movl %esp, %esi ;\
|
||||||
|
subl $12, %esp ;\
|
||||||
|
andl $0xFFFFFFF0, %esp ;\
|
||||||
|
movl %esi, 8(%esp) ;\
|
||||||
|
leal 8(%esp), %esi ;\
|
||||||
|
movl %esi, 4(%esp) ;\
|
||||||
|
movl arg1, (%esp) ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
movl 8(%esp), %esp |
||||||
|
|
||||||
|
/*
|
||||||
|
* CCALL5 is used for callee functions with 3 arguments but |
||||||
|
* where arg2 (a3:a2) and arg3 (a5:a4) are 64-bit values. |
||||||
|
*/ |
||||||
|
#define CCALL5(fn, a1, a2, a3, a4, a5) \ |
||||||
|
movl %esp, %esi ;\
|
||||||
|
subl $20, %esp ;\
|
||||||
|
andl $0xFFFFFFF0, %esp ;\
|
||||||
|
movl a5, 16(%esp) ;\
|
||||||
|
movl a4, 12(%esp) ;\
|
||||||
|
movl a3, 8(%esp) ;\
|
||||||
|
movl a2, 4(%esp) ;\
|
||||||
|
movl a1, (%esp) ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
movl %esi, %esp |
||||||
|
|
||||||
|
#elif defined(__x86_64__) |
||||||
|
|
||||||
|
/* This variant exists to permit adjustment of the stack by "dtrace" */ |
||||||
|
#define CCALLWITHSP(fn) \ |
||||||
|
mov %rsp, %r12 ;\
|
||||||
|
sub $8, %rsp ;\
|
||||||
|
and $0xFFFFFFFFFFFFFFF0, %rsp ;\
|
||||||
|
mov %r12, (%rsp) ;\
|
||||||
|
leaq (%rsp), %rsi ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
mov (%rsp), %rsp |
||||||
|
|
||||||
|
#define CCALL(fn) \ |
||||||
|
mov %rsp, %r12 ;\
|
||||||
|
and $0xFFFFFFFFFFFFFFF0, %rsp ;\
|
||||||
|
call EXT(fn) ;\
|
||||||
|
mov %r12, %rsp |
||||||
|
|
||||||
|
#define CCALL1(fn, arg1) \ |
||||||
|
mov arg1, %rdi ;\
|
||||||
|
CCALL(fn) |
||||||
|
|
||||||
|
#define CCALL2(fn, arg1, arg2) \ |
||||||
|
mov arg1, %rdi ;\
|
||||||
|
mov arg2, %rsi ;\
|
||||||
|
CCALL(fn) |
||||||
|
|
||||||
|
#define CCALL3(fn, arg1, arg2, arg3) \ |
||||||
|
mov arg1, %rdi ;\
|
||||||
|
mov arg2, %rsi ;\
|
||||||
|
mov arg3, %rdx ;\
|
||||||
|
CCALL(fn) |
||||||
|
|
||||||
|
#else |
||||||
|
#error unsupported architecture |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* _I386_ASM_H_ */ |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: boolean.h |
||||||
|
* |
||||||
|
* Boolean type, for I386. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_BOOLEAN_H_ |
||||||
|
#define _MACH_I386_BOOLEAN_H_ |
||||||
|
|
||||||
|
#if defined(__x86_64__) && !defined(KERNEL) |
||||||
|
typedef unsigned int boolean_t; |
||||||
|
#else |
||||||
|
typedef int boolean_t; |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* _MACH_I386_BOOLEAN_H_ */ |
||||||
@ -0,0 +1,135 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_EXCEPTION_H_ |
||||||
|
#define _MACH_I386_EXCEPTION_H_ |
||||||
|
|
||||||
|
/*
|
||||||
|
* No machine dependent types for the 80386 |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_TYPES_COUNT 14 /* incl. illegal exception 0 */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Codes and subcodes for 80386 exceptions. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXCEPTION_CODE_MAX 2 /* currently code and subcode */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* EXC_BAD_INSTRUCTION |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_I386_INVOP 1 |
||||||
|
|
||||||
|
/*
|
||||||
|
* EXC_ARITHMETIC |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_I386_DIV 1 |
||||||
|
#define EXC_I386_INTO 2 |
||||||
|
#define EXC_I386_NOEXT 3 |
||||||
|
#define EXC_I386_EXTOVR 4 |
||||||
|
#define EXC_I386_EXTERR 5 |
||||||
|
#define EXC_I386_EMERR 6 |
||||||
|
#define EXC_I386_BOUND 7 |
||||||
|
#define EXC_I386_SSEEXTERR 8 |
||||||
|
|
||||||
|
/*
|
||||||
|
* EXC_SOFTWARE |
||||||
|
* Note: 0x10000-0x10003 in use for unix signal |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* EXC_BAD_ACCESS |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* EXC_BREAKPOINT |
||||||
|
*/ |
||||||
|
|
||||||
|
#define EXC_I386_SGL 1 |
||||||
|
#define EXC_I386_BPT 2 |
||||||
|
|
||||||
|
#define EXC_I386_DIVERR 0 /* divide by 0 eprror */ |
||||||
|
#define EXC_I386_SGLSTP 1 /* single step */ |
||||||
|
#define EXC_I386_NMIFLT 2 /* NMI */ |
||||||
|
#define EXC_I386_BPTFLT 3 /* breakpoint fault */ |
||||||
|
#define EXC_I386_INTOFLT 4 /* INTO overflow fault */ |
||||||
|
#define EXC_I386_BOUNDFLT 5 /* BOUND instruction fault */ |
||||||
|
#define EXC_I386_INVOPFLT 6 /* invalid opcode fault */ |
||||||
|
#define EXC_I386_NOEXTFLT 7 /* extension not available fault*/ |
||||||
|
#define EXC_I386_DBLFLT 8 /* double fault */ |
||||||
|
#define EXC_I386_EXTOVRFLT 9 /* extension overrun fault */ |
||||||
|
#define EXC_I386_INVTSSFLT 10 /* invalid TSS fault */ |
||||||
|
#define EXC_I386_SEGNPFLT 11 /* segment not present fault */ |
||||||
|
#define EXC_I386_STKFLT 12 /* stack fault */ |
||||||
|
#define EXC_I386_GPFLT 13 /* general protection fault */ |
||||||
|
#define EXC_I386_PGFLT 14 /* page fault */ |
||||||
|
#define EXC_I386_EXTERRFLT 16 /* extension error fault */ |
||||||
|
#define EXC_I386_ALIGNFLT 17 /* Alignment fault */ |
||||||
|
#define EXC_I386_ENDPERR 33 /* emulated extension error flt */ |
||||||
|
#define EXC_I386_ENOEXTFLT 32 /* emulated ext not present */ |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* machine dependent exception masks |
||||||
|
*/ |
||||||
|
#define EXC_MASK_MACHINE 0 |
||||||
|
|
||||||
|
#endif /* _MACH_I386_EXCEPTION_H_ */ |
||||||
@ -0,0 +1,118 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1992-1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _I386_FP_SAVE_H_ |
||||||
|
#define _I386_FP_SAVE_H_ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Control register |
||||||
|
*/ |
||||||
|
#define FPC_IE 0x0001 /* enable invalid operation |
||||||
|
* exception */ |
||||||
|
#define FPC_IM FPC_IE |
||||||
|
#define FPC_DE 0x0002 /* enable denormalized operation |
||||||
|
* exception */ |
||||||
|
#define FPC_DM FPC_DE |
||||||
|
#define FPC_ZE 0x0004 /* enable zero-divide exception */ |
||||||
|
#define FPC_ZM FPC_ZE |
||||||
|
#define FPC_OE 0x0008 /* enable overflow exception */ |
||||||
|
#define FPC_OM FPC_OE |
||||||
|
#define FPC_UE 0x0010 /* enable underflow exception */ |
||||||
|
#define FPC_PE 0x0020 /* enable precision exception */ |
||||||
|
#define FPC_PC 0x0300 /* precision control: */ |
||||||
|
#define FPC_PC_24 0x0000 /* 24 bits */ |
||||||
|
#define FPC_PC_53 0x0200 /* 53 bits */ |
||||||
|
#define FPC_PC_64 0x0300 /* 64 bits */ |
||||||
|
#define FPC_RC 0x0c00 /* rounding control: */ |
||||||
|
#define FPC_RC_RN 0x0000 /* round to nearest or even */ |
||||||
|
#define FPC_RC_RD 0x0400 /* round down */ |
||||||
|
#define FPC_RC_RU 0x0800 /* round up */ |
||||||
|
#define FPC_RC_CHOP 0x0c00 /* chop */ |
||||||
|
#define FPC_IC 0x1000 /* infinity control (obsolete) */ |
||||||
|
#define FPC_IC_PROJ 0x0000 /* projective infinity */ |
||||||
|
#define FPC_IC_AFF 0x1000 /* affine infinity (std) */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Status register |
||||||
|
*/ |
||||||
|
#define FPS_IE 0x0001 /* invalid operation */ |
||||||
|
#define FPS_DE 0x0002 /* denormalized operand */ |
||||||
|
#define FPS_ZE 0x0004 /* divide by zero */ |
||||||
|
#define FPS_OE 0x0008 /* overflow */ |
||||||
|
#define FPS_UE 0x0010 /* underflow */ |
||||||
|
#define FPS_PE 0x0020 /* precision */ |
||||||
|
#define FPS_SF 0x0040 /* stack flag */ |
||||||
|
#define FPS_ES 0x0080 /* error summary */ |
||||||
|
#define FPS_C0 0x0100 /* condition code bit 0 */ |
||||||
|
#define FPS_C1 0x0200 /* condition code bit 1 */ |
||||||
|
#define FPS_C2 0x0400 /* condition code bit 2 */ |
||||||
|
#define FPS_TOS 0x3800 /* top-of-stack pointer */ |
||||||
|
#define FPS_TOS_SHIFT 11 |
||||||
|
#define FPS_C3 0x4000 /* condition code bit 3 */ |
||||||
|
#define FPS_BUSY 0x8000 /* FPU busy */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Kind of floating-point support provided by kernel. |
||||||
|
*/ |
||||||
|
#define FP_NO 0 /* no floating point */ |
||||||
|
#define FP_SOFT 1 /* software FP emulator */ |
||||||
|
#define FP_287 2 /* 80287 */ |
||||||
|
#define FP_387 3 /* 80387 or 80486 */ |
||||||
|
#define FP_FXSR 4 /* Fast save/restore SIMD Extension */ |
||||||
|
|
||||||
|
#endif /* _I386_FP_SAVE_H_ */ |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: kern_return.h |
||||||
|
* Author: Avadis Tevanian, Jr., Michael Wayne Young |
||||||
|
* Date: 1985 |
||||||
|
* |
||||||
|
* Machine-dependent kernel return definitions. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_KERN_RETURN_H_ |
||||||
|
#define _MACH_I386_KERN_RETURN_H_ |
||||||
|
|
||||||
|
#ifndef ASSEMBLER |
||||||
|
typedef int kern_return_t; |
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
#endif /* _MACH_I386_KERN_RETURN_H_ */ |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
|
||||||
|
/* NDR record for Intel x86s */ |
||||||
|
|
||||||
|
#include <mach/ndr.h> |
||||||
|
|
||||||
|
NDR_record_t NDR_record = { |
||||||
|
0, /* mig_reserved */ |
||||||
|
0, /* mig_reserved */ |
||||||
|
0, /* mig_reserved */ |
||||||
|
NDR_PROTOCOL_2_0, |
||||||
|
NDR_INT_LITTLE_ENDIAN, |
||||||
|
NDR_CHAR_ASCII, |
||||||
|
NDR_FLOAT_IEEE, |
||||||
|
0, |
||||||
|
}; |
||||||
@ -0,0 +1,37 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: mach/i386/processor_info.h |
||||||
|
* |
||||||
|
* Data structure definitions for i386 specific processor control |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_PROCESSOR_INFO_H_ |
||||||
|
#define _MACH_I386_PROCESSOR_INFO_H_ |
||||||
|
|
||||||
|
#endif /* _MACH_I386_PROCESSOR_INFO_H_ */ |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2002,2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_RPC_H_ |
||||||
|
#define _MACH_I386_RPC_H_ |
||||||
|
|
||||||
|
#endif /* _MACH_I386_RPC_H_ */ |
||||||
@ -0,0 +1,414 @@ |
|||||||
|
/*
|
||||||
|
* CDDL HEADER START |
||||||
|
* |
||||||
|
* The contents of this file are subject to the terms of the |
||||||
|
* Common Development and Distribution License, Version 1.0 only |
||||||
|
* (the "License"). You may not use this file except in compliance |
||||||
|
* with the License. |
||||||
|
* |
||||||
|
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
||||||
|
* or http://www.opensolaris.org/os/licensing.
|
||||||
|
* See the License for the specific language governing permissions |
||||||
|
* and limitations under the License. |
||||||
|
* |
||||||
|
* When distributing Covered Code, include this CDDL HEADER in each |
||||||
|
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
||||||
|
* If applicable, add the following below this CDDL HEADER, with the |
||||||
|
* fields enclosed by brackets "[]" replaced with your own identifying |
||||||
|
* information: Portions Copyright [yyyy] [name of copyright owner] |
||||||
|
* |
||||||
|
* CDDL HEADER END |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
||||||
|
* Use is subject to license terms. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_SDT_ISA_H |
||||||
|
#define _MACH_I386_SDT_ISA_H |
||||||
|
|
||||||
|
/*
|
||||||
|
* Only define when testing. This makes the calls into actual calls to |
||||||
|
* test functions. |
||||||
|
*/ |
||||||
|
/* #define DTRACE_CALL_TEST */ |
||||||
|
|
||||||
|
#define DTRACE_STRINGIFY(s) #s |
||||||
|
#define DTRACE_TOSTRING(s) DTRACE_STRINGIFY(s) |
||||||
|
#define DTRACE_LABEL(p, n) \ |
||||||
|
"__dtrace_probe$" DTRACE_TOSTRING(%=__LINE__) DTRACE_STRINGIFY(_##p##___##n) ":" "\n\t" |
||||||
|
|
||||||
|
#ifdef DTRACE_CALL_TEST |
||||||
|
|
||||||
|
#define DTRACE_CALL(p,n) \ |
||||||
|
DTRACE_LABEL(p,n) \
|
||||||
|
DTRACE_CALL_INSN(p,n) |
||||||
|
|
||||||
|
#else |
||||||
|
|
||||||
|
#define DTRACE_CALL(p,n) \ |
||||||
|
DTRACE_LABEL(p,n) \
|
||||||
|
DTRACE_NOPS |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __x86_64__ |
||||||
|
|
||||||
|
#define DTRACE_NOPS \ |
||||||
|
"nop" "\n\t" \
|
||||||
|
"nop" "\n\t" \
|
||||||
|
"nop" "\n\t"
|
||||||
|
|
||||||
|
#define DTRACE_CALL_INSN(p,n) \ |
||||||
|
"call _dtracetest" DTRACE_STRINGIFY(_##p##_##n) "\n\t" |
||||||
|
|
||||||
|
#define ARG1_EXTENT 1 |
||||||
|
#define ARGS2_EXTENT 2 |
||||||
|
#define ARGS3_EXTENT 3 |
||||||
|
#define ARGS4_EXTENT 4 |
||||||
|
#define ARGS5_EXTENT 5 |
||||||
|
#define ARGS6_EXTENT 6 |
||||||
|
#define ARGS7_EXTENT 7 |
||||||
|
#define ARGS8_EXTENT 8 |
||||||
|
#define ARGS9_EXTENT 9 |
||||||
|
#define ARGS10_EXTENT 10 |
||||||
|
|
||||||
|
#define DTRACE_CALL0ARGS(provider, name) \ |
||||||
|
asm volatile ( \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL1ARG(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL2ARGS(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL3ARGS(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
"movq\t0x10(%0),%%rdx" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi", "rdx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL4ARGS(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
"movq\t0x10(%0),%%rdx" "\n\t" \
|
||||||
|
"movq\t0x18(%0),%%rcx" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi", "rdx", "rcx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL5ARGS(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
"movq\t0x10(%0),%%rdx" "\n\t" \
|
||||||
|
"movq\t0x18(%0),%%rcx" "\n\t" \
|
||||||
|
"movq\t0x20(%0),%%r8" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi", "rdx", "rcx", "r8" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL6ARGS(provider, name) \ |
||||||
|
asm volatile ("movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
"movq\t0x10(%0),%%rdx" "\n\t" \
|
||||||
|
"movq\t0x18(%0),%%rcx" "\n\t" \
|
||||||
|
"movq\t0x20(%0),%%r8" "\n\t" \
|
||||||
|
"movq\t0x28(%0),%%r9" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL7ARGS(provider, name) \ |
||||||
|
asm volatile ("subq\t$0x8,%%rsp" "\n\t" \
|
||||||
|
"movq\t0x0(%0),%%rdi" "\n\t" \
|
||||||
|
"movq\t0x8(%0),%%rsi" "\n\t" \
|
||||||
|
"movq\t0x10(%0),%%rdx" "\n\t" \
|
||||||
|
"movq\t0x18(%0),%%rcx" "\n\t" \
|
||||||
|
"movq\t0x20(%0),%%r8" "\n\t" \
|
||||||
|
"movq\t0x28(%0),%%r9" "\n\t" \
|
||||||
|
"movq\t0x30(%0),%%rax" "\n\t" \
|
||||||
|
"movq\t%%rax,0x0(%%rsp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addq\t$0x8,%%rsp" "\n\t" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "rax" \
|
||||||
|
); |
||||||
|
|
||||||
|
#endif // __x86_64__
|
||||||
|
|
||||||
|
#ifdef __i386__ |
||||||
|
|
||||||
|
#define DTRACE_NOPS \ |
||||||
|
"nop" "\n\t" \
|
||||||
|
"leal 0(%%esi), %%esi" "\n\t"
|
||||||
|
|
||||||
|
#define DTRACE_CALL_INSN(p,n) \ |
||||||
|
"call _dtracetest" DTRACE_STRINGIFY(_##p##_##n) "\n\t" |
||||||
|
|
||||||
|
#define ARG1_EXTENT 1 |
||||||
|
#define ARGS2_EXTENT 2 |
||||||
|
#define ARGS3_EXTENT 4 |
||||||
|
#define ARGS4_EXTENT 4 |
||||||
|
#define ARGS5_EXTENT 8 |
||||||
|
#define ARGS6_EXTENT 8 |
||||||
|
#define ARGS7_EXTENT 8 |
||||||
|
#define ARGS8_EXTENT 8 |
||||||
|
#define ARGS9_EXTENT 12 |
||||||
|
#define ARGS10_EXTENT 12 |
||||||
|
|
||||||
|
/*
|
||||||
|
* Because this code is used in the kernel, we must not touch any floating point |
||||||
|
* or specialized registers. This leaves the following registers: |
||||||
|
* |
||||||
|
* eax ; volatile, safe to use |
||||||
|
* ebx ; PIC register, gcc error when used |
||||||
|
* ecx ; volatile, safe to use |
||||||
|
* edx ; volatile, safe to use |
||||||
|
* esi ; non-volatile, otherwise safe to use |
||||||
|
* edi ; non-volatile, otherwise safe to use |
||||||
|
* |
||||||
|
* Using any of the non volatile register causes a spill to stack which is almost |
||||||
|
* certainly a net performance loss. Also, note that the array ref (__dtrace_args) |
||||||
|
* consumes one free register. If all three of the volatile regs are used for load/store, |
||||||
|
* the compiler will spill a register to hold the array ref. |
||||||
|
* |
||||||
|
* The end result is that we only pipeline two loads/stores at a time. Blech. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define DTRACE_CALL0ARGS(provider, name) \ |
||||||
|
asm volatile ( \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"# eat trailing nl +tabfrom DTRACE_CALL" \
|
||||||
|
: \
|
||||||
|
: \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL1ARG(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x10,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x10,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL2ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x10,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x10,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL3ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x10,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x10,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL4ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x10,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x10,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL5ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x20,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x20,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL6ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x20,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x14(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x14(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x20,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL7ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x20,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x14(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x14(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x18(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t%%eax,0x18(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x20,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL8ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x20,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x14(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x14(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x18(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x1C(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x18(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x1C(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x20,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL9ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x30,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x14(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x14(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x18(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x1C(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x18(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x1C(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x20(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t%%eax,0x20(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x30,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#define DTRACE_CALL10ARGS(provider, name) \ |
||||||
|
asm volatile ("subl\t$0x30,%%esp" "\n\t" \
|
||||||
|
"movl\t0x0(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x4(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x0(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x4(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x8(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0xC(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x8(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0xC(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x10(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x14(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x10(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x14(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x18(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x1C(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x18(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x1C(%%esp)" "\n\t" \
|
||||||
|
"movl\t0x20(%0),%%eax" "\n\t" \
|
||||||
|
"movl\t0x24(%0),%%edx" "\n\t" \
|
||||||
|
"movl\t%%eax,0x20(%%esp)" "\n\t" \
|
||||||
|
"movl\t%%edx,0x24(%%esp)" "\n\t" \
|
||||||
|
DTRACE_CALL(provider, name) \
|
||||||
|
"addl\t$0x30,%%esp" \
|
||||||
|
: \
|
||||||
|
: "r" (__dtrace_args) \
|
||||||
|
: "memory", "eax", "edx" \
|
||||||
|
); |
||||||
|
|
||||||
|
#endif // __i386__
|
||||||
|
|
||||||
|
#endif /* _MACH_I386_SDT_ISA_H */ |
||||||
@ -0,0 +1,42 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_THREAD_STATE_H_ |
||||||
|
#define _MACH_I386_THREAD_STATE_H_ |
||||||
|
|
||||||
|
/* Size of maximum exported thread state in words */ |
||||||
|
#define I386_THREAD_STATE_MAX (614) /* Size of biggest state possible */ |
||||||
|
|
||||||
|
#if defined (__i386__) || defined(__x86_64__) |
||||||
|
#define THREAD_STATE_MAX I386_THREAD_STATE_MAX |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* _MACH_I386_THREAD_STATE_H_ */ |
||||||
@ -0,0 +1,345 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: thread_status.h |
||||||
|
* Author: Avadis Tevanian, Jr. |
||||||
|
* Date: 1985 |
||||||
|
* |
||||||
|
* This file contains the structure definitions for the thread |
||||||
|
* state as applied to I386 processors. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_THREAD_STATUS_H_ |
||||||
|
#define _MACH_I386_THREAD_STATUS_H_ |
||||||
|
|
||||||
|
#include <mach/machine/_structs.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/i386/fp_reg.h> |
||||||
|
#include <mach/i386/thread_state.h> |
||||||
|
#include <i386/eflags.h> |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the i386_xxxx form is kept for legacy purposes since these types |
||||||
|
* are externally known... eventually they should be deprecated. |
||||||
|
* our internal implementation has moved to the following naming convention |
||||||
|
* |
||||||
|
* x86_xxxx32 names are used to deal with 32 bit states |
||||||
|
* x86_xxxx64 names are used to deal with 64 bit states |
||||||
|
* x86_xxxx names are used to deal with either 32 or 64 bit states |
||||||
|
* via a self-describing mechanism |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* these are the legacy names which should be deprecated in the future |
||||||
|
* they are externally known which is the only reason we don't just get |
||||||
|
* rid of them |
||||||
|
*/ |
||||||
|
#define i386_THREAD_STATE 1 |
||||||
|
#define i386_FLOAT_STATE 2 |
||||||
|
#define i386_EXCEPTION_STATE 3 |
||||||
|
|
||||||
|
/*
|
||||||
|
* THREAD_STATE_FLAVOR_LIST 0 |
||||||
|
* these are the supported flavors |
||||||
|
*/ |
||||||
|
#define x86_THREAD_STATE32 1 |
||||||
|
#define x86_FLOAT_STATE32 2 |
||||||
|
#define x86_EXCEPTION_STATE32 3 |
||||||
|
#define x86_THREAD_STATE64 4 |
||||||
|
#define x86_FLOAT_STATE64 5 |
||||||
|
#define x86_EXCEPTION_STATE64 6 |
||||||
|
#define x86_THREAD_STATE 7 |
||||||
|
#define x86_FLOAT_STATE 8 |
||||||
|
#define x86_EXCEPTION_STATE 9 |
||||||
|
#define x86_DEBUG_STATE32 10 |
||||||
|
#define x86_DEBUG_STATE64 11 |
||||||
|
#define x86_DEBUG_STATE 12 |
||||||
|
#define THREAD_STATE_NONE 13 |
||||||
|
/* 14 and 15 are used for the internal x86_SAVED_STATE flavours */ |
||||||
|
/* Arrange for flavors to take sequential values, 32-bit, 64-bit, non-specific */ |
||||||
|
#define x86_AVX_STATE32 16 |
||||||
|
#define x86_AVX_STATE64 (x86_AVX_STATE32 + 1) |
||||||
|
#define x86_AVX_STATE (x86_AVX_STATE32 + 2) |
||||||
|
#define x86_AVX512_STATE32 19 |
||||||
|
#define x86_AVX512_STATE64 (x86_AVX512_STATE32 + 1) |
||||||
|
#define x86_AVX512_STATE (x86_AVX512_STATE32 + 2) |
||||||
|
#define x86_PAGEIN_STATE 22 |
||||||
|
#define x86_THREAD_FULL_STATE64 23 |
||||||
|
|
||||||
|
/*
|
||||||
|
* Largest state on this machine: |
||||||
|
* (be sure mach/machine/thread_state.h matches!) |
||||||
|
*/ |
||||||
|
#define THREAD_MACHINE_STATE_MAX THREAD_STATE_MAX |
||||||
|
|
||||||
|
/*
|
||||||
|
* VALID_THREAD_STATE_FLAVOR is a platform specific macro that when passed |
||||||
|
* an exception flavor will return if that is a defined flavor for that |
||||||
|
* platform. The macro must be manually updated to include all of the valid |
||||||
|
* exception flavors as defined above. |
||||||
|
*/ |
||||||
|
#define VALID_THREAD_STATE_FLAVOR(x) \ |
||||||
|
((x == x86_THREAD_STATE32) || \
|
||||||
|
(x == x86_FLOAT_STATE32) || \
|
||||||
|
(x == x86_EXCEPTION_STATE32) || \
|
||||||
|
(x == x86_DEBUG_STATE32) || \
|
||||||
|
(x == x86_THREAD_STATE64) || \
|
||||||
|
(x == x86_THREAD_FULL_STATE64) || \
|
||||||
|
(x == x86_FLOAT_STATE64) || \
|
||||||
|
(x == x86_EXCEPTION_STATE64) || \
|
||||||
|
(x == x86_DEBUG_STATE64) || \
|
||||||
|
(x == x86_THREAD_STATE) || \
|
||||||
|
(x == x86_FLOAT_STATE) || \
|
||||||
|
(x == x86_EXCEPTION_STATE) || \
|
||||||
|
(x == x86_DEBUG_STATE) || \
|
||||||
|
(x == x86_AVX_STATE32) || \
|
||||||
|
(x == x86_AVX_STATE64) || \
|
||||||
|
(x == x86_AVX_STATE) || \
|
||||||
|
(x == x86_AVX512_STATE32) || \
|
||||||
|
(x == x86_AVX512_STATE64) || \
|
||||||
|
(x == x86_AVX512_STATE) || \
|
||||||
|
(x == x86_PAGEIN_STATE) || \
|
||||||
|
(x == THREAD_STATE_NONE)) |
||||||
|
|
||||||
|
struct x86_state_hdr { |
||||||
|
uint32_t flavor; |
||||||
|
uint32_t count; |
||||||
|
}; |
||||||
|
typedef struct x86_state_hdr x86_state_hdr_t; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Default segment register values. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define USER_CODE_SELECTOR 0x0017 |
||||||
|
#define USER_DATA_SELECTOR 0x001f |
||||||
|
#define KERN_CODE_SELECTOR 0x0008 |
||||||
|
#define KERN_DATA_SELECTOR 0x0010 |
||||||
|
|
||||||
|
/*
|
||||||
|
* to be deprecated in the future |
||||||
|
*/ |
||||||
|
typedef _STRUCT_X86_THREAD_STATE32 i386_thread_state_t; |
||||||
|
#define i386_THREAD_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (i386_thread_state_t) / sizeof (int) )) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_THREAD_STATE32 x86_thread_state32_t; |
||||||
|
#define x86_THREAD_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_thread_state32_t) / sizeof (int) )) |
||||||
|
|
||||||
|
/*
|
||||||
|
* to be deprecated in the future |
||||||
|
*/ |
||||||
|
typedef _STRUCT_X86_FLOAT_STATE32 i386_float_state_t; |
||||||
|
#define i386_FLOAT_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(i386_float_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_FLOAT_STATE32 x86_float_state32_t; |
||||||
|
#define x86_FLOAT_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_float_state32_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_AVX_STATE32 x86_avx_state32_t; |
||||||
|
#define x86_AVX_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx_state32_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_AVX512_STATE32 x86_avx512_state32_t; |
||||||
|
#define x86_AVX512_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx512_state32_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
/*
|
||||||
|
* to be deprecated in the future |
||||||
|
*/ |
||||||
|
typedef _STRUCT_X86_EXCEPTION_STATE32 i386_exception_state_t; |
||||||
|
#define i386_EXCEPTION_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (i386_exception_state_t) / sizeof (int) )) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_EXCEPTION_STATE32 x86_exception_state32_t; |
||||||
|
#define x86_EXCEPTION_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_exception_state32_t) / sizeof (int) )) |
||||||
|
|
||||||
|
#define I386_EXCEPTION_STATE_COUNT i386_EXCEPTION_STATE_COUNT |
||||||
|
|
||||||
|
typedef _STRUCT_X86_DEBUG_STATE32 x86_debug_state32_t; |
||||||
|
#define x86_DEBUG_STATE32_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_debug_state32_t) / sizeof (int) )) |
||||||
|
|
||||||
|
#define X86_DEBUG_STATE32_COUNT x86_DEBUG_STATE32_COUNT |
||||||
|
|
||||||
|
typedef _STRUCT_X86_THREAD_STATE64 x86_thread_state64_t; |
||||||
|
#define x86_THREAD_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_thread_state64_t) / sizeof (int) )) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_THREAD_FULL_STATE64 x86_thread_full_state64_t; |
||||||
|
#define x86_THREAD_FULL_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_thread_full_state64_t) / sizeof (int) )) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_FLOAT_STATE64 x86_float_state64_t; |
||||||
|
#define x86_FLOAT_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_float_state64_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_AVX_STATE64 x86_avx_state64_t; |
||||||
|
#define x86_AVX_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx_state64_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_AVX512_STATE64 x86_avx512_state64_t; |
||||||
|
#define x86_AVX512_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx512_state64_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef _STRUCT_X86_EXCEPTION_STATE64 x86_exception_state64_t; |
||||||
|
#define x86_EXCEPTION_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_exception_state64_t) / sizeof (int) )) |
||||||
|
|
||||||
|
#define X86_EXCEPTION_STATE64_COUNT x86_EXCEPTION_STATE64_COUNT |
||||||
|
|
||||||
|
typedef _STRUCT_X86_DEBUG_STATE64 x86_debug_state64_t; |
||||||
|
#define x86_DEBUG_STATE64_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_debug_state64_t) / sizeof (int) )) |
||||||
|
|
||||||
|
#define X86_DEBUG_STATE64_COUNT x86_DEBUG_STATE64_COUNT |
||||||
|
|
||||||
|
typedef _STRUCT_X86_PAGEIN_STATE x86_pagein_state_t; |
||||||
|
#define x86_PAGEIN_STATE_COUNT \ |
||||||
|
((mach_msg_type_number_t)(sizeof(x86_pagein_state_t) / sizeof(int))) |
||||||
|
|
||||||
|
#define X86_PAGEIN_STATE_COUNT x86_PAGEIN_STATE_COUNT |
||||||
|
|
||||||
|
/*
|
||||||
|
* Combined thread, float and exception states |
||||||
|
*/ |
||||||
|
struct x86_thread_state { |
||||||
|
x86_state_hdr_t tsh; |
||||||
|
union { |
||||||
|
x86_thread_state32_t ts32; |
||||||
|
x86_thread_state64_t ts64; |
||||||
|
} uts; |
||||||
|
}; |
||||||
|
|
||||||
|
struct x86_float_state { |
||||||
|
x86_state_hdr_t fsh; |
||||||
|
union { |
||||||
|
x86_float_state32_t fs32; |
||||||
|
x86_float_state64_t fs64; |
||||||
|
} ufs; |
||||||
|
}; |
||||||
|
|
||||||
|
struct x86_exception_state { |
||||||
|
x86_state_hdr_t esh; |
||||||
|
union { |
||||||
|
x86_exception_state32_t es32; |
||||||
|
x86_exception_state64_t es64; |
||||||
|
} ues; |
||||||
|
}; |
||||||
|
|
||||||
|
struct x86_debug_state { |
||||||
|
x86_state_hdr_t dsh; |
||||||
|
union { |
||||||
|
x86_debug_state32_t ds32; |
||||||
|
x86_debug_state64_t ds64; |
||||||
|
} uds; |
||||||
|
}; |
||||||
|
|
||||||
|
struct x86_avx_state { |
||||||
|
x86_state_hdr_t ash; |
||||||
|
union { |
||||||
|
x86_avx_state32_t as32; |
||||||
|
x86_avx_state64_t as64; |
||||||
|
} ufs; |
||||||
|
}; |
||||||
|
|
||||||
|
struct x86_avx512_state { |
||||||
|
x86_state_hdr_t ash; |
||||||
|
union { |
||||||
|
x86_avx512_state32_t as32; |
||||||
|
x86_avx512_state64_t as64; |
||||||
|
} ufs; |
||||||
|
}; |
||||||
|
|
||||||
|
typedef struct x86_thread_state x86_thread_state_t; |
||||||
|
#define x86_THREAD_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
( sizeof (x86_thread_state_t) / sizeof (int) )) |
||||||
|
|
||||||
|
typedef struct x86_float_state x86_float_state_t; |
||||||
|
#define x86_FLOAT_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_float_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef struct x86_exception_state x86_exception_state_t; |
||||||
|
#define x86_EXCEPTION_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_exception_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef struct x86_debug_state x86_debug_state_t; |
||||||
|
#define x86_DEBUG_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_debug_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef struct x86_avx_state x86_avx_state_t; |
||||||
|
#define x86_AVX_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
typedef struct x86_avx512_state x86_avx512_state_t; |
||||||
|
#define x86_AVX512_STATE_COUNT ((mach_msg_type_number_t) \ |
||||||
|
(sizeof(x86_avx512_state_t)/sizeof(unsigned int))) |
||||||
|
|
||||||
|
/*
|
||||||
|
* Machine-independent way for servers and Mach's exception mechanism to |
||||||
|
* choose the most efficient state flavor for exception RPC's: |
||||||
|
*/ |
||||||
|
#define MACHINE_THREAD_STATE x86_THREAD_STATE |
||||||
|
#define MACHINE_THREAD_STATE_COUNT x86_THREAD_STATE_COUNT |
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MACH_I386_THREAD_STATUS_H_ */ |
||||||
@ -0,0 +1,170 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2012 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1994 The University of Utah and |
||||||
|
* the Computer Systems Laboratory at the University of Utah (CSL). |
||||||
|
* All rights reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software is hereby |
||||||
|
* granted provided that (1) source code retains these copyright, permission, |
||||||
|
* and disclaimer notices, and (2) redistributions including binaries |
||||||
|
* reproduce the notices in supporting documentation, and (3) all advertising |
||||||
|
* materials mentioning features or use of this software display the following |
||||||
|
* acknowledgement: ``This product includes software developed by the |
||||||
|
* Computer Systems Laboratory at the University of Utah.'' |
||||||
|
* |
||||||
|
* THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS |
||||||
|
* IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF |
||||||
|
* ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* CSL requests users of this software to return to csl-dist@cs.utah.edu any |
||||||
|
* improvements that they make and grant CSL redistribution rights. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: vm_param.h |
||||||
|
* Author: Avadis Tevanian, Jr. |
||||||
|
* Date: 1985 |
||||||
|
* |
||||||
|
* I386 machine dependent virtual memory parameters. |
||||||
|
* Most of the declarations are preceeded by I386_ (or i386_) |
||||||
|
* which is OK because only I386 specific code will be using |
||||||
|
* them. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_VM_PARAM_H_ |
||||||
|
#define _MACH_I386_VM_PARAM_H_ |
||||||
|
|
||||||
|
#define BYTE_SIZE 8 /* byte size in bits */ |
||||||
|
|
||||||
|
#define I386_PGBYTES 4096 /* bytes per 80386 page */ |
||||||
|
#define I386_PGSHIFT 12 /* bitshift for pages */ |
||||||
|
|
||||||
|
#define PAGE_SIZE I386_PGBYTES |
||||||
|
#define PAGE_SHIFT I386_PGSHIFT |
||||||
|
#define PAGE_MASK (PAGE_SIZE - 1) |
||||||
|
|
||||||
|
#define PAGE_MAX_SHIFT PAGE_SHIFT |
||||||
|
#define PAGE_MAX_SIZE PAGE_SIZE |
||||||
|
#define PAGE_MAX_MASK PAGE_MASK |
||||||
|
|
||||||
|
#define PAGE_MIN_SHIFT PAGE_SHIFT |
||||||
|
#define PAGE_MIN_SIZE PAGE_SIZE |
||||||
|
#define PAGE_MIN_MASK PAGE_MASK |
||||||
|
|
||||||
|
#define I386_LPGBYTES 2*1024*1024 /* bytes per large page */ |
||||||
|
#define I386_LPGSHIFT 21 /* bitshift for large pages */ |
||||||
|
#define I386_LPGMASK (I386_LPGBYTES-1) |
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert bytes to pages and convert pages to bytes. |
||||||
|
* No rounding is used. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define i386_btop(x) ((ppnum_t)((x) >> I386_PGSHIFT)) |
||||||
|
#define machine_btop(x) i386_btop(x) |
||||||
|
#define i386_ptob(x) (((pmap_paddr_t)(x)) << I386_PGSHIFT) |
||||||
|
#define machine_ptob(x) i386_ptob(x) |
||||||
|
|
||||||
|
/*
|
||||||
|
* Round off or truncate to the nearest page. These will work |
||||||
|
* for either addresses or counts. (i.e. 1 byte rounds to 1 page |
||||||
|
* bytes. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define i386_round_page(x) ((((pmap_paddr_t)(x)) + I386_PGBYTES - 1) & \ |
||||||
|
~(I386_PGBYTES-1)) |
||||||
|
#define i386_trunc_page(x) (((pmap_paddr_t)(x)) & ~(I386_PGBYTES-1)) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VM_MIN_ADDRESS64 ((user_addr_t) 0x0000000000000000ULL) |
||||||
|
/*
|
||||||
|
* default top of user stack... it grows down from here |
||||||
|
*/ |
||||||
|
#define VM_USRSTACK64 ((user_addr_t) 0x00007FFEEFC00000ULL) |
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX TODO: Obsolete? |
||||||
|
*/ |
||||||
|
#define VM_DYLD64 ((user_addr_t) 0x00007FFF5FC00000ULL) |
||||||
|
#define VM_LIB64_SHR_DATA ((user_addr_t) 0x00007FFF60000000ULL) |
||||||
|
#define VM_LIB64_SHR_TEXT ((user_addr_t) 0x00007FFF80000000ULL) |
||||||
|
/*
|
||||||
|
* the end of the usable user address space , for now about 47 bits. |
||||||
|
* the 64 bit commpage is past the end of this |
||||||
|
*/ |
||||||
|
#define VM_MAX_PAGE_ADDRESS ((user_addr_t) 0x00007FFFFFE00000ULL) |
||||||
|
/*
|
||||||
|
* canonical end of user address space for limits checking |
||||||
|
*/ |
||||||
|
#define VM_MAX_USER_PAGE_ADDRESS ((user_addr_t)0x00007FFFFFFFF000ULL) |
||||||
|
|
||||||
|
|
||||||
|
/* system-wide values */ |
||||||
|
#define MACH_VM_MIN_ADDRESS ((mach_vm_offset_t) 0) |
||||||
|
#define MACH_VM_MAX_ADDRESS ((mach_vm_offset_t) VM_MAX_PAGE_ADDRESS) |
||||||
|
|
||||||
|
/* process-relative values (all 32-bit legacy only for now) */ |
||||||
|
#define VM_MIN_ADDRESS ((vm_offset_t) 0) |
||||||
|
#define VM_USRSTACK32 ((vm_offset_t) 0xC0000000) /* ASLR slides stack down by up to 1 MB */ |
||||||
|
#define VM_MAX_ADDRESS ((vm_offset_t) 0xFFE00000) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _MACH_I386_VM_PARAM_H_ */ |
||||||
@ -0,0 +1,142 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2016 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: vm_types.h |
||||||
|
* Author: Avadis Tevanian, Jr. |
||||||
|
* Date: 1985 |
||||||
|
* |
||||||
|
* Header file for VM data types. I386 version. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_I386_VM_TYPES_H_ |
||||||
|
#define _MACH_I386_VM_TYPES_H_ |
||||||
|
|
||||||
|
#ifndef ASSEMBLER |
||||||
|
|
||||||
|
#include <i386/_types.h> |
||||||
|
#include <mach/i386/vm_param.h> |
||||||
|
#include <stdint.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* natural_t and integer_t are Mach's legacy types for machine- |
||||||
|
* independent integer types (unsigned, and signed, respectively). |
||||||
|
* Their original purpose was to define other types in a machine/ |
||||||
|
* compiler independent way. |
||||||
|
* |
||||||
|
* They also had an implicit "same size as pointer" characteristic |
||||||
|
* to them (i.e. Mach's traditional types are very ILP32 or ILP64 |
||||||
|
* centric). We support x86 ABIs that do not follow either of |
||||||
|
* these models (specifically LP64). Therefore, we had to make a |
||||||
|
* choice between making these types scale with pointers or stay |
||||||
|
* tied to integers. Because their use is predominantly tied to |
||||||
|
* to the size of an integer, we are keeping that association and |
||||||
|
* breaking free from pointer size guarantees. |
||||||
|
* |
||||||
|
* New use of these types is discouraged. |
||||||
|
*/ |
||||||
|
typedef __darwin_natural_t natural_t; |
||||||
|
typedef int integer_t; |
||||||
|
|
||||||
|
/*
|
||||||
|
* A vm_offset_t is a type-neutral pointer, |
||||||
|
* e.g. an offset into a virtual memory space. |
||||||
|
*/ |
||||||
|
#ifdef __LP64__ |
||||||
|
typedef uintptr_t vm_offset_t; |
||||||
|
#else /* __LP64__ */ |
||||||
|
typedef natural_t vm_offset_t; |
||||||
|
#endif /* __LP64__ */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* A vm_size_t is the proper type for e.g. |
||||||
|
* expressing the difference between two |
||||||
|
* vm_offset_t entities. |
||||||
|
*/ |
||||||
|
#ifdef __LP64__ |
||||||
|
typedef uintptr_t vm_size_t; |
||||||
|
#else /* __LP64__ */ |
||||||
|
typedef natural_t vm_size_t; |
||||||
|
#endif /* __LP64__ */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* This new type is independent of a particular vm map's |
||||||
|
* implementation size - and represents appropriate types |
||||||
|
* for all possible maps. This is used for interfaces |
||||||
|
* where the size of the map is not known - or we don't |
||||||
|
* want to have to distinguish. |
||||||
|
*/ |
||||||
|
typedef uint64_t mach_vm_address_t; |
||||||
|
typedef uint64_t mach_vm_offset_t; |
||||||
|
typedef uint64_t mach_vm_size_t; |
||||||
|
|
||||||
|
typedef uint64_t vm_map_offset_t; |
||||||
|
typedef uint64_t vm_map_address_t; |
||||||
|
typedef uint64_t vm_map_size_t; |
||||||
|
|
||||||
|
typedef mach_vm_address_t mach_port_context_t; |
||||||
|
|
||||||
|
|
||||||
|
#endif /* ASSEMBLER */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* If composing messages by hand (please do not) |
||||||
|
*/ |
||||||
|
#define MACH_MSG_TYPE_INTEGER_T MACH_MSG_TYPE_INTEGER_32 |
||||||
|
|
||||||
|
#endif /* _MACH_I386_VM_TYPES_H_ */ |
||||||
@ -0,0 +1,330 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: h/kern_return.h |
||||||
|
* Author: Avadis Tevanian, Jr. |
||||||
|
* Date: 1985 |
||||||
|
* |
||||||
|
* Kernel return codes. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_KERN_RETURN_H_ |
||||||
|
#define _MACH_KERN_RETURN_H_ |
||||||
|
|
||||||
|
#include <mach/machine/kern_return.h> |
||||||
|
|
||||||
|
#define KERN_SUCCESS 0 |
||||||
|
|
||||||
|
#define KERN_INVALID_ADDRESS 1 |
||||||
|
/* Specified address is not currently valid.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_PROTECTION_FAILURE 2 |
||||||
|
/* Specified memory is valid, but does not permit the
|
||||||
|
* required forms of access. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NO_SPACE 3 |
||||||
|
/* The address range specified is already in use, or
|
||||||
|
* no address range of the size specified could be |
||||||
|
* found. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_ARGUMENT 4 |
||||||
|
/* The function requested was not applicable to this
|
||||||
|
* type of argument, or an argument is invalid |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_FAILURE 5 |
||||||
|
/* The function could not be performed. A catch-all.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RESOURCE_SHORTAGE 6 |
||||||
|
/* A system resource could not be allocated to fulfill
|
||||||
|
* this request. This failure may not be permanent. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NOT_RECEIVER 7 |
||||||
|
/* The task in question does not hold receive rights
|
||||||
|
* for the port argument. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NO_ACCESS 8 |
||||||
|
/* Bogus access restriction.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_MEMORY_FAILURE 9 |
||||||
|
/* During a page fault, the target address refers to a
|
||||||
|
* memory object that has been destroyed. This |
||||||
|
* failure is permanent. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_MEMORY_ERROR 10 |
||||||
|
/* During a page fault, the memory object indicated
|
||||||
|
* that the data could not be returned. This failure |
||||||
|
* may be temporary; future attempts to access this |
||||||
|
* same data may succeed, as defined by the memory |
||||||
|
* object. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_ALREADY_IN_SET 11 |
||||||
|
/* The receive right is already a member of the portset.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NOT_IN_SET 12 |
||||||
|
/* The receive right is not a member of a port set.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NAME_EXISTS 13 |
||||||
|
/* The name already denotes a right in the task.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_ABORTED 14 |
||||||
|
/* The operation was aborted. Ipc code will
|
||||||
|
* catch this and reflect it as a message error. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_NAME 15 |
||||||
|
/* The name doesn't denote a right in the task.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_TASK 16 |
||||||
|
/* Target task isn't an active task.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_RIGHT 17 |
||||||
|
/* The name denotes a right, but not an appropriate right.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_VALUE 18 |
||||||
|
/* A blatant range error.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_UREFS_OVERFLOW 19 |
||||||
|
/* Operation would overflow limit on user-references.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_CAPABILITY 20 |
||||||
|
/* The supplied (port) capability is improper.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RIGHT_EXISTS 21 |
||||||
|
/* The task already has send or receive rights
|
||||||
|
* for the port under another name. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_HOST 22 |
||||||
|
/* Target host isn't actually a host.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_MEMORY_PRESENT 23 |
||||||
|
/* An attempt was made to supply "precious" data
|
||||||
|
* for memory that is already present in a |
||||||
|
* memory object. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_MEMORY_DATA_MOVED 24 |
||||||
|
/* A page was requested of a memory manager via
|
||||||
|
* memory_object_data_request for an object using |
||||||
|
* a MEMORY_OBJECT_COPY_CALL strategy, with the |
||||||
|
* VM_PROT_WANTS_COPY flag being used to specify |
||||||
|
* that the page desired is for a copy of the |
||||||
|
* object, and the memory manager has detected |
||||||
|
* the page was pushed into a copy of the object |
||||||
|
* while the kernel was walking the shadow chain |
||||||
|
* from the copy to the object. This error code |
||||||
|
* is delivered via memory_object_data_error |
||||||
|
* and is handled by the kernel (it forces the |
||||||
|
* kernel to restart the fault). It will not be |
||||||
|
* seen by users. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_MEMORY_RESTART_COPY 25 |
||||||
|
/* A strategic copy was attempted of an object
|
||||||
|
* upon which a quicker copy is now possible. |
||||||
|
* The caller should retry the copy using |
||||||
|
* vm_object_copy_quickly. This error code |
||||||
|
* is seen only by the kernel. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_PROCESSOR_SET 26 |
||||||
|
/* An argument applied to assert processor set privilege
|
||||||
|
* was not a processor set control port. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_POLICY_LIMIT 27 |
||||||
|
/* The specified scheduling attributes exceed the thread's
|
||||||
|
* limits. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_POLICY 28 |
||||||
|
/* The specified scheduling policy is not currently
|
||||||
|
* enabled for the processor set. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_OBJECT 29 |
||||||
|
/* The external memory manager failed to initialize the
|
||||||
|
* memory object. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_ALREADY_WAITING 30 |
||||||
|
/* A thread is attempting to wait for an event for which
|
||||||
|
* there is already a waiting thread. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_DEFAULT_SET 31 |
||||||
|
/* An attempt was made to destroy the default processor
|
||||||
|
* set. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_EXCEPTION_PROTECTED 32 |
||||||
|
/* An attempt was made to fetch an exception port that is
|
||||||
|
* protected, or to abort a thread while processing a |
||||||
|
* protected exception. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_LEDGER 33 |
||||||
|
/* A ledger was required but not supplied.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_MEMORY_CONTROL 34 |
||||||
|
/* The port was not a memory cache control port.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INVALID_SECURITY 35 |
||||||
|
/* An argument supplied to assert security privilege
|
||||||
|
* was not a host security port. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NOT_DEPRESSED 36 |
||||||
|
/* thread_depress_abort was called on a thread which
|
||||||
|
* was not currently depressed. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_TERMINATED 37 |
||||||
|
/* Object has been terminated and is no longer available
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_LOCK_SET_DESTROYED 38 |
||||||
|
/* Lock set has been destroyed and is no longer available.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_LOCK_UNSTABLE 39 |
||||||
|
/* The thread holding the lock terminated before releasing
|
||||||
|
* the lock |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_LOCK_OWNED 40 |
||||||
|
/* The lock is already owned by another thread
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_LOCK_OWNED_SELF 41 |
||||||
|
/* The lock is already owned by the calling thread
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_SEMAPHORE_DESTROYED 42 |
||||||
|
/* Semaphore has been destroyed and is no longer available.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RPC_SERVER_TERMINATED 43 |
||||||
|
/* Return from RPC indicating the target server was
|
||||||
|
* terminated before it successfully replied |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RPC_TERMINATE_ORPHAN 44 |
||||||
|
/* Terminate an orphaned activation.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RPC_CONTINUE_ORPHAN 45 |
||||||
|
/* Allow an orphaned activation to continue executing.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NOT_SUPPORTED 46 |
||||||
|
/* Empty thread activation (No thread linked to it)
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NODE_DOWN 47 |
||||||
|
/* Remote node down or inaccessible.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_NOT_WAITING 48 |
||||||
|
/* A signalled thread was not actually waiting. */ |
||||||
|
|
||||||
|
#define KERN_OPERATION_TIMED_OUT 49 |
||||||
|
/* Some thread-oriented operation (semaphore_wait) timed out
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_CODESIGN_ERROR 50 |
||||||
|
/* During a page fault, indicates that the page was rejected
|
||||||
|
* as a result of a signature check. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_POLICY_STATIC 51 |
||||||
|
/* The requested property cannot be changed at this time.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_INSUFFICIENT_BUFFER_SIZE 52 |
||||||
|
/* The provided buffer is of insufficient size for the requested data.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#define KERN_RETURN_MAX 0x100 |
||||||
|
/* Maximum return value allowable
|
||||||
|
*/ |
||||||
|
|
||||||
|
#endif /* _MACH_KERN_RETURN_H_ */ |
||||||
@ -0,0 +1,180 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2007 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce |
||||||
|
* support for mandatory and extensible security protections. This notice |
||||||
|
* is included in support of clause 2.2 (b) of the Apple Public License, |
||||||
|
* Version 2.0. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_KMOD_H_ |
||||||
|
#define _MACH_KMOD_H_ |
||||||
|
|
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
#if PRAGMA_MARK |
||||||
|
#pragma mark Basic macros & typedefs |
||||||
|
#endif |
||||||
|
/***********************************************************************
|
||||||
|
* Basic macros & typedefs |
||||||
|
***********************************************************************/ |
||||||
|
#define KMOD_MAX_NAME 64 |
||||||
|
|
||||||
|
#define KMOD_RETURN_SUCCESS KERN_SUCCESS |
||||||
|
#define KMOD_RETURN_FAILURE KERN_FAILURE |
||||||
|
|
||||||
|
typedef int kmod_t; |
||||||
|
|
||||||
|
struct kmod_info; |
||||||
|
typedef kern_return_t kmod_start_func_t(struct kmod_info * ki, void * data); |
||||||
|
typedef kern_return_t kmod_stop_func_t(struct kmod_info * ki, void * data); |
||||||
|
|
||||||
|
#if PRAGMA_MARK |
||||||
|
#pragma mark Structure definitions |
||||||
|
#endif |
||||||
|
/***********************************************************************
|
||||||
|
* Structure definitions |
||||||
|
* |
||||||
|
* All structures must be #pragma pack(4). |
||||||
|
***********************************************************************/ |
||||||
|
#pragma pack(push, 4) |
||||||
|
|
||||||
|
/* Run-time struct only; never saved to a file */ |
||||||
|
typedef struct kmod_reference { |
||||||
|
struct kmod_reference * next; |
||||||
|
struct kmod_info * info; |
||||||
|
} kmod_reference_t; |
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* Warning: Any changes to the kmod_info structure affect the |
||||||
|
* KMOD_..._DECL macros below. |
||||||
|
***********************************************************************/ |
||||||
|
|
||||||
|
/* The kmod_info_t structure is only safe to use inside the running
|
||||||
|
* kernel. If you need to work with a kmod_info_t structure outside |
||||||
|
* the kernel, please use the compatibility definitions below. |
||||||
|
*/ |
||||||
|
typedef struct kmod_info { |
||||||
|
struct kmod_info * next; |
||||||
|
int32_t info_version; // version of this structure
|
||||||
|
uint32_t id; |
||||||
|
char name[KMOD_MAX_NAME]; |
||||||
|
char version[KMOD_MAX_NAME]; |
||||||
|
int32_t reference_count; // # linkage refs to this
|
||||||
|
kmod_reference_t * reference_list; // who this refs (links on)
|
||||||
|
vm_address_t address; // starting address
|
||||||
|
vm_size_t size; // total size
|
||||||
|
vm_size_t hdr_size; // unwired hdr size
|
||||||
|
kmod_start_func_t * start; |
||||||
|
kmod_stop_func_t * stop; |
||||||
|
} kmod_info_t; |
||||||
|
|
||||||
|
/* A compatibility definition of kmod_info_t for 32-bit kexts.
|
||||||
|
*/ |
||||||
|
typedef struct kmod_info_32_v1 { |
||||||
|
uint32_t next_addr; |
||||||
|
int32_t info_version; |
||||||
|
uint32_t id; |
||||||
|
uint8_t name[KMOD_MAX_NAME]; |
||||||
|
uint8_t version[KMOD_MAX_NAME]; |
||||||
|
int32_t reference_count; |
||||||
|
uint32_t reference_list_addr; |
||||||
|
uint32_t address; |
||||||
|
uint32_t size; |
||||||
|
uint32_t hdr_size; |
||||||
|
uint32_t start_addr; |
||||||
|
uint32_t stop_addr; |
||||||
|
} kmod_info_32_v1_t; |
||||||
|
|
||||||
|
/* A compatibility definition of kmod_info_t for 64-bit kexts.
|
||||||
|
*/ |
||||||
|
typedef struct kmod_info_64_v1 { |
||||||
|
uint64_t next_addr; |
||||||
|
int32_t info_version; |
||||||
|
uint32_t id; |
||||||
|
uint8_t name[KMOD_MAX_NAME]; |
||||||
|
uint8_t version[KMOD_MAX_NAME]; |
||||||
|
int32_t reference_count; |
||||||
|
uint64_t reference_list_addr; |
||||||
|
uint64_t address; |
||||||
|
uint64_t size; |
||||||
|
uint64_t hdr_size; |
||||||
|
uint64_t start_addr; |
||||||
|
uint64_t stop_addr; |
||||||
|
} kmod_info_64_v1_t; |
||||||
|
|
||||||
|
#pragma pack(pop) |
||||||
|
|
||||||
|
#if PRAGMA_MARK |
||||||
|
#pragma mark Kmod structure declaration macros |
||||||
|
#endif |
||||||
|
/***********************************************************************
|
||||||
|
* Kmod structure declaration macros |
||||||
|
***********************************************************************/ |
||||||
|
#define KMOD_INFO_NAME kmod_info |
||||||
|
#define KMOD_INFO_VERSION 1 |
||||||
|
|
||||||
|
#define KMOD_DECL(name, version) \ |
||||||
|
static kmod_start_func_t name ## _module_start; \
|
||||||
|
static kmod_stop_func_t name ## _module_stop; \
|
||||||
|
kmod_info_t KMOD_INFO_NAME = { 0, KMOD_INFO_VERSION, -1U, \
|
||||||
|
{ #name }, { version }, -1, 0, 0, 0, 0, \
|
||||||
|
name ## _module_start, \
|
||||||
|
name ## _module_stop }; |
||||||
|
|
||||||
|
#define KMOD_EXPLICIT_DECL(name, version, start, stop) \ |
||||||
|
kmod_info_t KMOD_INFO_NAME = { 0, KMOD_INFO_VERSION, -1U, \
|
||||||
|
{ #name }, { version }, -1, 0, 0, 0, 0, \
|
||||||
|
start, stop }; |
||||||
|
|
||||||
|
#if PRAGMA_MARK |
||||||
|
#pragma mark Kernel private declarations |
||||||
|
#endif |
||||||
|
/***********************************************************************
|
||||||
|
* Kernel private declarations. |
||||||
|
***********************************************************************/ |
||||||
|
|
||||||
|
|
||||||
|
#if PRAGMA_MARK |
||||||
|
#pragma mark Obsolete kmod stuff |
||||||
|
#endif |
||||||
|
/***********************************************************************
|
||||||
|
* These 3 should be dropped but they're referenced by MIG declarations. |
||||||
|
***********************************************************************/ |
||||||
|
typedef void * kmod_args_t; |
||||||
|
typedef int kmod_control_flavor_t; |
||||||
|
typedef kmod_info_t * kmod_info_array_t; |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
#endif /* _MACH_KMOD_H_ */ |
||||||
@ -0,0 +1,83 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
* |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: mach/lock_set.defs |
||||||
|
* Author: Joseph CaraDonna |
||||||
|
* |
||||||
|
* Exported kernel calls |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
lock_set 617000; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
|
||||||
|
/* |
||||||
|
* OBSOLETE interfaces |
||||||
|
* a lock_set_t is created and destroyed through the task object. |
||||||
|
* lock_set_create(task,&lock_set_t,...); |
||||||
|
* lock_set_destroy(task,lock_set_t); |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* OBSOLETE interfaces |
||||||
|
*/ |
||||||
|
routine lock_acquire( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
routine lock_release( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
routine lock_try( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
routine lock_make_stable( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
routine lock_handoff( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
routine lock_handoff_accept( |
||||||
|
lock_set : lock_set_t; |
||||||
|
lock_id : int); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,350 @@ |
|||||||
|
#ifndef _lock_set_user_ |
||||||
|
#define _lock_set_user_ |
||||||
|
|
||||||
|
/* Module lock_set */ |
||||||
|
|
||||||
|
#include <string.h> |
||||||
|
#include <mach/ndr.h> |
||||||
|
#include <mach/boolean.h> |
||||||
|
#include <mach/kern_return.h> |
||||||
|
#include <mach/notify.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/message.h> |
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/port.h> |
||||||
|
|
||||||
|
/* BEGIN MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
#if defined(__has_include) |
||||||
|
#if __has_include(<mach/mig_strncpy_zerofill_support.h>) |
||||||
|
#ifndef USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#define USING_MIG_STRNCPY_ZEROFILL |
||||||
|
#endif |
||||||
|
#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ |
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import)); |
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */ |
||||||
|
#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */ |
||||||
|
#endif /* __has_include */ |
||||||
|
|
||||||
|
/* END MIG_STRNCPY_ZEROFILL CODE */ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef AUTOTEST |
||||||
|
#ifndef FUNCTION_PTR_T |
||||||
|
#define FUNCTION_PTR_T |
||||||
|
typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t); |
||||||
|
typedef struct { |
||||||
|
char *name; |
||||||
|
function_ptr_t function; |
||||||
|
} function_table_entry; |
||||||
|
typedef function_table_entry *function_table_t; |
||||||
|
#endif /* FUNCTION_PTR_T */ |
||||||
|
#endif /* AUTOTEST */ |
||||||
|
|
||||||
|
#ifndef lock_set_MSG_COUNT |
||||||
|
#define lock_set_MSG_COUNT 6 |
||||||
|
#endif /* lock_set_MSG_COUNT */ |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mig.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
|
||||||
|
#ifdef __BeforeMigUserHeader |
||||||
|
__BeforeMigUserHeader |
||||||
|
#endif /* __BeforeMigUserHeader */ |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
|
||||||
|
/* Routine lock_acquire */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_acquire |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine lock_release */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_release |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine lock_try */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_try |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine lock_make_stable */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_make_stable |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine lock_handoff */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_handoff |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
/* Routine lock_handoff_accept */ |
||||||
|
#ifdef mig_external |
||||||
|
mig_external |
||||||
|
#else |
||||||
|
extern |
||||||
|
#endif /* mig_external */ |
||||||
|
kern_return_t lock_handoff_accept |
||||||
|
( |
||||||
|
lock_set_t lock_set, |
||||||
|
int lock_id |
||||||
|
); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
/********************** Caution **************************/ |
||||||
|
/* The following data types should be used to calculate */ |
||||||
|
/* maximum message sizes only. The actual message may be */ |
||||||
|
/* smaller, and the position of the arguments within the */ |
||||||
|
/* message layout may vary from what is presented here. */ |
||||||
|
/* For example, if any of the arguments are variable- */ |
||||||
|
/* sized, and less than the maximum is sent, the data */ |
||||||
|
/* will be packed tight in the actual message to reduce */ |
||||||
|
/* the presence of holes. */ |
||||||
|
/********************** Caution **************************/ |
||||||
|
|
||||||
|
/* typedefs for all requests */ |
||||||
|
|
||||||
|
#ifndef __Request__lock_set_subsystem__defined |
||||||
|
#define __Request__lock_set_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_acquire_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_release_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_try_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_make_stable_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_handoff_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
int lock_id; |
||||||
|
} __Request__lock_handoff_accept_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Request__lock_set_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all requests */ |
||||||
|
|
||||||
|
#ifndef __RequestUnion__lock_set_subsystem__defined |
||||||
|
#define __RequestUnion__lock_set_subsystem__defined |
||||||
|
union __RequestUnion__lock_set_subsystem { |
||||||
|
__Request__lock_acquire_t Request_lock_acquire; |
||||||
|
__Request__lock_release_t Request_lock_release; |
||||||
|
__Request__lock_try_t Request_lock_try; |
||||||
|
__Request__lock_make_stable_t Request_lock_make_stable; |
||||||
|
__Request__lock_handoff_t Request_lock_handoff; |
||||||
|
__Request__lock_handoff_accept_t Request_lock_handoff_accept; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__lock_set_subsystem__defined */ |
||||||
|
/* typedefs for all replies */ |
||||||
|
|
||||||
|
#ifndef __Reply__lock_set_subsystem__defined |
||||||
|
#define __Reply__lock_set_subsystem__defined |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_acquire_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_release_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_try_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_make_stable_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_handoff_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(push, 4) |
||||||
|
#endif |
||||||
|
typedef struct { |
||||||
|
mach_msg_header_t Head; |
||||||
|
NDR_record_t NDR; |
||||||
|
kern_return_t RetCode; |
||||||
|
} __Reply__lock_handoff_accept_t __attribute__((unused)); |
||||||
|
#ifdef __MigPackStructs |
||||||
|
#pragma pack(pop) |
||||||
|
#endif |
||||||
|
#endif /* !__Reply__lock_set_subsystem__defined */ |
||||||
|
|
||||||
|
/* union of all replies */ |
||||||
|
|
||||||
|
#ifndef __ReplyUnion__lock_set_subsystem__defined |
||||||
|
#define __ReplyUnion__lock_set_subsystem__defined |
||||||
|
union __ReplyUnion__lock_set_subsystem { |
||||||
|
__Reply__lock_acquire_t Reply_lock_acquire; |
||||||
|
__Reply__lock_release_t Reply_lock_release; |
||||||
|
__Reply__lock_try_t Reply_lock_try; |
||||||
|
__Reply__lock_make_stable_t Reply_lock_make_stable; |
||||||
|
__Reply__lock_handoff_t Reply_lock_handoff; |
||||||
|
__Reply__lock_handoff_accept_t Reply_lock_handoff_accept; |
||||||
|
}; |
||||||
|
#endif /* !__RequestUnion__lock_set_subsystem__defined */ |
||||||
|
|
||||||
|
#ifndef subsystem_to_name_map_lock_set |
||||||
|
#define subsystem_to_name_map_lock_set \ |
||||||
|
{ "lock_acquire", 617000 },\
|
||||||
|
{ "lock_release", 617001 },\
|
||||||
|
{ "lock_try", 617002 },\
|
||||||
|
{ "lock_make_stable", 617003 },\
|
||||||
|
{ "lock_handoff", 617004 },\
|
||||||
|
{ "lock_handoff_accept", 617005 } |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef __AfterMigUserHeader |
||||||
|
__AfterMigUserHeader |
||||||
|
#endif /* __AfterMigUserHeader */ |
||||||
|
|
||||||
|
#endif /* _lock_set_user_ */ |
||||||
@ -0,0 +1,245 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 1999-2014 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Includes all the types that a normal user |
||||||
|
* of Mach programs should need |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_H_ |
||||||
|
#define _MACH_H_ |
||||||
|
|
||||||
|
#define __MACH30__ |
||||||
|
#define MACH_IPC_FLAVOR UNTYPED |
||||||
|
|
||||||
|
#include <mach/std_types.h> |
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/mach_interface.h> |
||||||
|
#include <mach/mach_port.h> |
||||||
|
#include <mach/mach_init.h> |
||||||
|
#include <mach/mach_host.h> |
||||||
|
#include <mach/thread_switch.h> |
||||||
|
|
||||||
|
#include <mach/rpc.h> /* for compatibility only */ |
||||||
|
#include <mach/mig.h> |
||||||
|
|
||||||
|
#include <mach/mig_errors.h> |
||||||
|
#include <mach/mach_error.h> |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
__BEGIN_DECLS |
||||||
|
/*
|
||||||
|
* Standard prototypes |
||||||
|
*/ |
||||||
|
extern void panic_init(mach_port_t); |
||||||
|
extern void panic(const char *, ...); |
||||||
|
|
||||||
|
extern void safe_gets(char *, |
||||||
|
char *, |
||||||
|
int); |
||||||
|
|
||||||
|
extern void slot_name(cpu_type_t, |
||||||
|
cpu_subtype_t, |
||||||
|
char **, |
||||||
|
char **); |
||||||
|
|
||||||
|
extern void mig_reply_setup(mach_msg_header_t *, |
||||||
|
mach_msg_header_t *); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern void mach_msg_destroy(mach_msg_header_t *); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern mach_msg_return_t mach_msg_receive(mach_msg_header_t *); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern mach_msg_return_t mach_msg_send(mach_msg_header_t *); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern mach_msg_return_t mach_msg_server_once(boolean_t (*) |
||||||
|
(mach_msg_header_t *, |
||||||
|
mach_msg_header_t *), |
||||||
|
mach_msg_size_t, |
||||||
|
mach_port_t, |
||||||
|
mach_msg_options_t); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern mach_msg_return_t mach_msg_server(boolean_t (*) |
||||||
|
(mach_msg_header_t *, |
||||||
|
mach_msg_header_t *), |
||||||
|
mach_msg_size_t, |
||||||
|
mach_port_t, |
||||||
|
mach_msg_options_t); |
||||||
|
|
||||||
|
__WATCHOS_PROHIBITED __TVOS_PROHIBITED |
||||||
|
extern mach_msg_return_t mach_msg_server_importance(boolean_t (*) |
||||||
|
(mach_msg_header_t *, |
||||||
|
mach_msg_header_t *), |
||||||
|
mach_msg_size_t, |
||||||
|
mach_port_t, |
||||||
|
mach_msg_options_t); |
||||||
|
|
||||||
|
/*
|
||||||
|
* Prototypes for compatibility |
||||||
|
*/ |
||||||
|
extern kern_return_t clock_get_res(mach_port_t, |
||||||
|
clock_res_t *); |
||||||
|
extern kern_return_t clock_set_res(mach_port_t, |
||||||
|
clock_res_t); |
||||||
|
|
||||||
|
extern kern_return_t clock_sleep(mach_port_t, |
||||||
|
int, |
||||||
|
mach_timespec_t, |
||||||
|
mach_timespec_t *); |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @group voucher_mach_msg Prototypes |
||||||
|
*/ |
||||||
|
|
||||||
|
#define VOUCHER_MACH_MSG_API_VERSION 20140205 |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @typedef voucher_mach_msg_state_t |
||||||
|
* |
||||||
|
* @abstract |
||||||
|
* Opaque object encapsulating state changed by voucher_mach_msg_adopt(). |
||||||
|
*/ |
||||||
|
typedef struct voucher_mach_msg_state_s *voucher_mach_msg_state_t; |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @const VOUCHER_MACH_MSG_STATE_UNCHANGED |
||||||
|
* |
||||||
|
* @discussion |
||||||
|
* Constant indicating no state change occurred. |
||||||
|
*/ |
||||||
|
#define VOUCHER_MACH_MSG_STATE_UNCHANGED ((voucher_mach_msg_state_t)~0ul) |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @function voucher_mach_msg_set |
||||||
|
* |
||||||
|
* @abstract |
||||||
|
* Change specified message header to contain current mach voucher with a |
||||||
|
* COPY_SEND disposition. |
||||||
|
* Does not change message if it already has non-zero MACH_MSGH_BITS_VOUCHER. |
||||||
|
* |
||||||
|
* @discussion |
||||||
|
* Borrows reference to current thread voucher so message should be sent |
||||||
|
* immediately (without intervening calls that might change that voucher). |
||||||
|
* |
||||||
|
* @param msg |
||||||
|
* The message to modify. |
||||||
|
* |
||||||
|
* @result |
||||||
|
* True if header was changed. |
||||||
|
*/ |
||||||
|
extern boolean_t voucher_mach_msg_set(mach_msg_header_t *msg); |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @function voucher_mach_msg_clear |
||||||
|
* |
||||||
|
* @abstract |
||||||
|
* Removes changes made to specified message header by voucher_mach_msg_set() |
||||||
|
* and any mach_msg() send operations (successful or not). |
||||||
|
* If the message is not needed further, mach_msg_destroy() should be called |
||||||
|
* instead. |
||||||
|
* |
||||||
|
* @discussion |
||||||
|
* Not intended to be called if voucher_mach_msg_set() returned false. |
||||||
|
* Releases reference to message mach voucher if an extra reference was |
||||||
|
* acquired due to an unsuccessful send operation (pseudo-receive). |
||||||
|
* |
||||||
|
* @param msg |
||||||
|
* The message to modify. |
||||||
|
*/ |
||||||
|
extern void voucher_mach_msg_clear(mach_msg_header_t *msg); |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @function voucher_mach_msg_adopt |
||||||
|
* |
||||||
|
* @abstract |
||||||
|
* Adopt the voucher contained in the specified message on the current thread |
||||||
|
* and return the previous thread voucher state. |
||||||
|
* |
||||||
|
* @discussion |
||||||
|
* Ownership of the mach voucher in the message is transferred to the current |
||||||
|
* thread and the message header voucher fields are cleared. |
||||||
|
* |
||||||
|
* @param msg |
||||||
|
* The message to query and modify. |
||||||
|
* |
||||||
|
* @result |
||||||
|
* The previous thread voucher state or VOUCHER_MACH_MSG_STATE_UNCHANGED if no |
||||||
|
* state change occurred. |
||||||
|
*/ |
||||||
|
extern voucher_mach_msg_state_t voucher_mach_msg_adopt(mach_msg_header_t *msg); |
||||||
|
|
||||||
|
/*!
|
||||||
|
* @function voucher_mach_msg_revert |
||||||
|
* |
||||||
|
* @abstract |
||||||
|
* Restore thread voucher state previously modified by voucher_mach_msg_adopt(). |
||||||
|
* |
||||||
|
* @discussion |
||||||
|
* Current thread voucher reference is released. |
||||||
|
* No change to thread voucher state if passed VOUCHER_MACH_MSG_STATE_UNCHANGED. |
||||||
|
* |
||||||
|
* @param state |
||||||
|
* The thread voucher state to restore. |
||||||
|
*/ |
||||||
|
|
||||||
|
extern void voucher_mach_msg_revert(voucher_mach_msg_state_t state); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
#endif /* _MACH_H_ */ |
||||||
@ -0,0 +1,93 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie the |
||||||
|
* rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* File: mach_error.h |
||||||
|
* Author: Douglas Orr, Carnegie Mellon University |
||||||
|
* Date: Mar. 1988 |
||||||
|
* |
||||||
|
* Definitions of routines in mach_error.c |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_ERROR_ |
||||||
|
#define _MACH_ERROR_ 1 |
||||||
|
|
||||||
|
#include <mach/error.h> |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
__BEGIN_DECLS |
||||||
|
char *mach_error_string( |
||||||
|
/*
|
||||||
|
* Returns a string appropriate to the error argument given |
||||||
|
*/ |
||||||
|
mach_error_t error_value |
||||||
|
); |
||||||
|
|
||||||
|
void mach_error( |
||||||
|
/*
|
||||||
|
* Prints an appropriate message on the standard error stream |
||||||
|
*/ |
||||||
|
const char *str, |
||||||
|
mach_error_t error_value |
||||||
|
); |
||||||
|
|
||||||
|
char *mach_error_type( |
||||||
|
/*
|
||||||
|
* Returns a string with the error system, subsystem and code |
||||||
|
*/ |
||||||
|
mach_error_t error_value |
||||||
|
); |
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
#endif /* _MACH_ERROR_ */ |
||||||
@ -0,0 +1,133 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2006 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Abstract: |
||||||
|
* MiG definitions file for Mach exception interface. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_USER |
||||||
|
KernelUser |
||||||
|
#endif |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
|
||||||
|
mach_exc 2405; |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
|
||||||
|
ServerPrefix catch_; |
||||||
|
|
||||||
|
type mach_exception_data_t = array[*:2] of int64_t; |
||||||
|
type exception_type_t = int; |
||||||
|
|
||||||
|
routine mach_exception_raise( |
||||||
|
exception_port : mach_port_t; |
||||||
|
thread : mach_port_t; |
||||||
|
task : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : mach_exception_data_t |
||||||
|
#if MACH_EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if MACH_EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
routine mach_exception_raise_state( |
||||||
|
exception_port : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : mach_exception_data_t, const; |
||||||
|
inout flavor : int; |
||||||
|
old_state : thread_state_t, const; |
||||||
|
out new_state : thread_state_t |
||||||
|
#if MACH_EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if MACH_EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
routine mach_exception_raise_state_identity( |
||||||
|
exception_port : mach_port_t; |
||||||
|
thread : mach_port_t; |
||||||
|
task : mach_port_t; |
||||||
|
exception : exception_type_t; |
||||||
|
code : mach_exception_data_t; |
||||||
|
inout flavor : int; |
||||||
|
old_state : thread_state_t; |
||||||
|
out new_state : thread_state_t |
||||||
|
#if MACH_EXC_SERVER_SECTOKEN |
||||||
|
; |
||||||
|
ServerSecToken stoken : security_token_t |
||||||
|
#endif |
||||||
|
#if MACH_EXC_SERVER_AUDITTOKEN |
||||||
|
; |
||||||
|
ServerAuditToken atoken: audit_token_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
@ -0,0 +1,357 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000-2009 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* File: mach/mach_host.defs |
||||||
|
* |
||||||
|
* Abstract: |
||||||
|
* Mach host operations support. Includes processor allocation and |
||||||
|
* control. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
mach_host 200; |
||||||
|
|
||||||
|
/* |
||||||
|
* Basic types |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
#include <mach/clock_types.defs> |
||||||
|
#include <mach_debug/mach_debug_types.defs> |
||||||
|
|
||||||
|
/* |
||||||
|
* References to host objects are returned by: |
||||||
|
* mach_host_self() - trap |
||||||
|
*/ |
||||||
|
|
||||||
|
/* |
||||||
|
* Return information about this host. |
||||||
|
*/ |
||||||
|
routine host_info( |
||||||
|
host : host_t; |
||||||
|
flavor : host_flavor_t; |
||||||
|
out host_info_out : host_info_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get string describing current kernel version. |
||||||
|
*/ |
||||||
|
routine host_kernel_version( |
||||||
|
host : host_t; |
||||||
|
out kernel_version : kernel_version_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get host page size |
||||||
|
* (compatibility for running old libraries on new kernels - |
||||||
|
* host_page_size() is now a library routine based on constants) |
||||||
|
*/ |
||||||
|
routine _host_page_size( |
||||||
|
host : host_t; |
||||||
|
out out_page_size : vm_size_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Allow pagers to create named entries that point to un-mapped |
||||||
|
* abstract memory object. The named entries are generally mappable |
||||||
|
* and can be subsetted through the mach_make_memory_entry call |
||||||
|
*/ |
||||||
|
routine mach_memory_object_memory_entry( |
||||||
|
host :host_t; |
||||||
|
internal :boolean_t; |
||||||
|
size :vm_size_t; |
||||||
|
permission :vm_prot_t; |
||||||
|
pager :memory_object_t; |
||||||
|
out entry_handle :mach_port_move_send_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Get processor info for all the processors on this host. |
||||||
|
* The returned data is an OOL array of processor info. |
||||||
|
*/ |
||||||
|
routine host_processor_info( |
||||||
|
host : host_t; |
||||||
|
flavor : processor_flavor_t; |
||||||
|
out out_processor_count : natural_t; |
||||||
|
out out_processor_info : processor_info_array_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Return host IO master access port |
||||||
|
*/ |
||||||
|
routine host_get_io_master( |
||||||
|
host : host_t; |
||||||
|
out io_master : io_master_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Get service port for a processor set. |
||||||
|
* Available to all. |
||||||
|
*/ |
||||||
|
routine host_get_clock_service( |
||||||
|
host : host_t; |
||||||
|
clock_id : clock_id_t; |
||||||
|
out clock_serv : clock_serv_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* kernel module interface (obsolete as of SnowLeopard) |
||||||
|
* see mach/kmod.h |
||||||
|
*/ |
||||||
|
/* kmod_ MIG calls now return KERN_NOT_SUPPORTED on PPC/i386/x86_64. */ |
||||||
|
routine kmod_get_info( |
||||||
|
host : host_t; |
||||||
|
out modules : kmod_args_t); |
||||||
|
|
||||||
|
|
||||||
|
skip; /* was host_zone_info */ |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about the global VP table. |
||||||
|
* Only supported in MACH_VM_DEBUG kernels, |
||||||
|
* otherwise returns KERN_FAILURE. |
||||||
|
*/ |
||||||
|
routine host_virtual_physical_table_info( |
||||||
|
host : host_t; |
||||||
|
out info : hash_info_bucket_array_t, |
||||||
|
Dealloc); |
||||||
|
|
||||||
|
|
||||||
|
skip; /* was host_ipc_hash_info */ |
||||||
|
skip; /* was enable_bluebox */ |
||||||
|
skip; /* was disable_bluebox */ |
||||||
|
|
||||||
|
/* |
||||||
|
* JMM - Keep processor_set related items at the end for easy |
||||||
|
* removal. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Get default processor set for host. |
||||||
|
*/ |
||||||
|
routine processor_set_default( |
||||||
|
host : host_t; |
||||||
|
out default_set : processor_set_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Create new processor set. Returns real port for manipulations, |
||||||
|
* and name port for obtaining information. |
||||||
|
*/ |
||||||
|
routine processor_set_create( |
||||||
|
host : host_t; |
||||||
|
out new_set : processor_set_t; |
||||||
|
out new_name : processor_set_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Temporary interfaces for conversion to 64 bit data path |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_memory_object_memory_entry_64( |
||||||
|
host :host_t; |
||||||
|
internal :boolean_t; |
||||||
|
size :memory_object_size_t; |
||||||
|
permission :vm_prot_t; |
||||||
|
pager :memory_object_t; |
||||||
|
out entry_handle :mach_port_move_send_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Return statistics from this host. |
||||||
|
*/ |
||||||
|
routine |
||||||
|
#ifdef KERNEL_SERVER |
||||||
|
host_statistics_from_user( |
||||||
|
#else |
||||||
|
host_statistics( |
||||||
|
#endif |
||||||
|
host_priv : host_t; |
||||||
|
flavor : host_flavor_t; |
||||||
|
out host_info_out : host_info_t, CountInOut); |
||||||
|
|
||||||
|
routine host_request_notification( |
||||||
|
host : host_t; |
||||||
|
notify_type : host_flavor_t; |
||||||
|
notify_port : mach_port_make_send_once_t); |
||||||
|
|
||||||
|
routine host_lockgroup_info( |
||||||
|
host : host_t; |
||||||
|
out lockgroup_info : lockgroup_info_array_t, |
||||||
|
Dealloc); |
||||||
|
|
||||||
|
/* |
||||||
|
* Return 64-bit statistics from this host. |
||||||
|
*/ |
||||||
|
routine |
||||||
|
#ifdef KERNEL_SERVER |
||||||
|
host_statistics64_from_user( |
||||||
|
#else |
||||||
|
host_statistics64( |
||||||
|
#endif |
||||||
|
host_priv : host_t; |
||||||
|
flavor : host_flavor_t; |
||||||
|
out host_info64_out : host_info64_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about the memory allocation zones. |
||||||
|
* Data returned is compatible with various caller and kernel |
||||||
|
* address space sizes. |
||||||
|
*/ |
||||||
|
routine mach_zone_info( |
||||||
|
host : host_priv_t; |
||||||
|
out names : mach_zone_name_array_t, |
||||||
|
Dealloc; |
||||||
|
out info : mach_zone_info_array_t, |
||||||
|
Dealloc); |
||||||
|
|
||||||
|
skip; |
||||||
|
|
||||||
|
/* |
||||||
|
* Create a new voucher by running a series of commands against |
||||||
|
* <key, previous-voucher> pairs of resource attributes. |
||||||
|
*/ |
||||||
|
#if !KERNEL && !LIBSYSCALL_INTERFACE |
||||||
|
routine _kernelrpc_host_create_mach_voucher( |
||||||
|
#else |
||||||
|
routine host_create_mach_voucher( |
||||||
|
#endif |
||||||
|
host : host_t; |
||||||
|
recipes : mach_voucher_attr_raw_recipe_array_t; |
||||||
|
out voucher : ipc_voucher_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Register a resource manager with the kernel. A new key is selected. |
||||||
|
*/ |
||||||
|
routine host_register_mach_voucher_attr_manager( |
||||||
|
host : host_t; |
||||||
|
attr_manager : mach_voucher_attr_manager_t; |
||||||
|
default_value : mach_voucher_attr_value_handle_t; |
||||||
|
out new_key : mach_voucher_attr_key_t; |
||||||
|
out new_attr_control: ipc_voucher_attr_control_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Register a resource manager (with a well-known key value) with the kernel. |
||||||
|
*/ |
||||||
|
routine host_register_well_known_mach_voucher_attr_manager( |
||||||
|
host : host_t; |
||||||
|
attr_manager : mach_voucher_attr_manager_t; |
||||||
|
default_value : mach_voucher_attr_value_handle_t; |
||||||
|
key : mach_voucher_attr_key_t; |
||||||
|
out new_attr_control: ipc_voucher_attr_control_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Update the global ATM diagnostic flag, readable from the commpage |
||||||
|
*/ |
||||||
|
routine host_set_atm_diagnostic_flag( |
||||||
|
host : host_t; |
||||||
|
in diagnostic_flag : uint32_t); |
||||||
|
|
||||||
|
#if !KERNEL && LIBSYSCALL_INTERFACE |
||||||
|
routine host_get_atm_diagnostic_flag( |
||||||
|
host : host_t; |
||||||
|
out diagnostic_flag : uint32_t); |
||||||
|
#else |
||||||
|
skip; |
||||||
|
#endif |
||||||
|
|
||||||
|
routine mach_memory_info( |
||||||
|
host : host_priv_t; |
||||||
|
out names : mach_zone_name_array_t, |
||||||
|
Dealloc; |
||||||
|
out info : mach_zone_info_array_t, |
||||||
|
Dealloc; |
||||||
|
out memory_info : mach_memory_info_array_t, |
||||||
|
Dealloc); |
||||||
|
|
||||||
|
/* |
||||||
|
* Update the global multiuser flags, readable from the commpage |
||||||
|
*/ |
||||||
|
routine host_set_multiuser_config_flags( |
||||||
|
host_priv : host_priv_t; |
||||||
|
in multiuser_flags : uint32_t); |
||||||
|
|
||||||
|
#if !KERNEL && LIBSYSCALL_INTERFACE |
||||||
|
routine host_get_multiuser_config_flags( |
||||||
|
host : host_t; |
||||||
|
out multiuser_flags : uint32_t); |
||||||
|
#else |
||||||
|
skip; |
||||||
|
#endif // !KERNEL && LIBSYSCALL_INTERFACE |
||||||
|
|
||||||
|
#if !KERNEL && LIBSYSCALL_INTERFACE |
||||||
|
routine host_check_multiuser_mode( |
||||||
|
host : host_t; |
||||||
|
out multiuser_mode : uint32_t); |
||||||
|
#else |
||||||
|
skip; |
||||||
|
#endif // !KERNEL && LIBSYSCALL_INTERFACE |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about a specific zone. |
||||||
|
* The zone name is passed in via the argument name, |
||||||
|
* info returns the zone info. |
||||||
|
*/ |
||||||
|
routine mach_zone_info_for_zone( |
||||||
|
host : host_priv_t; |
||||||
|
name : mach_zone_name_t; |
||||||
|
out info : mach_zone_info_t); |
||||||
|
|
||||||
|
skip; |
||||||
|
|
||||||
|
skip; |
||||||
|
|
||||||
|
skip; |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,110 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987,1986 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* Items provided by the Mach environment initialization. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_INIT_ |
||||||
|
#define _MACH_INIT_ 1 |
||||||
|
|
||||||
|
#include <mach/mach_types.h> |
||||||
|
#include <mach/vm_page_size.h> |
||||||
|
#include <stdarg.h> |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* Kernel-related ports; how a task/thread controls itself |
||||||
|
*/ |
||||||
|
|
||||||
|
__BEGIN_DECLS |
||||||
|
extern mach_port_t mach_host_self(void); |
||||||
|
extern mach_port_t mach_thread_self(void); |
||||||
|
extern kern_return_t host_page_size(host_t, vm_size_t *); |
||||||
|
|
||||||
|
extern mach_port_t mach_task_self_; |
||||||
|
#define mach_task_self() mach_task_self_ |
||||||
|
#define current_task() mach_task_self() |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
#include <mach/mach_traps.h> |
||||||
|
__BEGIN_DECLS |
||||||
|
|
||||||
|
/*
|
||||||
|
* Other important ports in the Mach user environment |
||||||
|
*/ |
||||||
|
|
||||||
|
extern mach_port_t bootstrap_port; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Where these ports occur in the "mach_ports_register" |
||||||
|
* collection... only servers or the runtime library need know. |
||||||
|
*/ |
||||||
|
|
||||||
|
#define NAME_SERVER_SLOT 0 |
||||||
|
#define ENVIRONMENT_SLOT 1 |
||||||
|
#define SERVICE_SLOT 2 |
||||||
|
|
||||||
|
#define MACH_PORTS_SLOTS_USED 3 |
||||||
|
|
||||||
|
/*
|
||||||
|
* fprintf_stderr uses vprintf_stderr_func to produce |
||||||
|
* error messages, this can be overridden by a user |
||||||
|
* application to point to a user-specified output function |
||||||
|
*/ |
||||||
|
extern int (*vprintf_stderr_func)(const char *format, va_list ap); |
||||||
|
|
||||||
|
__END_DECLS |
||||||
|
|
||||||
|
#endif /* _MACH_INIT_ */ |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Copyright (C) Apple Computer 1998 |
||||||
|
* ALL Rights Reserved |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* This file represents the interfaces that used to come |
||||||
|
* from creating the user headers from the mach.defs file. |
||||||
|
* Because mach.defs was decomposed, this file now just |
||||||
|
* wraps up all the new interface headers generated from |
||||||
|
* each of the new .defs resulting from that decomposition. |
||||||
|
*/ |
||||||
|
#ifndef _MACH_INTERFACE_H_ |
||||||
|
#define _MACH_INTERFACE_H_ |
||||||
|
|
||||||
|
#include <mach/clock_priv.h> |
||||||
|
#include <mach/host_priv.h> |
||||||
|
#include <mach/host_security.h> |
||||||
|
#include <mach/lock_set.h> |
||||||
|
#include <mach/processor.h> |
||||||
|
#include <mach/processor_set.h> |
||||||
|
#include <mach/semaphore.h> |
||||||
|
#include <mach/task.h> |
||||||
|
#include <mach/thread_act.h> |
||||||
|
#include <mach/vm_map.h> |
||||||
|
|
||||||
|
#endif /* _MACH_INTERFACE_H_ */ |
||||||
@ -0,0 +1,76 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* File: mach/mach_param.h |
||||||
|
* Author: Avadis Tevanian, Jr., Michael Wayne Young |
||||||
|
* Date: 1986 |
||||||
|
* |
||||||
|
* Mach system sizing parameters |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_MACH_PARAM_H_ |
||||||
|
#define _MACH_MACH_PARAM_H_ |
||||||
|
|
||||||
|
/* Number of "registered" ports */ |
||||||
|
|
||||||
|
#define TASK_PORT_REGISTER_MAX 3 |
||||||
|
|
||||||
|
/* Number of watchport for task */ |
||||||
|
#define TASK_MAX_WATCHPORT_COUNT 32 |
||||||
|
|
||||||
|
#endif /* _MACH_MACH_PARAM_H_ */ |
||||||
@ -0,0 +1,676 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file. |
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* @OSF_FREE_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* Mach Operating System |
||||||
|
* Copyright (c) 1991,1990,1989 Carnegie Mellon University |
||||||
|
* All Rights Reserved. |
||||||
|
* |
||||||
|
* Permission to use, copy, modify and distribute this software and its |
||||||
|
* documentation is hereby granted, provided that both the copyright |
||||||
|
* notice and this permission notice appear in all copies of the |
||||||
|
* software, derivative works or modified versions, and any portions |
||||||
|
* thereof, and that both notices appear in supporting documentation. |
||||||
|
* |
||||||
|
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" |
||||||
|
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR |
||||||
|
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
||||||
|
* |
||||||
|
* Carnegie Mellon requests users of this software to return to |
||||||
|
* |
||||||
|
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU |
||||||
|
* School of Computer Science |
||||||
|
* Carnegie Mellon University |
||||||
|
* Pittsburgh PA 15213-3890 |
||||||
|
* |
||||||
|
* any improvements or extensions that they make and grant Carnegie Mellon |
||||||
|
* the rights to redistribute these changes. |
||||||
|
*/ |
||||||
|
/* |
||||||
|
*/ |
||||||
|
/* |
||||||
|
* File: mach/mach_port.defs |
||||||
|
* Author: Rich Draves |
||||||
|
* |
||||||
|
* Exported kernel calls. |
||||||
|
*/ |
||||||
|
|
||||||
|
subsystem |
||||||
|
#if KERNEL_SERVER |
||||||
|
KernelServer |
||||||
|
#endif /* KERNEL_SERVER */ |
||||||
|
mach_port 3200; |
||||||
|
|
||||||
|
#if !KERNEL && !LIBSYSCALL_INTERFACE |
||||||
|
UserPrefix _kernelrpc_; |
||||||
|
#endif |
||||||
|
|
||||||
|
#include <mach/std_types.defs> |
||||||
|
#include <mach/mach_types.defs> |
||||||
|
#include <mach_debug/mach_debug_types.defs> |
||||||
|
|
||||||
|
type kobject_description_t = c_string[*:512]; |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns the set of port and port set names |
||||||
|
* to which the target task has access, along with |
||||||
|
* the type (set or port) for each name. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_names( |
||||||
|
task : ipc_space_t; |
||||||
|
out names : mach_port_name_array_t; |
||||||
|
out types : mach_port_type_array_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns the type (set or port) for the port name |
||||||
|
* within the target task. Also indicates whether |
||||||
|
* there is a dead-name request for the name. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_type( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out ptype : mach_port_type_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Changes the name by which a port (or port set) is known to |
||||||
|
* the target task. The new name can't be in use. The |
||||||
|
* old name becomes available for recycling. |
||||||
|
* |
||||||
|
* This interface is OBSOLETE and will always |
||||||
|
* return KERN_NOT_SUPPORTED. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_rename( |
||||||
|
task : ipc_space_t; |
||||||
|
old_name : mach_port_name_t; |
||||||
|
new_name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Allocates the specified kind of object, with the given name. |
||||||
|
* The right must be one of |
||||||
|
* MACH_PORT_RIGHT_RECEIVE |
||||||
|
* MACH_PORT_RIGHT_PORT_SET |
||||||
|
* MACH_PORT_RIGHT_DEAD_NAME |
||||||
|
* New port sets are empty. New ports don't have any |
||||||
|
* send/send-once rights or queued messages. The make-send |
||||||
|
* count is zero and their queue limit is MACH_PORT_QLIMIT_DEFAULT. |
||||||
|
* New sets, ports, and dead names have one user reference. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_allocate_name( |
||||||
|
task : ipc_space_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Allocates the specified kind of object. |
||||||
|
* The right must be one of |
||||||
|
* MACH_PORT_RIGHT_RECEIVE |
||||||
|
* MACH_PORT_RIGHT_PORT_SET |
||||||
|
* MACH_PORT_RIGHT_DEAD_NAME |
||||||
|
* Like port_allocate_name, but the kernel picks a name. |
||||||
|
* It can use any name not associated with a right. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_allocate( |
||||||
|
task : ipc_space_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
out name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Destroys all rights associated with the name and makes it |
||||||
|
* available for recycling immediately. The name can be a |
||||||
|
* port (possibly with multiple user refs), a port set, or |
||||||
|
* a dead name (again, with multiple user refs). |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_destroy( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Releases one send/send-once/dead-name user ref. |
||||||
|
* Just like mach_port_mod_refs -1, but deduces the |
||||||
|
* correct type of right. This allows a user task |
||||||
|
* to release a ref for a port without worrying |
||||||
|
* about whether the port has died or not. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_deallocate( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* A port set always has one user ref. |
||||||
|
* A send-once right always has one user ref. |
||||||
|
* A dead name always has one or more user refs. |
||||||
|
* A send right always has one or more user refs. |
||||||
|
* A receive right always has one user ref. |
||||||
|
* The right must be one of |
||||||
|
* MACH_PORT_RIGHT_RECEIVE |
||||||
|
* MACH_PORT_RIGHT_PORT_SET |
||||||
|
* MACH_PORT_RIGHT_DEAD_NAME |
||||||
|
* MACH_PORT_RIGHT_SEND |
||||||
|
* MACH_PORT_RIGHT_SEND_ONCE |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_get_refs( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
out refs : mach_port_urefs_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* The delta is a signed change to the task's |
||||||
|
* user ref count for the right. Only dead names |
||||||
|
* and send rights can have a positive delta. |
||||||
|
* The resulting user ref count can't be negative. |
||||||
|
* If it is zero, the right is deallocated. |
||||||
|
* If the name isn't a composite right, it becomes |
||||||
|
* available for recycling. The right must be one of |
||||||
|
* MACH_PORT_RIGHT_RECEIVE |
||||||
|
* MACH_PORT_RIGHT_PORT_SET |
||||||
|
* MACH_PORT_RIGHT_DEAD_NAME |
||||||
|
* MACH_PORT_RIGHT_SEND |
||||||
|
* MACH_PORT_RIGHT_SEND_ONCE |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_mod_refs( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
delta : mach_port_delta_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Peek at the message queue for the specified receive |
||||||
|
* right and return info about the message with the |
||||||
|
* sequence number matching the input. If zero is |
||||||
|
* specified as the seqno, the first message in the |
||||||
|
* queue will be peeked. |
||||||
|
* |
||||||
|
* Only the following trailer types are currently supported: |
||||||
|
* MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0) |
||||||
|
* |
||||||
|
* or'ed with one of these element types: |
||||||
|
* MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_NULL) |
||||||
|
* MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_SEQNO) |
||||||
|
* MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_SENDER) |
||||||
|
* MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT) |
||||||
|
*/ |
||||||
|
routine mach_port_peek( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
trailer_type : mach_msg_trailer_type_t; |
||||||
|
inout request_seqnop : mach_port_seqno_t; |
||||||
|
out msg_sizep : mach_msg_size_t; |
||||||
|
out msg_idp : mach_msg_id_t; |
||||||
|
out trailer_infop : mach_msg_trailer_info_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Only valid for receive rights. |
||||||
|
* Sets the make-send count for the port. |
||||||
|
*/ |
||||||
|
routine mach_port_set_mscount( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
mscount : mach_port_mscount_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Only valid for port sets. Returns a list of |
||||||
|
* the members. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_get_set_status( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out members : mach_port_name_array_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Puts the member port (the task must have receive rights) |
||||||
|
* into the after port set. If the port is already a member |
||||||
|
* of any set(s), it is atomically removed from those sets as |
||||||
|
* part of this operation. (If after is MACH_PORT_NULL, the |
||||||
|
* port is still removed from all current sets). |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_move_member( |
||||||
|
task : ipc_space_t; |
||||||
|
member : mach_port_name_t; |
||||||
|
after : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Requests a notification from the kernel. The request |
||||||
|
* must supply the send-once right which is used for |
||||||
|
* the notification. If a send-once right was previously |
||||||
|
* registered, it is returned. The msgid must be one of: |
||||||
|
* MACH_NOTIFY_PORT_DESTROYED (receive rights) |
||||||
|
* MACH_NOTIFY_DEAD_NAME (send/receive/send-once rights) |
||||||
|
* MACH_NOTIFY_SEND_POSSIBLE (send/receive/send-once rights) |
||||||
|
* MACH_NOTIFY_NO_SENDERS (receive rights) |
||||||
|
* |
||||||
|
* The sync value specifies whether a notification should |
||||||
|
* get sent immediately, if appropriate. The exact meaning |
||||||
|
* depends on the notification: |
||||||
|
* MACH_NOTIFY_PORT_DESTROYED: must be zero. |
||||||
|
* MACH_NOTIFY_DEAD_NAME: if non-zero, then name can be dead, |
||||||
|
* and the notification gets sent immediately. |
||||||
|
* If zero, then name can't be dead. |
||||||
|
* MACH_NOTIFY_SEND_POSSIBLE: if non-zero, will generate a send- |
||||||
|
* possible notification as soon as it is possible to send |
||||||
|
* to the port. If zero, will generate a send-possible |
||||||
|
* notification only after a subsequent failed send |
||||||
|
* (with MACH_SEND_NOTIFY option to mach_msg call). Can |
||||||
|
* generate a dead-name notification if name is already dead |
||||||
|
* or becomes dead before a send-possible notification fires. |
||||||
|
* MACH_NOTIFY_NO_SENDERS: the notification gets sent |
||||||
|
* immediately if the current mscount is greater |
||||||
|
* than or equal to the sync value and there are no |
||||||
|
* extant send rights. |
||||||
|
* |
||||||
|
* If the name is deleted before a successfully registered notification |
||||||
|
* is delivered, it is replaced with a port-deleted notification. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_request_notification( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
msgid : mach_msg_id_t; |
||||||
|
sync : mach_port_mscount_t; |
||||||
|
notify : mach_port_send_once_t; |
||||||
|
out previous : mach_port_move_send_once_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Inserts the specified rights into the target task, |
||||||
|
* using the specified name. If inserting send/receive |
||||||
|
* rights and the task already has send/receive rights |
||||||
|
* for the port, then the names must agree. In any case, |
||||||
|
* the task gains a user ref for the port. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_insert_right( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
poly : mach_port_poly_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns the specified right for the named port |
||||||
|
* in the target task, extracting that right from |
||||||
|
* the target task. The target task loses a user |
||||||
|
* ref and the name may be available for recycling. |
||||||
|
* msgt_name must be one of |
||||||
|
* MACH_MSG_TYPE_MOVE_RECEIVE |
||||||
|
* MACH_MSG_TYPE_COPY_SEND |
||||||
|
* MACH_MSG_TYPE_MAKE_SEND |
||||||
|
* MACH_MSG_TYPE_MOVE_SEND |
||||||
|
* MACH_MSG_TYPE_MAKE_SEND_ONCE |
||||||
|
* MACH_MSG_TYPE_MOVE_SEND_ONCE |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_extract_right( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
msgt_name : mach_msg_type_name_t; |
||||||
|
out poly : mach_port_poly_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Only valid for receive rights. |
||||||
|
* Sets the sequence number for the port. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_set_seqno( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
seqno : mach_port_seqno_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about a port. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_get_attributes( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
flavor : mach_port_flavor_t; |
||||||
|
out port_info_out : mach_port_info_t, CountInOut); |
||||||
|
|
||||||
|
/* |
||||||
|
* Set attributes of a port |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_set_attributes( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
flavor : mach_port_flavor_t; |
||||||
|
port_info : mach_port_info_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Allocates the specified kind of object, qos version. |
||||||
|
* The right must be |
||||||
|
* MACH_PORT_RIGHT_RECEIVE |
||||||
|
* Like port_allocate_name, but the kernel picks a name. |
||||||
|
* It can use any name not associated with a right. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_allocate_qos( |
||||||
|
task : ipc_space_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
inout qos : mach_port_qos_t; |
||||||
|
out name : mach_port_name_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Generic interface to allocation various kinds of ports. |
||||||
|
* Should never be called directly by users (at least not |
||||||
|
* unless they are exceedingly masochistic). |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_allocate_full( |
||||||
|
task : ipc_space_t; |
||||||
|
right : mach_port_right_t; |
||||||
|
proto : mach_port_t; |
||||||
|
inout qos : mach_port_qos_t; |
||||||
|
inout name : mach_port_name_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Pre-expand task port name space. |
||||||
|
*/ |
||||||
|
routine task_set_port_space( |
||||||
|
task : ipc_space_t; |
||||||
|
table_entries : int); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Returns the exact number of extant send rights |
||||||
|
* for the given receive right. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_get_srights( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out srights : mach_port_rights_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about an IPC space. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_space_info( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
out space_info : ipc_info_space_t; |
||||||
|
out table_info : ipc_info_name_array_t; |
||||||
|
out tree_info : ipc_info_tree_name_array_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns information about the dead-name requests |
||||||
|
* registered with the named receive right. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_dnrequest_info( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out dnr_total : unsigned; /* total size of table */ |
||||||
|
out dnr_used : unsigned); /* amount used */ |
||||||
|
|
||||||
|
/* |
||||||
|
* Return the type and address of the kernel object |
||||||
|
* that the given send/receive right represents. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
* |
||||||
|
* This interface is DEPRECATED in favor of the new |
||||||
|
* mach_port_kernel_object64() call (see below). |
||||||
|
*/ |
||||||
|
routine mach_port_kernel_object( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out object_type : unsigned; |
||||||
|
out object_addr : unsigned); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Inserts the specified rights into the portset identified |
||||||
|
* by the <task, pset> pair. The results of passing in the |
||||||
|
* Poly argument via the supplied disposition must yield a |
||||||
|
* receive right. |
||||||
|
* |
||||||
|
* If the <task,pset> pair does not represent a valid portset |
||||||
|
* KERN_INVALID_RIGHT is returned. |
||||||
|
* |
||||||
|
* If the passed in name argument does not represent a receive |
||||||
|
* right, KERN_INVALID_CAPABILITY will be returned. |
||||||
|
* |
||||||
|
* If the port represented by the receive right is already in |
||||||
|
* the portset, KERN_ALREADY_IN_SET is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_insert_member( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
pset : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Extracts the specified right from the named portset |
||||||
|
* in the target task. |
||||||
|
* the target task. The target task loses a user |
||||||
|
* ref and the name may be available for recycling. |
||||||
|
* msgt_name must be one of |
||||||
|
* MACH_MSG_TYPE_MOVE_RECEIVE |
||||||
|
* MACH_MSG_TYPE_COPY_SEND |
||||||
|
* MACH_MSG_TYPE_MAKE_SEND |
||||||
|
* MACH_MSG_TYPE_MOVE_SEND |
||||||
|
* MACH_MSG_TYPE_MAKE_SEND_ONCE |
||||||
|
* MACH_MSG_TYPE_MOVE_SEND_ONCE |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_extract_member( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
pset : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Only valid for receive rights. |
||||||
|
* Gets the context pointer for the port. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_get_context( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
out context : mach_port_context_t |
||||||
|
#else |
||||||
|
out context : mach_vm_address_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* |
||||||
|
* Only valid for receive rights. |
||||||
|
* Sets the context pointer for the port. |
||||||
|
*/ |
||||||
|
|
||||||
|
routine mach_port_set_context( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
context : mach_port_context_t |
||||||
|
#else |
||||||
|
context : mach_vm_address_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* |
||||||
|
* Return the type and address of the kernel object |
||||||
|
* that the given send/receive right represents. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_kobject( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out object_type : natural_t; |
||||||
|
out object_addr : mach_vm_address_t); |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
* Constructs a right based on the options passed |
||||||
|
* in. Also allows guarding the port as one of the |
||||||
|
* options if the requested right is a receive |
||||||
|
* right. |
||||||
|
*/ |
||||||
|
routine mach_port_construct( |
||||||
|
task : ipc_space_t; |
||||||
|
options : mach_port_options_ptr_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
context : mach_port_context_t; |
||||||
|
#else |
||||||
|
context : uint64_t; |
||||||
|
#endif |
||||||
|
out name : mach_port_name_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Destroys a mach port using the guard provided |
||||||
|
* for guarded ports. Also reduces the user ref |
||||||
|
* count for send rights as specified by srdelta. |
||||||
|
*/ |
||||||
|
routine mach_port_destruct( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
srdelta : mach_port_delta_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
guard : mach_port_context_t |
||||||
|
#else |
||||||
|
guard : uint64_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* |
||||||
|
* Guard an already existing port. Allows guarding |
||||||
|
* receive rights only. Uses the context field in the |
||||||
|
* port structure to store the guard. |
||||||
|
*/ |
||||||
|
routine mach_port_guard( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
guard : mach_port_context_t; |
||||||
|
#else |
||||||
|
guard : uint64_t; |
||||||
|
#endif |
||||||
|
strict : boolean_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Unguard a port guarded previously. For unguarded ports |
||||||
|
* or incorrect guards passed in it raises an exception |
||||||
|
* indicating guarding misbehavior. |
||||||
|
*/ |
||||||
|
routine mach_port_unguard( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
guard : mach_port_context_t |
||||||
|
#else |
||||||
|
guard : uint64_t |
||||||
|
#endif |
||||||
|
); |
||||||
|
|
||||||
|
/* |
||||||
|
* Returns basic information about an IPC space. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_space_basic_info( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
out basic_info : ipc_info_space_basic_t); |
||||||
|
|
||||||
|
#if KERNEL || !LIBSYSCALL_INTERFACE |
||||||
|
/* |
||||||
|
* Returns sync ipc turnstile link status |
||||||
|
* for special reply ports. |
||||||
|
*/ |
||||||
|
routine mach_port_special_reply_port_reset_link( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out srp_lost_link : boolean_t); |
||||||
|
#else |
||||||
|
skip; |
||||||
|
#endif |
||||||
|
|
||||||
|
/* |
||||||
|
* Guard an already existing port. Allows guarding |
||||||
|
* receive rights only. Uses the context field in the |
||||||
|
* port structure to store the guard. |
||||||
|
*/ |
||||||
|
routine mach_port_guard_with_flags( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
guard : mach_port_context_t; |
||||||
|
#else |
||||||
|
guard : uint64_t; |
||||||
|
#endif |
||||||
|
flags : uint64_t); |
||||||
|
|
||||||
|
/* |
||||||
|
* Swap guard value of an existing guarded port. Works |
||||||
|
* only if it is not a strict guard. |
||||||
|
*/ |
||||||
|
routine mach_port_swap_guard( |
||||||
|
task : ipc_space_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
old_guard : mach_port_context_t; |
||||||
|
#else |
||||||
|
old_guard : uint64_t; |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef LIBSYSCALL_INTERFACE |
||||||
|
new_guard : mach_port_context_t); |
||||||
|
#else |
||||||
|
new_guard : uint64_t); |
||||||
|
#endif |
||||||
|
|
||||||
|
/* |
||||||
|
* Return the type and address of the kernel object |
||||||
|
* that the given send/receive right represents. |
||||||
|
* This call is only valid on MACH_IPC_DEBUG kernels. |
||||||
|
* Otherwise, KERN_FAILURE is returned. |
||||||
|
*/ |
||||||
|
routine mach_port_kobject_description( |
||||||
|
task : ipc_space_inspect_t; |
||||||
|
name : mach_port_name_t; |
||||||
|
out object_type : natural_t; |
||||||
|
out object_addr : mach_vm_address_t; |
||||||
|
out description : kobject_description_t); |
||||||
|
|
||||||
|
/* vim: set ft=c : */ |
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,37 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Apple Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
#ifndef __MACH_RIGHT_H |
||||||
|
#define __MACH_RIGHT_H |
||||||
|
|
||||||
|
#include <sys/cdefs.h> |
||||||
|
|
||||||
|
#if __has_include(<mach/mach_right_private.h>) |
||||||
|
#include <mach/mach_right_private.h> |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif // __MACH_RIGHT_H
|
||||||
@ -0,0 +1,37 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@ |
||||||
|
* |
||||||
|
* This file contains Original Code and/or Modifications of Original Code |
||||||
|
* as defined in and that are subject to the Apple Public Source License |
||||||
|
* Version 2.0 (the 'License'). You may not use this file except in |
||||||
|
* compliance with the License. The rights granted to you under the License |
||||||
|
* may not be used to create, or enable the creation or redistribution of, |
||||||
|
* unlawful or unlicensed copies of an Apple operating system, or to |
||||||
|
* circumvent, violate, or enable the circumvention or violation of, any |
||||||
|
* terms of an Apple operating system software license agreement. |
||||||
|
* |
||||||
|
* Please obtain a copy of the License at |
||||||
|
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||||
|
* |
||||||
|
* The Original Code and all software distributed under the License are |
||||||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
||||||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
||||||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
||||||
|
* Please see the License for the specific language governing rights and |
||||||
|
* limitations under the License. |
||||||
|
* |
||||||
|
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@ |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* @OSF_COPYRIGHT@ |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef _MACH_MACH_SYSCALLS_H_ |
||||||
|
#define _MACH_MACH_SYSCALLS_H_ |
||||||
|
|
||||||
|
#include <mach/mach_traps.h> |
||||||
|
|
||||||
|
#endif /* _MACH_MACH_SYSCALLS_H_ */ |
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue