diff --git a/.flake8 b/.flake8 index 3d6f32476..34bb7118a 100644 --- a/.flake8 +++ b/.flake8 @@ -160,5 +160,4 @@ exclude = components/wifi_provisioning/python/wifi_constants_pb2.py, examples/provisioning/custom_config/components/custom_provisioning/python/custom_config_pb2.py, # temporary list (should be empty) - tools/esp_app_trace/pylibelf, tools/mass_mfg/mfg_gen.py, diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index da7db2a35..84786cfd3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -643,6 +643,18 @@ test_espcoredump: - cd components/espcoredump/test/ - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test_espcoredump.sh +test_sysview_trace_proc: + <<: *host_test_template + artifacts: + when: on_failure + paths: + - tools/esp_app_trace/test/sysview/output + - tools/esp_app_trace/test/sysview/.coverage + expire_in: 1 week + script: + - cd ${IDF_PATH}/tools/esp_app_trace/test/sysview + - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test.sh + push_to_github: stage: deploy image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG diff --git a/docs/en/get-started-cmake/linux-setup-scratch.rst b/docs/en/get-started-cmake/linux-setup-scratch.rst index e36f9c983..a95c50284 100644 --- a/docs/en/get-started-cmake/linux-setup-scratch.rst +++ b/docs/en/get-started-cmake/linux-setup-scratch.rst @@ -15,15 +15,15 @@ To compile with ESP-IDF you need to get the following packages: - CentOS 7:: - sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache + sudo yum install git wget ncurses-devel flex bison gperf python pyserial python-pyelftools cmake ninja-build ccache - Ubuntu and Debian:: - sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache + sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools cmake ninja ccache .. note:: CMake version 3.5 or newer is required for use with ESP-IDF. Older Linux distributions may require updating, enabling of a "backports" repository, or installing of a "cmake3" package rather than "cmake". diff --git a/docs/en/get-started-cmake/linux-setup.rst b/docs/en/get-started-cmake/linux-setup.rst index 8418378b2..1edca98b7 100644 --- a/docs/en/get-started-cmake/linux-setup.rst +++ b/docs/en/get-started-cmake/linux-setup.rst @@ -13,15 +13,15 @@ To compile with ESP-IDF you need to get the following packages: - CentOS 7:: - sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache + sudo yum install git wget ncurses-devel flex bison gperf python pyserial python-pyelftools cmake ninja-build ccache - Ubuntu and Debian:: - sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache + sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools cmake ninja ccache .. note:: CMake version 3.5 or newer is required for use with ESP-IDF. Older Linux distributions may require updating, enabling of a "backports" repository, or installing of a "cmake3" package rather than "cmake". diff --git a/docs/en/get-started/linux-setup-scratch.rst b/docs/en/get-started/linux-setup-scratch.rst index 71028e64d..395458153 100644 --- a/docs/en/get-started/linux-setup-scratch.rst +++ b/docs/en/get-started/linux-setup-scratch.rst @@ -14,11 +14,11 @@ To compile with ESP-IDF you need to get the following packages: - Ubuntu and Debian:: - sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing + sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools .. note:: diff --git a/docs/en/get-started/linux-setup.rst b/docs/en/get-started/linux-setup.rst index 564fa63fa..7484b4c62 100644 --- a/docs/en/get-started/linux-setup.rst +++ b/docs/en/get-started/linux-setup.rst @@ -14,11 +14,11 @@ To compile with ESP-IDF you need to get the following packages: - Ubuntu and Debian:: - sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing + sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools .. note:: diff --git a/docs/zh_CN/get-started-cmake/linux-setup-scratch.rst b/docs/zh_CN/get-started-cmake/linux-setup-scratch.rst index 05bcc281d..992708778 100644 --- a/docs/zh_CN/get-started-cmake/linux-setup-scratch.rst +++ b/docs/zh_CN/get-started-cmake/linux-setup-scratch.rst @@ -15,15 +15,15 @@ - CentOS 7:: - sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache + sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache python-pyelftools - Ubuntu 和 Debian:: - sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache + sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache python2-pyelftools .. note:: 使用 ESP-IDF 需要 CMake 3.5 或以上版本。较早版本的 Linux 可能需要升级才能向后移植仓库,或安装 "cmake3" 软件包,而不是安装 "cmake"。 diff --git a/docs/zh_CN/get-started-cmake/linux-setup.rst b/docs/zh_CN/get-started-cmake/linux-setup.rst index acc1cd3bf..7e1afbcb5 100644 --- a/docs/zh_CN/get-started-cmake/linux-setup.rst +++ b/docs/zh_CN/get-started-cmake/linux-setup.rst @@ -13,15 +13,15 @@ Linux 平台工具链的标准设置 (CMake) - CentOS 7:: - sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache + sudo yum install git wget ncurses-devel flex bison gperf python pyserial cmake ninja-build ccache python-pyelftools - Ubuntu 和 Debian:: - sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache + sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing cmake ninja ccache python2-pyelftools .. note:: 使用 ESP-IDF 需要 CMake 3.5 或以上版本。较早版本的 Linux 可能需要升级才能向后移植仓库,或安装 "cmake3" 软件包,而不是安装 "cmake"。 diff --git a/docs/zh_CN/get-started/linux-setup-scratch.rst b/docs/zh_CN/get-started/linux-setup-scratch.rst index f79816892..4b58f2d08 100644 --- a/docs/zh_CN/get-started/linux-setup-scratch.rst +++ b/docs/zh_CN/get-started/linux-setup-scratch.rst @@ -4,7 +4,7 @@ :link_to_translation:`en:[English]` .. note:: - + 安装工具链的标准流程可以通过阅读文档 :doc:`Linux 平台工具链的标准设置 ` 来获得,:ref:`工具链的自定义设置 ` 章节会介绍哪些情况下我们必须要重新定义工具链。 @@ -15,11 +15,11 @@ - Ubuntu 和 Debian:: - sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing + sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools .. note:: diff --git a/docs/zh_CN/get-started/linux-setup.rst b/docs/zh_CN/get-started/linux-setup.rst index 62bf8ed73..72bcbfabc 100644 --- a/docs/zh_CN/get-started/linux-setup.rst +++ b/docs/zh_CN/get-started/linux-setup.rst @@ -12,15 +12,15 @@ Linux 平台工具链的标准设置 - CentOS 7:: - sudo yum install gcc git wget make ncurses-devel flex bison gperf python pyserial + sudo yum install gcc git wget make ncurses-devel flex bison gperf python pyserial python-pyelftools - Ubuntu and Debian:: - sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing + sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing python-pyelftools - Arch:: - sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing + sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial python2-cryptography python2-future python2-pyparsing python2-pyelftools .. note:: @@ -52,7 +52,7 @@ Linux 版的 ESP32 工具链可以从 Espressif 的网站下载: .. include:: /_build/inc/unpack-code-linux32.inc -.. _setup-linux-toolchain-add-it-to-path: +.. _setup-linux-toolchain-add-it-to-path: 2. 工具链将会被解压到 ``~/esp/xtensa-esp32-elf/`` 目录。 @@ -67,9 +67,9 @@ Linux 版的 ESP32 工具链可以从 Espressif 的网站下载: 然后,当你需要使用工具链时,在命令行输入 ``get_esp32``,然后工具链会自动添加到你的 ``PATH`` 中。 .. note:: - + 如果将 ``/bin/bash`` 设置为登录 shell,且同时存在 ``.bash_profile`` 和 ``.profile``,则更新 ``.bash_profile`` 。在 CentOS 环境下, ``alias`` 需要添加到 ``.bashrc`` 文件中。 - + 3. 退出并重新登录以使 ``.profile`` 更改生效。 运行以下命令来检查 ``PATH`` 设置是否正确: :: printenv PATH diff --git a/requirements.txt b/requirements.txt index 97d9bd057..db38a1c0c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,5 @@ setuptools pyserial>=3.0 future>=0.15.2 cryptography>=2.1.4 -pyparsing>=2.0.3 \ No newline at end of file +pyparsing>=2.0.3 +pyelftools>=0.22 diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index 8e4238344..c91872d42 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -34,8 +34,9 @@ tools/ci/test_build_system_cmake.sh tools/ci/test_configure_ci_environment.sh tools/cmake/convert_to_cmake.py tools/cmake/run_cmake_lint.sh -tools/esp_app_trace/apptrace_proc.py tools/esp_app_trace/logtrace_proc.py +tools/esp_app_trace/sysviewtrace_proc.py +tools/esp_app_trace/test/sysview/test.sh tools/format.sh tools/gen_esp_err_to_name.py tools/idf.py diff --git a/tools/esp_app_trace/SYSVIEW_FreeRTOS.txt b/tools/esp_app_trace/SYSVIEW_FreeRTOS.txt new file mode 100644 index 000000000..8162a5d96 --- /dev/null +++ b/tools/esp_app_trace/SYSVIEW_FreeRTOS.txt @@ -0,0 +1,107 @@ +128 vTaskAllocateMPURegions xTask=%t pxRegions=%u +33 vTaskDelete xTaskToDelete=%t +34 vTaskDelay xTicksToDelay=%u +35 vTaskDelayUntil +129 uxTaskPriorityGet xTask=%t +56 uxTaskPriorityGetFromISR xTask=%t +130 eTaskGetState xTask=%t +55 vTaskPrioritySet xTask=%t uxNewPriority=%u +36 vTaskSuspend xTaskToSuspend=%t +40 vTaskResume xTaskToResume=%t +43 xTaskResumeFromISR xTaskToResume=%t +131 vTaskStartScheduler +132 vTaskEndScheduler +133 vTaskSuspendAll +134 xTaskResumeAll +135 xTaskGetTickCount +57 xTaskGetTickCountFromISR +136 uxTaskGetNumberOfTasks +137 pcTaskGetTaskName xTaskToQuery=%t +138 uxTaskGetStackHighWaterMark xTask=%t +139 vTaskSetApplicationTaskTag xTask=%t pxHookFunction=%u +140 xTaskGetApplicationTaskTag xTask=%t +141 vTaskSetThreadLocalStoragePointer xTaskToSet=%T xIndex=%u pvValue=%u +142 pvTaskGetThreadLocalStoragePointer xTaskToQuery=%T xIndex=%u +143 xTaskCallApplicationTaskHook xTask=%T pvParameter=%u +144 xTaskGetIdleTaskHandle +145 uxTaskGetSystemState pxTaskStatusArray=%u uxArraySize=%u pulTotalRunTime=%u +146 vTaskList pcWriteBuffer=%u +147 vTaskGetRunTimeStats pcWriteBuffer=%u +44 xTaskGenericNotify xTaskToNotify=%t ulValue=%u eAction=%u pulPreviousNotificationValue=%u +45 xTaskGenericNotifyFromISR xTaskToNotify=%t ulValue=%u eAction=%u pulPreviousNotificationValue=%u pxHigherPriorityTaskWoken=%u +46 xTaskNotifyWait ulBitsToClearOnEntry=%u ulBitsToClearOnExit=%u pulNotificationValue=%u xTicksToWait=%u +38 vTaskNotifyGiveFromISR xTaskToNotify=%t pxHigherPriorityTaskWoken=%u +37 ulTaskNotifyTake xClearCountOnExit=%u xTicksToWait=%u +148 xTaskNotifyStateClear xTask=%t +149 xTaskGetCurrentTaskHandle +150 vTaskSetTimeOutState pxTimeOut=%u +151 xTaskCheckForTimeOut pxTimeOut=%u pxTicksToWait=%u +152 vTaskMissedYield +153 xTaskGetSchedulerState +39 vTaskPriorityInherit pxMutexHolder=%p +42 xTaskPriorityDisinherit pxMutexHolder=%p +154 xTaskGenericCreate pxTaskCode=%u pcName=%u usStackDepth=%u pvParameters=%u uxPriority=%u pxCreatedTask=%u puxStackBuffer=%u xRegions=%u +155 uxTaskGetTaskNumber xTask=%u +156 vTaskSetTaskNumber xTask=%u uxHandle=%u +41 vTaskStepTick xTicksToJump=%u +157 eTaskConfirmSleepModeStatus +158 xTimerCreate pcTimerName=%u xTimerPeriodInTicks=%u uxAutoReload=%u pvTimerID=%u pxCallbackFunction=%u +159 pvTimerGetTimerID xTimer=%u +160 vTimerSetTimerID xTimer=%u pvNewID=%u +161 xTimerIsTimerActive xTimer=%u +162 xTimerGetTimerDaemonTaskHandle +163 xTimerPendFunctionCallFromISR xFunctionToPend=%u pvParameter1=%u ulParameter2=%u pxHigherPriorityTaskWoken=%u +164 xTimerPendFunctionCall xFunctionToPend=%u pvParameter1=%u ulParameter2=%u xTicksToWait=%u +165 pcTimerGetTimerName xTimer=%u +166 xTimerCreateTimerTask +167 xTimerGenericCommand xTimer=%u xCommandID=%u xOptionalValue=%u pxHigherPriorityTaskWoken=%u xTicksToWait=%u +53 xQueueGenericSend xQueue=%I pvItemToQueue=%p xTicksToWait=%u xCopyPosition=%u +50 xQueuePeekFromISR xQueue=%I pvBuffer=%p +49 xQueueGenericReceive xQueue=%I pvBuffer=%p xTicksToWait=%u xJustPeek=%u +168 uxQueueMessagesWaiting xQueue=%I +169 uxQueueSpacesAvailable xQueue=%I +48 vQueueDelete xQueue=%I +54 xQueueGenericSendFromISR xQueue=%I pvItemToQueue=%p pxHigherPriorityTaskWoken=%u xCopyPosition=%u +61 xQueueGiveFromISR xQueue=%I pxHigherPriorityTaskWoken=%u +51 xQueueReceiveFromISR xQueue=%I pvBuffer=%p pxHigherPriorityTaskWoken=%u +62 xQueueIsQueueEmptyFromISR xQueue=%I +63 xQueueIsQueueFullFromISR xQueue=%I +170 uxQueueMessagesWaitingFromISR xQueue=%I +171 xQueueAltGenericSend xQueue=%I pvItemToQueue=%p xTicksToWait=%u xCopyPosition=%u +172 xQueueAltGenericReceive xQueue=%I pvBuffer=%p xTicksToWait=%u xJustPeeking=%u +173 xQueueCRSendFromISR xQueue=%I pvItemToQueue=%p xCoRoutinePreviouslyWoken=%u +174 xQueueCRReceiveFromISR xQueue=%I pvBuffer=%p pxTaskWoken=%u +175 xQueueCRSend xQueue=%I pvItemToQueue=%p xTicksToWait=%u +176 xQueueCRReceive xQueue=%I pvBuffer=%p xTicksToWait=%u +177 xQueueCreateMutex ucQueueType=%u +178 xQueueCreateCountingSemaphore uxMaxCount=%u uxInitialCount=%u +179 xQueueGetMutexHolder xSemaphore=%u +180 xQueueTakeMutexRecursive xMutex=%u xTicksToWait=%u +181 xQueueGiveMutexRecursive pxMutex=%u +52 vQueueAddToRegistry xQueue=%I pcName=%u +182 vQueueUnregisterQueue xQueue=%I +47 xQueueGenericCreate uxQueueLength=%u uxItemSize=%u ucQueueType=%u +183 xQueueCreateSet uxEventQueueLength=%u +184 xQueueAddToSet xQueueOrSemaphore=%u xQueueSet=%u +185 xQueueRemoveFromSet xQueueOrSemaphore=%u xQueueSet=%u +186 xQueueSelectFromSet xQueueSet=%u xTicksToWait=%u +187 xQueueSelectFromSetFromISR xQueueSet=%u +188 xQueueGenericReset xQueue=%I xNewQueue=%u +189 vListInitialise pxList=%u +190 vListInitialiseItem pxItem=%u +191 vListInsert pxList=%u pxNewListItem=%u +192 vListInsertEnd pxList=%u pxNewListItem=%u +193 uxListRemove pxItemToRemove=%u +194 xEventGroupCreate +195 xEventGroupWaitBits xEventGroup=%u uxBitsToWaitFor=%u xClearOnExit=%u xWaitForAllBits=%u xTicksToWait=%u +196 xEventGroupClearBits xEventGroup=%u uxBitsToClear=%u +58 xEventGroupClearBitsFromISR xEventGroup=%u uxBitsToSet=%u +197 xEventGroupSetBits xEventGroup=%u uxBitsToSet=%u +59 xEventGroupSetBitsFromISR xEventGroup=%u uxBitsToSet=%u pxHigherPriorityTaskWoken=%u +198 xEventGroupSync xEventGroup=%u uxBitsToSet=%u uxBitsToWaitFor=%u xTicksToWait=%u +60 xEventGroupGetBitsFromISR xEventGroup=%u +199 vEventGroupDelete xEventGroup=%u +200 uxEventGroupGetNumber xEventGroup=%u + +512 esp_sysview_heap_trace_alloc addr=%p size=%u callers=%x +513 esp_sysview_heap_trace_free addr=%p callers=%x diff --git a/tools/esp_app_trace/apptrace_proc.py b/tools/esp_app_trace/apptrace_proc.py deleted file mode 100755 index 669859136..000000000 --- a/tools/esp_app_trace/apptrace_proc.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env python -# - -from __future__ import print_function -import argparse -import struct -import sys - - -class bcolors: - HEADER = '\033[95m' - OKBLUE = '\033[94m' - OKGREEN = '\033[92m' - WARNING = '\033[93m' - FAIL = '\033[91m' - ENDC = '\033[0m' - BOLD = '\033[1m' - UNDERLINE = '\033[4m' - - -def main(): - ESP32_TRACE_BLOCK_HDR_SZ = 8 - ESP32_TRACE_BLOCK_TASK_IDX = 0 - ESP32_TRACE_BLOCK_TS_IDX = 1 - ESP32_TRACE_BLOCK_DATA_IDX = 2 - - parser = argparse.ArgumentParser(description='ESP32 App Trace Parse Tool') - - parser.add_argument('file', help='Path to app trace file', type=str) - parser.add_argument('--print-tasks', '-p', help='Print tasks', action='store_true') - parser.add_argument('--print-details', '-d', help='Print detailed stats', action='store_true') - parser.add_argument('--no-errors', '-n', help='Do not print errors', action='store_true') - parser.add_argument('--block-len', '-b', help='Block length', type=int, default=1024) - - args = parser.parse_args() - - print("====================================================================") - try: - ftrc = open(args.file, 'rb') - except IOError as e: - print("Failed to open trace file (%s)!" % e) - sys.exit(2) - - passed = True - off = 0 - data_stats = {} - last_ts = None - tot_discont = 0 - while True: - # ftrc.seek(off) - task = None - ts = 0 - trc_buf = ftrc.read(args.block_len) - if len(trc_buf) == 0: - # print('EOF') - break - trc_data = struct.unpack('= ts: - # print("Global TS discontinuity %x -> %x, task %x, stamp %x at %x" % (last_ts, ts, task, - # data_stats[task]['stamp'], off)) - if args.print_details: - print("Global TS discontinuity %x -> %x, task %x at %x" % (last_ts, ts, task, off)) - # tot_discont += 1 - # passed = False - last_ts = ts - if task not in data_stats: - print("%x: NEW TASK" % task) - data_stats[task] = {'stamp': trc_data[ESP32_TRACE_BLOCK_DATA_IDX], 'last_ts': ts, 'count': 1, 'discont_offs': [], 'inv_stamps_offs': []} - else: - if data_stats[task]['last_ts'] == ts: - print("Task TS discontinuity %x -> %x, task %x, stamp %x at %x" % (last_ts, ts, task, data_stats[task]['stamp'], off)) - data_stats[task]['discont_offs'].append(off) - tot_discont += 1 - passed = False - data_stats[task]['last_ts'] = ts - data_stats[task]['count'] += 1 - if len(trc_data) > ESP32_TRACE_BLOCK_DATA_IDX: - # print("DATA = %x %x %x %x" % (trc_data[-4], trc_data[-3], trc_data[-2], trc_data[-1])) - if args.print_tasks: - print("Task[%d] %x, ts %08x, stamp %x" % (off / args.block_len, task, ts, trc_data[ESP32_TRACE_BLOCK_DATA_IDX])) - else: - print("%x: NO DATA" % task) - else: - print("Failed to unpack data!") - sys.exit(2) - - # check data - for i in range(ESP32_TRACE_BLOCK_DATA_IDX, len(trc_data)): - if trc_data[i] != data_stats[task]['stamp']: - if not args.no_errors: - print("Invalid stamp %x->%x at %x, task %x" % (data_stats[task]['stamp'], trc_data[i], off + ESP32_TRACE_BLOCK_HDR_SZ + i, task)) - passed = False - data_stats[task]['stamp'] = trc_data[i] - data_stats[task]['inv_stamps_offs'].append(off) -# break - if len(trc_buf) < args.block_len: - print('Last block (not full)') - break - - if data_stats[task]['stamp'] is not None: - data_stats[task]['stamp'] = (data_stats[task]['stamp'] + 1) & 0xFF -# print("stamp=%x" % data_stats[task][ESP32_TRACE_STAMP_IDX]) - off += args.block_len - - ftrc.close() - print("====================================================================") - print("Trace size %d bytes, discont %d\n" % (off, tot_discont)) - for t in data_stats: - print("Task %x. Total count %d. Inv stamps %d. TS Discontinuities %d." % (t, data_stats[t]['count'], - len(data_stats[t]['inv_stamps_offs']), len(data_stats[t]['discont_offs']))) - if args.print_details: - print('Invalid stamps offs: [{}]'.format(', '.join(hex(x) for x in data_stats[t]['inv_stamps_offs']))) - print('TS Discontinuities offs: [{}]'.format(', '.join(hex(x) for x in data_stats[t]['discont_offs']))) - print("\n") - - if passed: - print("Data - OK") - else: - print("Data - FAILED!") - - -if __name__ == '__main__': - main() diff --git a/tools/esp_app_trace/espytrace/README.md b/tools/esp_app_trace/espytrace/README.md new file mode 100644 index 000000000..af9119f23 --- /dev/null +++ b/tools/esp_app_trace/espytrace/README.md @@ -0,0 +1,5 @@ +# espytrace Python package + +This package implements base routines and classes for processing ESP32 application level trace data. +- `apptrace.py` includes functionality which is common for all types of trace data. +- `sysview.py` includes functionality which is specific for SystemView trace data format. diff --git a/tools/esp_app_trace/espytrace/__init__.py b/tools/esp_app_trace/espytrace/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tools/esp_app_trace/espytrace/apptrace.py b/tools/esp_app_trace/espytrace/apptrace.py new file mode 100644 index 000000000..b793ce64f --- /dev/null +++ b/tools/esp_app_trace/espytrace/apptrace.py @@ -0,0 +1,720 @@ +import os +try: + from urlparse import urlparse +except ImportError: + from urllib.parse import urlparse +try: + import SocketServer +except ImportError: + import socketserver as SocketServer +import threading +import tempfile +import time +import subprocess +import os.path +import elftools.elf.elffile as elffile +import elftools.elf.constants as elfconst + + +def addr2line(toolchain, elf_path, addr): + """ + Creates trace reader. + + Parameters + ---------- + toolchain : string + toolchain prefix to retrieve source line locations using addresses + elf_path : string + path to ELF file to use + addr : int + address to retrieve source line location + + Returns + ------- + string + source line location string + """ + try: + return subprocess.check_output(['%saddr2line' % toolchain, '-e', elf_path, '0x%x' % addr]).decode("utf-8") + except subprocess.CalledProcessError: + return '' + + +class ParseError(RuntimeError): + """ + Parse error exception + """ + def __init__(self, message): + RuntimeError.__init__(self, message) + + +class ReaderError(RuntimeError): + """ + Trace reader error exception + """ + def __init__(self, message): + RuntimeError.__init__(self, message) + + +class ReaderTimeoutError(ReaderError): + """ + Trace reader timeout error + """ + def __init__(self, tmo, sz): + ReaderError.__init__(self, 'Timeout %f sec while reading %d bytes!' % (tmo, sz)) + + +class ReaderShutdownRequest(ReaderError): + """ + Trace reader shutdown request error + Raised when user presses CTRL+C (SIGINT). + """ + def __init__(self): + ReaderError.__init__(self, 'Shutdown request!') + + +class Reader: + """ + Base abstract reader class + """ + def __init__(self, tmo): + """ + Constructor + + Parameters + ---------- + tmo : int + read timeout + """ + self.timeout = tmo + self.need_stop = False + + def read(self, sz): + """ + Reads a number of bytes + + Parameters + ---------- + sz : int + number of bytes to read + + Returns + ------- + bytes object + read bytes + + Returns + ------- + ReaderTimeoutError + if timeout expires + ReaderShutdownRequest + if SIGINT was received during reading + """ + pass + + def readline(self): + """ + Reads line + + Parameters + ---------- + sz : int + number of bytes to read + + Returns + ------- + string + read line + """ + pass + + def forward(self, sz): + """ + Moves read pointer to a number of bytes + + Parameters + ---------- + sz : int + number of bytes to read + """ + pass + + def cleanup(self): + """ + Cleans up reader + """ + self.need_stop = True + + +class FileReader(Reader): + """ + File reader class + """ + def __init__(self, path, tmo): + """ + Constructor + + Parameters + ---------- + path : string + path to file to read + tmo : int + see Reader.__init__() + """ + Reader.__init__(self, tmo) + self.trace_file_path = path + self.trace_file = open(path, 'rb') + + def read(self, sz): + """ + see Reader.read() + """ + data = b'' + start_tm = time.clock() + while not self.need_stop: + data += self.trace_file.read(sz - len(data)) + if len(data) == sz: + break + if self.timeout != -1 and time.clock() >= start_tm + self.timeout: + raise ReaderTimeoutError(self.timeout, sz) + if self.need_stop: + raise ReaderShutdownRequest() + return data + + def get_pos(self): + """ + Retrieves current file read position + + Returns + ------- + int + read position + """ + return self.trace_file.tell() + + def readline(self, linesep=os.linesep): + """ + see Reader.read() + """ + line = '' + start_tm = time.clock() + while not self.need_stop: + line += self.trace_file.readline().decode("utf-8") + if line.endswith(linesep): + break + if self.timeout != -1 and time.clock() >= start_tm + self.timeout: + raise ReaderTimeoutError(self.timeout, 1) + if self.need_stop: + raise ReaderShutdownRequest() + return line + + def forward(self, sz): + """ + see Reader.read() + """ + cur_pos = self.trace_file.tell() + start_tm = time.clock() + while not self.need_stop: + file_sz = os.path.getsize(self.trace_file_path) + if file_sz - cur_pos >= sz: + break + if self.timeout != -1 and time.clock() >= start_tm + self.timeout: + raise ReaderTimeoutError(self.timeout, sz) + if self.need_stop: + raise ReaderShutdownRequest() + self.trace_file.seek(sz, os.SEEK_CUR) + + +class NetRequestHandler: + """ + Handler for incoming network requests (connections, datagrams) + """ + def handle(self): + while not self.server.need_stop: + data = self.rfile.read(1024) + if len(data) == 0: + break + self.server.wtrace.write(data) + self.server.wtrace.flush() + + +class NetReader(FileReader): + """ + Base netwoek socket reader class + """ + def __init__(self, tmo): + """ + see Reader.__init__() + """ + fhnd,fname = tempfile.mkstemp() + FileReader.__init__(self, fname, tmo) + self.wtrace = os.fdopen(fhnd, 'wb') + self.server_thread = threading.Thread(target=self.serve_forever) + self.server_thread.start() + + def cleanup(self): + """ + see Reader.cleanup() + """ + FileReader.cleanup(self) + self.shutdown() + self.server_close() + self.server_thread.join() + time.sleep(0.1) + self.trace_file.close() + self.wtrace.close() + + +class TCPRequestHandler(NetRequestHandler, SocketServer.StreamRequestHandler): + """ + Handler for incoming TCP connections + """ + pass + + +class TCPReader(NetReader, SocketServer.TCPServer): + """ + TCP socket reader class + """ + def __init__(self, host, port, tmo): + """ + Constructor + + Parameters + ---------- + host : string + see SocketServer.BaseServer.__init__() + port : int + see SocketServer.BaseServer.__init__() + tmo : int + see Reader.__init__() + """ + SocketServer.TCPServer.__init__(self, (host, port), TCPRequestHandler) + NetReader.__init__(self, tmo) + + +class UDPRequestHandler(NetRequestHandler, SocketServer.DatagramRequestHandler): + """ + Handler for incoming UDP datagrams + """ + pass + + +class UDPReader(NetReader, SocketServer.UDPServer): + """ + UDP socket reader class + """ + def __init__(self, host, port, tmo): + """ + Constructor + + Parameters + ---------- + host : string + see SocketServer.BaseServer.__init__() + port : int + see SocketServer.BaseServer.__init__() + tmo : int + see Reader.__init__() + """ + SocketServer.UDPServer.__init__(self, (host, port), UDPRequestHandler) + NetReader.__init__(self, tmo) + + +def reader_create(trc_src, tmo): + """ + Creates trace reader. + + Parameters + ---------- + trc_src : string + trace source URL. Supports 'file:///path/to/file' or (tcp|udp)://host:port + tmo : int + read timeout + + Returns + ------- + Reader + reader object or None if URL scheme is not supported + """ + url = urlparse(trc_src) + if len(url.scheme) == 0 or url.scheme == 'file': + if os.name == 'nt': + # workaround for Windows path + return FileReader(trc_src[7:], tmo) + else: + return FileReader(url.path, tmo) + if url.scheme == 'tcp': + return TCPReader(url.hostname, url.port, tmo) + if url.scheme == 'udp': + return UDPReader(url.hostname, url.port, tmo) + return None + + +class TraceDataProcessor: + """ + Base abstract class for all trace data processors. + """ + def __init__(self, print_events, keep_all_events=False): + """ + Constructor. + + Parameters + ---------- + print_events : bool + if True every event will be printed as they arrive + keep_all_events : bool + if True all events will be kept in self.events in the order they arrive + """ + self.print_events = print_events + self.keep_all_events = keep_all_events + self.total_events = 0 + self.events = [] + # This can be changed by the root procesor that includes several sub-processors. + # It is used access some method of root processor which can contain methods/data common for all sub-processors. + # Common info could be current execution context, info about running tasks, available IRQs etc. + self.root_proc = self + + def _print_event(self, event): + """ + Base method to print an event. + + Parameters + ---------- + event : object + Event object + """ + print("EVENT[{:d}]: {}".format(self.total_events, event)) + + def print_report(self): + """ + Base method to print report. + """ + print("Processed {:d} events".format(self.total_events)) + + def cleanup(self): + """ + Base method to make cleanups. + """ + pass + + def on_new_event(self, event): + """ + Base method to process event. + """ + if self.print_events: + self._print_event(event) + if self.keep_all_events: + self.events.append(event) + self.total_events += 1 + + +class LogTraceParseError(ParseError): + """ + Log trace parse error exception. + """ + pass + + +def get_str_from_elf(felf, str_addr): + """ + Retrieves string from ELF file. + + Parameters + ---------- + felf : elffile.ELFFile + open ELF file handle to retrive format string from + str_addr : int + address of the string + + Returns + ------- + string + string or None if it was not found + """ + tgt_str = '' + for sect in felf.iter_sections(): + if sect['sh_addr'] == 0 or (sect['sh_flags'] & elfconst.SH_FLAGS.SHF_ALLOC) == 0: + continue + if str_addr < sect['sh_addr'] or str_addr >= sect['sh_addr'] + sect['sh_size']: + continue + sec_data = sect.data() + for i in range(str_addr - sect['sh_addr'], sect['sh_size']): + if type(sec_data) is str: + ch = sec_data[i] + else: + ch = str(chr(sec_data[i])) + if ch == '\0': + break + tgt_str += ch + if len(tgt_str) > 0: + return tgt_str + return None + + +class LogTraceEvent: + """ + Log trace event. + """ + def __init__(self, fmt_addr, log_args): + """ + Constructor. + + Parameters + ---------- + fmt_addr : int + address of the format string + log_args : list + list of log message arguments + """ + self.fmt_addr = fmt_addr + self.args = log_args + + def get_message(self, felf): + """ + Retrieves log message. + + Parameters + ---------- + felf : elffile.ELFFile + open ELF file handle to retrive format string from + + Returns + ------- + string + formatted log message + + Raises + ------ + LogTraceParseError + if format string has not been found in ELF file + """ + fmt_str = get_str_from_elf(felf, self.fmt_addr) + if not fmt_str: + raise LogTraceParseError('Failed to find format string for 0x%x' % self.fmt_addr) + prcnt_idx = 0 + for i, arg in enumerate(self.args): + prcnt_idx = fmt_str.find('%', prcnt_idx, -2) # TODO: check str ending with % + if prcnt_idx == -1: + break + prcnt_idx += 1 # goto next char + if fmt_str[prcnt_idx] == 's': + # find string + arg_str = get_str_from_elf(felf, self.args[i]) + if arg_str: + self.args[i] = arg_str + else: + self.args[i] = '' + fmt_str = fmt_str.replace('%p', '%x') + return fmt_str % tuple(self.args) + + +class BaseLogTraceDataProcessorImpl: + """ + Base implementation for log data processors. + """ + def __init__(self, print_log_events=False, elf_path=''): + """ + Constructor. + + Parameters + ---------- + print_log_events : bool + if True every log event will be printed as they arrive + elf_path : string + path to ELF file to retrieve format strings for log messages + """ + if len(elf_path): + self.felf = elffile.ELFFile(open(elf_path, 'rb')) + else: + self.felf = None + self.print_log_events = print_log_events + self.messages = [] + + def cleanup(self): + """ + Cleanup + """ + if self.felf: + self.felf.stream.close() + + def print_report(self): + """ + Prints log report + """ + print("=============== LOG TRACE REPORT ===============") + print("Processed {:d} log messages.".format(len(self.messages))) + + def on_new_event(self, event): + """ + Processes log events. + + Parameters + ---------- + event : LogTraceEvent + Event object. + """ + msg = event.get_message(self.felf) + self.messages.append(msg) + if self.print_log_events: + print(msg), + + +class HeapTraceParseError(ParseError): + """ + Heap trace parse error exception. + """ + pass + + +class HeapTraceDuplicateAllocError(HeapTraceParseError): + """ + Heap trace duplicate allocation error exception. + """ + def __init__(self, addr, new_size, prev_size): + """ + Constructor. + + Parameters + ---------- + addr : int + memory block address + new_size : int + size of the new allocation + prev_size : int + size of the previous allocation + """ + HeapTraceParseError.__init__(self, """Duplicate alloc @ 0x{:x}! + New alloc is {:d} bytes, + previous is {:d} bytes.""".format(addr, new_size, prev_size)) + + +class HeapTraceEvent: + """ + Heap trace event. + """ + def __init__(self, ctx_name, in_irq, core_id, ts, alloc, size, addr, callers, toolchain='', elf_path=''): + """ + Constructor. + + Parameters + ---------- + ctx_name : string + name of event context (task or IRQ name) + in_irq : bool + True if event has been generated in IRQ context, otherwise False + core_id : int + core which generated the event + ts : float + event timestamp + alloc : bool + True for allocation event, otherwise False + size : int + size of allocation; has no meaning for de-allocation event + addr : int + address of allocation/de-allocation + callers : list + list of callers (callstack) for event + toolchain_pref : string + toolchain prefix to retrieve source line locations using addresses + elf_path : string + path to ELF file to retrieve format strings for log messages + """ + self.ctx_name = ctx_name + self.in_irq = in_irq + self.core_id = core_id + self.ts = ts + self.alloc = alloc + self.size = size + self.addr = addr + self.callers = callers + self.toolchain = toolchain + self.elf_path = elf_path + + def __repr__(self): + if len(self.toolchain) and len(self.elf_path): + callers = os.linesep + for addr in self.callers: + callers += '{}'.format(addr2line(self.toolchain, self.elf_path, addr)) + else: + callers = '' + for addr in self.callers: + if len(callers): + callers += ':' + callers += '0x{:x}'.format(addr) + if self.in_irq: + ctx_desc = 'IRQ "%s"' % self.ctx_name + else: + ctx_desc = 'task "%s"' % self.ctx_name + if self.alloc: + return "[{:.9f}] HEAP: Allocated {:d} bytes @ 0x{:x} from {} on core {:d} by: {}".format(self.ts, self.size, + self.addr, ctx_desc, + self.core_id, callers) + else: + return "[{:.9f}] HEAP: Freed bytes @ 0x{:x} from {} on core {:d} by: {}".format(self.ts, self.addr, ctx_desc, + self.core_id, callers) + + +class BaseHeapTraceDataProcessorImpl: + """ + Base implementation for heap data processors. + """ + def __init__(self, print_heap_events=False): + """ + Constructor. + + Parameters + ---------- + print_heap_events : bool + if True every heap event will be printed as they arrive + """ + self._alloc_addrs = {} + self.allocs = [] + self.frees = [] + self.heap_events_count = 0 + self.print_heap_events = print_heap_events + + def on_new_event(self, event): + """ + Processes heap events. Keeps track of active allocations list. + + Parameters + ---------- + event : HeapTraceEvent + Event object. + """ + self.heap_events_count += 1 + if self.print_heap_events: + print(event) + if event.alloc: + if event.addr in self._alloc_addrs: + raise HeapTraceDuplicateAllocError(event.addr, event.size, self._alloc_addrs[event.addr].size) + self.allocs.append(event) + self._alloc_addrs[event.addr] = event + else: + # do not treat free on unknown addresses as errors, because these blocks coould be allocated when tracing was disabled + if event.addr in self._alloc_addrs: + event.size = self._alloc_addrs[event.addr].size + self.allocs.remove(self._alloc_addrs[event.addr]) + del self._alloc_addrs[event.addr] + else: + self.frees.append(event) + + def print_report(self): + """ + Prints heap report + """ + print("=============== HEAP TRACE REPORT ===============") + print("Processed {:d} heap events.".format(self.heap_events_count)) + if len(self.allocs) == 0: + print("OK - Heap errors was not found.") + return + leaked_bytes = 0 + for alloc in self.allocs: + leaked_bytes += alloc.size + print(alloc) + for free in self.frees: + if free.addr > alloc.addr and free.addr <= alloc.addr + alloc.size: + print("Possible wrong free operation found") + print(free) + print("Found {:d} leaked bytes in {:d} blocks.".format(leaked_bytes, len(self.allocs))) diff --git a/tools/esp_app_trace/espytrace/sysview.py b/tools/esp_app_trace/espytrace/sysview.py new file mode 100644 index 000000000..66ed0dde7 --- /dev/null +++ b/tools/esp_app_trace/espytrace/sysview.py @@ -0,0 +1,1220 @@ +import re +import struct +import copy +import espytrace.apptrace as apptrace + + +SYSVIEW_EVTID_NOP = 0 # Dummy packet. +SYSVIEW_EVTID_OVERFLOW = 1 +SYSVIEW_EVTID_ISR_ENTER = 2 +SYSVIEW_EVTID_ISR_EXIT = 3 +SYSVIEW_EVTID_TASK_START_EXEC = 4 +SYSVIEW_EVTID_TASK_STOP_EXEC = 5 +SYSVIEW_EVTID_TASK_START_READY = 6 +SYSVIEW_EVTID_TASK_STOP_READY = 7 +SYSVIEW_EVTID_TASK_CREATE = 8 +SYSVIEW_EVTID_TASK_INFO = 9 +SYSVIEW_EVTID_TRACE_START = 10 +SYSVIEW_EVTID_TRACE_STOP = 11 +SYSVIEW_EVTID_SYSTIME_CYCLES = 12 +SYSVIEW_EVTID_SYSTIME_US = 13 +SYSVIEW_EVTID_SYSDESC = 14 +SYSVIEW_EVTID_USER_START = 15 +SYSVIEW_EVTID_USER_STOP = 16 +SYSVIEW_EVTID_IDLE = 17 +SYSVIEW_EVTID_ISR_TO_SCHEDULER = 18 +SYSVIEW_EVTID_TIMER_ENTER = 19 +SYSVIEW_EVTID_TIMER_EXIT = 20 +SYSVIEW_EVTID_STACK_INFO = 21 +SYSVIEW_EVTID_MODULEDESC = 22 +SYSVIEW_EVTID_INIT = 24 +SYSVIEW_EVENT_ID_PREDEF_LEN_MAX = SYSVIEW_EVTID_INIT +SYSVIEW_EVTID_NAME_RESOURCE = 25 +SYSVIEW_EVTID_PRINT_FORMATTED = 26 +SYSVIEW_EVTID_NUMMODULES = 27 +SYSVIEW_EVENT_ID_PREDEF_MAX = SYSVIEW_EVTID_NUMMODULES + +SYSVIEW_EVENT_ID_MAX = 200 + +SYSVIEW_MODULE_EVENT_OFFSET = 512 + +SYSVIEW_SYNC_LEN = 10 + + +def parse_trace(reader, parser, os_evt_map_file=''): + """ + Parses trace. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + parser : SysViewTraceDataParser + Top level parser object. + os_evt_map_file : string + Path to file containg events format description. + """ + # parse OS events formats file + os_evt_map = _read_events_map(os_evt_map_file) + _read_file_header(reader) + _read_init_seq(reader) + while True: + event = parser.read_event(reader, os_evt_map) + parser.on_new_event(event) + + +def _read_events_map(os_evt_map_file): + """ + Reads SystemView events format description from file. + + Parameters + ---------- + os_evt_map_file : string + Path to file containg events format description. + + Returns + ------- + dict + a dict with event IDs as keys and values as tuples containg event name and a list of parameters. + """ + os_evt_map = {} + with open(os_evt_map_file) as f: + for line in f: + comps = line.split() + if len(comps) < 2: + continue + params = [] + if len(comps) > 2: + for p in comps[2:]: + sp = p.split('=') + if sp[1].startswith('%'): + sp[1] = sp[1][1:] + if sp[1] == 'u': + params.append(SysViewEventParamSimple(sp[0], _decode_u32)) + elif sp[1] == 's': + params.append(SysViewEventParamSimple(sp[0], _decode_str)) + elif sp[1] == 't' or sp[1] == 'T' or sp[1] == 'I' or sp[1] == 'p': + # TODO: handle shrinked task/queue ID and addresses + params.append(SysViewEventParamSimple(sp[0], _decode_u32)) + os_evt_map[int(comps[0])] = (comps[1], params) + return os_evt_map + + +def _read_file_header(reader): + """ + Reads SystemView trace file header. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + + Returns + ------- + list + a list of header lines. + """ + empty_count = 0 + lines = [] + while empty_count < 2: + lines.append(reader.readline(linesep='\n')) + if lines[-1] == ';\n': + empty_count += 1 + return lines + + +def _read_init_seq(reader): + """ + Reads SystemView trace initial synchronisation sequence of bytes. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + + Raises + ------- + SysViewTraceParseError + If sync sequence is broken. + """ + SYNC_SEQ_FMT = '<%dB' % SYSVIEW_SYNC_LEN + sync_bytes = struct.unpack(SYNC_SEQ_FMT, reader.read(struct.calcsize(SYNC_SEQ_FMT))) + for b in sync_bytes: + if b != 0: + raise SysViewTraceParseError("Invalid sync sequense!") + + +def _decode_u32(reader): + """ + Reads and decodes unsigned 32-bit integer. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + + Returns + ------- + tuple + a tuple containg number of read bytes and decoded value. + """ + sz = 0 + val = 0 + while True: + b, = struct.unpack('= SYSVIEW_EVENT_ID_PREDEF_LEN_MAX: + self.plen = _decode_plen(reader) + if events_fmt_map: + self._read_payload(reader, events_fmt_map) + else: + reader.forward(self.plen) + _,self.ts = _decode_u32(reader) + + def _read_payload(self, reader, events_fmt_map): + """ + Reads event's payload and populates its parameters dictionary. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + events_fmt_map : dict + see return value of _read_events_map() + + Raises + ------- + SysViewTraceParseError + if event has unknown or invalid format. + """ + if self.id not in events_fmt_map: + raise SysViewTraceParseError("Unknown event ID %d!" % self.id) + self.name = events_fmt_map[self.id][0] + evt_params_templates = events_fmt_map[self.id][1] + params_len = 0 + for i in range(len(evt_params_templates)): + event_param = copy.deepcopy(evt_params_templates[i]) + try: + cur_pos = reader.get_pos() + sz,param_val = event_param.decode(reader, self.plen - params_len) + except Exception as e: + raise SysViewTraceParseError("Failed to decode event {}({:d}) {:d} param @ 0x{:x}! {}".format(self.name, self.id, self.plen, cur_pos, e)) + event_param.idx = i + event_param.value = param_val + self.params[event_param.name] = event_param + params_len += sz + if self.id >= SYSVIEW_EVENT_ID_PREDEF_LEN_MAX and self.plen != params_len: + raise SysViewTraceParseError("Invalid event {}({:d}) payload len {:d}! Must be {:d}.".format(self.name, self.id, self.plen, params_len)) + + def __str__(self): + params = '' + for param in sorted(self.params.values(), key=lambda x: x.idx): + params += '{}, '.format(param) + if len(params): + params = params[:-2] # remove trailing ', ' + return '{:.9f} - core[{:d}].{}({:d}), plen {:d}: [{}]'.format(self.ts, self.core_id, self.name, self.id, self.plen, params) + + +class SysViewEventParam: + """ + Abstract base SystemView event's parameter class. This is a base class for all event's parameters. + """ + def __init__(self, name, decode_func): + """ + Constructor. + + Parameters + ---------- + name : string + Event parameter name. + decode_func : callable object + Parameter decoding function. + """ + self.name = name + self.decode_func = decode_func + self.value = None + # positional index, used for sorting parameters before printing to make them looking as they appear in the event + self.idx = 0 + + def decode(self, reader, max_sz): + """ + Reads and decodes events parameter. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + max_sz : int + Maximum number of bytes to read. + + Returns + ------- + tuple + a tuple containg number of read bytes and decoded value. + """ + pass + + def __str__(self): + return '{}: {}'.format(self.name, self.value) + + +class SysViewEventParamSimple(SysViewEventParam): + """ + Simple SystemView event's parameter class. + """ + def decode(self, reader, max_sz): + """ + see SysViewEventParam.decode() + """ + return self.decode_func(reader) + + +class SysViewEventParamArray(SysViewEventParamSimple): + """ + Array SystemView event's parameter class. + """ + def __init__(self, name, decode_func, size=-1): + """ + Constructor. + + Parameters + ---------- + name : string + see SysViewEventParam.__init__() + decode_func : callable object + see SysViewEventParam.__init__() + size : int + Array's size. If -1 decode() will try to read all bytes from reader. + """ + SysViewEventParamSimple.__init__(self, name, decode_func) + self.arr_size = size + + def decode(self, reader, max_sz): + """ + see SysViewEventParam.decode() + """ + tottal_sz = 0 + vals = [] + i = 0 + while tottal_sz < max_sz: + sz,val = self.decode_func(reader) + vals.append(val) + tottal_sz += sz + i += 1 + if self.arr_size != -1 and i == self.arr_size: + break + return tottal_sz,vals + + +class SysViewPredefinedEvent(SysViewEvent): + """ + Pre-defined SystemView events class. + """ + _predef_events_fmt = { + SYSVIEW_EVTID_NOP: ('svNop', []), + SYSVIEW_EVTID_OVERFLOW: ('svOverflow', [SysViewEventParamSimple('drop_cnt', _decode_u32)]), + SYSVIEW_EVTID_ISR_ENTER: ('svIsrEnter', [SysViewEventParamSimple('irq_num', _decode_u32)]), + SYSVIEW_EVTID_ISR_EXIT: ('svIsrExit', []), + SYSVIEW_EVTID_TASK_START_EXEC: ('svTaskStartExec', [SysViewEventParamSimple('tid', _decode_id)]), + SYSVIEW_EVTID_TASK_STOP_EXEC: ('svTaskStopExec', []), + SYSVIEW_EVTID_TASK_START_READY: ('svTaskStartReady', [SysViewEventParamSimple('tid', _decode_id)]), + SYSVIEW_EVTID_TASK_STOP_READY: ('svTaskStopReady', [SysViewEventParamSimple('tid', _decode_id), + SysViewEventParamSimple('cause', _decode_u32)]), + SYSVIEW_EVTID_TASK_CREATE: ('svTaskCreate', [SysViewEventParamSimple('tid', _decode_id)]), + SYSVIEW_EVTID_TASK_INFO: ('svTaskInfo', [SysViewEventParamSimple('tid', _decode_id), + SysViewEventParamSimple('prio', _decode_u32), + SysViewEventParamSimple('name', _decode_str)]), + SYSVIEW_EVTID_TRACE_START: ('svTraceStart', []), + SYSVIEW_EVTID_TRACE_STOP: ('svTraceStop', []), + SYSVIEW_EVTID_SYSTIME_CYCLES: ('svSysTimeCycles', [SysViewEventParamSimple('cycles', _decode_u32)]), + SYSVIEW_EVTID_SYSTIME_US: ('svSysTimeUs', [SysViewEventParamSimple('time', _decode_u64)]), + SYSVIEW_EVTID_SYSDESC: ('svSysDesc', [SysViewEventParamSimple('desc', _decode_str)]), + SYSVIEW_EVTID_USER_START: ('svUserStart', [SysViewEventParamSimple('user_id', _decode_u32)]), + SYSVIEW_EVTID_USER_STOP: ('svUserStart', [SysViewEventParamSimple('user_id', _decode_u32)]), + SYSVIEW_EVTID_IDLE: ('svIdle', []), + SYSVIEW_EVTID_ISR_TO_SCHEDULER: ('svExitIsrToScheduler', []), + SYSVIEW_EVTID_TIMER_ENTER: ('svTimerEnter', [SysViewEventParamSimple('tim_id', _decode_u32)]), + SYSVIEW_EVTID_TIMER_EXIT: ('svTimerExit', []), + SYSVIEW_EVTID_STACK_INFO: ('svStackInfo', [SysViewEventParamSimple('tid', _decode_id), + SysViewEventParamSimple('base', _decode_u32), + SysViewEventParamSimple('sz', _decode_u32), + SysViewEventParamSimple('unused', _decode_u32)]), + SYSVIEW_EVTID_MODULEDESC: ('svModuleDesc', [SysViewEventParamSimple('mod_id', _decode_u32), + SysViewEventParamSimple('evt_off', _decode_u32), + SysViewEventParamSimple('desc', _decode_str)]), + SYSVIEW_EVTID_INIT: ('svInit', [SysViewEventParamSimple('sys_freq', _decode_u32), + SysViewEventParamSimple('cpu_freq', _decode_u32), + SysViewEventParamSimple('ram_base', _decode_u32), + SysViewEventParamSimple('id_shift', _decode_u32)]), + SYSVIEW_EVTID_NAME_RESOURCE: ('svNameResource', [SysViewEventParamSimple('res_id', _decode_u32), + SysViewEventParamSimple('name', _decode_str)]), + SYSVIEW_EVTID_PRINT_FORMATTED: ('svPrint', [SysViewEventParamSimple('msg', _decode_str), + SysViewEventParamSimple('id', _decode_u32), + SysViewEventParamSimple('unused', _decode_u32)]), + SYSVIEW_EVTID_NUMMODULES: ('svNumModules', [SysViewEventParamSimple('mod_cnt', _decode_u32)]), + } + + def __init__(self, evt_id, reader, core_id): + """ + see SysViewEvent.__init__() + """ + self.name = 'SysViewPredefinedEvent' + SysViewEvent.__init__(self, evt_id, reader, core_id, self._predef_events_fmt) + + +class SysViewOSEvent(SysViewEvent): + """ + OS related SystemView events class. + """ + def __init__(self, evt_id, reader, core_id, events_fmt_map): + """ + see SysViewEvent.__init__() + """ + self.name = 'SysViewOSEvent' + SysViewEvent.__init__(self, evt_id, reader, core_id, events_fmt_map) + + +class SysViewHeapEvent(SysViewEvent): + """ + Heap related SystemView events class. + + Attributes + ---------- + events_fmt : dict + see return value of _read_events_map() + """ + events_fmt = { + 0: ('esp_sysview_heap_trace_alloc', [SysViewEventParamSimple('addr', _decode_u32), + SysViewEventParamSimple('size', _decode_u32), + SysViewEventParamArray('callers', _decode_u32)]), + 1: ('esp_sysview_heap_trace_free', [SysViewEventParamSimple('addr', _decode_u32), + SysViewEventParamArray('callers', _decode_u32)]), + } + + def __init__(self, evt_id, events_off, reader, core_id): + """ + Constructor. Reads and optionally decodes event. + + Parameters + ---------- + evt_id : int + see SysViewEvent.__init__() + events_off : int + Offset for heap events IDs. Greater or equal to SYSVIEW_MODULE_EVENT_OFFSET. + reader : apptrace.Reader + see SysViewEvent.__init__() + core_id : int + see SysViewEvent.__init__() + """ + self.name = 'SysViewHeapEvent' + cur_events_map = {} + for id in self.events_fmt: + cur_events_map[events_off + id] = self.events_fmt[id] + SysViewEvent.__init__(self, evt_id, reader, core_id, cur_events_map) + + +class SysViewTraceDataParser(apptrace.TraceDataProcessor): + """ + Base SystemView trace data parser class. + + Attributes + ---------- + STREAMID_SYS : int + system events stream ID. Reserved for internal uses. + STREAMID_LOG : int + log events stream ID. + STREAMID_HEAP : int + heap events stream ID. + """ + STREAMID_SYS = -1 + STREAMID_LOG = 0 + STREAMID_HEAP = 1 + + def __init__(self, print_events=False, core_id=0): + """ + Constructor. + + Parameters + ---------- + print_events : bool + see apptrace.TraceDataProcessor.__init__() + core_id : int + id of the core this parser object relates to. + """ + apptrace.TraceDataProcessor.__init__(self, print_events, keep_all_events=True) + self.sys_info = None + self._last_ts = 0 + self.irqs_info = {} + self.tasks_info = {} + self.core_id = core_id + + def _parse_irq_desc(self, desc): + """ + Parses IRQ description. + + Parameters + ---------- + desc : string + IRQ description string. + + Returns + ------- + tuple + a tuple with IRQ number and name or None on error. + """ + m = re.match('I#([0-9]+)=(.+)', desc) + if m: + return m.group(2),m.group(1) + return None + + def _update_ts(self, ts): + """ + Calculates real event timestamp. + + Parameters + ---------- + ts : int + Event timestamp offset. + + Returns + ------- + float + real event timestamp. + """ + self._last_ts += ts + return float(self._last_ts) / self.sys_info.params['sys_freq'].value + + def read_extension_event(self, evt_id, reader): + """ + Reads extension event. + Default implementation which just reads out event. + + Parameters + ---------- + evt_id : int + Event ID. + reader : apptrace.Reader + Trace reader object. + + Returns + ------- + SysViewEvent + if this is top level parser returns object for generic event, + otherwise returns None indicating to the calling top level parser + that extension event are not supported. + """ + if self.root_proc == self: + # by default just read out and skip unknown event + return SysViewEvent(evt_id, reader, self.core_id) + return None # let decide to root parser + + def read_event(self, reader, os_evt_map): + """ + Reads pre-defined or OS-related event. + + Parameters + ---------- + reader : apptrace.Reader + Trace reader object. + os_evt_map : dict + see return value of _read_events_map() + + Returns + ------- + SysViewEvent + pre-defined, OS-related or extension event object. + """ + evt_hdr, = struct.unpack('= SYSVIEW_MODULE_EVENT_OFFSET and evt_id >= self.events_off and + evt_id < self.events_off + self.events_num): + return SysViewHeapEvent(evt_id, self.events_off, reader, self.core_id) + return SysViewTraceDataParser.read_extension_event(self, evt_id, reader) + + def on_new_event(self, event): + """ + Keeps track of heap module descriptions. + """ + if self.root_proc == self: + SysViewTraceDataParser.on_new_event(self, event) + if event.id == SYSVIEW_EVTID_MODULEDESC and event.params['desc'].value == 'ESP32 SystemView Heap Tracing Module': + self.events_off = event.params['evt_off'].value + + +class SysViewHeapTraceDataProcessor(SysViewTraceDataProcessor, apptrace.BaseHeapTraceDataProcessorImpl): + """ + SystemView trace data processor supporting heap events. + """ + def __init__(self, toolchain_pref, elf_path, traces=[], print_events=False, print_heap_events=False): + """ + Constructor. + see SysViewTraceDataProcessor.__init__() + see apptrace.BaseHeapTraceDataProcessorImpl.__init__() + """ + SysViewTraceDataProcessor.__init__(self, traces, print_events) + apptrace.BaseHeapTraceDataProcessorImpl.__init__(self, print_heap_events) + self.toolchain = toolchain_pref + self.elf_path = elf_path + self.no_ctx_events = [] + + def on_new_event(self, event): + """ + Processes heap events. + """ + if self.root_proc == self: + SysViewTraceDataProcessor.on_new_event(self, event) + heap_stream = self.root_proc.get_trace_stream(event.core_id, SysViewTraceDataParser.STREAMID_HEAP) + if (heap_stream.events_off < SYSVIEW_MODULE_EVENT_OFFSET or event.id < heap_stream.events_off or + event.id >= (heap_stream.events_off + heap_stream.events_num)): + return + curr_ctx = self._get_curr_context(event.core_id) + if curr_ctx: + in_irq = curr_ctx.irq + ctx_name = curr_ctx.name + else: + in_irq = False + ctx_name = 'None' + if (event.id - heap_stream.events_off) == 0: + heap_event = apptrace.HeapTraceEvent(ctx_name, in_irq, event.core_id, event.ts, + True, event.params['size'].value, event.params['addr'].value, + event.params['callers'].value, toolchain=self.toolchain, + elf_path=self.elf_path) + else: + heap_event = apptrace.HeapTraceEvent(ctx_name, in_irq, event.core_id, event.ts, + False, 0, event.params['addr'].value, + event.params['callers'].value, toolchain=self.toolchain, + elf_path=self.elf_path) + if not curr_ctx: + # postpone events handling till their context is known + self.no_ctx_events.append(heap_event) + else: + # here we know the previous context: we switched from it or implied upon the 1st context switching event + prev_ctx = self._get_prev_context(event.core_id) + for cached_evt in self.no_ctx_events: + cached_evt.ctx_name = prev_ctx.name + cached_evt.in_irq = prev_ctx.irq + apptrace.BaseHeapTraceDataProcessorImpl.on_new_event(self, cached_evt) + del self.no_ctx_events[:] + apptrace.BaseHeapTraceDataProcessorImpl.on_new_event(self, heap_event) + + def print_report(self): + """ + see apptrace.TraceDataProcessor.print_report() + """ + if self.root_proc == self: + SysViewTraceDataProcessor.print_report(self) + apptrace.BaseHeapTraceDataProcessorImpl.print_report(self) + + +class SysViewLogTraceEvent(apptrace.LogTraceEvent): + """ + SystemView log event. + """ + def __init__(self, ts, msg): + """ + Constructor. + + Parameters + ---------- + msg : string + Log message string. + """ + self.msg = msg + self.ts = ts + + def get_message(self, unused): + """ + Retrieves log message. + + Returns + ------- + string + formatted log message + """ + return '[{:.9f}] LOG: {}'.format(self.ts, self.msg) + + +class SysViewLogTraceDataParser(SysViewTraceDataParser): + """ + SystemView trace data parser supporting log events. + """ + def on_new_event(self, event): + """ + see SysViewTraceDataParser.on_new_event() + """ + if self.root_proc == self: + SysViewTraceDataParser.on_new_event(self, event) + + +class SysViewLogTraceDataProcessor(SysViewTraceDataProcessor, apptrace.BaseLogTraceDataProcessorImpl): + """ + SystemView trace data processor supporting heap events. + """ + def __init__(self, traces=[], print_events=False, print_log_events=False): + """ + Constructor. + see SysViewTraceDataProcessor.__init__() + see apptrace.BaseLogTraceDataProcessorImpl.__init__() + """ + SysViewTraceDataProcessor.__init__(self, traces, print_events) + apptrace.BaseLogTraceDataProcessorImpl.__init__(self, print_log_events) + + def on_new_event(self, event): + """ + Processes log events. + """ + if self.root_proc == self: + SysViewTraceDataProcessor.on_new_event(self, event) + if event.id == SYSVIEW_EVTID_PRINT_FORMATTED: + log_evt = SysViewLogTraceEvent(event.ts, event.params['msg'].value) + apptrace.BaseLogTraceDataProcessorImpl.on_new_event(self, log_evt) + + def print_report(self): + """ + see apptrace.TraceDataProcessor.print_report() + """ + if self.root_proc == self: + SysViewTraceDataProcessor.print_report(self) + apptrace.BaseLogTraceDataProcessorImpl.print_report(self) diff --git a/tools/esp_app_trace/logtrace_proc.py b/tools/esp_app_trace/logtrace_proc.py index 37463edb1..4ec42e8ae 100755 --- a/tools/esp_app_trace/logtrace_proc.py +++ b/tools/esp_app_trace/logtrace_proc.py @@ -5,11 +5,9 @@ from __future__ import print_function import argparse import struct import sys -import pylibelf as elf -import pylibelf.util as elfutil -import pylibelf.iterators as elfiter -import pylibelf.constants as elfconst +import elftools.elf.elffile as elffile import ctypes +import espytrace.apptrace as apptrace class ESPLogTraceParserError(RuntimeError): @@ -77,34 +75,14 @@ def logtrace_parse(fname): return recs -def logtrace_get_str_from_elf(felf, str_addr): - tgt_str = "" - for sect in elfiter.sections(felf): - hdr = elfutil.section_hdr(felf, sect) - if hdr.sh_addr == 0 or hdr.sh_type != elfconst.SHT_PROGBITS: - continue - if str_addr < hdr.sh_addr or str_addr >= hdr.sh_addr + hdr.sh_size: - continue - # print("Found SECT: %x..%x @ %x" % (hdr.sh_addr, hdr.sh_addr + hdr.sh_size, str_addr - hdr.sh_addr)) - sec_data = elfiter.getOnlyData(sect).contents - buf = ctypes.cast(sec_data.d_buf, ctypes.POINTER(ctypes.c_char)) - for i in range(str_addr - hdr.sh_addr, hdr.sh_size): - if buf[i] == "\0": - break - tgt_str += buf[i] - if len(tgt_str) > 0: - return tgt_str - return None - - def logtrace_formated_print(recs, elfname, no_err): try: - felf = elfutil.open_elf(elfname) + felf = elffile.ELFFile(open(elfname, 'rb')) except OSError as e: raise ESPLogTraceParserError("Failed to open ELF file (%s)!" % e) for lrec in recs: - fmt_str = logtrace_get_str_from_elf(felf, lrec.fmt_addr) + fmt_str = apptrace.get_str_from_elf(felf, lrec.fmt_addr) i = 0 prcnt_idx = 0 while i < len(lrec.args): @@ -114,7 +92,7 @@ def logtrace_formated_print(recs, elfname, no_err): prcnt_idx += 1 # goto next char if fmt_str[prcnt_idx] == 's': # find string - arg_str = logtrace_get_str_from_elf(felf, lrec.args[i]) + arg_str = apptrace.get_str_from_elf(felf, lrec.args[i]) if arg_str: lrec.args[i] = arg_str i += 1 @@ -129,8 +107,7 @@ def logtrace_formated_print(recs, elfname, no_err): if not no_err: print("Print error (%s)" % e) print("\nFmt = {%s}, args = %d/%s" % (fmt_str, len(lrec.args), lrec.args)) - - elf.elf_end(felf) + felf.stream.close() def main(): diff --git a/tools/esp_app_trace/pylibelf/.gitignore b/tools/esp_app_trace/pylibelf/.gitignore deleted file mode 100644 index 42ac64781..000000000 --- a/tools/esp_app_trace/pylibelf/.gitignore +++ /dev/null @@ -1,59 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.cache -nosetests.xml -coverage.xml - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -*.swp -*.swo -*.swn - diff --git a/tools/esp_app_trace/pylibelf/LICENSE b/tools/esp_app_trace/pylibelf/LICENSE deleted file mode 100644 index 2e216332f..000000000 --- a/tools/esp_app_trace/pylibelf/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 d1m0 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/tools/esp_app_trace/pylibelf/README.md b/tools/esp_app_trace/pylibelf/README.md deleted file mode 100644 index 1019a8f32..000000000 --- a/tools/esp_app_trace/pylibelf/README.md +++ /dev/null @@ -1,5 +0,0 @@ -pylibelf -======== - -Python binding for libelf. - diff --git a/tools/esp_app_trace/pylibelf/__init__.py b/tools/esp_app_trace/pylibelf/__init__.py deleted file mode 100644 index d00da18ab..000000000 --- a/tools/esp_app_trace/pylibelf/__init__.py +++ /dev/null @@ -1,155 +0,0 @@ -from types import * -from constants import * -from ctypes import * - -lelf=CDLL("libelf.so.1") - -__all__ = [] - -all_objs = [] - -class ElfError(Exception): - def __init__(self, msg): - self.msg = msg - self.errno = elf_errno() - self.elfmsg = elf_errmsg(self.errno) - - def __str__(self): - return "ElfError(%d, %s): %s" % (self.errno, self.elfmsg, self.msg) - -__all__.append("ElfError") - -def nonNullDec(f): - def decorated(*args): - res = f(*args) - try: - a = res.contents - all_objs.append(res) - except ValueError: # NULL - raise ElfError(f.__name__ + " returned NULL") - return res - return decorated - -def nonNegDec(f): - def decorated(*args): - res = f(*args) - if 0 > res: - raise ElfError(f.__name__ + " returned %d" % (res,)) - return res - return decorated - -def badValDec(badVal): - def decorator(f): - def decorated(*args): - res = f(*args) - if res == badVal: - raise ElfError(f.__name__ + " returned %s" % (str(res),)) - return res - return decorated - return decorator - -def define(f, argtypes, restype, err_decorator = None): - f.argtypes = argtypes - f.restype = restype - name = f.__name__ - __all__.append(name) - - if (err_decorator != None): - f = err_decorator(f) - - globals()[name] = f - -define(lelf.elf_version, [ c_int ], c_int ) - -if (elf_version(EV_CURRENT) == EV_NONE): - raise Exception("Version mismatch") - -off_t = c_size_t # TODO(dbounov): Figure out actual off_t type - -define(lelf.elf_begin, [ c_int, Elf_Cmd, ElfP ], ElfP) -define(lelf.elf_getident, [ ElfP, POINTER(c_int) ], POINTER(Elf_IdentT), nonNullDec) -define(lelf.elf_end, [ ElfP ], c_int, nonNegDec ) -define(lelf.elf_cntl, [ ElfP, c_int ], c_int, nonNegDec) -define(lelf.elf_errmsg, [ c_int ], c_char_p) -define(lelf.elf_errno, [ ], c_int) -define(lelf.elf_fill, [ c_int ], None) -define(lelf.elf_flagdata, [ Elf_DataP, c_int, c_uint ], c_uint) -define(lelf.elf_flagehdr, [ ElfP, c_int, c_uint ], c_uint) -define(lelf.elf_flagelf, [ ElfP, c_int, c_uint ], c_uint) -define(lelf.elf_flagphdr, [ ElfP, c_int, c_uint ], c_uint) -define(lelf.elf_flagscn, [ Elf_ScnP, c_int, c_uint ], c_uint) -define(lelf.elf_flagshdr, [ Elf_ScnP, c_int, c_uint ], c_uint) -define(lelf.elf_getarhdr, [ ElfP ], POINTER(Elf_Arhdr)) -#define(lelf.elf_getarsym, [ ], ) -define(lelf.elf_getbase, [ ElfP ], off_t, nonNegDec) -define(lelf.elf_getdata, [ Elf_ScnP, Elf_DataP ], Elf_DataP) -define(lelf.elf_getscn, [ ElfP, c_size_t ], Elf_ScnP, nonNullDec ) -define(lelf.elf_getshnum, [ ElfP, POINTER(c_size_t) ], c_int, nonNegDec ) -define(lelf.elf_getshstrndx, [ ElfP, POINTER(c_size_t) ], c_int, nonNegDec ) -define(lelf.elf_hash, [ c_char_p ], c_ulong) -define(lelf.elf_kind, [ ElfP ], c_int ) -define(lelf.elf_memory, [ POINTER(c_char), c_size_t ], ElfP, nonNullDec) -define(lelf.elf_ndxscn, [ Elf_ScnP ], c_size_t, badValDec(SHN_UNDEF)) -define(lelf.elf_newdata, [ Elf_ScnP ], Elf_DataP, nonNullDec) -define(lelf.elf_newscn, [ ElfP ], Elf_ScnP, nonNullDec) -#define(lelf.elf_next, [ ], ) -define(lelf.elf_nextscn, [ ElfP, Elf_ScnP ], Elf_ScnP) -#define(lelf.elf_rand, [ ], ) -define(lelf.elf_rawdata, [ Elf_ScnP, Elf_DataP ], Elf_DataP) -#define(lelf.elf_rawfile, [ ], ) -define(lelf.elf_strptr, [ ElfP, c_size_t, c_size_t ], c_char_p) -define(lelf.elf_update, [ ElfP, c_int], off_t, nonNegDec) - -define(lelf.elf32_checksum, [ ElfP ], c_long) -define(lelf.elf32_fsize, [ c_int, c_size_t, c_uint ], c_size_t, nonNegDec) -define(lelf.elf32_getehdr, [ ElfP ], POINTER(Elf32_Ehdr), nonNullDec) -define(lelf.elf32_getphdr, [ ElfP ], POINTER(Elf32_Phdr), nonNullDec) -define(lelf.elf32_getshdr, [ Elf_ScnP ], POINTER(Elf32_Shdr), nonNullDec) -define(lelf.elf32_newehdr, [ ElfP ], POINTER(Elf32_Ehdr), nonNullDec) -define(lelf.elf32_newphdr, [ ElfP, c_size_t ], POINTER(Elf32_Phdr), nonNullDec) -define(lelf.elf32_xlatetof, [ Elf_DataP, Elf_DataP, c_uint ], Elf_DataP, nonNullDec) -define(lelf.elf32_xlatetom, [ Elf_DataP, Elf_DataP, c_uint ], Elf_DataP, nonNullDec) - - -define(lelf.elf64_checksum, [ ElfP ], c_long ) -define(lelf.elf64_fsize, [ c_int, c_size_t, c_uint ], c_size_t, nonNegDec) -define(lelf.elf64_getehdr,[ ElfP ], POINTER(Elf64_Ehdr), nonNullDec) -define(lelf.elf64_getphdr, [ ElfP ], POINTER(Elf64_Phdr), nonNullDec) -define(lelf.elf64_getshdr, [ Elf_ScnP ], POINTER(Elf64_Shdr), nonNullDec) -define(lelf.elf64_newehdr, [ ElfP ], POINTER(Elf64_Ehdr), nonNullDec) -define(lelf.elf64_newphdr, [ ElfP, c_size_t ], POINTER(Elf64_Phdr), nonNullDec) -define(lelf.elf64_xlatetof, [ Elf_DataP, Elf_DataP, c_uint ], Elf_DataP, nonNullDec) -define(lelf.elf64_xlatetom, [ Elf_DataP, Elf_DataP, c_uint ], Elf_DataP, nonNullDec) - -# NOTE(dbounov): Ignoring gelf functions for now - -#define(lelf.gelf_checksum, [ ], ) -#define(lelf.gelf_fsize, [ ], ) -#define(lelf.gelf_getcap, [ ], ) -#define(lelf.gelf_getclass, [ ], ) -#define(lelf.gelf_getdyn, [ ], ) -#define(lelf.gelf_getehdr, [ ], ) -#define(lelf.gelf_getmove, [ ], ) -#define(lelf.gelf_getphdr, [ ], ) -#define(lelf.gelf_getrel, [ ], ) -#define(lelf.gelf_getrela, [ ], ) -#define(lelf.gelf_getshdr, [ ], ) -#define(lelf.gelf_getsym, [ ], ) -#define(lelf.gelf_getsyminfo, [ ], ) -#define(lelf.gelf_getsymshndx, [ ], ) -#define(lelf.gelf_newehdr, [ ], ) -#define(lelf.gelf_newphdr, [ ], ) -#define(lelf.gelf_update_cap, [ ], ) -#define(lelf.gelf_update_dyn, [ ], ) -#define(lelf.gelf_update_ehdr, [ ], ) -#define(lelf.gelf_update_move, [ ], ) -#define(lelf.gelf_update_phdr, [ ], ) -#define(lelf.gelf_update_rel, [ ], ) -#define(lelf.gelf_update_rela, [ ], ) -#define(lelf.gelf_update_shdr, [ ], ) -#define(lelf.gelf_update_sym, [ ], ) -#define(lelf.gelf_update_symshndx, [ ], ) -#define(lelf.gelf_update_syminfo, [ ], ) -#define(lelf.gelf_xlatetof, [ ], ) -#define(lelf.gelf_xlatetom, [ ], ) -#define(lelf.nlist, [ ], ) diff --git a/tools/esp_app_trace/pylibelf/constants/__init__.py b/tools/esp_app_trace/pylibelf/constants/__init__.py deleted file mode 100644 index 890f97abb..000000000 --- a/tools/esp_app_trace/pylibelf/constants/__init__.py +++ /dev/null @@ -1,1850 +0,0 @@ - -# Really simple expression types to handle arithmetic expressions referring -# to other # defines -class MacroExp: pass -class MacroRef(MacroExp): - def __init__(s, name): - s._name = name; - - def eval(s): - return lookup(s._name) - - def __add__(s, o): - return MacroAdd(s, o) - - def __radd__(s, o): - return MacroAdd(o, s) - -class MacroAdd(MacroExp): - def __init__(s, l, r): - s.l = l; - s.r = r; - - def eval(s): - l = s.l.eval() if (isinstance(s.l, MacroExp)) else s.l - r = s.r.eval() if (isinstance(s.r, MacroExp)) else s.r - - return l + r - - def __add__(s, o): - return MacroAdd(s, o) - - def __radd__(s, o): - return MacroAdd(o, s) - - -def lookup(n): - v = _consts[n] - if isinstance(v, MacroExp): - return v.eval() - else: - return v - -# Macro constants -_consts = { - "EI_NIDENT": 16 , # - "EI_MAG0": 0 , # File identification byte 0 index - "ELFMAG0": 0x7f , # Magic number byte 0 - "EI_MAG1": 1 , # File identification byte 1 index - "ELFMAG1": 'E' , # Magic number byte 1 - "EI_MAG2": 2 , # File identification byte 2 index - "ELFMAG2": 'L' , # Magic number byte 2 - "EI_MAG3": 3 , # File identification byte 3 index - "ELFMAG3": 'F' , # Magic number byte 3 - "ELFMAG": "\177ELF" , # - "SELFMAG": 4 , # - "EI_CLASS": 4 , # File class byte index - "ELFCLASSNONE": 0 , # Invalid class - "ELFCLASS32": 1 , # 32-bit objects - "ELFCLASS64": 2 , # 64-bit objects - "ELFCLASSNUM": 3 , # - "EI_DATA": 5 , # Data encoding byte index - "ELFDATANONE": 0 , # Invalid data encoding - "ELFDATA2LSB": 1 , # 2's complement, little endian - "ELFDATA2MSB": 2 , # 2's complement, big endian - "ELFDATANUM": 3 , # - "EI_VERSION": 6 , # File version byte index - "EI_OSABI": 7 , # OS ABI identification - "ELFOSABI_NONE": 0 , # UNIX System V ABI - "ELFOSABI_SYSV": 0 , # Alias. - "ELFOSABI_HPUX": 1 , # HP-UX - "ELFOSABI_NETBSD": 2 , # NetBSD. - "ELFOSABI_GNU": 3 , # Object uses GNU ELF extensions. - "ELFOSABI_LINUX": MacroRef("ELFOSABI_GNU") , # Compatibility alias. - "ELFOSABI_SOLARIS": 6 , # Sun Solaris. - "ELFOSABI_AIX": 7 , # IBM AIX. - "ELFOSABI_IRIX": 8 , # SGI Irix. - "ELFOSABI_FREEBSD": 9 , # FreeBSD. - "ELFOSABI_TRU64": 10 , # Compaq TRU64 UNIX. - "ELFOSABI_MODESTO": 11 , # Novell Modesto. - "ELFOSABI_OPENBSD": 12 , # OpenBSD. - "ELFOSABI_ARM_AEABI": 64 , # ARM EABI - "ELFOSABI_ARM": 97 , # ARM - "ELFOSABI_STANDALONE": 255 , # Standalone (embedded) application - "EI_ABIVERSION": 8 , # ABI version - "EI_PAD": 9 , # Byte index of padding bytes - "ET_NONE": 0 , # No file type - "ET_REL": 1 , # Relocatable file - "ET_EXEC": 2 , # Executable file - "ET_DYN": 3 , # Shared object file - "ET_CORE": 4 , # Core file - "ET_NUM": 5 , # Number of defined types - "ET_LOOS": 0xfe00 , # OS-specific range start - "ET_HIOS": 0xfeff , # OS-specific range end - "ET_LOPROC": 0xff00 , # Processor-specific range start - "ET_HIPROC": 0xffff , # Processor-specific range end - "EM_NONE": 0 , # No machine - "EM_M32": 1 , # AT&T WE 32100 - "EM_SPARC": 2 , # SUN SPARC - "EM_386": 3 , # Intel 80386 - "EM_68K": 4 , # Motorola m68k family - "EM_88K": 5 , # Motorola m88k family - "EM_860": 7 , # Intel 80860 - "EM_MIPS": 8 , # MIPS R3000 big-endian - "EM_S370": 9 , # IBM System/370 - "EM_MIPS_RS3_LE": 10 , # MIPS R3000 little-endian - "EM_PARISC": 15 , # HPPA - "EM_VPP500": 17 , # Fujitsu VPP500 - "EM_SPARC32PLUS": 18 , # Sun's "v8plus" - "EM_960": 19 , # Intel 80960 - "EM_PPC": 20 , # PowerPC - "EM_PPC64": 21 , # PowerPC 64-bit - "EM_S390": 22 , # IBM S390 - "EM_V800": 36 , # NEC V800 series - "EM_FR20": 37 , # Fujitsu FR20 - "EM_RH32": 38 , # TRW RH-32 - "EM_RCE": 39 , # Motorola RCE - "EM_ARM": 40 , # ARM - "EM_FAKE_ALPHA": 41 , # Digital Alpha - "EM_SH": 42 , # Hitachi SH - "EM_SPARCV9": 43 , # SPARC v9 64-bit - "EM_TRICORE": 44 , # Siemens Tricore - "EM_ARC": 45 , # Argonaut RISC Core - "EM_H8_300": 46 , # Hitachi H8/300 - "EM_H8_300H": 47 , # Hitachi H8/300H - "EM_H8S": 48 , # Hitachi H8S - "EM_H8_500": 49 , # Hitachi H8/500 - "EM_IA_64": 50 , # Intel Merced - "EM_MIPS_X": 51 , # Stanford MIPS-X - "EM_COLDFIRE": 52 , # Motorola Coldfire - "EM_68HC12": 53 , # Motorola M68HC12 - "EM_MMA": 54 , # Fujitsu MMA Multimedia Accelerator - "EM_PCP": 55 , # Siemens PCP - "EM_NCPU": 56 , # Sony nCPU embeeded RISC - "EM_NDR1": 57 , # Denso NDR1 microprocessor - "EM_STARCORE": 58 , # Motorola Start*Core processor - "EM_ME16": 59 , # Toyota ME16 processor - "EM_ST100": 60 , # STMicroelectronic ST100 processor - "EM_TINYJ": 61 , # Advanced Logic Corp. Tinyj emb.fam - "EM_X86_64": 62 , # AMD x86-64 architecture - "EM_PDSP": 63 , # Sony DSP Processor - "EM_FX66": 66 , # Siemens FX66 microcontroller - "EM_ST9PLUS": 67 , # STMicroelectronics ST9+ 8/16 mc - "EM_ST7": 68 , # STmicroelectronics ST7 8 bit mc - "EM_68HC16": 69 , # Motorola MC68HC16 microcontroller - "EM_68HC11": 70 , # Motorola MC68HC11 microcontroller - "EM_68HC08": 71 , # Motorola MC68HC08 microcontroller - "EM_68HC05": 72 , # Motorola MC68HC05 microcontroller - "EM_SVX": 73 , # Silicon Graphics SVx - "EM_ST19": 74 , # STMicroelectronics ST19 8 bit mc - "EM_VAX": 75 , # Digital VAX - "EM_CRIS": 76 , # Axis Communications 32-bit embedded processor - "EM_JAVELIN": 77 , # Infineon Technologies 32-bit embedded processor - "EM_FIREPATH": 78 , # Element 14 64-bit DSP Processor - "EM_ZSP": 79 , # LSI Logic 16-bit DSP Processor - "EM_MMIX": 80 , # Donald Knuth's educational 64-bit processor - "EM_HUANY": 81 , # Harvard University machine-independent object files - "EM_PRISM": 82 , # SiTera Prism - "EM_AVR": 83 , # Atmel AVR 8-bit microcontroller - "EM_FR30": 84 , # Fujitsu FR30 - "EM_D10V": 85 , # Mitsubishi D10V - "EM_D30V": 86 , # Mitsubishi D30V - "EM_V850": 87 , # NEC v850 - "EM_M32R": 88 , # Mitsubishi M32R - "EM_MN10300": 89 , # Matsushita MN10300 - "EM_MN10200": 90 , # Matsushita MN10200 - "EM_PJ": 91 , # picoJava - "EM_OPENRISC": 92 , # OpenRISC 32-bit embedded processor - "EM_ARC_A5": 93 , # ARC Cores Tangent-A5 - "EM_XTENSA": 94 , # Tensilica Xtensa Architecture - "EM_NUM": 95 , # - "EM_ALPHA": 0x9026 , # - "EV_NONE": 0 , # Invalid ELF version - "EV_CURRENT": 1 , # Current version - "EV_NUM": 2 , # - "SHN_UNDEF": 0 , # Undefined section - "SHN_LORESERVE": 0xff00 , # Start of reserved indices - "SHN_LOPROC": 0xff00 , # Start of processor-specific - "SHN_BEFORE": 0xff00 , # Order section before all others - "SHN_AFTER": 0xff01 , # Order section after all others - "SHN_HIPROC": 0xff1f , # End of processor-specific - "SHN_LOOS": 0xff20 , # Start of OS-specific - "SHN_HIOS": 0xff3f , # End of OS-specific - "SHN_ABS": 0xfff1 , # Associated symbol is absolute - "SHN_COMMON": 0xfff2 , # Associated symbol is common - "SHN_XINDEX": 0xffff , # Index is in extra table. - "SHN_HIRESERVE": 0xffff , # End of reserved indices - "SHT_NULL": 0 , # Section header table entry unused - "SHT_PROGBITS": 1 , # Program data - "SHT_SYMTAB": 2 , # Symbol table - "SHT_STRTAB": 3 , # String table - "SHT_RELA": 4 , # Relocation entries with addends - "SHT_HASH": 5 , # Symbol hash table - "SHT_DYNAMIC": 6 , # Dynamic linking information - "SHT_NOTE": 7 , # Notes - "SHT_NOBITS": 8 , # Program space with no data (bss) - "SHT_REL": 9 , # Relocation entries, no addends - "SHT_SHLIB": 10 , # Reserved - "SHT_DYNSYM": 11 , # Dynamic linker symbol table - "SHT_INIT_ARRAY": 14 , # Array of constructors - "SHT_FINI_ARRAY": 15 , # Array of destructors - "SHT_PREINIT_ARRAY": 16 , # Array of pre-constructors - "SHT_GROUP": 17 , # Section group - "SHT_SYMTAB_SHNDX": 18 , # Extended section indeces - "SHT_NUM": 19 , # Number of defined types. - "SHT_LOOS": 0x60000000 , # Start OS-specific. - "SHT_GNU_ATTRIBUTES": 0x6ffffff5 , # Object attributes. - "SHT_GNU_HASH": 0x6ffffff6 , # GNU-style hash table. - "SHT_GNU_LIBLIST": 0x6ffffff7 , # Prelink library list - "SHT_CHECKSUM": 0x6ffffff8 , # Checksum for DSO content. - "SHT_LOSUNW": 0x6ffffffa , # Sun-specific low bound. - "SHT_SUNW_move": 0x6ffffffa , # - "SHT_SUNW_COMDAT": 0x6ffffffb , # - "SHT_SUNW_syminfo": 0x6ffffffc , # - "SHT_GNU_verdef": 0x6ffffffd , # Version definition section. - "SHT_GNU_verneed": 0x6ffffffe , # Version needs section. - "SHT_GNU_versym": 0x6fffffff , # Version symbol table. - "SHT_HISUNW": 0x6fffffff , # Sun-specific high bound. - "SHT_HIOS": 0x6fffffff , # End OS-specific type - "SHT_LOPROC": 0x70000000 , # Start of processor-specific - "SHT_HIPROC": 0x7fffffff , # End of processor-specific - "SHT_LOUSER": 0x80000000 , # Start of application-specific - "SHT_HIUSER": 0x8fffffff , # End of application-specific - "SHF_MASKOS": 0x0ff00000 , # OS-specific. - "SHF_MASKPROC": 0xf0000000 , # Processor-specific - "SHF_ORDERED": (1 << 30) , # Special ordering requirement - "SHF_EXCLUDE": (1 << 31) , # Section is excluded unless - "GRP_COMDAT": 0x1 , # Mark group as COMDAT. - "SYMINFO_BT_SELF": 0xffff , # Symbol bound to self - "SYMINFO_BT_PARENT": 0xfffe , # Symbol bound to parent - "SYMINFO_BT_LOWRESERVE": 0xff00 , # Beginning of reserved entries - "SYMINFO_FLG_DIRECT": 0x0001 , # Direct bound symbol - "SYMINFO_FLG_PASSTHRU": 0x0002 , # Pass-thru symbol for translator - "SYMINFO_FLG_COPY": 0x0004 , # Symbol is a copy-reloc - "SYMINFO_FLG_LAZYLOAD": 0x0008 , # Symbol bound to object to be lazy - "SYMINFO_NONE": 0 , # - "SYMINFO_CURRENT": 1 , # - "SYMINFO_NUM": 2 , # - "STB_LOCAL": 0 , # Local symbol - "STB_GLOBAL": 1 , # Global symbol - "STB_WEAK": 2 , # Weak symbol - "STB_NUM": 3 , # Number of defined types. - "STB_LOOS": 10 , # Start of OS-specific - "STB_GNU_UNIQUE": 10 , # Unique symbol. - "STB_HIOS": 12 , # End of OS-specific - "STB_LOPROC": 13 , # Start of processor-specific - "STB_HIPROC": 15 , # End of processor-specific - "STT_NOTYPE": 0 , # Symbol type is unspecified - "STT_OBJECT": 1 , # Symbol is a data object - "STT_FUNC": 2 , # Symbol is a code object - "STT_SECTION": 3 , # Symbol associated with a section - "STT_FILE": 4 , # Symbol's name is file name - "STT_COMMON": 5 , # Symbol is a common data object - "STT_TLS": 6 , # Symbol is thread-local data object - "STT_NUM": 7 , # Number of defined types. - "STT_LOOS": 10 , # Start of OS-specific - "STT_GNU_IFUNC": 10 , # Symbol is indirect code object - "STT_HIOS": 12 , # End of OS-specific - "STT_LOPROC": 13 , # Start of processor-specific - "STT_HIPROC": 15 , # End of processor-specific - "STN_UNDEF": 0 , # End of a chain. - "STV_DEFAULT": 0 , # Default symbol visibility rules - "STV_INTERNAL": 1 , # Processor specific hidden class - "STV_HIDDEN": 2 , # Sym unavailable in other modules - "STV_PROTECTED": 3 , # Not preemptible, not exported - "PN_XNUM": 0xffff , # - "PT_NULL": 0 , # Program header table entry unused - "PT_LOAD": 1 , # Loadable program segment - "PT_DYNAMIC": 2 , # Dynamic linking information - "PT_INTERP": 3 , # Program interpreter - "PT_NOTE": 4 , # Auxiliary information - "PT_SHLIB": 5 , # Reserved - "PT_PHDR": 6 , # Entry for header table itself - "PT_TLS": 7 , # Thread-local storage segment - "PT_NUM": 8 , # Number of defined types - "PT_LOOS": 0x60000000 , # Start of OS-specific - "PT_GNU_EH_FRAME": 0x6474e550 , # GCC .eh_frame_hdr segment - "PT_GNU_STACK": 0x6474e551 , # Indicates stack executability - "PT_GNU_RELRO": 0x6474e552 , # Read-only after relocation - "PT_LOSUNW": 0x6ffffffa , # - "PT_SUNWBSS": 0x6ffffffa , # Sun Specific segment - "PT_SUNWSTACK": 0x6ffffffb , # Stack segment - "PT_HISUNW": 0x6fffffff , # - "PT_HIOS": 0x6fffffff , # End of OS-specific - "PT_LOPROC": 0x70000000 , # Start of processor-specific - "PT_HIPROC": 0x7fffffff , # End of processor-specific - "PF_X": (1 << 0) , # Segment is executable - "PF_W": (1 << 1) , # Segment is writable - "PF_R": (1 << 2) , # Segment is readable - "PF_MASKOS": 0x0ff00000 , # OS-specific - "PF_MASKPROC": 0xf0000000 , # Processor-specific - "NT_PRSTATUS": 1 , # Contains copy of prstatus struct - "NT_FPREGSET": 2 , # Contains copy of fpregset struct - "NT_PRPSINFO": 3 , # Contains copy of prpsinfo struct - "NT_PRXREG": 4 , # Contains copy of prxregset struct - "NT_TASKSTRUCT": 4 , # Contains copy of task structure - "NT_PLATFORM": 5 , # String from sysinfo(SI_PLATFORM) - "NT_AUXV": 6 , # Contains copy of auxv array - "NT_GWINDOWS": 7 , # Contains copy of gwindows struct - "NT_ASRS": 8 , # Contains copy of asrset struct - "NT_PSTATUS": 10 , # Contains copy of pstatus struct - "NT_PSINFO": 13 , # Contains copy of psinfo struct - "NT_PRCRED": 14 , # Contains copy of prcred struct - "NT_UTSNAME": 15 , # Contains copy of utsname struct - "NT_LWPSTATUS": 16 , # Contains copy of lwpstatus struct - "NT_LWPSINFO": 17 , # Contains copy of lwpinfo struct - "NT_PRFPXREG": 20 , # Contains copy of fprxregset struct - "NT_PRXFPREG": 0x46e62b7f , # Contains copy of user_fxsr_struct - "NT_PPC_VMX": 0x100 , # PowerPC Altivec/VMX registers - "NT_PPC_SPE": 0x101 , # PowerPC SPE/EVR registers - "NT_PPC_VSX": 0x102 , # PowerPC VSX registers - "NT_386_TLS": 0x200 , # i386 TLS slots (struct user_desc) - "NT_386_IOPERM": 0x201 , # x86 io permission bitmap (1=deny) - "NT_X86_XSTATE": 0x202 , # x86 extended state using xsave - "NT_VERSION": 1 , # Contains a version string. - "DT_NULL": 0 , # Marks end of dynamic section - "DT_NEEDED": 1 , # Name of needed library - "DT_PLTRELSZ": 2 , # Size in bytes of PLT relocs - "DT_PLTGOT": 3 , # Processor defined value - "DT_HASH": 4 , # Address of symbol hash table - "DT_STRTAB": 5 , # Address of string table - "DT_SYMTAB": 6 , # Address of symbol table - "DT_RELA": 7 , # Address of Rela relocs - "DT_RELASZ": 8 , # Total size of Rela relocs - "DT_RELAENT": 9 , # Size of one Rela reloc - "DT_STRSZ": 10 , # Size of string table - "DT_SYMENT": 11 , # Size of one symbol table entry - "DT_INIT": 12 , # Address of init function - "DT_FINI": 13 , # Address of termination function - "DT_SONAME": 14 , # Name of shared object - "DT_RPATH": 15 , # Library search path (deprecated) - "DT_SYMBOLIC": 16 , # Start symbol search here - "DT_REL": 17 , # Address of Rel relocs - "DT_RELSZ": 18 , # Total size of Rel relocs - "DT_RELENT": 19 , # Size of one Rel reloc - "DT_PLTREL": 20 , # Type of reloc in PLT - "DT_DEBUG": 21 , # For debugging; unspecified - "DT_TEXTREL": 22 , # Reloc might modify .text - "DT_JMPREL": 23 , # Address of PLT relocs - "DT_BIND_NOW": 24 , # Process relocations of object - "DT_INIT_ARRAY": 25 , # Array with addresses of init fct - "DT_FINI_ARRAY": 26 , # Array with addresses of fini fct - "DT_INIT_ARRAYSZ": 27 , # Size in bytes of DT_INIT_ARRAY - "DT_FINI_ARRAYSZ": 28 , # Size in bytes of DT_FINI_ARRAY - "DT_RUNPATH": 29 , # Library search path - "DT_FLAGS": 30 , # Flags for the object being loaded - "DT_ENCODING": 32 , # Start of encoded range - "DT_PREINIT_ARRAY": 32 , # Array with addresses of preinit fct - "DT_PREINIT_ARRAYSZ": 33 , # size in bytes of DT_PREINIT_ARRAY - "DT_NUM": 34 , # Number used - "DT_LOOS": 0x6000000d , # Start of OS-specific - "DT_HIOS": 0x6ffff000 , # End of OS-specific - "DT_LOPROC": 0x70000000 , # Start of processor-specific - "DT_HIPROC": 0x7fffffff , # End of processor-specific - "DT_PROCNUM": MacroRef("DT_MIPS_NUM") , # Most used by any processor - "DT_VALRNGLO": 0x6ffffd00 , # - "DT_GNU_PRELINKED": 0x6ffffdf5 , # Prelinking timestamp - "DT_GNU_CONFLICTSZ": 0x6ffffdf6 , # Size of conflict section - "DT_GNU_LIBLISTSZ": 0x6ffffdf7 , # Size of library list - "DT_CHECKSUM": 0x6ffffdf8 , # - "DT_PLTPADSZ": 0x6ffffdf9 , # - "DT_MOVEENT": 0x6ffffdfa , # - "DT_MOVESZ": 0x6ffffdfb , # - "DT_FEATURE_1": 0x6ffffdfc , # Feature selection (DTF_*). - "DT_POSFLAG_1": 0x6ffffdfd , # Flags for DT_* entries, effecting - "DT_SYMINSZ": 0x6ffffdfe , # Size of syminfo table (in bytes) - "DT_SYMINENT": 0x6ffffdff , # Entry size of syminfo - "DT_VALRNGHI": 0x6ffffdff , # - "DT_VALNUM": 12 , # - "DT_ADDRRNGLO": 0x6ffffe00 , # - "DT_GNU_HASH": 0x6ffffef5 , # GNU-style hash table. - "DT_TLSDESC_PLT": 0x6ffffef6 , # - "DT_TLSDESC_GOT": 0x6ffffef7 , # - "DT_GNU_CONFLICT": 0x6ffffef8 , # Start of conflict section - "DT_GNU_LIBLIST": 0x6ffffef9 , # Library list - "DT_CONFIG": 0x6ffffefa , # Configuration information. - "DT_DEPAUDIT": 0x6ffffefb , # Dependency auditing. - "DT_AUDIT": 0x6ffffefc , # Object auditing. - "DT_PLTPAD": 0x6ffffefd , # PLT padding. - "DT_MOVETAB": 0x6ffffefe , # Move table. - "DT_SYMINFO": 0x6ffffeff , # Syminfo table. - "DT_ADDRRNGHI": 0x6ffffeff , # - "DT_ADDRNUM": 11 , # - "DT_VERSYM": 0x6ffffff0 , # - "DT_RELACOUNT": 0x6ffffff9 , # - "DT_RELCOUNT": 0x6ffffffa , # - "DT_FLAGS_1": 0x6ffffffb , # State flags, see DF_1_* below. - "DT_VERDEF": 0x6ffffffc , # Address of version definition - "DT_VERDEFNUM": 0x6ffffffd , # Number of version definitions - "DT_VERNEED": 0x6ffffffe , # Address of table with needed - "DT_VERNEEDNUM": 0x6fffffff , # Number of needed versions - "DT_VERSIONTAGNUM": 16 , # - "DT_AUXILIARY": 0x7ffffffd , # Shared object to load before self - "DT_FILTER": 0x7fffffff , # Shared object to get values from - "DT_EXTRANUM": 3 , # - "DF_ORIGIN": 0x00000001 , # Object may use DF_ORIGIN - "DF_SYMBOLIC": 0x00000002 , # Symbol resolutions starts here - "DF_TEXTREL": 0x00000004 , # Object contains text relocations - "DF_BIND_NOW": 0x00000008 , # No lazy binding for this object - "DF_STATIC_TLS": 0x00000010 , # Module uses the static TLS model - "DF_1_NOW": 0x00000001 , # Set RTLD_NOW for this object. - "DF_1_GLOBAL": 0x00000002 , # Set RTLD_GLOBAL for this object. - "DF_1_GROUP": 0x00000004 , # Set RTLD_GROUP for this object. - "DF_1_NODELETE": 0x00000008 , # Set RTLD_NODELETE for this object. - "DF_1_LOADFLTR": 0x00000010 , # Trigger filtee loading at runtime. - "DF_1_INITFIRST": 0x00000020 , # Set RTLD_INITFIRST for this object - "DF_1_NOOPEN": 0x00000040 , # Set RTLD_NOOPEN for this object. - "DF_1_ORIGIN": 0x00000080 , # $ORIGIN must be handled. - "DF_1_DIRECT": 0x00000100 , # Direct binding enabled. - "DF_1_TRANS": 0x00000200 , # - "DF_1_INTERPOSE": 0x00000400 , # Object is used to interpose. - "DF_1_NODEFLIB": 0x00000800 , # Ignore default lib search path. - "DF_1_NODUMP": 0x00001000 , # Object can't be dldump'ed. - "DF_1_CONFALT": 0x00002000 , # Configuration alternative created. - "DF_1_ENDFILTEE": 0x00004000 , # Filtee terminates filters search. - "DF_1_DISPRELDNE": 0x00008000 , # Disp reloc applied at build time. - "DF_1_DISPRELPND": 0x00010000 , # Disp reloc applied at run-time. - "DTF_1_PARINIT": 0x00000001 , # - "DTF_1_CONFEXP": 0x00000002 , # - "DF_P1_LAZYLOAD": 0x00000001 , # Lazyload following object. - "DF_P1_GROUPPERM": 0x00000002 , # Symbols from next object are not - "VER_DEF_NONE": 0 , # No version - "VER_DEF_CURRENT": 1 , # Current version - "VER_DEF_NUM": 2 , # Given version number - "VER_FLG_BASE": 0x1 , # Version definition of file itself - "VER_FLG_WEAK": 0x2 , # Weak version identifier - "VER_NDX_LOCAL": 0 , # Symbol is local. - "VER_NDX_GLOBAL": 1 , # Symbol is global. - "VER_NDX_LORESERVE": 0xff00 , # Beginning of reserved entries. - "VER_NDX_ELIMINATE": 0xff01 , # Symbol is to be eliminated. - "VER_NEED_NONE": 0 , # No version - "VER_NEED_CURRENT": 1 , # Current version - "VER_NEED_NUM": 2 , # Given version number - "VER_FLG_WEAK": 0x2 , # Weak version identifier - "AT_NULL": 0 , # End of vector - "AT_IGNORE": 1 , # Entry should be ignored - "AT_EXECFD": 2 , # File descriptor of program - "AT_PHDR": 3 , # Program headers for program - "AT_PHENT": 4 , # Size of program header entry - "AT_PHNUM": 5 , # Number of program headers - "AT_PAGESZ": 6 , # System page size - "AT_BASE": 7 , # Base address of interpreter - "AT_FLAGS": 8 , # Flags - "AT_ENTRY": 9 , # Entry point of program - "AT_NOTELF": 10 , # Program is not ELF - "AT_UID": 11 , # Real uid - "AT_EUID": 12 , # Effective uid - "AT_GID": 13 , # Real gid - "AT_EGID": 14 , # Effective gid - "AT_CLKTCK": 17 , # Frequency of times() - "AT_PLATFORM": 15 , # String identifying platform. - "AT_HWCAP": 16 , # Machine dependent hints about - "AT_FPUCW": 18 , # Used FPU control word. - "AT_DCACHEBSIZE": 19 , # Data cache block size. - "AT_ICACHEBSIZE": 20 , # Instruction cache block size. - "AT_UCACHEBSIZE": 21 , # Unified cache block size. - "AT_IGNOREPPC": 22 , # Entry should be ignored. - "AT_SECURE": 23 , # Boolean, was exec setuid-like? - "AT_BASE_PLATFORM": 24 , # String identifying real platforms. - "AT_RANDOM": 25 , # Address of 16 random bytes. - "AT_EXECFN": 31 , # Filename of executable. - "AT_SYSINFO": 32 , # - "AT_SYSINFO_EHDR": 33 , # - "AT_L1I_CACHESHAPE": 34 , # - "AT_L1D_CACHESHAPE": 35 , # - "AT_L2_CACHESHAPE": 36 , # - "AT_L3_CACHESHAPE": 37 , # - "ELF_NOTE_SOLARIS": "SUNW Solaris" , # - "ELF_NOTE_GNU": "GNU" , # - "ELF_NOTE_PAGESIZE_HINT": 1 , # - "NT_GNU_ABI_TAG": 1 , # - "ELF_NOTE_ABI": MacroRef("NT_GNU_ABI_TAG") , # Old name. - "ELF_NOTE_OS_LINUX": 0 , # - "ELF_NOTE_OS_GNU": 1 , # - "ELF_NOTE_OS_SOLARIS2": 2 , # - "ELF_NOTE_OS_FREEBSD": 3 , # - "NT_GNU_HWCAP": 2 , # - "NT_GNU_BUILD_ID": 3 , # - "NT_GNU_GOLD_VERSION": 4 , # - "EF_CPU32": 0x00810000 , # - "R_68K_NONE": 0 , # No reloc - "R_68K_32": 1 , # Direct 32 bit - "R_68K_16": 2 , # Direct 16 bit - "R_68K_8": 3 , # Direct 8 bit - "R_68K_PC32": 4 , # PC relative 32 bit - "R_68K_PC16": 5 , # PC relative 16 bit - "R_68K_PC8": 6 , # PC relative 8 bit - "R_68K_GOT32": 7 , # 32 bit PC relative GOT entry - "R_68K_GOT16": 8 , # 16 bit PC relative GOT entry - "R_68K_GOT8": 9 , # 8 bit PC relative GOT entry - "R_68K_GOT32O": 10 , # 32 bit GOT offset - "R_68K_GOT16O": 11 , # 16 bit GOT offset - "R_68K_GOT8O": 12 , # 8 bit GOT offset - "R_68K_PLT32": 13 , # 32 bit PC relative PLT address - "R_68K_PLT16": 14 , # 16 bit PC relative PLT address - "R_68K_PLT8": 15 , # 8 bit PC relative PLT address - "R_68K_PLT32O": 16 , # 32 bit PLT offset - "R_68K_PLT16O": 17 , # 16 bit PLT offset - "R_68K_PLT8O": 18 , # 8 bit PLT offset - "R_68K_COPY": 19 , # Copy symbol at runtime - "R_68K_GLOB_DAT": 20 , # Create GOT entry - "R_68K_JMP_SLOT": 21 , # Create PLT entry - "R_68K_RELATIVE": 22 , # Adjust by program base - "R_68K_TLS_GD32": 25 , # 32 bit GOT offset for GD - "R_68K_TLS_GD16": 26 , # 16 bit GOT offset for GD - "R_68K_TLS_GD8": 27 , # 8 bit GOT offset for GD - "R_68K_TLS_LDM32": 28 , # 32 bit GOT offset for LDM - "R_68K_TLS_LDM16": 29 , # 16 bit GOT offset for LDM - "R_68K_TLS_LDM8": 30 , # 8 bit GOT offset for LDM - "R_68K_TLS_LDO32": 31 , # 32 bit module-relative offset - "R_68K_TLS_LDO16": 32 , # 16 bit module-relative offset - "R_68K_TLS_LDO8": 33 , # 8 bit module-relative offset - "R_68K_TLS_IE32": 34 , # 32 bit GOT offset for IE - "R_68K_TLS_IE16": 35 , # 16 bit GOT offset for IE - "R_68K_TLS_IE8": 36 , # 8 bit GOT offset for IE - "R_68K_TLS_LE32": 37 , # 32 bit offset relative to - "R_68K_TLS_LE16": 38 , # 16 bit offset relative to - "R_68K_TLS_LE8": 39 , # 8 bit offset relative to - "R_68K_TLS_DTPMOD32": 40 , # 32 bit module number - "R_68K_TLS_DTPREL32": 41 , # 32 bit module-relative offset - "R_68K_TLS_TPREL32": 42 , # 32 bit TP-relative offset - "R_68K_NUM": 43 , # - "R_386_NONE": 0 , # No reloc - "R_386_32": 1 , # Direct 32 bit - "R_386_PC32": 2 , # PC relative 32 bit - "R_386_GOT32": 3 , # 32 bit GOT entry - "R_386_PLT32": 4 , # 32 bit PLT address - "R_386_COPY": 5 , # Copy symbol at runtime - "R_386_GLOB_DAT": 6 , # Create GOT entry - "R_386_JMP_SLOT": 7 , # Create PLT entry - "R_386_RELATIVE": 8 , # Adjust by program base - "R_386_GOTOFF": 9 , # 32 bit offset to GOT - "R_386_GOTPC": 10 , # 32 bit PC relative offset to GOT - "R_386_32PLT": 11 , # - "R_386_TLS_TPOFF": 14 , # Offset in static TLS block - "R_386_TLS_IE": 15 , # Address of GOT entry for static TLS - "R_386_TLS_GOTIE": 16 , # GOT entry for static TLS block - "R_386_TLS_LE": 17 , # Offset relative to static TLS - "R_386_TLS_GD": 18 , # Direct 32 bit for GNU version of - "R_386_TLS_LDM": 19 , # Direct 32 bit for GNU version of - "R_386_16": 20 , # - "R_386_PC16": 21 , # - "R_386_8": 22 , # - "R_386_PC8": 23 , # - "R_386_TLS_GD_32": 24 , # Direct 32 bit for general dynamic - "R_386_TLS_GD_PUSH": 25 , # Tag for pushl in GD TLS code - "R_386_TLS_GD_CALL": 26 , # Relocation for call to - "R_386_TLS_GD_POP": 27 , # Tag for popl in GD TLS code - "R_386_TLS_LDM_32": 28 , # Direct 32 bit for local dynamic - "R_386_TLS_LDM_PUSH": 29 , # Tag for pushl in LDM TLS code - "R_386_TLS_LDM_CALL": 30 , # Relocation for call to - "R_386_TLS_LDM_POP": 31 , # Tag for popl in LDM TLS code - "R_386_TLS_LDO_32": 32 , # Offset relative to TLS block - "R_386_TLS_IE_32": 33 , # GOT entry for negated static TLS - "R_386_TLS_LE_32": 34 , # Negated offset relative to static - "R_386_TLS_DTPMOD32": 35 , # ID of module containing symbol - "R_386_TLS_DTPOFF32": 36 , # Offset in TLS block - "R_386_TLS_TPOFF32": 37 , # Negated offset in static TLS block - "R_386_TLS_GOTDESC": 39 , # GOT offset for TLS descriptor. - "R_386_TLS_DESC_CALL": 40 , # Marker of call through TLS - "R_386_TLS_DESC": 41 , # TLS descriptor containing - "R_386_IRELATIVE": 42 , # Adjust indirectly by program base - "R_386_NUM": 43 , # - "STT_SPARC_REGISTER": 13 , # Global register reserved to app. - "EF_SPARCV9_MM": 3 , # - "EF_SPARCV9_TSO": 0 , # - "EF_SPARCV9_PSO": 1 , # - "EF_SPARCV9_RMO": 2 , # - "EF_SPARC_LEDATA": 0x800000 , # little endian data - "EF_SPARC_EXT_MASK": 0xFFFF00 , # - "EF_SPARC_32PLUS": 0x000100 , # generic V8+ features - "EF_SPARC_SUN_US1": 0x000200 , # Sun UltraSPARC1 extensions - "EF_SPARC_HAL_R1": 0x000400 , # HAL R1 extensions - "EF_SPARC_SUN_US3": 0x000800 , # Sun UltraSPARCIII extensions - "R_SPARC_NONE": 0 , # No reloc - "R_SPARC_8": 1 , # Direct 8 bit - "R_SPARC_16": 2 , # Direct 16 bit - "R_SPARC_32": 3 , # Direct 32 bit - "R_SPARC_DISP8": 4 , # PC relative 8 bit - "R_SPARC_DISP16": 5 , # PC relative 16 bit - "R_SPARC_DISP32": 6 , # PC relative 32 bit - "R_SPARC_WDISP30": 7 , # PC relative 30 bit shifted - "R_SPARC_WDISP22": 8 , # PC relative 22 bit shifted - "R_SPARC_HI22": 9 , # High 22 bit - "R_SPARC_22": 10 , # Direct 22 bit - "R_SPARC_13": 11 , # Direct 13 bit - "R_SPARC_LO10": 12 , # Truncated 10 bit - "R_SPARC_GOT10": 13 , # Truncated 10 bit GOT entry - "R_SPARC_GOT13": 14 , # 13 bit GOT entry - "R_SPARC_GOT22": 15 , # 22 bit GOT entry shifted - "R_SPARC_PC10": 16 , # PC relative 10 bit truncated - "R_SPARC_PC22": 17 , # PC relative 22 bit shifted - "R_SPARC_WPLT30": 18 , # 30 bit PC relative PLT address - "R_SPARC_COPY": 19 , # Copy symbol at runtime - "R_SPARC_GLOB_DAT": 20 , # Create GOT entry - "R_SPARC_JMP_SLOT": 21 , # Create PLT entry - "R_SPARC_RELATIVE": 22 , # Adjust by program base - "R_SPARC_UA32": 23 , # Direct 32 bit unaligned - "R_SPARC_PLT32": 24 , # Direct 32 bit ref to PLT entry - "R_SPARC_HIPLT22": 25 , # High 22 bit PLT entry - "R_SPARC_LOPLT10": 26 , # Truncated 10 bit PLT entry - "R_SPARC_PCPLT32": 27 , # PC rel 32 bit ref to PLT entry - "R_SPARC_PCPLT22": 28 , # PC rel high 22 bit PLT entry - "R_SPARC_PCPLT10": 29 , # PC rel trunc 10 bit PLT entry - "R_SPARC_10": 30 , # Direct 10 bit - "R_SPARC_11": 31 , # Direct 11 bit - "R_SPARC_64": 32 , # Direct 64 bit - "R_SPARC_OLO10": 33 , # 10bit with secondary 13bit addend - "R_SPARC_HH22": 34 , # Top 22 bits of direct 64 bit - "R_SPARC_HM10": 35 , # High middle 10 bits of ... - "R_SPARC_LM22": 36 , # Low middle 22 bits of ... - "R_SPARC_PC_HH22": 37 , # Top 22 bits of pc rel 64 bit - "R_SPARC_PC_HM10": 38 , # High middle 10 bit of ... - "R_SPARC_PC_LM22": 39 , # Low miggle 22 bits of ... - "R_SPARC_WDISP16": 40 , # PC relative 16 bit shifted - "R_SPARC_WDISP19": 41 , # PC relative 19 bit shifted - "R_SPARC_GLOB_JMP": 42 , # was part of v9 ABI but was removed - "R_SPARC_7": 43 , # Direct 7 bit - "R_SPARC_5": 44 , # Direct 5 bit - "R_SPARC_6": 45 , # Direct 6 bit - "R_SPARC_DISP64": 46 , # PC relative 64 bit - "R_SPARC_PLT64": 47 , # Direct 64 bit ref to PLT entry - "R_SPARC_HIX22": 48 , # High 22 bit complemented - "R_SPARC_LOX10": 49 , # Truncated 11 bit complemented - "R_SPARC_H44": 50 , # Direct high 12 of 44 bit - "R_SPARC_M44": 51 , # Direct mid 22 of 44 bit - "R_SPARC_L44": 52 , # Direct low 10 of 44 bit - "R_SPARC_REGISTER": 53 , # Global register usage - "R_SPARC_UA64": 54 , # Direct 64 bit unaligned - "R_SPARC_UA16": 55 , # Direct 16 bit unaligned - "R_SPARC_TLS_GD_HI22": 56 , # - "R_SPARC_TLS_GD_LO10": 57 , # - "R_SPARC_TLS_GD_ADD": 58 , # - "R_SPARC_TLS_GD_CALL": 59 , # - "R_SPARC_TLS_LDM_HI22": 60 , # - "R_SPARC_TLS_LDM_LO10": 61 , # - "R_SPARC_TLS_LDM_ADD": 62 , # - "R_SPARC_TLS_LDM_CALL": 63 , # - "R_SPARC_TLS_LDO_HIX22": 64 , # - "R_SPARC_TLS_LDO_LOX10": 65 , # - "R_SPARC_TLS_LDO_ADD": 66 , # - "R_SPARC_TLS_IE_HI22": 67 , # - "R_SPARC_TLS_IE_LO10": 68 , # - "R_SPARC_TLS_IE_LD": 69 , # - "R_SPARC_TLS_IE_LDX": 70 , # - "R_SPARC_TLS_IE_ADD": 71 , # - "R_SPARC_TLS_LE_HIX22": 72 , # - "R_SPARC_TLS_LE_LOX10": 73 , # - "R_SPARC_TLS_DTPMOD32": 74 , # - "R_SPARC_TLS_DTPMOD64": 75 , # - "R_SPARC_TLS_DTPOFF32": 76 , # - "R_SPARC_TLS_DTPOFF64": 77 , # - "R_SPARC_TLS_TPOFF32": 78 , # - "R_SPARC_TLS_TPOFF64": 79 , # - "R_SPARC_GOTDATA_HIX22": 80 , # - "R_SPARC_GOTDATA_LOX10": 81 , # - "R_SPARC_GOTDATA_OP_HIX22": 82 , # - "R_SPARC_GOTDATA_OP_LOX10": 83 , # - "R_SPARC_GOTDATA_OP": 84 , # - "R_SPARC_H34": 85 , # - "R_SPARC_SIZE32": 86 , # - "R_SPARC_SIZE64": 87 , # - "R_SPARC_JMP_IREL": 248 , # - "R_SPARC_IRELATIVE": 249 , # - "R_SPARC_GNU_VTINHERIT": 250 , # - "R_SPARC_GNU_VTENTRY": 251 , # - "R_SPARC_REV32": 252 , # - "R_SPARC_NUM": 253 , # - "DT_SPARC_REGISTER": 0x70000001 , # - "DT_SPARC_NUM": 2 , # - "EF_MIPS_NOREORDER": 1 , # A .noreorder directive was used - "EF_MIPS_PIC": 2 , # Contains PIC code - "EF_MIPS_CPIC": 4 , # Uses PIC calling sequence - "EF_MIPS_XGOT": 8 , # - "EF_MIPS_64BIT_WHIRL": 16 , # - "EF_MIPS_ABI2": 32 , # - "EF_MIPS_ABI_ON32": 64 , # - "EF_MIPS_ARCH": 0xf0000000 , # MIPS architecture level - "EF_MIPS_ARCH_1": 0x00000000 , # -mips1 code. - "EF_MIPS_ARCH_2": 0x10000000 , # -mips2 code. - "EF_MIPS_ARCH_3": 0x20000000 , # -mips3 code. - "EF_MIPS_ARCH_4": 0x30000000 , # -mips4 code. - "EF_MIPS_ARCH_5": 0x40000000 , # -mips5 code. - "EF_MIPS_ARCH_32": 0x60000000 , # MIPS32 code. - "EF_MIPS_ARCH_64": 0x70000000 , # MIPS64 code. - "E_MIPS_ARCH_1": 0x00000000 , # -mips1 code. - "E_MIPS_ARCH_2": 0x10000000 , # -mips2 code. - "E_MIPS_ARCH_3": 0x20000000 , # -mips3 code. - "E_MIPS_ARCH_4": 0x30000000 , # -mips4 code. - "E_MIPS_ARCH_5": 0x40000000 , # -mips5 code. - "E_MIPS_ARCH_32": 0x60000000 , # MIPS32 code. - "E_MIPS_ARCH_64": 0x70000000 , # MIPS64 code. - "SHN_MIPS_ACOMMON": 0xff00 , # Allocated common symbols - "SHN_MIPS_TEXT": 0xff01 , # Allocated test symbols. - "SHN_MIPS_DATA": 0xff02 , # Allocated data symbols. - "SHN_MIPS_SCOMMON": 0xff03 , # Small common symbols - "SHN_MIPS_SUNDEFINED": 0xff04 , # Small undefined symbols - "SHT_MIPS_LIBLIST": 0x70000000 , # Shared objects used in link - "SHT_MIPS_MSYM": 0x70000001 , # - "SHT_MIPS_CONFLICT": 0x70000002 , # Conflicting symbols - "SHT_MIPS_GPTAB": 0x70000003 , # Global data area sizes - "SHT_MIPS_UCODE": 0x70000004 , # Reserved for SGI/MIPS compilers - "SHT_MIPS_DEBUG": 0x70000005 , # MIPS ECOFF debugging information - "SHT_MIPS_REGINFO": 0x70000006 , # Register usage information - "SHT_MIPS_PACKAGE": 0x70000007 , # - "SHT_MIPS_PACKSYM": 0x70000008 , # - "SHT_MIPS_RELD": 0x70000009 , # - "SHT_MIPS_IFACE": 0x7000000b , # - "SHT_MIPS_CONTENT": 0x7000000c , # - "SHT_MIPS_OPTIONS": 0x7000000d , # Miscellaneous options. - "SHT_MIPS_SHDR": 0x70000010 , # - "SHT_MIPS_FDESC": 0x70000011 , # - "SHT_MIPS_EXTSYM": 0x70000012 , # - "SHT_MIPS_DENSE": 0x70000013 , # - "SHT_MIPS_PDESC": 0x70000014 , # - "SHT_MIPS_LOCSYM": 0x70000015 , # - "SHT_MIPS_AUXSYM": 0x70000016 , # - "SHT_MIPS_OPTSYM": 0x70000017 , # - "SHT_MIPS_LOCSTR": 0x70000018 , # - "SHT_MIPS_LINE": 0x70000019 , # - "SHT_MIPS_RFDESC": 0x7000001a , # - "SHT_MIPS_DELTASYM": 0x7000001b , # - "SHT_MIPS_DELTAINST": 0x7000001c , # - "SHT_MIPS_DELTACLASS": 0x7000001d , # - "SHT_MIPS_DWARF": 0x7000001e , # DWARF debugging information. - "SHT_MIPS_DELTADECL": 0x7000001f , # - "SHT_MIPS_SYMBOL_LIB": 0x70000020 , # - "SHT_MIPS_EVENTS": 0x70000021 , # Event section. - "SHT_MIPS_TRANSLATE": 0x70000022 , # - "SHT_MIPS_PIXIE": 0x70000023 , # - "SHT_MIPS_XLATE": 0x70000024 , # - "SHT_MIPS_XLATE_DEBUG": 0x70000025 , # - "SHT_MIPS_WHIRL": 0x70000026 , # - "SHT_MIPS_EH_REGION": 0x70000027 , # - "SHT_MIPS_XLATE_OLD": 0x70000028 , # - "SHT_MIPS_PDR_EXCEPTION": 0x70000029 , # - "SHF_MIPS_GPREL": 0x10000000 , # Must be part of global data area - "SHF_MIPS_MERGE": 0x20000000 , # - "SHF_MIPS_ADDR": 0x40000000 , # - "SHF_MIPS_STRINGS": 0x80000000 , # - "SHF_MIPS_NOSTRIP": 0x08000000 , # - "SHF_MIPS_LOCAL": 0x04000000 , # - "SHF_MIPS_NAMES": 0x02000000 , # - "SHF_MIPS_NODUPE": 0x01000000 , # - "STO_MIPS_DEFAULT": 0x0 , # - "STO_MIPS_INTERNAL": 0x1 , # - "STO_MIPS_HIDDEN": 0x2 , # - "STO_MIPS_PROTECTED": 0x3 , # - "STO_MIPS_PLT": 0x8 , # - "STO_MIPS_SC_ALIGN_UNUSED": 0xff , # - "STB_MIPS_SPLIT_COMMON": 13 , # - "ODK_NULL": 0 , # Undefined. - "ODK_REGINFO": 1 , # Register usage information. - "ODK_EXCEPTIONS": 2 , # Exception processing options. - "ODK_PAD": 3 , # Section padding options. - "ODK_HWPATCH": 4 , # Hardware workarounds performed - "ODK_FILL": 5 , # record the fill value used by the linker. - "ODK_TAGS": 6 , # reserve space for desktop tools to write. - "ODK_HWAND": 7 , # HW workarounds. 'AND' bits when merging. - "ODK_HWOR": 8 , # HW workarounds. 'OR' bits when merging. - "OEX_FPU_MIN": 0x1f , # FPE's which MUST be enabled. - "OEX_FPU_MAX": 0x1f00 , # FPE's which MAY be enabled. - "OEX_PAGE0": 0x10000 , # page zero must be mapped. - "OEX_SMM": 0x20000 , # Force sequential memory mode? - "OEX_FPDBUG": 0x40000 , # Force floating point debug mode? - "OEX_PRECISEFP": MacroRef("OEX_FPDBUG") , # - "OEX_DISMISS": 0x80000 , # Dismiss invalid address faults? - "OEX_FPU_INVAL": 0x10 , # - "OEX_FPU_DIV0": 0x08 , # - "OEX_FPU_OFLO": 0x04 , # - "OEX_FPU_UFLO": 0x02 , # - "OEX_FPU_INEX": 0x01 , # - "OHW_R4KEOP": 0x1 , # R4000 end-of-page patch. - "OHW_R8KPFETCH": 0x2 , # may need R8000 prefetch patch. - "OHW_R5KEOP": 0x4 , # R5000 end-of-page patch. - "OHW_R5KCVTL": 0x8 , # R5000 cvt.[ds].l bug. clean=1. - "OPAD_PREFIX": 0x1 , # - "OPAD_POSTFIX": 0x2 , # - "OPAD_SYMBOL": 0x4 , # - "OHWA0_R4KEOP_CHECKED": 0x00000001 , # - "OHWA1_R4KEOP_CLEAN": 0x00000002 , # - "R_MIPS_NONE": 0 , # No reloc - "R_MIPS_16": 1 , # Direct 16 bit - "R_MIPS_32": 2 , # Direct 32 bit - "R_MIPS_REL32": 3 , # PC relative 32 bit - "R_MIPS_26": 4 , # Direct 26 bit shifted - "R_MIPS_HI16": 5 , # High 16 bit - "R_MIPS_LO16": 6 , # Low 16 bit - "R_MIPS_GPREL16": 7 , # GP relative 16 bit - "R_MIPS_LITERAL": 8 , # 16 bit literal entry - "R_MIPS_GOT16": 9 , # 16 bit GOT entry - "R_MIPS_PC16": 10 , # PC relative 16 bit - "R_MIPS_CALL16": 11 , # 16 bit GOT entry for function - "R_MIPS_GPREL32": 12 , # GP relative 32 bit - "R_MIPS_SHIFT5": 16 , # - "R_MIPS_SHIFT6": 17 , # - "R_MIPS_64": 18 , # - "R_MIPS_GOT_DISP": 19 , # - "R_MIPS_GOT_PAGE": 20 , # - "R_MIPS_GOT_OFST": 21 , # - "R_MIPS_GOT_HI16": 22 , # - "R_MIPS_GOT_LO16": 23 , # - "R_MIPS_SUB": 24 , # - "R_MIPS_INSERT_A": 25 , # - "R_MIPS_INSERT_B": 26 , # - "R_MIPS_DELETE": 27 , # - "R_MIPS_HIGHER": 28 , # - "R_MIPS_HIGHEST": 29 , # - "R_MIPS_CALL_HI16": 30 , # - "R_MIPS_CALL_LO16": 31 , # - "R_MIPS_SCN_DISP": 32 , # - "R_MIPS_REL16": 33 , # - "R_MIPS_ADD_IMMEDIATE": 34 , # - "R_MIPS_PJUMP": 35 , # - "R_MIPS_RELGOT": 36 , # - "R_MIPS_JALR": 37 , # - "R_MIPS_TLS_DTPMOD32": 38 , # Module number 32 bit - "R_MIPS_TLS_DTPREL32": 39 , # Module-relative offset 32 bit - "R_MIPS_TLS_DTPMOD64": 40 , # Module number 64 bit - "R_MIPS_TLS_DTPREL64": 41 , # Module-relative offset 64 bit - "R_MIPS_TLS_GD": 42 , # 16 bit GOT offset for GD - "R_MIPS_TLS_LDM": 43 , # 16 bit GOT offset for LDM - "R_MIPS_TLS_DTPREL_HI16": 44 , # Module-relative offset, high 16 bits - "R_MIPS_TLS_DTPREL_LO16": 45 , # Module-relative offset, low 16 bits - "R_MIPS_TLS_GOTTPREL": 46 , # 16 bit GOT offset for IE - "R_MIPS_TLS_TPREL32": 47 , # TP-relative offset, 32 bit - "R_MIPS_TLS_TPREL64": 48 , # TP-relative offset, 64 bit - "R_MIPS_TLS_TPREL_HI16": 49 , # TP-relative offset, high 16 bits - "R_MIPS_TLS_TPREL_LO16": 50 , # TP-relative offset, low 16 bits - "R_MIPS_GLOB_DAT": 51 , # - "R_MIPS_COPY": 126 , # - "R_MIPS_JUMP_SLOT": 127 , # - "R_MIPS_NUM": 128 , # - "PT_MIPS_REGINFO": 0x70000000 , # Register usage information - "PT_MIPS_RTPROC": 0x70000001 , # Runtime procedure table. - "PT_MIPS_OPTIONS": 0x70000002 , # - "PF_MIPS_LOCAL": 0x10000000 , # - "DT_MIPS_RLD_VERSION": 0x70000001 , # Runtime linker interface version - "DT_MIPS_TIME_STAMP": 0x70000002 , # Timestamp - "DT_MIPS_ICHECKSUM": 0x70000003 , # Checksum - "DT_MIPS_IVERSION": 0x70000004 , # Version string (string tbl index) - "DT_MIPS_FLAGS": 0x70000005 , # Flags - "DT_MIPS_BASE_ADDRESS": 0x70000006 , # Base address - "DT_MIPS_MSYM": 0x70000007 , # - "DT_MIPS_CONFLICT": 0x70000008 , # Address of CONFLICT section - "DT_MIPS_LIBLIST": 0x70000009 , # Address of LIBLIST section - "DT_MIPS_LOCAL_GOTNO": 0x7000000a , # Number of local GOT entries - "DT_MIPS_CONFLICTNO": 0x7000000b , # Number of CONFLICT entries - "DT_MIPS_LIBLISTNO": 0x70000010 , # Number of LIBLIST entries - "DT_MIPS_SYMTABNO": 0x70000011 , # Number of DYNSYM entries - "DT_MIPS_UNREFEXTNO": 0x70000012 , # First external DYNSYM - "DT_MIPS_GOTSYM": 0x70000013 , # First GOT entry in DYNSYM - "DT_MIPS_HIPAGENO": 0x70000014 , # Number of GOT page table entries - "DT_MIPS_RLD_MAP": 0x70000016 , # Address of run time loader map. - "DT_MIPS_DELTA_CLASS": 0x70000017 , # Delta C++ class definition. - "DT_MIPS_DELTA_CLASS_NO": 0x70000018 , # Number of entries in - "DT_MIPS_DELTA_INSTANCE": 0x70000019 , # Delta C++ class instances. - "DT_MIPS_DELTA_INSTANCE_NO": 0x7000001a , # Number of entries in - "DT_MIPS_DELTA_RELOC": 0x7000001b , # Delta relocations. - "DT_MIPS_DELTA_RELOC_NO": 0x7000001c , # Number of entries in - "DT_MIPS_DELTA_SYM": 0x7000001d , # Delta symbols that Delta - "DT_MIPS_DELTA_SYM_NO": 0x7000001e , # Number of entries in - "DT_MIPS_DELTA_CLASSSYM": 0x70000020 , # Delta symbols that hold the - "DT_MIPS_DELTA_CLASSSYM_NO": 0x70000021 , # Number of entries in - "DT_MIPS_CXX_FLAGS": 0x70000022 , # Flags indicating for C++ flavor. - "DT_MIPS_PIXIE_INIT": 0x70000023 , # - "DT_MIPS_SYMBOL_LIB": 0x70000024 , # - "DT_MIPS_LOCALPAGE_GOTIDX": 0x70000025 , # - "DT_MIPS_LOCAL_GOTIDX": 0x70000026 , # - "DT_MIPS_HIDDEN_GOTIDX": 0x70000027 , # - "DT_MIPS_PROTECTED_GOTIDX": 0x70000028 , # - "DT_MIPS_OPTIONS": 0x70000029 , # Address of .options. - "DT_MIPS_INTERFACE": 0x7000002a , # Address of .interface. - "DT_MIPS_DYNSTR_ALIGN": 0x7000002b , # - "DT_MIPS_INTERFACE_SIZE": 0x7000002c , # Size of the .interface section. - "DT_MIPS_RLD_TEXT_RESOLVE_ADDR": 0x7000002d , # Address of rld_text_rsolve - "DT_MIPS_PERF_SUFFIX": 0x7000002e , # Default suffix of dso to be added - "DT_MIPS_COMPACT_SIZE": 0x7000002f , # (O32)Size of compact rel section. - "DT_MIPS_GP_VALUE": 0x70000030 , # GP value for aux GOTs. - "DT_MIPS_AUX_DYNAMIC": 0x70000031 , # Address of aux .dynamic. - "DT_MIPS_PLTGOT": 0x70000032 , # - "DT_MIPS_RWPLT": 0x70000034 , # - "DT_MIPS_NUM": 0x35 , # - "RHF_NONE": 0 , # No flags - "RHF_QUICKSTART": (1 << 0) , # Use quickstart - "RHF_NOTPOT": (1 << 1) , # Hash size not power of 2 - "RHF_NO_LIBRARY_REPLACEMENT": (1 << 2) , # Ignore LD_LIBRARY_PATH - "RHF_NO_MOVE": (1 << 3) , # - "RHF_SGI_ONLY": (1 << 4) , # - "RHF_GUARANTEE_INIT": (1 << 5) , # - "RHF_DELTA_C_PLUS_PLUS": (1 << 6) , # - "RHF_GUARANTEE_START_INIT": (1 << 7) , # - "RHF_PIXIE": (1 << 8) , # - "RHF_DEFAULT_DELAY_LOAD": (1 << 9) , # - "RHF_REQUICKSTART": (1 << 10) , # - "RHF_REQUICKSTARTED": (1 << 11) , # - "RHF_CORD": (1 << 12) , # - "RHF_NO_UNRES_UNDEF": (1 << 13) , # - "RHF_RLD_ORDER_SAFE": (1 << 14) , # - "LL_NONE": 0 , # - "LL_EXACT_MATCH": (1 << 0) , # Require exact match - "LL_IGNORE_INT_VER": (1 << 1) , # Ignore interface version - "LL_REQUIRE_MINOR": (1 << 2) , # - "LL_EXPORTS": (1 << 3) , # - "LL_DELAY_LOAD": (1 << 4) , # - "LL_DELTA": (1 << 5) , # - "EF_PARISC_TRAPNIL": 0x00010000 , # Trap nil pointer dereference. - "EF_PARISC_EXT": 0x00020000 , # Program uses arch. extensions. - "EF_PARISC_LSB": 0x00040000 , # Program expects little endian. - "EF_PARISC_WIDE": 0x00080000 , # Program expects wide mode. - "EF_PARISC_NO_KABP": 0x00100000 , # No kernel assisted branch - "EF_PARISC_LAZYSWAP": 0x00400000 , # Allow lazy swapping. - "EF_PARISC_ARCH": 0x0000ffff , # Architecture version. - "EFA_PARISC_1_0": 0x020b , # PA-RISC 1.0 big-endian. - "EFA_PARISC_1_1": 0x0210 , # PA-RISC 1.1 big-endian. - "EFA_PARISC_2_0": 0x0214 , # PA-RISC 2.0 big-endian. - "SHN_PARISC_ANSI_COMMON": 0xff00 , # Section for tenatively declared - "SHN_PARISC_HUGE_COMMON": 0xff01 , # Common blocks in huge model. - "SHT_PARISC_EXT": 0x70000000 , # Contains product specific ext. - "SHT_PARISC_UNWIND": 0x70000001 , # Unwind information. - "SHT_PARISC_DOC": 0x70000002 , # Debug info for optimized code. - "SHF_PARISC_SHORT": 0x20000000 , # Section with short addressing. - "SHF_PARISC_HUGE": 0x40000000 , # Section far from gp. - "SHF_PARISC_SBP": 0x80000000 , # Static branch prediction code. - "STT_PARISC_MILLICODE": 13 , # Millicode function entry point. - "STT_HP_OPAQUE": (MacroRef("STT_LOOS") + 0x1) , # - "STT_HP_STUB": (MacroRef("STT_LOOS") + 0x2) , # - "R_PARISC_NONE": 0 , # No reloc. - "R_PARISC_DIR32": 1 , # Direct 32-bit reference. - "R_PARISC_DIR21L": 2 , # Left 21 bits of eff. address. - "R_PARISC_DIR17R": 3 , # Right 17 bits of eff. address. - "R_PARISC_DIR17F": 4 , # 17 bits of eff. address. - "R_PARISC_DIR14R": 6 , # Right 14 bits of eff. address. - "R_PARISC_PCREL32": 9 , # 32-bit rel. address. - "R_PARISC_PCREL21L": 10 , # Left 21 bits of rel. address. - "R_PARISC_PCREL17R": 11 , # Right 17 bits of rel. address. - "R_PARISC_PCREL17F": 12 , # 17 bits of rel. address. - "R_PARISC_PCREL14R": 14 , # Right 14 bits of rel. address. - "R_PARISC_DPREL21L": 18 , # Left 21 bits of rel. address. - "R_PARISC_DPREL14R": 22 , # Right 14 bits of rel. address. - "R_PARISC_GPREL21L": 26 , # GP-relative, left 21 bits. - "R_PARISC_GPREL14R": 30 , # GP-relative, right 14 bits. - "R_PARISC_LTOFF21L": 34 , # LT-relative, left 21 bits. - "R_PARISC_LTOFF14R": 38 , # LT-relative, right 14 bits. - "R_PARISC_SECREL32": 41 , # 32 bits section rel. address. - "R_PARISC_SEGBASE": 48 , # No relocation, set segment base. - "R_PARISC_SEGREL32": 49 , # 32 bits segment rel. address. - "R_PARISC_PLTOFF21L": 50 , # PLT rel. address, left 21 bits. - "R_PARISC_PLTOFF14R": 54 , # PLT rel. address, right 14 bits. - "R_PARISC_LTOFF_FPTR32": 57 , # 32 bits LT-rel. function pointer. - "R_PARISC_LTOFF_FPTR21L": 58 , # LT-rel. fct ptr, left 21 bits. - "R_PARISC_LTOFF_FPTR14R": 62 , # LT-rel. fct ptr, right 14 bits. - "R_PARISC_FPTR64": 64 , # 64 bits function address. - "R_PARISC_PLABEL32": 65 , # 32 bits function address. - "R_PARISC_PLABEL21L": 66 , # Left 21 bits of fdesc address. - "R_PARISC_PLABEL14R": 70 , # Right 14 bits of fdesc address. - "R_PARISC_PCREL64": 72 , # 64 bits PC-rel. address. - "R_PARISC_PCREL22F": 74 , # 22 bits PC-rel. address. - "R_PARISC_PCREL14WR": 75 , # PC-rel. address, right 14 bits. - "R_PARISC_PCREL14DR": 76 , # PC rel. address, right 14 bits. - "R_PARISC_PCREL16F": 77 , # 16 bits PC-rel. address. - "R_PARISC_PCREL16WF": 78 , # 16 bits PC-rel. address. - "R_PARISC_PCREL16DF": 79 , # 16 bits PC-rel. address. - "R_PARISC_DIR64": 80 , # 64 bits of eff. address. - "R_PARISC_DIR14WR": 83 , # 14 bits of eff. address. - "R_PARISC_DIR14DR": 84 , # 14 bits of eff. address. - "R_PARISC_DIR16F": 85 , # 16 bits of eff. address. - "R_PARISC_DIR16WF": 86 , # 16 bits of eff. address. - "R_PARISC_DIR16DF": 87 , # 16 bits of eff. address. - "R_PARISC_GPREL64": 88 , # 64 bits of GP-rel. address. - "R_PARISC_GPREL14WR": 91 , # GP-rel. address, right 14 bits. - "R_PARISC_GPREL14DR": 92 , # GP-rel. address, right 14 bits. - "R_PARISC_GPREL16F": 93 , # 16 bits GP-rel. address. - "R_PARISC_GPREL16WF": 94 , # 16 bits GP-rel. address. - "R_PARISC_GPREL16DF": 95 , # 16 bits GP-rel. address. - "R_PARISC_LTOFF64": 96 , # 64 bits LT-rel. address. - "R_PARISC_LTOFF14WR": 99 , # LT-rel. address, right 14 bits. - "R_PARISC_LTOFF14DR": 100 , # LT-rel. address, right 14 bits. - "R_PARISC_LTOFF16F": 101 , # 16 bits LT-rel. address. - "R_PARISC_LTOFF16WF": 102 , # 16 bits LT-rel. address. - "R_PARISC_LTOFF16DF": 103 , # 16 bits LT-rel. address. - "R_PARISC_SECREL64": 104 , # 64 bits section rel. address. - "R_PARISC_SEGREL64": 112 , # 64 bits segment rel. address. - "R_PARISC_PLTOFF14WR": 115 , # PLT-rel. address, right 14 bits. - "R_PARISC_PLTOFF14DR": 116 , # PLT-rel. address, right 14 bits. - "R_PARISC_PLTOFF16F": 117 , # 16 bits LT-rel. address. - "R_PARISC_PLTOFF16WF": 118 , # 16 bits PLT-rel. address. - "R_PARISC_PLTOFF16DF": 119 , # 16 bits PLT-rel. address. - "R_PARISC_LTOFF_FPTR64": 120 , # 64 bits LT-rel. function ptr. - "R_PARISC_LTOFF_FPTR14WR": 123 , # LT-rel. fct. ptr., right 14 bits. - "R_PARISC_LTOFF_FPTR14DR": 124 , # LT-rel. fct. ptr., right 14 bits. - "R_PARISC_LTOFF_FPTR16F": 125 , # 16 bits LT-rel. function ptr. - "R_PARISC_LTOFF_FPTR16WF": 126 , # 16 bits LT-rel. function ptr. - "R_PARISC_LTOFF_FPTR16DF": 127 , # 16 bits LT-rel. function ptr. - "R_PARISC_LORESERVE": 128 , # - "R_PARISC_COPY": 128 , # Copy relocation. - "R_PARISC_IPLT": 129 , # Dynamic reloc, imported PLT - "R_PARISC_EPLT": 130 , # Dynamic reloc, exported PLT - "R_PARISC_TPREL32": 153 , # 32 bits TP-rel. address. - "R_PARISC_TPREL21L": 154 , # TP-rel. address, left 21 bits. - "R_PARISC_TPREL14R": 158 , # TP-rel. address, right 14 bits. - "R_PARISC_LTOFF_TP21L": 162 , # LT-TP-rel. address, left 21 bits. - "R_PARISC_LTOFF_TP14R": 166 , # LT-TP-rel. address, right 14 bits. - "R_PARISC_LTOFF_TP14F": 167 , # 14 bits LT-TP-rel. address. - "R_PARISC_TPREL64": 216 , # 64 bits TP-rel. address. - "R_PARISC_TPREL14WR": 219 , # TP-rel. address, right 14 bits. - "R_PARISC_TPREL14DR": 220 , # TP-rel. address, right 14 bits. - "R_PARISC_TPREL16F": 221 , # 16 bits TP-rel. address. - "R_PARISC_TPREL16WF": 222 , # 16 bits TP-rel. address. - "R_PARISC_TPREL16DF": 223 , # 16 bits TP-rel. address. - "R_PARISC_LTOFF_TP64": 224 , # 64 bits LT-TP-rel. address. - "R_PARISC_LTOFF_TP14WR": 227 , # LT-TP-rel. address, right 14 bits. - "R_PARISC_LTOFF_TP14DR": 228 , # LT-TP-rel. address, right 14 bits. - "R_PARISC_LTOFF_TP16F": 229 , # 16 bits LT-TP-rel. address. - "R_PARISC_LTOFF_TP16WF": 230 , # 16 bits LT-TP-rel. address. - "R_PARISC_LTOFF_TP16DF": 231 , # 16 bits LT-TP-rel. address. - "R_PARISC_GNU_VTENTRY": 232 , # - "R_PARISC_GNU_VTINHERIT": 233 , # - "R_PARISC_TLS_GD21L": 234 , # GD 21-bit left. - "R_PARISC_TLS_GD14R": 235 , # GD 14-bit right. - "R_PARISC_TLS_GDCALL": 236 , # GD call to __t_g_a. - "R_PARISC_TLS_LDM21L": 237 , # LD module 21-bit left. - "R_PARISC_TLS_LDM14R": 238 , # LD module 14-bit right. - "R_PARISC_TLS_LDMCALL": 239 , # LD module call to __t_g_a. - "R_PARISC_TLS_LDO21L": 240 , # LD offset 21-bit left. - "R_PARISC_TLS_LDO14R": 241 , # LD offset 14-bit right. - "R_PARISC_TLS_DTPMOD32": 242 , # DTP module 32-bit. - "R_PARISC_TLS_DTPMOD64": 243 , # DTP module 64-bit. - "R_PARISC_TLS_DTPOFF32": 244 , # DTP offset 32-bit. - "R_PARISC_TLS_DTPOFF64": 245 , # DTP offset 32-bit. - "R_PARISC_TLS_LE21L": MacroRef("R_PARISC_TPREL21L"), # - "R_PARISC_TLS_LE14R": MacroRef("R_PARISC_TPREL14R"), # - "R_PARISC_TLS_IE21L": MacroRef("R_PARISC_LTOFF_TP21L") , # - "R_PARISC_TLS_IE14R": MacroRef("R_PARISC_LTOFF_TP14R") , # - "R_PARISC_TLS_TPREL32": MacroRef("R_PARISC_TPREL32") , # - "R_PARISC_TLS_TPREL64": MacroRef("R_PARISC_TPREL64") , # - "R_PARISC_HIRESERVE": 255 , # - "PT_HP_TLS": (MacroRef("PT_LOOS") + 0x0) , # - "PT_HP_CORE_NONE": (MacroRef("PT_LOOS") + 0x1) , # - "PT_HP_CORE_VERSION": (MacroRef("PT_LOOS") + 0x2) , # - "PT_HP_CORE_KERNEL": (MacroRef("PT_LOOS") + 0x3) , # - "PT_HP_CORE_COMM": (MacroRef("PT_LOOS") + 0x4) , # - "PT_HP_CORE_PROC": (MacroRef("PT_LOOS") + 0x5) , # - "PT_HP_CORE_LOADABLE": (MacroRef("PT_LOOS") + 0x6) , # - "PT_HP_CORE_STACK": (MacroRef("PT_LOOS") + 0x7) , # - "PT_HP_CORE_SHM": (MacroRef("PT_LOOS") + 0x8) , # - "PT_HP_CORE_MMF": (MacroRef("PT_LOOS") + 0x9) , # - "PT_HP_PARALLEL": (MacroRef("PT_LOOS") + 0x10) , # - "PT_HP_FASTBIND": (MacroRef("PT_LOOS") + 0x11) , # - "PT_HP_OPT_ANNOT": (MacroRef("PT_LOOS") + 0x12) , # - "PT_HP_HSL_ANNOT": (MacroRef("PT_LOOS") + 0x13) , # - "PT_HP_STACK": (MacroRef("PT_LOOS") + 0x14) , # - "PT_PARISC_ARCHEXT": 0x70000000 , # - "PT_PARISC_UNWIND": 0x70000001 , # - "PF_PARISC_SBP": 0x08000000 , # - "PF_HP_PAGE_SIZE": 0x00100000 , # - "PF_HP_FAR_SHARED": 0x00200000 , # - "PF_HP_NEAR_SHARED": 0x00400000 , # - "PF_HP_CODE": 0x01000000 , # - "PF_HP_MODIFY": 0x02000000 , # - "PF_HP_LAZYSWAP": 0x04000000 , # - "PF_HP_SBP": 0x08000000 , # - "EF_ALPHA_32BIT": 1 , # All addresses must be < 2GB. - "EF_ALPHA_CANRELAX": 2 , # Relocations for relaxing exist. - "SHT_ALPHA_DEBUG": 0x70000001 , # - "SHT_ALPHA_REGINFO": 0x70000002 , # - "SHF_ALPHA_GPREL": 0x10000000 , # - "STO_ALPHA_NOPV": 0x80 , # No PV required. - "STO_ALPHA_STD_GPLOAD": 0x88 , # PV only used for initial ldgp. - "R_ALPHA_NONE": 0 , # No reloc - "R_ALPHA_REFLONG": 1 , # Direct 32 bit - "R_ALPHA_REFQUAD": 2 , # Direct 64 bit - "R_ALPHA_GPREL32": 3 , # GP relative 32 bit - "R_ALPHA_LITERAL": 4 , # GP relative 16 bit w/optimization - "R_ALPHA_LITUSE": 5 , # Optimization hint for LITERAL - "R_ALPHA_GPDISP": 6 , # Add displacement to GP - "R_ALPHA_BRADDR": 7 , # PC+4 relative 23 bit shifted - "R_ALPHA_HINT": 8 , # PC+4 relative 16 bit shifted - "R_ALPHA_SREL16": 9 , # PC relative 16 bit - "R_ALPHA_SREL32": 10 , # PC relative 32 bit - "R_ALPHA_SREL64": 11 , # PC relative 64 bit - "R_ALPHA_GPRELHIGH": 17 , # GP relative 32 bit, high 16 bits - "R_ALPHA_GPRELLOW": 18 , # GP relative 32 bit, low 16 bits - "R_ALPHA_GPREL16": 19 , # GP relative 16 bit - "R_ALPHA_COPY": 24 , # Copy symbol at runtime - "R_ALPHA_GLOB_DAT": 25 , # Create GOT entry - "R_ALPHA_JMP_SLOT": 26 , # Create PLT entry - "R_ALPHA_RELATIVE": 27 , # Adjust by program base - "R_ALPHA_TLS_GD_HI": 28 , # - "R_ALPHA_TLSGD": 29 , # - "R_ALPHA_TLS_LDM": 30 , # - "R_ALPHA_DTPMOD64": 31 , # - "R_ALPHA_GOTDTPREL": 32 , # - "R_ALPHA_DTPREL64": 33 , # - "R_ALPHA_DTPRELHI": 34 , # - "R_ALPHA_DTPRELLO": 35 , # - "R_ALPHA_DTPREL16": 36 , # - "R_ALPHA_GOTTPREL": 37 , # - "R_ALPHA_TPREL64": 38 , # - "R_ALPHA_TPRELHI": 39 , # - "R_ALPHA_TPRELLO": 40 , # - "R_ALPHA_TPREL16": 41 , # - "R_ALPHA_NUM": 46 , # - "LITUSE_ALPHA_ADDR": 0 , # - "LITUSE_ALPHA_BASE": 1 , # - "LITUSE_ALPHA_BYTOFF": 2 , # - "LITUSE_ALPHA_JSR": 3 , # - "LITUSE_ALPHA_TLS_GD": 4 , # - "LITUSE_ALPHA_TLS_LDM": 5 , # - "DT_ALPHA_PLTRO": (MacroRef("DT_LOPROC") + 0) , # - "DT_ALPHA_NUM": 1 , # - "EF_PPC_EMB": 0x80000000 , # PowerPC embedded flag - "EF_PPC_RELOCATABLE": 0x00010000 , # PowerPC -mrelocatable flag - "EF_PPC_RELOCATABLE_LIB": 0x00008000 , # PowerPC -mrelocatable-lib - "R_PPC_NONE": 0 , # - "R_PPC_ADDR32": 1 , # 32bit absolute address - "R_PPC_ADDR24": 2 , # 26bit address, 2 bits ignored. - "R_PPC_ADDR16": 3 , # 16bit absolute address - "R_PPC_ADDR16_LO": 4 , # lower 16bit of absolute address - "R_PPC_ADDR16_HI": 5 , # high 16bit of absolute address - "R_PPC_ADDR16_HA": 6 , # adjusted high 16bit - "R_PPC_ADDR14": 7 , # 16bit address, 2 bits ignored - "R_PPC_ADDR14_BRTAKEN": 8 , # - "R_PPC_ADDR14_BRNTAKEN": 9 , # - "R_PPC_REL24": 10 , # PC relative 26 bit - "R_PPC_REL14": 11 , # PC relative 16 bit - "R_PPC_REL14_BRTAKEN": 12 , # - "R_PPC_REL14_BRNTAKEN": 13 , # - "R_PPC_GOT16": 14 , # - "R_PPC_GOT16_LO": 15 , # - "R_PPC_GOT16_HI": 16 , # - "R_PPC_GOT16_HA": 17 , # - "R_PPC_PLTREL24": 18 , # - "R_PPC_COPY": 19 , # - "R_PPC_GLOB_DAT": 20 , # - "R_PPC_JMP_SLOT": 21 , # - "R_PPC_RELATIVE": 22 , # - "R_PPC_LOCAL24PC": 23 , # - "R_PPC_UADDR32": 24 , # - "R_PPC_UADDR16": 25 , # - "R_PPC_REL32": 26 , # - "R_PPC_PLT32": 27 , # - "R_PPC_PLTREL32": 28 , # - "R_PPC_PLT16_LO": 29 , # - "R_PPC_PLT16_HI": 30 , # - "R_PPC_PLT16_HA": 31 , # - "R_PPC_SDAREL16": 32 , # - "R_PPC_SECTOFF": 33 , # - "R_PPC_SECTOFF_LO": 34 , # - "R_PPC_SECTOFF_HI": 35 , # - "R_PPC_SECTOFF_HA": 36 , # - "R_PPC_TLS": 67 , # none (sym+add)@tls - "R_PPC_DTPMOD32": 68 , # word32 (sym+add)@dtpmod - "R_PPC_TPREL16": 69 , # half16* (sym+add)@tprel - "R_PPC_TPREL16_LO": 70 , # half16 (sym+add)@tprel@l - "R_PPC_TPREL16_HI": 71 , # half16 (sym+add)@tprel@h - "R_PPC_TPREL16_HA": 72 , # half16 (sym+add)@tprel@ha - "R_PPC_TPREL32": 73 , # word32 (sym+add)@tprel - "R_PPC_DTPREL16": 74 , # half16* (sym+add)@dtprel - "R_PPC_DTPREL16_LO": 75 , # half16 (sym+add)@dtprel@l - "R_PPC_DTPREL16_HI": 76 , # half16 (sym+add)@dtprel@h - "R_PPC_DTPREL16_HA": 77 , # half16 (sym+add)@dtprel@ha - "R_PPC_DTPREL32": 78 , # word32 (sym+add)@dtprel - "R_PPC_GOT_TLSGD16": 79 , # half16* (sym+add)@got@tlsgd - "R_PPC_GOT_TLSGD16_LO": 80 , # half16 (sym+add)@got@tlsgd@l - "R_PPC_GOT_TLSGD16_HI": 81 , # half16 (sym+add)@got@tlsgd@h - "R_PPC_GOT_TLSGD16_HA": 82 , # half16 (sym+add)@got@tlsgd@ha - "R_PPC_GOT_TLSLD16": 83 , # half16* (sym+add)@got@tlsld - "R_PPC_GOT_TLSLD16_LO": 84 , # half16 (sym+add)@got@tlsld@l - "R_PPC_GOT_TLSLD16_HI": 85 , # half16 (sym+add)@got@tlsld@h - "R_PPC_GOT_TLSLD16_HA": 86 , # half16 (sym+add)@got@tlsld@ha - "R_PPC_GOT_TPREL16": 87 , # half16* (sym+add)@got@tprel - "R_PPC_GOT_TPREL16_LO": 88 , # half16 (sym+add)@got@tprel@l - "R_PPC_GOT_TPREL16_HI": 89 , # half16 (sym+add)@got@tprel@h - "R_PPC_GOT_TPREL16_HA": 90 , # half16 (sym+add)@got@tprel@ha - "R_PPC_GOT_DTPREL16": 91 , # half16* (sym+add)@got@dtprel - "R_PPC_GOT_DTPREL16_LO": 92 , # half16* (sym+add)@got@dtprel@l - "R_PPC_GOT_DTPREL16_HI": 93 , # half16* (sym+add)@got@dtprel@h - "R_PPC_GOT_DTPREL16_HA": 94 , # half16* (sym+add)@got@dtprel@ha - "R_PPC_EMB_NADDR32": 101 , # - "R_PPC_EMB_NADDR16": 102 , # - "R_PPC_EMB_NADDR16_LO": 103 , # - "R_PPC_EMB_NADDR16_HI": 104 , # - "R_PPC_EMB_NADDR16_HA": 105 , # - "R_PPC_EMB_SDAI16": 106 , # - "R_PPC_EMB_SDA2I16": 107 , # - "R_PPC_EMB_SDA2REL": 108 , # - "R_PPC_EMB_SDA21": 109 , # 16 bit offset in SDA - "R_PPC_EMB_MRKREF": 110 , # - "R_PPC_EMB_RELSEC16": 111 , # - "R_PPC_EMB_RELST_LO": 112 , # - "R_PPC_EMB_RELST_HI": 113 , # - "R_PPC_EMB_RELST_HA": 114 , # - "R_PPC_EMB_BIT_FLD": 115 , # - "R_PPC_EMB_RELSDA": 116 , # 16 bit relative offset in SDA - "R_PPC_DIAB_SDA21_LO": 180 , # like EMB_SDA21, but lower 16 bit - "R_PPC_DIAB_SDA21_HI": 181 , # like EMB_SDA21, but high 16 bit - "R_PPC_DIAB_SDA21_HA": 182 , # like EMB_SDA21, adjusted high 16 - "R_PPC_DIAB_RELSDA_LO": 183 , # like EMB_RELSDA, but lower 16 bit - "R_PPC_DIAB_RELSDA_HI": 184 , # like EMB_RELSDA, but high 16 bit - "R_PPC_DIAB_RELSDA_HA": 185 , # like EMB_RELSDA, adjusted high 16 - "R_PPC_IRELATIVE": 248 , # - "R_PPC_REL16": 249 , # half16 (sym+add-.) - "R_PPC_REL16_LO": 250 , # half16 (sym+add-.)@l - "R_PPC_REL16_HI": 251 , # half16 (sym+add-.)@h - "R_PPC_REL16_HA": 252 , # half16 (sym+add-.)@ha - "R_PPC_TOC16": 255 , # - "DT_PPC_GOT": (MacroRef("DT_LOPROC") + 0) , # - "DT_PPC_NUM": 1 , # - "R_PPC64_NONE": MacroRef("R_PPC_NONE") , # - "R_PPC64_ADDR32": MacroRef("R_PPC_ADDR32") , # 32bit absolute address - "R_PPC64_ADDR24": MacroRef("R_PPC_ADDR24") , # 26bit address, word aligned - "R_PPC64_ADDR16": MacroRef("R_PPC_ADDR16") , # 16bit absolute address - "R_PPC64_ADDR16_LO": MacroRef("R_PPC_ADDR16_LO") , # lower 16bits of address - "R_PPC64_ADDR16_HI": MacroRef("R_PPC_ADDR16_HI") , # high 16bits of address. - "R_PPC64_ADDR16_HA": MacroRef("R_PPC_ADDR16_HA") , # adjusted high 16bits. - "R_PPC64_ADDR14": MacroRef("R_PPC_ADDR14") , # 16bit address, word aligned - "R_PPC64_ADDR14_BRTAKEN": MacroRef("R_PPC_ADDR14_BRTAKEN") , # - "R_PPC64_ADDR14_BRNTAKEN": MacroRef("R_PPC_ADDR14_BRNTAKEN") , # - "R_PPC64_REL24": MacroRef("R_PPC_REL24") , # PC-rel. 26 bit, word aligned - "R_PPC64_REL14": MacroRef("R_PPC_REL14") , # PC relative 16 bit - "R_PPC64_REL14_BRTAKEN": MacroRef("R_PPC_REL14_BRTAKEN") , # - "R_PPC64_REL14_BRNTAKEN": MacroRef("R_PPC_REL14_BRNTAKEN") , # - "R_PPC64_GOT16": MacroRef("R_PPC_GOT16") , # - "R_PPC64_GOT16_LO": MacroRef("R_PPC_GOT16_LO") , # - "R_PPC64_GOT16_HI": MacroRef("R_PPC_GOT16_HI") , # - "R_PPC64_GOT16_HA": MacroRef("R_PPC_GOT16_HA") , # - "R_PPC64_COPY": MacroRef("R_PPC_COPY") , # - "R_PPC64_GLOB_DAT": MacroRef("R_PPC_GLOB_DAT") , # - "R_PPC64_JMP_SLOT": MacroRef("R_PPC_JMP_SLOT") , # - "R_PPC64_RELATIVE": MacroRef("R_PPC_RELATIVE") , # - "R_PPC64_UADDR32": MacroRef("R_PPC_UADDR32") , # - "R_PPC64_UADDR16": MacroRef("R_PPC_UADDR16") , # - "R_PPC64_REL32": MacroRef("R_PPC_REL32") , # - "R_PPC64_PLT32": MacroRef("R_PPC_PLT32") , # - "R_PPC64_PLTREL32": MacroRef("R_PPC_PLTREL32") , # - "R_PPC64_PLT16_LO": MacroRef("R_PPC_PLT16_LO") , # - "R_PPC64_PLT16_HI": MacroRef("R_PPC_PLT16_HI") , # - "R_PPC64_PLT16_HA": MacroRef("R_PPC_PLT16_HA") , # - "R_PPC64_SECTOFF": MacroRef("R_PPC_SECTOFF") , # - "R_PPC64_SECTOFF_LO": MacroRef("R_PPC_SECTOFF_LO") , # - "R_PPC64_SECTOFF_HI": MacroRef("R_PPC_SECTOFF_HI") , # - "R_PPC64_SECTOFF_HA": MacroRef("R_PPC_SECTOFF_HA") , # - "R_PPC64_ADDR30": 37 , # word30 (S + A - P) >> 2 - "R_PPC64_ADDR64": 38 , # doubleword64 S + A - "R_PPC64_ADDR16_HIGHER": 39 , # half16 #higher(S + A) - "R_PPC64_ADDR16_HIGHERA": 40 , # half16 #highera(S + A) - "R_PPC64_ADDR16_HIGHEST": 41 , # half16 #highest(S + A) - "R_PPC64_ADDR16_HIGHESTA": 42 , # half16 #highesta(S + A) - "R_PPC64_UADDR64": 43 , # doubleword64 S + A - "R_PPC64_REL64": 44 , # doubleword64 S + A - P - "R_PPC64_PLT64": 45 , # doubleword64 L + A - "R_PPC64_PLTREL64": 46 , # doubleword64 L + A - P - "R_PPC64_TOC16": 47 , # half16* S + A - .TOC - "R_PPC64_TOC16_LO": 48 , # half16 #lo(S + A - .TOC.) - "R_PPC64_TOC16_HI": 49 , # half16 #hi(S + A - .TOC.) - "R_PPC64_TOC16_HA": 50 , # half16 #ha(S + A - .TOC.) - "R_PPC64_TOC": 51 , # doubleword64 .TOC - "R_PPC64_PLTGOT16": 52 , # half16* M + A - "R_PPC64_PLTGOT16_LO": 53 , # half16 #lo(M + A) - "R_PPC64_PLTGOT16_HI": 54 , # half16 #hi(M + A) - "R_PPC64_PLTGOT16_HA": 55 , # half16 #ha(M + A) - "R_PPC64_ADDR16_DS": 56 , # half16ds* (S + A) >> 2 - "R_PPC64_ADDR16_LO_DS": 57 , # half16ds #lo(S + A) >> 2 - "R_PPC64_GOT16_DS": 58 , # half16ds* (G + A) >> 2 - "R_PPC64_GOT16_LO_DS": 59 , # half16ds #lo(G + A) >> 2 - "R_PPC64_PLT16_LO_DS": 60 , # half16ds #lo(L + A) >> 2 - "R_PPC64_SECTOFF_DS": 61 , # half16ds* (R + A) >> 2 - "R_PPC64_SECTOFF_LO_DS": 62 , # half16ds #lo(R + A) >> 2 - "R_PPC64_TOC16_DS": 63 , # half16ds* (S + A - .TOC.) >> 2 - "R_PPC64_TOC16_LO_DS": 64 , # half16ds #lo(S + A - .TOC.) >> 2 - "R_PPC64_PLTGOT16_DS": 65 , # half16ds* (M + A) >> 2 - "R_PPC64_PLTGOT16_LO_DS": 66 , # half16ds #lo(M + A) >> 2 - "R_PPC64_TLS": 67 , # none (sym+add)@tls - "R_PPC64_DTPMOD64": 68 , # doubleword64 (sym+add)@dtpmod - "R_PPC64_TPREL16": 69 , # half16* (sym+add)@tprel - "R_PPC64_TPREL16_LO": 70 , # half16 (sym+add)@tprel@l - "R_PPC64_TPREL16_HI": 71 , # half16 (sym+add)@tprel@h - "R_PPC64_TPREL16_HA": 72 , # half16 (sym+add)@tprel@ha - "R_PPC64_TPREL64": 73 , # doubleword64 (sym+add)@tprel - "R_PPC64_DTPREL16": 74 , # half16* (sym+add)@dtprel - "R_PPC64_DTPREL16_LO": 75 , # half16 (sym+add)@dtprel@l - "R_PPC64_DTPREL16_HI": 76 , # half16 (sym+add)@dtprel@h - "R_PPC64_DTPREL16_HA": 77 , # half16 (sym+add)@dtprel@ha - "R_PPC64_DTPREL64": 78 , # doubleword64 (sym+add)@dtprel - "R_PPC64_GOT_TLSGD16": 79 , # half16* (sym+add)@got@tlsgd - "R_PPC64_GOT_TLSGD16_LO": 80 , # half16 (sym+add)@got@tlsgd@l - "R_PPC64_GOT_TLSGD16_HI": 81 , # half16 (sym+add)@got@tlsgd@h - "R_PPC64_GOT_TLSGD16_HA": 82 , # half16 (sym+add)@got@tlsgd@ha - "R_PPC64_GOT_TLSLD16": 83 , # half16* (sym+add)@got@tlsld - "R_PPC64_GOT_TLSLD16_LO": 84 , # half16 (sym+add)@got@tlsld@l - "R_PPC64_GOT_TLSLD16_HI": 85 , # half16 (sym+add)@got@tlsld@h - "R_PPC64_GOT_TLSLD16_HA": 86 , # half16 (sym+add)@got@tlsld@ha - "R_PPC64_GOT_TPREL16_DS": 87 , # half16ds* (sym+add)@got@tprel - "R_PPC64_GOT_TPREL16_LO_DS": 88 , # half16ds (sym+add)@got@tprel@l - "R_PPC64_GOT_TPREL16_HI": 89 , # half16 (sym+add)@got@tprel@h - "R_PPC64_GOT_TPREL16_HA": 90 , # half16 (sym+add)@got@tprel@ha - "R_PPC64_GOT_DTPREL16_DS": 91 , # half16ds* (sym+add)@got@dtprel - "R_PPC64_GOT_DTPREL16_LO_DS": 92 , # half16ds (sym+add)@got@dtprel@l - "R_PPC64_GOT_DTPREL16_HI": 93 , # half16 (sym+add)@got@dtprel@h - "R_PPC64_GOT_DTPREL16_HA": 94 , # half16 (sym+add)@got@dtprel@ha - "R_PPC64_TPREL16_DS": 95 , # half16ds* (sym+add)@tprel - "R_PPC64_TPREL16_LO_DS": 96 , # half16ds (sym+add)@tprel@l - "R_PPC64_TPREL16_HIGHER": 97 , # half16 (sym+add)@tprel@higher - "R_PPC64_TPREL16_HIGHERA": 98 , # half16 (sym+add)@tprel@highera - "R_PPC64_TPREL16_HIGHEST": 99 , # half16 (sym+add)@tprel@highest - "R_PPC64_TPREL16_HIGHESTA": 100 , # half16 (sym+add)@tprel@highesta - "R_PPC64_DTPREL16_DS": 101 , # half16ds* (sym+add)@dtprel - "R_PPC64_DTPREL16_LO_DS": 102 , # half16ds (sym+add)@dtprel@l - "R_PPC64_DTPREL16_HIGHER": 103 , # half16 (sym+add)@dtprel@higher - "R_PPC64_DTPREL16_HIGHERA": 104 , # half16 (sym+add)@dtprel@highera - "R_PPC64_DTPREL16_HIGHEST": 105 , # half16 (sym+add)@dtprel@highest - "R_PPC64_DTPREL16_HIGHESTA": 106 , # half16 (sym+add)@dtprel@highesta - "R_PPC64_JMP_IREL": 247 , # - "R_PPC64_IRELATIVE": 248 , # - "R_PPC64_REL16": 249 , # half16 (sym+add-.) - "R_PPC64_REL16_LO": 250 , # half16 (sym+add-.)@l - "R_PPC64_REL16_HI": 251 , # half16 (sym+add-.)@h - "R_PPC64_REL16_HA": 252 , # half16 (sym+add-.)@ha - "DT_PPC64_GLINK": (MacroRef("DT_LOPROC") + 0) , # - "DT_PPC64_OPD": (MacroRef("DT_LOPROC") + 1) , # - "DT_PPC64_OPDSZ": (MacroRef("DT_LOPROC") + 2) , # - "DT_PPC64_NUM": 3 , # - "EF_ARM_RELEXEC": 0x01 , # - "EF_ARM_HASENTRY": 0x02 , # - "EF_ARM_INTERWORK": 0x04 , # - "EF_ARM_APCS_26": 0x08 , # - "EF_ARM_APCS_FLOAT": 0x10 , # - "EF_ARM_PIC": 0x20 , # - "EF_ARM_ALIGN8": 0x40 , # 8-bit structure alignment is in use - "EF_ARM_NEW_ABI": 0x80 , # - "EF_ARM_OLD_ABI": 0x100 , # - "EF_ARM_SOFT_FLOAT": 0x200 , # - "EF_ARM_VFP_FLOAT": 0x400 , # - "EF_ARM_MAVERICK_FLOAT": 0x800 , # - "EF_ARM_SYMSARESORTED": 0x04 , # - "EF_ARM_DYNSYMSUSESEGIDX": 0x08 , # - "EF_ARM_MAPSYMSFIRST": 0x10 , # - "EF_ARM_EABIMASK": 0XFF000000 , # - "EF_ARM_BE8": 0x00800000 , # - "EF_ARM_LE8": 0x00400000 , # - "EF_ARM_EABI_UNKNOWN": 0x00000000 , # - "EF_ARM_EABI_VER1": 0x01000000 , # - "EF_ARM_EABI_VER2": 0x02000000 , # - "EF_ARM_EABI_VER3": 0x03000000 , # - "EF_ARM_EABI_VER4": 0x04000000 , # - "EF_ARM_EABI_VER5": 0x05000000 , # - "STT_ARM_TFUNC": MacroRef("STT_LOPROC") , # A Thumb function. - "STT_ARM_16BIT": MacroRef("STT_HIPROC") , # A Thumb label. - "SHF_ARM_ENTRYSECT": 0x10000000 , # Section contains an entry point - "SHF_ARM_COMDEF": 0x80000000 , # Section may be multiply defined - "PF_ARM_SB": 0x10000000 , # Segment contains the location - "PF_ARM_PI": 0x20000000 , # Position-independent segment. - "PF_ARM_ABS": 0x40000000 , # Absolute segment. - "PT_ARM_EXIDX": (MacroRef("PT_LOPROC") + 1) , # ARM unwind segment. - "SHT_ARM_EXIDX": (MacroRef("SHT_LOPROC") + 1) , # ARM unwind section. - "SHT_ARM_PREEMPTMAP": (MacroRef("SHT_LOPROC") + 2) , # Preemption details. - "SHT_ARM_ATTRIBUTES": (MacroRef("SHT_LOPROC") + 3) , # ARM attributes section. - "R_ARM_NONE": 0 , # No reloc - "R_ARM_PC24": 1 , # PC relative 26 bit branch - "R_ARM_ABS32": 2 , # Direct 32 bit - "R_ARM_REL32": 3 , # PC relative 32 bit - "R_ARM_PC13": 4 , # - "R_ARM_ABS16": 5 , # Direct 16 bit - "R_ARM_ABS12": 6 , # Direct 12 bit - "R_ARM_THM_ABS5": 7 , # - "R_ARM_ABS8": 8 , # Direct 8 bit - "R_ARM_SBREL32": 9 , # - "R_ARM_THM_PC22": 10 , # - "R_ARM_THM_PC8": 11 , # - "R_ARM_AMP_VCALL9": 12 , # - "R_ARM_SWI24": 13 , # Obsolete static relocation. - "R_ARM_TLS_DESC": 13 , # Dynamic relocation. - "R_ARM_THM_SWI8": 14 , # - "R_ARM_XPC25": 15 , # - "R_ARM_THM_XPC22": 16 , # - "R_ARM_TLS_DTPMOD32": 17 , # ID of module containing symbol - "R_ARM_TLS_DTPOFF32": 18 , # Offset in TLS block - "R_ARM_TLS_TPOFF32": 19 , # Offset in static TLS block - "R_ARM_COPY": 20 , # Copy symbol at runtime - "R_ARM_GLOB_DAT": 21 , # Create GOT entry - "R_ARM_JUMP_SLOT": 22 , # Create PLT entry - "R_ARM_RELATIVE": 23 , # Adjust by program base - "R_ARM_GOTOFF": 24 , # 32 bit offset to GOT - "R_ARM_GOTPC": 25 , # 32 bit PC relative offset to GOT - "R_ARM_GOT32": 26 , # 32 bit GOT entry - "R_ARM_PLT32": 27 , # 32 bit PLT address - "R_ARM_ALU_PCREL_7_0": 32 , # - "R_ARM_ALU_PCREL_15_8": 33 , # - "R_ARM_ALU_PCREL_23_15": 34 , # - "R_ARM_LDR_SBREL_11_0": 35 , # - "R_ARM_ALU_SBREL_19_12": 36 , # - "R_ARM_ALU_SBREL_27_20": 37 , # - "R_ARM_TLS_GOTDESC": 90 , # - "R_ARM_TLS_CALL": 91 , # - "R_ARM_TLS_DESCSEQ": 92 , # - "R_ARM_THM_TLS_CALL": 93 , # - "R_ARM_GNU_VTENTRY": 100 , # - "R_ARM_GNU_VTINHERIT": 101 , # - "R_ARM_THM_PC11": 102 , # thumb unconditional branch - "R_ARM_THM_PC9": 103 , # thumb conditional branch - "R_ARM_TLS_GD32": 104 , # PC-rel 32 bit for global dynamic - "R_ARM_TLS_LDM32": 105 , # PC-rel 32 bit for local dynamic - "R_ARM_TLS_LDO32": 106 , # 32 bit offset relative to TLS - "R_ARM_TLS_IE32": 107 , # PC-rel 32 bit for GOT entry of - "R_ARM_TLS_LE32": 108 , # 32 bit offset relative to static - "R_ARM_THM_TLS_DESCSEQ": 129 , # - "R_ARM_IRELATIVE": 160 , # - "R_ARM_RXPC25": 249 , # - "R_ARM_RSBREL32": 250 , # - "R_ARM_THM_RPC22": 251 , # - "R_ARM_RREL32": 252 , # - "R_ARM_RABS22": 253 , # - "R_ARM_RPC24": 254 , # - "R_ARM_RBASE": 255 , # - "R_ARM_NUM": 256 , # - "EF_IA_64_MASKOS": 0x0000000f , # os-specific flags - "EF_IA_64_ABI64": 0x00000010 , # 64-bit ABI - "EF_IA_64_ARCH": 0xff000000 , # arch. version mask - "PT_IA_64_ARCHEXT": (MacroRef("PT_LOPROC") + 0) , # arch extension bits - "PT_IA_64_UNWIND": (MacroRef("PT_LOPROC") + 1) , # ia64 unwind bits - "PT_IA_64_HP_OPT_ANOT": (MacroRef("PT_LOOS") + 0x12) , # - "PT_IA_64_HP_HSL_ANOT": (MacroRef("PT_LOOS") + 0x13) , # - "PT_IA_64_HP_STACK": (MacroRef("PT_LOOS") + 0x14) , # - "PF_IA_64_NORECOV": 0x80000000 , # spec insns w/o recovery - "SHT_IA_64_EXT": (MacroRef("SHT_LOPROC") + 0) , # extension bits - "SHT_IA_64_UNWIND": (MacroRef("SHT_LOPROC") + 1) , # unwind bits - "SHF_IA_64_SHORT": 0x10000000 , # section near gp - "SHF_IA_64_NORECOV": 0x20000000 , # spec insns w/o recovery - "DT_IA_64_PLT_RESERVE": (MacroRef("DT_LOPROC") + 0) , # - "DT_IA_64_NUM": 1 , # - "R_IA64_NONE": 0x00 , # none - "R_IA64_IMM14": 0x21 , # symbol + addend, add imm14 - "R_IA64_IMM22": 0x22 , # symbol + addend, add imm22 - "R_IA64_IMM64": 0x23 , # symbol + addend, mov imm64 - "R_IA64_DIR32MSB": 0x24 , # symbol + addend, data4 MSB - "R_IA64_DIR32LSB": 0x25 , # symbol + addend, data4 LSB - "R_IA64_DIR64MSB": 0x26 , # symbol + addend, data8 MSB - "R_IA64_DIR64LSB": 0x27 , # symbol + addend, data8 LSB - "R_IA64_GPREL22": 0x2a , # @gprel(sym + add), add imm22 - "R_IA64_GPREL64I": 0x2b , # @gprel(sym + add), mov imm64 - "R_IA64_GPREL32MSB": 0x2c , # @gprel(sym + add), data4 MSB - "R_IA64_GPREL32LSB": 0x2d , # @gprel(sym + add), data4 LSB - "R_IA64_GPREL64MSB": 0x2e , # @gprel(sym + add), data8 MSB - "R_IA64_GPREL64LSB": 0x2f , # @gprel(sym + add), data8 LSB - "R_IA64_LTOFF22": 0x32 , # @ltoff(sym + add), add imm22 - "R_IA64_LTOFF64I": 0x33 , # @ltoff(sym + add), mov imm64 - "R_IA64_PLTOFF22": 0x3a , # @pltoff(sym + add), add imm22 - "R_IA64_PLTOFF64I": 0x3b , # @pltoff(sym + add), mov imm64 - "R_IA64_PLTOFF64MSB": 0x3e , # @pltoff(sym + add), data8 MSB - "R_IA64_PLTOFF64LSB": 0x3f , # @pltoff(sym + add), data8 LSB - "R_IA64_FPTR64I": 0x43 , # @fptr(sym + add), mov imm64 - "R_IA64_FPTR32MSB": 0x44 , # @fptr(sym + add), data4 MSB - "R_IA64_FPTR32LSB": 0x45 , # @fptr(sym + add), data4 LSB - "R_IA64_FPTR64MSB": 0x46 , # @fptr(sym + add), data8 MSB - "R_IA64_FPTR64LSB": 0x47 , # @fptr(sym + add), data8 LSB - "R_IA64_PCREL60B": 0x48 , # @pcrel(sym + add), brl - "R_IA64_PCREL21B": 0x49 , # @pcrel(sym + add), ptb, call - "R_IA64_PCREL21M": 0x4a , # @pcrel(sym + add), chk.s - "R_IA64_PCREL21F": 0x4b , # @pcrel(sym + add), fchkf - "R_IA64_PCREL32MSB": 0x4c , # @pcrel(sym + add), data4 MSB - "R_IA64_PCREL32LSB": 0x4d , # @pcrel(sym + add), data4 LSB - "R_IA64_PCREL64MSB": 0x4e , # @pcrel(sym + add), data8 MSB - "R_IA64_PCREL64LSB": 0x4f , # @pcrel(sym + add), data8 LSB - "R_IA64_LTOFF_FPTR22": 0x52 , # @ltoff(@fptr(s+a)), imm22 - "R_IA64_LTOFF_FPTR64I": 0x53 , # @ltoff(@fptr(s+a)), imm64 - "R_IA64_LTOFF_FPTR32MSB": 0x54 , # @ltoff(@fptr(s+a)), data4 MSB - "R_IA64_LTOFF_FPTR32LSB": 0x55 , # @ltoff(@fptr(s+a)), data4 LSB - "R_IA64_LTOFF_FPTR64MSB": 0x56 , # @ltoff(@fptr(s+a)), data8 MSB - "R_IA64_LTOFF_FPTR64LSB": 0x57 , # @ltoff(@fptr(s+a)), data8 LSB - "R_IA64_SEGREL32MSB": 0x5c , # @segrel(sym + add), data4 MSB - "R_IA64_SEGREL32LSB": 0x5d , # @segrel(sym + add), data4 LSB - "R_IA64_SEGREL64MSB": 0x5e , # @segrel(sym + add), data8 MSB - "R_IA64_SEGREL64LSB": 0x5f , # @segrel(sym + add), data8 LSB - "R_IA64_SECREL32MSB": 0x64 , # @secrel(sym + add), data4 MSB - "R_IA64_SECREL32LSB": 0x65 , # @secrel(sym + add), data4 LSB - "R_IA64_SECREL64MSB": 0x66 , # @secrel(sym + add), data8 MSB - "R_IA64_SECREL64LSB": 0x67 , # @secrel(sym + add), data8 LSB - "R_IA64_REL32MSB": 0x6c , # data 4 + REL - "R_IA64_REL32LSB": 0x6d , # data 4 + REL - "R_IA64_REL64MSB": 0x6e , # data 8 + REL - "R_IA64_REL64LSB": 0x6f , # data 8 + REL - "R_IA64_LTV32MSB": 0x74 , # symbol + addend, data4 MSB - "R_IA64_LTV32LSB": 0x75 , # symbol + addend, data4 LSB - "R_IA64_LTV64MSB": 0x76 , # symbol + addend, data8 MSB - "R_IA64_LTV64LSB": 0x77 , # symbol + addend, data8 LSB - "R_IA64_PCREL21BI": 0x79 , # @pcrel(sym + add), 21bit inst - "R_IA64_PCREL22": 0x7a , # @pcrel(sym + add), 22bit inst - "R_IA64_PCREL64I": 0x7b , # @pcrel(sym + add), 64bit inst - "R_IA64_IPLTMSB": 0x80 , # dynamic reloc, imported PLT, MSB - "R_IA64_IPLTLSB": 0x81 , # dynamic reloc, imported PLT, LSB - "R_IA64_COPY": 0x84 , # copy relocation - "R_IA64_SUB": 0x85 , # Addend and symbol difference - "R_IA64_LTOFF22X": 0x86 , # LTOFF22, relaxable. - "R_IA64_LDXMOV": 0x87 , # Use of LTOFF22X. - "R_IA64_TPREL14": 0x91 , # @tprel(sym + add), imm14 - "R_IA64_TPREL22": 0x92 , # @tprel(sym + add), imm22 - "R_IA64_TPREL64I": 0x93 , # @tprel(sym + add), imm64 - "R_IA64_TPREL64MSB": 0x96 , # @tprel(sym + add), data8 MSB - "R_IA64_TPREL64LSB": 0x97 , # @tprel(sym + add), data8 LSB - "R_IA64_LTOFF_TPREL22": 0x9a , # @ltoff(@tprel(s+a)), imm2 - "R_IA64_DTPMOD64MSB": 0xa6 , # @dtpmod(sym + add), data8 MSB - "R_IA64_DTPMOD64LSB": 0xa7 , # @dtpmod(sym + add), data8 LSB - "R_IA64_LTOFF_DTPMOD22": 0xaa , # @ltoff(@dtpmod(sym + add)), imm22 - "R_IA64_DTPREL14": 0xb1 , # @dtprel(sym + add), imm14 - "R_IA64_DTPREL22": 0xb2 , # @dtprel(sym + add), imm22 - "R_IA64_DTPREL64I": 0xb3 , # @dtprel(sym + add), imm64 - "R_IA64_DTPREL32MSB": 0xb4 , # @dtprel(sym + add), data4 MSB - "R_IA64_DTPREL32LSB": 0xb5 , # @dtprel(sym + add), data4 LSB - "R_IA64_DTPREL64MSB": 0xb6 , # @dtprel(sym + add), data8 MSB - "R_IA64_DTPREL64LSB": 0xb7 , # @dtprel(sym + add), data8 LSB - "R_IA64_LTOFF_DTPREL22": 0xba , # @ltoff(@dtprel(s+a)), imm22 - "EF_SH_MACH_MASK": 0x1f , # - "EF_SH_UNKNOWN": 0x0 , # - "EF_SH1": 0x1 , # - "EF_SH2": 0x2 , # - "EF_SH3": 0x3 , # - "EF_SH_DSP": 0x4 , # - "EF_SH3_DSP": 0x5 , # - "EF_SH4AL_DSP": 0x6 , # - "EF_SH3E": 0x8 , # - "EF_SH4": 0x9 , # - "EF_SH2E": 0xb , # - "EF_SH4A": 0xc , # - "EF_SH2A": 0xd , # - "EF_SH4_NOFPU": 0x10 , # - "EF_SH4A_NOFPU": 0x11 , # - "EF_SH4_NOMMU_NOFPU": 0x12 , # - "EF_SH2A_NOFPU": 0x13 , # - "EF_SH3_NOMMU": 0x14 , # - "EF_SH2A_SH4_NOFPU": 0x15 , # - "EF_SH2A_SH3_NOFPU": 0x16 , # - "EF_SH2A_SH4": 0x17 , # - "EF_SH2A_SH3E": 0x18 , # - "R_SH_NONE": 0 , # - "R_SH_DIR32": 1 , # - "R_SH_REL32": 2 , # - "R_SH_DIR8WPN": 3 , # - "R_SH_IND12W": 4 , # - "R_SH_DIR8WPL": 5 , # - "R_SH_DIR8WPZ": 6 , # - "R_SH_DIR8BP": 7 , # - "R_SH_DIR8W": 8 , # - "R_SH_DIR8L": 9 , # - "R_SH_SWITCH16": 25 , # - "R_SH_SWITCH32": 26 , # - "R_SH_USES": 27 , # - "R_SH_COUNT": 28 , # - "R_SH_ALIGN": 29 , # - "R_SH_CODE": 30 , # - "R_SH_DATA": 31 , # - "R_SH_LABEL": 32 , # - "R_SH_SWITCH8": 33 , # - "R_SH_GNU_VTINHERIT": 34 , # - "R_SH_GNU_VTENTRY": 35 , # - "R_SH_TLS_GD_32": 144 , # - "R_SH_TLS_LD_32": 145 , # - "R_SH_TLS_LDO_32": 146 , # - "R_SH_TLS_IE_32": 147 , # - "R_SH_TLS_LE_32": 148 , # - "R_SH_TLS_DTPMOD32": 149 , # - "R_SH_TLS_DTPOFF32": 150 , # - "R_SH_TLS_TPOFF32": 151 , # - "R_SH_GOT32": 160 , # - "R_SH_PLT32": 161 , # - "R_SH_COPY": 162 , # - "R_SH_GLOB_DAT": 163 , # - "R_SH_JMP_SLOT": 164 , # - "R_SH_RELATIVE": 165 , # - "R_SH_GOTOFF": 166 , # - "R_SH_GOTPC": 167 , # - "R_SH_NUM": 256 , # - "EF_S390_HIGH_GPRS": 0x00000001 , # High GPRs kernel facility needed. - "R_390_NONE": 0 , # No reloc. - "R_390_8": 1 , # Direct 8 bit. - "R_390_12": 2 , # Direct 12 bit. - "R_390_16": 3 , # Direct 16 bit. - "R_390_32": 4 , # Direct 32 bit. - "R_390_PC32": 5 , # PC relative 32 bit. - "R_390_GOT12": 6 , # 12 bit GOT offset. - "R_390_GOT32": 7 , # 32 bit GOT offset. - "R_390_PLT32": 8 , # 32 bit PC relative PLT address. - "R_390_COPY": 9 , # Copy symbol at runtime. - "R_390_GLOB_DAT": 10 , # Create GOT entry. - "R_390_JMP_SLOT": 11 , # Create PLT entry. - "R_390_RELATIVE": 12 , # Adjust by program base. - "R_390_GOTOFF32": 13 , # 32 bit offset to GOT. - "R_390_GOTPC": 14 , # 32 bit PC relative offset to GOT. - "R_390_GOT16": 15 , # 16 bit GOT offset. - "R_390_PC16": 16 , # PC relative 16 bit. - "R_390_PC16DBL": 17 , # PC relative 16 bit shifted by 1. - "R_390_PLT16DBL": 18 , # 16 bit PC rel. PLT shifted by 1. - "R_390_PC32DBL": 19 , # PC relative 32 bit shifted by 1. - "R_390_PLT32DBL": 20 , # 32 bit PC rel. PLT shifted by 1. - "R_390_GOTPCDBL": 21 , # 32 bit PC rel. GOT shifted by 1. - "R_390_64": 22 , # Direct 64 bit. - "R_390_PC64": 23 , # PC relative 64 bit. - "R_390_GOT64": 24 , # 64 bit GOT offset. - "R_390_PLT64": 25 , # 64 bit PC relative PLT address. - "R_390_GOTENT": 26 , # 32 bit PC rel. to GOT entry >> 1. - "R_390_GOTOFF16": 27 , # 16 bit offset to GOT. - "R_390_GOTOFF64": 28 , # 64 bit offset to GOT. - "R_390_GOTPLT12": 29 , # 12 bit offset to jump slot. - "R_390_GOTPLT16": 30 , # 16 bit offset to jump slot. - "R_390_GOTPLT32": 31 , # 32 bit offset to jump slot. - "R_390_GOTPLT64": 32 , # 64 bit offset to jump slot. - "R_390_GOTPLTENT": 33 , # 32 bit rel. offset to jump slot. - "R_390_PLTOFF16": 34 , # 16 bit offset from GOT to PLT. - "R_390_PLTOFF32": 35 , # 32 bit offset from GOT to PLT. - "R_390_PLTOFF64": 36 , # 16 bit offset from GOT to PLT. - "R_390_TLS_LOAD": 37 , # Tag for load insn in TLS code. - "R_390_TLS_GDCALL": 38 , # Tag for function call in general - "R_390_TLS_LDCALL": 39 , # Tag for function call in local - "R_390_TLS_GD32": 40 , # Direct 32 bit for general dynamic - "R_390_TLS_GD64": 41 , # Direct 64 bit for general dynamic - "R_390_TLS_GOTIE12": 42 , # 12 bit GOT offset for static TLS - "R_390_TLS_GOTIE32": 43 , # 32 bit GOT offset for static TLS - "R_390_TLS_GOTIE64": 44 , # 64 bit GOT offset for static TLS - "R_390_TLS_LDM32": 45 , # Direct 32 bit for local dynamic - "R_390_TLS_LDM64": 46 , # Direct 64 bit for local dynamic - "R_390_TLS_IE32": 47 , # 32 bit address of GOT entry for - "R_390_TLS_IE64": 48 , # 64 bit address of GOT entry for - "R_390_TLS_IEENT": 49 , # 32 bit rel. offset to GOT entry for - "R_390_TLS_LE32": 50 , # 32 bit negated offset relative to - "R_390_TLS_LE64": 51 , # 64 bit negated offset relative to - "R_390_TLS_LDO32": 52 , # 32 bit offset relative to TLS - "R_390_TLS_LDO64": 53 , # 64 bit offset relative to TLS - "R_390_TLS_DTPMOD": 54 , # ID of module containing symbol. - "R_390_TLS_DTPOFF": 55 , # Offset in TLS block. - "R_390_TLS_TPOFF": 56 , # Negated offset in static TLS - "R_390_20": 57 , # Direct 20 bit. - "R_390_GOT20": 58 , # 20 bit GOT offset. - "R_390_GOTPLT20": 59 , # 20 bit offset to jump slot. - "R_390_TLS_GOTIE20": 60 , # 20 bit GOT offset for static TLS - "R_390_NUM": 61 , # - "R_CRIS_NONE": 0 , # - "R_CRIS_8": 1 , # - "R_CRIS_16": 2 , # - "R_CRIS_32": 3 , # - "R_CRIS_8_PCREL": 4 , # - "R_CRIS_16_PCREL": 5 , # - "R_CRIS_32_PCREL": 6 , # - "R_CRIS_GNU_VTINHERIT": 7 , # - "R_CRIS_GNU_VTENTRY": 8 , # - "R_CRIS_COPY": 9 , # - "R_CRIS_GLOB_DAT": 10 , # - "R_CRIS_JUMP_SLOT": 11 , # - "R_CRIS_RELATIVE": 12 , # - "R_CRIS_16_GOT": 13 , # - "R_CRIS_32_GOT": 14 , # - "R_CRIS_16_GOTPLT": 15 , # - "R_CRIS_32_GOTPLT": 16 , # - "R_CRIS_32_GOTREL": 17 , # - "R_CRIS_32_PLT_GOTREL": 18 , # - "R_CRIS_32_PLT_PCREL": 19 , # - "R_CRIS_NUM": 20 , # - "R_X86_64_NONE": 0 , # No reloc - "R_X86_64_64": 1 , # Direct 64 bit - "R_X86_64_PC32": 2 , # PC relative 32 bit signed - "R_X86_64_GOT32": 3 , # 32 bit GOT entry - "R_X86_64_PLT32": 4 , # 32 bit PLT address - "R_X86_64_COPY": 5 , # Copy symbol at runtime - "R_X86_64_GLOB_DAT": 6 , # Create GOT entry - "R_X86_64_JUMP_SLOT": 7 , # Create PLT entry - "R_X86_64_RELATIVE": 8 , # Adjust by program base - "R_X86_64_GOTPCREL": 9 , # 32 bit signed PC relative - "R_X86_64_32": 10 , # Direct 32 bit zero extended - "R_X86_64_32S": 11 , # Direct 32 bit sign extended - "R_X86_64_16": 12 , # Direct 16 bit zero extended - "R_X86_64_PC16": 13 , # 16 bit sign extended pc relative - "R_X86_64_8": 14 , # Direct 8 bit sign extended - "R_X86_64_PC8": 15 , # 8 bit sign extended pc relative - "R_X86_64_DTPMOD64": 16 , # ID of module containing symbol - "R_X86_64_DTPOFF64": 17 , # Offset in module's TLS block - "R_X86_64_TPOFF64": 18 , # Offset in initial TLS block - "R_X86_64_TLSGD": 19 , # 32 bit signed PC relative offset - "R_X86_64_TLSLD": 20 , # 32 bit signed PC relative offset - "R_X86_64_DTPOFF32": 21 , # Offset in TLS block - "R_X86_64_GOTTPOFF": 22 , # 32 bit signed PC relative offset - "R_X86_64_TPOFF32": 23 , # Offset in initial TLS block - "R_X86_64_PC64": 24 , # PC relative 64 bit - "R_X86_64_GOTOFF64": 25 , # 64 bit offset to GOT - "R_X86_64_GOTPC32": 26 , # 32 bit signed pc relative - "R_X86_64_GOT64": 27 , # 64-bit GOT entry offset - "R_X86_64_GOTPCREL64": 28 , # 64-bit PC relative offset - "R_X86_64_GOTPC64": 29 , # 64-bit PC relative offset to GOT - "R_X86_64_GOTPLT64": 30 , # like GOT64, says PLT entry needed - "R_X86_64_PLTOFF64": 31 , # 64-bit GOT relative offset - "R_X86_64_SIZE32": 32 , # Size of symbol plus 32-bit addend - "R_X86_64_SIZE64": 33 , # Size of symbol plus 64-bit addend - "R_X86_64_GOTPC32_TLSDESC": 34 , # GOT offset for TLS descriptor. - "R_X86_64_TLSDESC_CALL": 35 , # Marker for call through TLS - "R_X86_64_TLSDESC": 36 , # TLS descriptor. - "R_X86_64_IRELATIVE": 37 , # Adjust indirectly by program base - "R_X86_64_NUM": 38 , # - "R_MN10300_NONE": 0 , # No reloc. - "R_MN10300_32": 1 , # Direct 32 bit. - "R_MN10300_16": 2 , # Direct 16 bit. - "R_MN10300_8": 3 , # Direct 8 bit. - "R_MN10300_PCREL32": 4 , # PC-relative 32-bit. - "R_MN10300_PCREL16": 5 , # PC-relative 16-bit signed. - "R_MN10300_PCREL8": 6 , # PC-relative 8-bit signed. - "R_MN10300_GNU_VTINHERIT": 7 , # Ancient C++ vtable garbage... - "R_MN10300_GNU_VTENTRY": 8 , # ... collection annotation. - "R_MN10300_24": 9 , # Direct 24 bit. - "R_MN10300_GOTPC32": 10 , # 32-bit PCrel offset to GOT. - "R_MN10300_GOTPC16": 11 , # 16-bit PCrel offset to GOT. - "R_MN10300_GOTOFF32": 12 , # 32-bit offset from GOT. - "R_MN10300_GOTOFF24": 13 , # 24-bit offset from GOT. - "R_MN10300_GOTOFF16": 14 , # 16-bit offset from GOT. - "R_MN10300_PLT32": 15 , # 32-bit PCrel to PLT entry. - "R_MN10300_PLT16": 16 , # 16-bit PCrel to PLT entry. - "R_MN10300_GOT32": 17 , # 32-bit offset to GOT entry. - "R_MN10300_GOT24": 18 , # 24-bit offset to GOT entry. - "R_MN10300_GOT16": 19 , # 16-bit offset to GOT entry. - "R_MN10300_COPY": 20 , # Copy symbol at runtime. - "R_MN10300_GLOB_DAT": 21 , # Create GOT entry. - "R_MN10300_JMP_SLOT": 22 , # Create PLT entry. - "R_MN10300_RELATIVE": 23 , # Adjust by program base. - "R_MN10300_NUM": 24 , # - "R_M32R_NONE": 0 , # No reloc. - "R_M32R_16": 1 , # Direct 16 bit. - "R_M32R_32": 2 , # Direct 32 bit. - "R_M32R_24": 3 , # Direct 24 bit. - "R_M32R_10_PCREL": 4 , # PC relative 10 bit shifted. - "R_M32R_18_PCREL": 5 , # PC relative 18 bit shifted. - "R_M32R_26_PCREL": 6 , # PC relative 26 bit shifted. - "R_M32R_HI16_ULO": 7 , # High 16 bit with unsigned low. - "R_M32R_HI16_SLO": 8 , # High 16 bit with signed low. - "R_M32R_LO16": 9 , # Low 16 bit. - "R_M32R_SDA16": 10 , # 16 bit offset in SDA. - "R_M32R_GNU_VTINHERIT": 11 , # - "R_M32R_GNU_VTENTRY": 12 , # - "R_M32R_16_RELA": 33 , # Direct 16 bit. - "R_M32R_32_RELA": 34 , # Direct 32 bit. - "R_M32R_24_RELA": 35 , # Direct 24 bit. - "R_M32R_10_PCREL_RELA": 36 , # PC relative 10 bit shifted. - "R_M32R_18_PCREL_RELA": 37 , # PC relative 18 bit shifted. - "R_M32R_26_PCREL_RELA": 38 , # PC relative 26 bit shifted. - "R_M32R_HI16_ULO_RELA": 39 , # High 16 bit with unsigned low - "R_M32R_HI16_SLO_RELA": 40 , # High 16 bit with signed low - "R_M32R_LO16_RELA": 41 , # Low 16 bit - "R_M32R_SDA16_RELA": 42 , # 16 bit offset in SDA - "R_M32R_RELA_GNU_VTINHERIT": 43 , # - "R_M32R_RELA_GNU_VTENTRY": 44 , # - "R_M32R_REL32": 45 , # PC relative 32 bit. - "R_M32R_GOT24": 48 , # 24 bit GOT entry - "R_M32R_26_PLTREL": 49 , # 26 bit PC relative to PLT shifted - "R_M32R_COPY": 50 , # Copy symbol at runtime - "R_M32R_GLOB_DAT": 51 , # Create GOT entry - "R_M32R_JMP_SLOT": 52 , # Create PLT entry - "R_M32R_RELATIVE": 53 , # Adjust by program base - "R_M32R_GOTOFF": 54 , # 24 bit offset to GOT - "R_M32R_GOTPC24": 55 , # 24 bit PC relative offset to GOT - "R_M32R_GOT16_HI_ULO": 56 , # High 16 bit GOT entry with unsigned - "R_M32R_GOT16_HI_SLO": 57 , # High 16 bit GOT entry with signed - "R_M32R_GOT16_LO": 58 , # Low 16 bit GOT entry - "R_M32R_GOTPC_HI_ULO": 59 , # High 16 bit PC relative offset to - "R_M32R_GOTPC_HI_SLO": 60 , # High 16 bit PC relative offset to - "R_M32R_GOTPC_LO": 61 , # Low 16 bit PC relative offset to - "R_M32R_GOTOFF_HI_ULO": 62 , # High 16 bit offset to GOT - "R_M32R_GOTOFF_HI_SLO": 63 , # High 16 bit offset to GOT - "R_M32R_GOTOFF_LO": 64 , # Low 16 bit offset to GOT - "R_M32R_NUM": 256 , # Keep this the last entry. - "SHF_WRITE": (1 << 0) , # Writable - "SHF_ALLOC": (1 << 1) , # Occupies memory during execution - "SHF_EXECINSTR": (1 << 2) , # Executable - "SHF_MERGE": (1 << 4) , # Might be merged - "SHF_STRINGS": (1 << 5) , # Contains nul-terminated strings - "SHF_INFO_LINK": (1 << 6) , # `sh_info' contains SHT index - "SHF_LINK_ORDER": (1 << 7) , # Preserve order after combining - "SHF_OS_NONCONFORMING": (1 << 8) , # Non-standard OS specific handling - "SHF_GROUP": (1 << 9) , # Section is member of a group. - "SHF_TLS": (1 << 10) , # Section hold thread-local data. -# libelf.h constants -# ELF_C - "ELF_C_NULL": 0, - "ELF_C_READ": 1, - "ELF_C_WRITE": 2, - "ELF_C_CLR": 3, - "ELF_C_SET": 4, - "ELF_C_FDDONE": 5, - "ELF_C_FDREAD": 6, - "ELF_C_RDWR": 7, - "ELF_C_NUM": 8, -# ELF_K - "ELF_K_NONE": 0, - "ELF_K_AR": 1, - "ELF_K_COFF": 2, - "ELF_K_ELF": 3, - "ELF_K_NUM": 4, -# ELF_T - "ELF_T_BYTE": 00, - "ELF_T_ADDR": 01, - "ELF_T_DYN": 02, - "ELF_T_EHDR": 03, - "ELF_T_HALF": 04, - "ELF_T_OFF": 05, - "ELF_T_PHDR": 06, - "ELF_T_RELA": 07, - "ELF_T_REL": 8, - "ELF_T_SHDR": 9, - "ELF_T_SWORD": 10, - "ELF_T_SYM": 11, - "ELF_T_WORD": 12, - "ELF_T_SXWORD": 13, - "ELF_T_XWORD": 14, - "ELF_T_VDEF": 15, - "ELF_T_VNEED": 16, - "ELF_T_NUM": 17, -# ELF_F (ELF flags) - "ELF_F_DIRTY": 0x1 , # - "ELF_F_LAYOUT": 0x4 , # - "ELF_F_LAYOUT_OVERLAP": 0x10000000 , # -} - -# Now lets generate constants for all - -g = globals() - -for c in _consts: - g[c] = _consts[c] - -__all__ = _consts.keys() - -# TODO: Move these to the macros module - -#elf.h - -# Macro functions - -#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) -#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) - -#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) # Reverse order! - -#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) # Reverse order! - -#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) # Reverse order! -#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((unsigned char) (info)) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) -#define ELF64_M_SYM(info) ELF32_M_SYM (info) -#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) -#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) - -#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) - -#libelf.h diff --git a/tools/esp_app_trace/pylibelf/iterators/__init__.py b/tools/esp_app_trace/pylibelf/iterators/__init__.py deleted file mode 100644 index 437a7118c..000000000 --- a/tools/esp_app_trace/pylibelf/iterators/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -import sys -import os -from .. import * -from ..constants import * -from ..types import * -from ..util import * -from ctypes import * - -def sections(elf, **kwargs): - i = None - ndx = 0 # we skip the first null section - if 'info' in kwargs: - if (isinstance(kwargs['info'], Elf_Scn)): - info = elf_ndxscn(kwargs['info']) - else: - info = kwargs['info'] - else: - info = None - while 1: - i = elf_nextscn(elf, i) - ndx += 1 - - if (not bool(i)): - break - - try: - if ('name' in kwargs and section_name(elf, i) != kwargs['name']): - continue - - if ('type' in kwargs and section_type(elf, i) != kwargs['type']): - continue - - if ('link' in kwargs and section_link(elf, i) != kwargs['link']): - continue - - if (info != None and section_hdr(elf, i).sh_info != info): - continue - except ValueError: - print "Error iterating over section ", i - continue - - if ('ndx' in kwargs and kwargs['ndx']): - yield (ndx, i.contents) - else: - yield i.contents - - -def shdrs(elf): - i = None - while 1: - i = elf_nextscn(elf, i) - if (not bool(i)): - break - - yield select(elf, 'getshdr')(i.contents).contents - -def phdrs(elf): - phdrTbl = select(elf, "getphdr")(elf) - ehdr = select(elf, "getehdr")(elf).contents - phdrCnt = ehdr.e_phnum - - for i in xrange(0, phdrCnt): - yield phdrTbl[i] - -def data(elf_scn): - i = None - while 1: - i = elf_getdata(elf_scn, i) - - if (not bool(i)): - break - - yield i.contents - -def strings(v): - if (isinstance(v, Elf_Data)): - strtab_data = v - size = strtab_data.d_size - buf = cast(strtab_data.d_buf, POINTER(c_char)) - start = 0; - while start < size: - end = start; - while buf[end] != '\x00': end += 1 - yield (strtab_data.d_off + start, buf[start:end]) - - start = end+1 - elif (isinstance(v, Elf_Scn)): - for d in data(v): - strtab_data = d - size = strtab_data.d_size - buf = cast(strtab_data.d_buf, POINTER(c_char)) - start = 0; - while start < size: - end = start; - while buf[end] != '\x00': end += 1 - yield (strtab_data.d_off + start, buf[start:end]) - - start = end+1 - - -def arr_iter(data, itemT, ind = False): - size = data.d_size - - if size % sizeof(itemT) != 0: - raise Exception("Data size not a multiple of symbol size!") - - buf = cast(data.d_buf, POINTER(itemT)) - nelems = size / sizeof(itemT) - - for i in xrange(0, nelems): - if ind: - yield (i, buf[i]) - else: - yield buf[i] - -def syms(elf, v = None): - symT = Elf32_Sym if (is32(elf)) else Elf64_Sym - if v == None: - for s in sections(elf): - hdr = section_hdr(elf, s) - - if (hdr.sh_type != SHT_SYMTAB and hdr.sh_type != SHT_DYNSYM): - continue - - for d in data(s): - for (ind, sym) in arr_iter(d, symT, True): - yield (ind, sym) - elif isinstance(v, Elf_Scn): - for d in data(v): - for (ind, sym) in arr_iter(d, symT, True): - yield (ind, sym) - else: - assert isinstance(v, Elf_Data) - for (ind, sym) in arr_iter(v, symT, True): - yield (ind, sym) - -def rels(elf, **kwargs): - relT = Elf32_Rel if (is32(elf)) else Elf64_Rel - if 'section' in kwargs: - secl = sections(elf, type = SHT_REL, info = kwargs['section']) - else: - secl = sections(elf, type = SHT_REL) - - - if 'range' in kwargs: - for scn in secl: - for d in data(scn): - for rel in arr_iter(d, relT): - if (rel.r_offset >= kwargs['range'][0] and - rel.r_offset < kwargs['range'][1]): - yield (rel, section_hdr(elf, scn).sh_link) - else: - for scn in secl: - for d in data(scn): - for rel in arr_iter(d, relT): - yield (rel, section_hdr(elf, scn).sh_link) - -def relas(elf, **kwargs): - relT = Elf32_Rela if (is32(elf)) else Elf64_Rela - if 'section' in kwargs: - scn = kwargs['section'] - if (type(scn) == str): scn = list(sections(elf, name=scn))[0] - if (isinstance(scn, Elf_Scn)): scn = elf_ndxscn(byref(scn)) - secl = list(sections(elf, type = SHT_RELA, info = scn)) - else: - secl = list(sections(elf, type = SHT_RELA)) - - if 'range' in kwargs: - for scn in secl: - for d in data(scn): - for rel in arr_iter(d, relT): - if (rel.r_offset + rel.r_addend >= kwargs['range'][0] and - rel.r_offset + rel.r_addend < kwargs['range'][1]): - yield (rel, section_hdr(elf, scn).sh_link) - else: - addSecId = kwargs['withSectionId']==True \ - if 'withSectionId' in kwargs \ - else False - if not addSecId: - for scn in secl: - for d in data(scn): - for rel in arr_iter(d, relT): - yield (rel, section_hdr(elf, scn).sh_link) - else: - for scn in secl: - for d in data(scn): - for rel in arr_iter(d, relT): - yield (rel, section_hdr(elf, scn).sh_info) - -def getOnlyData(scn): - d = elf_getdata(scn, None); - assert bool(elf_getdata(scn, d)) == False - return d - -def dyns(elf): - relT = Elf64_Dyn - for scn in sections(elf, name=".dynamic"): - for d in data(scn): - for dyn in arr_iter(d, relT): - yield dyn - -def elfs(fname): - fd = os.open(fname, os.O_RDONLY) - ar = elf_begin(fd, ELF_C_READ, None) - - i = None - while 1: - i = elf_begin(fd, ELF_C_READ, ar) - if (not bool(i)): - break - - yield i - - elf_end(ar) - os.close(fd) - diff --git a/tools/esp_app_trace/pylibelf/macros/__init__.py b/tools/esp_app_trace/pylibelf/macros/__init__.py deleted file mode 100644 index d51a8d93f..000000000 --- a/tools/esp_app_trace/pylibelf/macros/__init__.py +++ /dev/null @@ -1,55 +0,0 @@ -def ELF32_R_SYM(i): - if type(i) == str: - assert(len(i) == 1) # Single char - i = ord(i) - return i >> 8 - -def ELF32_R_TYPE(i): - if type(i) == str: - assert(len(i) == 1) # Single char - i = ord(i) - return i % 256 # Lowest 8 bits - -def ELF32_R_INFO(sym, typ): - return (((sym) << 8) + typ % 256) - -def ELF64_R_SYM(i): - if type(i) == str: - assert(len(i) == 1) # Single char - i = ord(i) - return i >> 32 - -def ELF64_R_TYPE(i): - if type(i) == str: - assert(len(i) == 1) # Single char - i = ord(i) - return i & 0xffffffffL - -def ELF64_R_INFO(sym, typ): - return ((sym << 32) + (typ & 0xffffffffL)) - -# symbol st_info - -def ELF32_ST_BIND(val): - if type(val) == str: - assert(len(val) == 1) # Single char - val = ord(val) - return val >> 4 - -def ELF32_ST_TYPE(val): - if type(val) == str: - assert(len(val) == 1) # Single char - val = ord(val) - return val & 0xf - -def ELF32_ST_INFO(bind, type): - return (((bind) << 4) + ((type) & 0xf)) - -def ELF64_ST_BIND(val): - return ELF32_ST_BIND(val) - -def ELF64_ST_TYPE(val): - return ELF32_ST_TYPE(val) - -def ELF64_ST_INFO(bind, type): - return ELF32_ST_INFO(bind, type) diff --git a/tools/esp_app_trace/pylibelf/types/__init__.py b/tools/esp_app_trace/pylibelf/types/__init__.py deleted file mode 100644 index cc838d2f0..000000000 --- a/tools/esp_app_trace/pylibelf/types/__init__.py +++ /dev/null @@ -1,274 +0,0 @@ -from ctypes import * -from ..constants import EI_NIDENT - -# Obtained from /usr/lib/elf.h - -# Type for a 16-bit quantity. -Elf32_Half = c_uint16 -Elf64_Half = c_uint16 - -# Types for signed and unsigned 32-bit quantities. -Elf32_Word = c_uint32 -Elf32_Sword = c_int32 -Elf64_Word = c_uint32 -Elf64_Sword = c_int32 - -# Types for signed and unsigned 64-bit quantities. -Elf32_Xword = c_uint64 -Elf32_Sxword = c_int64 -Elf64_Xword = c_uint64 -Elf64_Sxword = c_int64 - -# Type of addresses. -Elf32_Addr = c_uint32 -Elf64_Addr = c_uint64 - -# Type of file offsets. -Elf32_Off = c_uint32 -Elf64_Off = c_uint64 - -# Type for section indices, which are 16-bit quantities. -Elf32_Section = c_uint16 -Elf64_Section = c_uint16 - -# Type for version symbol information. -Elf32_Versym = Elf32_Half -Elf64_Versym = Elf64_Half - -# The ELF file header. This appears at the start of every ELF file. - -Elf_IdentT = c_char * EI_NIDENT - -Elf_Cmd = c_int - -class _ElfStructure(Structure): - def __str__(self): - return self.__class__.__name__ + '(' + \ - ','.join([field[0] + '=' + str(getattr(self, field[0])) for field in self._fields_]) + ')' - -class _ElfUnion(Union): - def __str__(self): - return self.__class__.__name__ + '(' + \ - ','.join([field[0] + '=' + str(getattr(self, field[0])) for field in self._fields_]) + ')' - -# Libelf opaque handles -class Elf(_ElfStructure): - _fields_ = [] -class Elf_Scn(_ElfStructure): - _fields_ = [] - -class Elf_Data(_ElfStructure): - _fields_ = [ - ('d_buf', c_void_p), - ('d_type', c_int), - ('d_size', c_size_t), - ('d_off', c_size_t), - ('d_align', c_size_t), - ('d_version', c_uint) - ] - -ElfP = POINTER(Elf) -Elf_ScnP = POINTER(Elf_Scn) -Elf_DataP = POINTER(Elf_Data) - -class Elf32_Ehdr(_ElfStructure): - _fields_ = [ - ('e_ident', Elf_IdentT ), # Magic number and other info - ('e_type', Elf32_Half ), # Object file type - ('e_machine', Elf32_Half ), # Architecture - ('e_version', Elf32_Word ), # Object file version - ('e_entry', Elf32_Addr ), # Entry point virtual address - ('e_phoff', Elf32_Off), # Program header table file offset - ('e_shoff', Elf32_Off), # Section header table file offset - ('e_flags', Elf32_Word ), # Processor-specific flags - ('e_ehsize', Elf32_Half ), # ELF header size in bytes - ('e_phentsize', Elf32_Half ), # Program header table entry size - ('e_phnum', Elf32_Half ), # Program header table entry count - ('e_shentsize', Elf32_Half ), # Section header table entry size - ('e_shnum', Elf32_Half ), # Section header table entry count - ('e_shstrndx', Elf32_Half ), # Section header string table index - ] - -class Elf64_Ehdr(_ElfStructure): - _fields_ = [ - ('e_ident', Elf_IdentT ), # Magic number and other info - ('e_type', Elf64_Half ), # Object file type - ('e_machine', Elf64_Half ), # Architecture - ('e_version', Elf64_Word ), # Object file version - ('e_entry', Elf64_Addr ), # Entry point virtual address - ('e_phoff', Elf64_Off), # Program header table file offset - ('e_shoff', Elf64_Off), # Section header table file offset - ('e_flags', Elf64_Word ), # Processor-specific flags - ('e_ehsize', Elf64_Half ), # ELF header size in bytes - ('e_phentsize', Elf64_Half ), # Program header table entry size - ('e_phnum', Elf64_Half ), # Program header table entry count - ('e_shentsize', Elf64_Half ), # Section header table entry size - ('e_shnum', Elf64_Half ), # Section header table entry count - ('e_shstrndx', Elf64_Half ), # Section header string table index - ] - -class Elf32_Shdr(_ElfStructure): - _fields_ = [ - ('sh_name', Elf32_Word), # Section name (string tbl index) - ('sh_type', Elf32_Word), # Section type - ('sh_flags', Elf32_Word), # Section flags - ('sh_addr', Elf32_Addr), # Section virtual addr at execution - ('sh_offset', Elf32_Off), # Section file offset - ('sh_size', Elf32_Word), # Section size in bytes - ('sh_link', Elf32_Word), # Link to another section - ('sh_info', Elf32_Word), # Additional section information - ('sh_addralign', Elf32_Word), # Section alignment - ('sh_entsize', Elf32_Word), # Entry size if section holds table - ] - -class Elf64_Shdr(_ElfStructure): - _fields_ = [ - ('sh_name', Elf64_Word), # Section name (string tbl index) - ('sh_type', Elf64_Word), # Section type - ('sh_flags', Elf64_Xword), # Section flags - ('sh_addr', Elf64_Addr), # Section virtual addr at execution - ('sh_offset', Elf64_Off), # Section file offset - ('sh_size', Elf64_Xword), # Section size in bytes - ('sh_link', Elf64_Word), # Link to another section - ('sh_info', Elf64_Word), # Additional section information - ('sh_addralign', Elf64_Xword), # Section alignment - ('sh_entsize', Elf64_Xword), # Entry size if section holds table - ] - -class Elf32_Phdr(_ElfStructure): - _fields_ = [ - ('p_type', Elf32_Word), # Segment type - ('p_offset', Elf32_Off), # Segment file offset - ('p_vaddr', Elf32_Addr), # Segment virtual address - ('p_paddr', Elf32_Addr), # Segment physical address - ('p_filesz', Elf32_Word), # Segment size in file - ('p_memsz', Elf32_Word), # Segment size in memory - ('p_flags', Elf32_Word), # Segment flags - ('p_align', Elf32_Word), # Segment alignment - ] - -class Elf64_Phdr(_ElfStructure): - _fields_ = [ - ('p_type', Elf64_Word), # Segment type - ('p_flags', Elf64_Word), # Segment flags - ('p_offset', Elf64_Off), # Segment file offset - ('p_vaddr', Elf64_Addr), # Segment virtual address - ('p_paddr', Elf64_Addr), # Segment physical address - ('p_filesz', Elf64_Xword), # Segment size in file - ('p_memsz', Elf64_Xword), # Segment size in memory - ('p_align', Elf64_Xword), # Segment alignment - ] - -# /* Symbol table entry. */ -class Elf32_Sym(_ElfStructure): - _fields_ = [ - ('st_name', Elf32_Word), # Symbol name (string tbl index) - ('st_value', Elf32_Addr), # Symbol value - ('st_size', Elf32_Word), # Symbol size - ('st_info', c_char), # Symbol type and binding - ('st_other', c_char), # Symbol visibility - ('st_shndx', Elf32_Section), # Section index - ] - -class Elf64_Sym(_ElfStructure): - _fields_ = [ - ('st_name', Elf64_Word), # Symbol name (string tbl index) - ('st_info', c_char), # Symbol type and binding - ('st_other', c_char), # Symbol visibility - ('st_shndx', Elf64_Section), # Section index - ('st_value', Elf64_Addr), # Symbol value - ('st_size', Elf64_Xword), # Symbol size - ] - -#/* The syminfo section if available contains additional information about -# every dynamic symbol. */ - -class Elf32_Syminfo(_ElfStructure): - _fields_ = [ - ('si_boundto', Elf32_Half), # Direct bindings, symbol bound to - ('si_flags', Elf32_Half), # Per symbol flags - ] - -class Elf64_Syminfo(_ElfStructure): - _fields_ = [ - ('si_boundto', Elf64_Half), # Direct bindings, symbol bound to - ('si_flags', Elf64_Half), # Per symbol flags - ] - -# /* Relocation table entry without addend (in section of type SHT_REL). */ - -class Elf32_Rel(_ElfStructure): - _fields_ = [ - ('r_offset', Elf32_Addr), # Address - ('r_info', Elf32_Word), # Relocation type and symbol index - ] - -class Elf64_Rel(_ElfStructure): - _fields_ = [ - ('r_offset', Elf64_Addr), # Address - ('r_info', Elf64_Xword), # Relocation type and symbol index - ] - -# # Relocation table entry with addend (in section of type SHT_RELA). - -class Elf32_Rela(_ElfStructure): - _fields_ = [ - ('r_offset', Elf32_Addr), # Address - ('r_info', Elf32_Word), # Relocation type and symbol index - ('r_addend', Elf32_Sword), # Addend - ] - -class Elf64_Rela(_ElfStructure): - _fields_ = [ - ('r_offset', Elf64_Addr), # Address - ('r_info', Elf64_Xword), # Relocation type and symbol index - ('r_addend', Elf64_Sxword), # Addend - ] - -time_t = c_int64 -uid_t = c_int32 -gid_t = c_int32 -mode_t = c_int32 -off_t = c_int64 - -class Elf_Arhdr(_ElfStructure): - _fields_ = [ - ('ar_name', c_char_p), - ('ar_date', time_t), - ('ar_uid', uid_t), - ('ar_gid', gid_t), - ('ar_mode', mode_t), - ('ar_size', off_t), - ('ar_fmag', POINTER(c_char)), - ] - -class _Elf64_DynUnion(_ElfUnion): - _fields_ = [ - ('d_val', Elf64_Xword), - ('d_ptr', Elf64_Addr), - ] - -class Elf64_Dyn(_ElfStructure): - _fields_ = [ - ('d_tag', Elf64_Xword), - ('d_un', _Elf64_DynUnion), - ] - -# GNU Extensions -class Elf64_Verneed(_ElfStructure): - _fields_ = [ - ('vn_version', Elf64_Half), - ('vn_cnt', Elf64_Half), - ('vn_file', Elf64_Word), - ('vn_aux', Elf64_Word), - ('vn_next', Elf64_Word), - ] - -class Elf64_Vernaux(_ElfStructure): - _fields_ = [ - ('vna_hash', Elf64_Word), - ('vna_flags', Elf64_Half), - ('vna_other', Elf64_Half), - ('vna_name', Elf64_Word), - ('vna_next', Elf64_Word), - ] diff --git a/tools/esp_app_trace/pylibelf/util/__init__.py b/tools/esp_app_trace/pylibelf/util/__init__.py deleted file mode 100644 index 5eb472a4f..000000000 --- a/tools/esp_app_trace/pylibelf/util/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -from .. import * -from ..types import * -from ..constants import * -from ctypes import * -import os - -def _class(elf): return ord(elf_getident(elf, None).contents[EI_CLASS]) - -def is32(elf): return _class(elf) == ELFCLASS32 -def is64(elf): return _class(elf) == ELFCLASS64 - -def select(elf, fname): - if is32(elf): - return globals()['elf32_' + fname] - else: - return globals()['elf64_' + fname] - -def section_name(elfP, secP): - shstrndx = c_size_t() - r = elf_getshstrndx(elfP, byref(shstrndx)) - shdr = select(elfP, 'getshdr')(secP) - return elf_strptr(elfP, shstrndx, shdr.contents.sh_name) - -def section_type(elfP, secP): - return select(elfP, 'getshdr')(secP).contents.sh_type - -def section_link(elfP, secP): - return select(elfP, 'getshdr')(secP).contents.sh_link - -def section_hdr(elfP, secP): - return select(elfP, 'getshdr')(secP).contents - -def open_elf(fname): - fd = os.open(fname, os.O_RDONLY) - return elf_begin(fd, ELF_C_READ, None) - -def sym_name(elf, scn, sym): - return elf_strptr(elf, section_link(elf, scn), sym.st_name) diff --git a/tools/esp_app_trace/pylibelf/util/syms/__init__.py b/tools/esp_app_trace/pylibelf/util/syms/__init__.py deleted file mode 100644 index ac7267e18..000000000 --- a/tools/esp_app_trace/pylibelf/util/syms/__init__.py +++ /dev/null @@ -1,58 +0,0 @@ -from .. import * -from ...types import * -from ...iterators import * - -def defined(s): return s.st_shndx != SHN_UNDEF - -def defines(elf, symN): - s = findSymbol(elf, symN) - print elf, symN, s - if s != None: - print s.st_shndx, s.st_name - return s != None and defined(s[1]) - -def derefSymbol(elf, s): - assert defined(s) - if s.st_shndx == SHN_ABS: - raise Exception("NYI") - else: - scn = elf_getscn(elf, s.st_shndx) - shdr = section_hdr(elf, scn); - off = 0 - base = shdr.sh_addr if shdr.sh_addr != 0 else 0 - start = s.st_value - end = s.st_value + s.st_size - r = '' - for d in data(scn): - if start >= end: break; - off = base + d.d_off - if start >= off and start < off + d.d_size: - c = cast(d.d_buf, POINTER(c_char)) - l = min(off + d.d_size, end) - start - r += c[start- off : start - off + l] - start += l - - return r - -def derefSymbolFull(elf, s): - """ Given an elf file and a Elf{32/64}_Sym defined in the elf file, - return a tuple with the contents of memory refered to by the symbol, - and any Rel's and Rela's inside that memory. - """ - assert (defined(s)) - contents = derefSymbol(elf, s) - relL = list(rels(elf, section=s.st_shndx, \ - range=(s.st_value, s.st_size + s.st_value))) - relaL = list(relas(elf, section=s.st_shndx, \ - range=(s.st_value, s.st_size + s.st_value))) - return (contents, relL, relaL) - -# Given a symbol name return the symbol and section in which it occurs -def findSymbol(elf, s): - for scn in sections(elf, type=SHT_SYMTAB): - strndx = section_link(elf, scn) - for d in data(scn): - for (ind, sym) in syms(elf, d): - if s == elf_strptr(elf, strndx, sym.st_name): - return (scn, sym) - return None diff --git a/tools/esp_app_trace/sysviewtrace_proc.py b/tools/esp_app_trace/sysviewtrace_proc.py new file mode 100755 index 000000000..d94555982 --- /dev/null +++ b/tools/esp_app_trace/sysviewtrace_proc.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python +# +# Copyright 2019 Espressif Systems (Shanghai) PTE LTD +# +# 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. +# +# This is python script to process various types trace data streams in SystemView format. +# Trace data can be provided in multiple trace files (one per CPU). After processing phase +# script prints report for every type of trace data stream which was found. +# + +import argparse +import sys +import os.path +import signal +import traceback +import espytrace.apptrace as apptrace +import espytrace.sysview as sysview + + +def main(): + + parser = argparse.ArgumentParser(description='ESP32 SEGGER SystemView Trace Parsing Tool') + + parser.add_argument('trace_sources', help='Trace data sources. Format: [file://]/path/to/file.', nargs='+', type=str) + parser.add_argument('elf_file', help='Path to program ELF file.', type=str) + parser.add_argument('--tmo', '-w', help='Data wait timeout in sec. -1: infinite, 0: no wait', type=int, default=0) + parser.add_argument('--dump-events', '-d', help='Dump all events.', action='store_true') + parser.add_argument('--print-events', '-p', help='Print events of selected types. By default only reports are printed', action='store_true') + parser.add_argument('--include-events', '-i', help='Events types to be included into report.', type=str, choices=['heap', 'log', 'all'], default='all') + parser.add_argument('--toolchain', '-t', help='Toolchain prefix.', type=str, default='xtensa-esp32-elf-') + parser.add_argument('--events-map', '-e', help='Events map file.', type=str, default=os.path.join(os.path.dirname(__file__), 'SYSVIEW_FreeRTOS.txt')) + args = parser.parse_args() + + def sig_int_handler(signum, frame): + reader.cleanup() + + signal.signal(signal.SIGINT, sig_int_handler) + + include_events = {'heap': False, 'log': False} + if args.include_events == 'all': + for k in include_events: + include_events[k] = True + elif args.include_events == 'heap': + include_events['heap'] = True + elif args.include_events == 'log': + include_events['log'] = True + + # parse trace files + parsers = [] + for i, trace_source in enumerate(args.trace_sources): + try: + parser = sysview.SysViewMultiTraceDataParser(print_events=False, core_id=i) + if include_events['heap']: + parser.add_stream_parser(sysview.SysViewTraceDataParser.STREAMID_HEAP, + sysview.SysViewHeapTraceDataParser(print_events=False, core_id=i)) + if include_events['log']: + parser.add_stream_parser(sysview.SysViewTraceDataParser.STREAMID_LOG, + sysview.SysViewLogTraceDataParser(print_events=False, core_id=i)) + parsers.append(parser) + except Exception as e: + print("Failed to create data parser ({})!".format(e)) + traceback.print_exc() + sys.exit(2) + reader = apptrace.reader_create(trace_source, args.tmo) + if not reader: + print("Failed to create trace reader!") + sys.exit(2) + try: + print("Parse trace from '{}'...".format(trace_source)) + sysview.parse_trace(reader, parser, args.events_map) + print("Parsing completed.") + except (apptrace.ReaderTimeoutError, apptrace.ReaderShutdownRequest) as e: + print("Stop parsing trace. ({})".format(e)) + except Exception as e: + print("Failed to parse trace ({})!".format(e)) + parser.cleanup() + traceback.print_exc() + sys.exit(2) + finally: + reader.cleanup() + + # merge and process traces + try: + proc = sysview.SysViewMultiTraceDataProcessor(traces=parsers, print_events=args.dump_events) + if include_events['heap']: + proc.add_stream_processor(sysview.SysViewTraceDataParser.STREAMID_HEAP, + sysview.SysViewHeapTraceDataProcessor(args.toolchain, args.elf_file, print_heap_events=args.print_events)) + if include_events['log']: + proc.add_stream_processor(sysview.SysViewTraceDataParser.STREAMID_LOG, + sysview.SysViewLogTraceDataProcessor(print_log_events=args.print_events)) + except Exception as e: + print("Failed to create data processor ({})!".format(e)) + traceback.print_exc() + sys.exit(2) + try: + print("Process events from '{}'...".format(args.trace_sources)) + proc.merge_and_process() + print("Processing completed.") + except Exception as e: + print("Failed to process trace ({})!".format(e)) + traceback.print_exc() + sys.exit(2) + finally: + proc.print_report() + + +if __name__ == '__main__': + main() diff --git a/tools/esp_app_trace/test/sysview/blink.c b/tools/esp_app_trace/test/sysview/blink.c new file mode 100644 index 000000000..ecbdf6449 --- /dev/null +++ b/tools/esp_app_trace/test/sysview/blink.c @@ -0,0 +1,88 @@ +/* Blink Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "sdkconfig.h" +#include "esp_heap_trace.h" + +/* Can run 'make menuconfig' to choose the GPIO to blink, + or you can edit the following line and set a number here. +*/ +#define BLINK_GPIO CONFIG_BLINK_GPIO + +void blink_task2(void *pvParameter) +{ + TaskHandle_t task = (TaskHandle_t)pvParameter; + + while(1) { + if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) != pdPASS) { + printf("Failed to wait for main task!\n"); + return; + } + void *a = malloc(65); + printf("Alloced 65 bytes @ %p\n", a); + void *b = malloc(97); + printf("Alloced 97 bytes @ %p\n", b); + free(a); + printf("Freed @ %p\n", a); + b = malloc(11); + printf("Alloced 11 bytes @ %p\n", b); + b = malloc(24); + printf("Alloced 24 bytes @ %p\n", b); + free(b); + printf("Freed @ %p\n", b); + if (xTaskNotify(task, 0, eNoAction) != pdPASS) { + printf("Failed to notify main task!\n"); + return; + } + } +} + +void blink_task(void *pvParameter) +{ + TaskHandle_t task = 0; + + if(heap_trace_init_tohost() != ESP_OK) { + printf("Failed to init heap trace!\n"); + return; + } + xTaskCreatePinnedToCore(&blink_task2, "blink_task2", 2048, xTaskGetCurrentTaskHandle(), 5, &task, 1); + + while(1) { + heap_trace_start(HEAP_TRACE_ALL); + if (xTaskNotify(task, 0, eNoAction) != pdPASS) { + printf("Failed to notify slave task!\n"); + return; + } + void *a = malloc(64); + printf("Alloced 64 bytes @ %p\n", a); + void *b = malloc(96); + printf("Alloced 96 bytes @ %p\n", b); + free(a); + printf("Freed @ %p\n", a); + b = malloc(10); + printf("Alloced 10 bytes @ %p\n", b); + b = malloc(23); + printf("Alloced 23 bytes @ %p\n", b); + free(b); + printf("Freed @ %p\n", b); + if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) != pdPASS) { + printf("Failed to wait for slave task!\n"); + return; + } + heap_trace_stop(); + } +} + +void app_main() +{ + xTaskCreatePinnedToCore(&blink_task, "blink_task", 2048, NULL, 5, NULL, 0); +} diff --git a/tools/esp_app_trace/test/sysview/cpu0.svdat b/tools/esp_app_trace/test/sysview/cpu0.svdat new file mode 100644 index 000000000..501b9729d Binary files /dev/null and b/tools/esp_app_trace/test/sysview/cpu0.svdat differ diff --git a/tools/esp_app_trace/test/sysview/cpu1.svdat b/tools/esp_app_trace/test/sysview/cpu1.svdat new file mode 100644 index 000000000..d339cd190 Binary files /dev/null and b/tools/esp_app_trace/test/sysview/cpu1.svdat differ diff --git a/tools/esp_app_trace/test/sysview/expected_output b/tools/esp_app_trace/test/sysview/expected_output new file mode 100644 index 000000000..e55aee1fd --- /dev/null +++ b/tools/esp_app_trace/test/sysview/expected_output @@ -0,0 +1,450 @@ +Parse trace from 'cpu0.svdat'... +Stop parsing trace. (Timeout 0.000000 sec while reading 1 bytes!) +Parse trace from 'cpu1.svdat'... +Stop parsing trace. (Timeout 0.000000 sec while reading 1 bytes!) +Process events from '['cpu0.svdat', 'cpu1.svdat']'... +EVENT[0]: 0.000000000 - core[0].svTraceStart(10), plen 0: [] +EVENT[1]: 0.000000000 - core[1].svTraceStart(10), plen 0: [] +EVENT[2]: 0.000010950 - core[0].svInit(24), plen 14: [sys_freq: 40000000, cpu_freq: 160000000, ram_base: 1061158912, id_shift: 0] +EVENT[3]: 0.000010950 - core[1].svInit(24), plen 14: [sys_freq: 40000000, cpu_freq: 160000000, ram_base: 1061158912, id_shift: 0] +EVENT[4]: 0.000024800 - core[0].svSysDesc(14), plen 0: [desc: N=FreeRTOS Application,D=ESP32,C=Xtensa,O=FreeRTOS] +EVENT[5]: 0.000024800 - core[1].svSysDesc(14), plen 0: [desc: N=FreeRTOS Application,D=ESP32,C=Xtensa,O=FreeRTOS] +EVENT[6]: 0.000051650 - core[0].svSysDesc(14), plen 0: [desc: I#5=SysTick] +EVENT[7]: 0.000051650 - core[1].svSysDesc(14), plen 0: [desc: I#5=SysTick] +EVENT[8]: 0.000104150 - core[0].svSysDesc(14), plen 0: [desc: I#6=WIFI_MAC] +EVENT[9]: 0.000104150 - core[1].svSysDesc(14), plen 0: [desc: I#6=WIFI_MAC] +EVENT[10]: 0.000121100 - core[0].svSysDesc(14), plen 0: [desc: I#7=WIFI_NMI] +EVENT[11]: 0.000121100 - core[1].svSysDesc(14), plen 0: [desc: I#7=WIFI_NMI] +EVENT[12]: 0.000138125 - core[0].svSysDesc(14), plen 0: [desc: I#8=WIFI_BB] +EVENT[13]: 0.000138125 - core[1].svSysDesc(14), plen 0: [desc: I#8=WIFI_BB] +EVENT[14]: 0.000154825 - core[0].svSysDesc(14), plen 0: [desc: I#9=BT_MAC] +EVENT[15]: 0.000154825 - core[1].svSysDesc(14), plen 0: [desc: I#9=BT_MAC] +EVENT[16]: 0.000193350 - core[0].svSysDesc(14), plen 0: [desc: I#10=BT_BB] +EVENT[17]: 0.000193350 - core[1].svSysDesc(14), plen 0: [desc: I#10=BT_BB] +EVENT[18]: 0.000212875 - core[0].svSysDesc(14), plen 0: [desc: I#11=BT_BB_NMI] +EVENT[19]: 0.000212875 - core[1].svSysDesc(14), plen 0: [desc: I#11=BT_BB_NMI] +EVENT[20]: 0.000231625 - core[0].svSysDesc(14), plen 0: [desc: I#12=RWBT] +EVENT[21]: 0.000231625 - core[1].svSysDesc(14), plen 0: [desc: I#12=RWBT] +EVENT[22]: 0.000250250 - core[0].svSysDesc(14), plen 0: [desc: I#13=RWBLE] +EVENT[23]: 0.000250250 - core[1].svSysDesc(14), plen 0: [desc: I#13=RWBLE] +EVENT[24]: 0.000269450 - core[0].svSysDesc(14), plen 0: [desc: I#14=RWBT_NMI] +EVENT[25]: 0.000269450 - core[1].svSysDesc(14), plen 0: [desc: I#14=RWBT_NMI] +EVENT[26]: 0.000288925 - core[0].svSysDesc(14), plen 0: [desc: I#15=RWBLE_NMI] +EVENT[27]: 0.000288925 - core[1].svSysDesc(14), plen 0: [desc: I#15=RWBLE_NMI] +EVENT[28]: 0.000310575 - core[0].svSysDesc(14), plen 0: [desc: I#16=SLC0] +EVENT[29]: 0.000310575 - core[1].svSysDesc(14), plen 0: [desc: I#16=SLC0] +EVENT[30]: 0.000329150 - core[0].svSysDesc(14), plen 0: [desc: I#17=SLC1] +EVENT[31]: 0.000329150 - core[1].svSysDesc(14), plen 0: [desc: I#17=SLC1] +EVENT[32]: 0.000347675 - core[0].svSysDesc(14), plen 0: [desc: I#18=UHCI0] +EVENT[33]: 0.000347675 - core[1].svSysDesc(14), plen 0: [desc: I#18=UHCI0] +EVENT[34]: 0.000366225 - core[0].svSysDesc(14), plen 0: [desc: I#19=UHCI1] +EVENT[35]: 0.000366225 - core[1].svSysDesc(14), plen 0: [desc: I#19=UHCI1] +EVENT[36]: 0.000386350 - core[0].svSysDesc(14), plen 0: [desc: I#20=TG0_T0_LEVEL] +EVENT[37]: 0.000386350 - core[1].svSysDesc(14), plen 0: [desc: I#20=TG0_T0_LEVEL] +EVENT[38]: 0.000406575 - core[0].svSysDesc(14), plen 0: [desc: I#21=TG0_T1_LEVEL] +EVENT[39]: 0.000406575 - core[1].svSysDesc(14), plen 0: [desc: I#21=TG0_T1_LEVEL] +EVENT[40]: 0.000427300 - core[0].svSysDesc(14), plen 0: [desc: I#22=TG0_WDT_LEVEL] +EVENT[41]: 0.000427300 - core[1].svSysDesc(14), plen 0: [desc: I#22=TG0_WDT_LEVEL] +EVENT[42]: 0.000448000 - core[0].svSysDesc(14), plen 0: [desc: I#23=TG0_LACT_LEVEL] +EVENT[43]: 0.000448000 - core[1].svSysDesc(14), plen 0: [desc: I#23=TG0_LACT_LEVEL] +EVENT[44]: 0.000468250 - core[0].svSysDesc(14), plen 0: [desc: I#24=TG1_T0_LEVEL] +EVENT[45]: 0.000468250 - core[1].svSysDesc(14), plen 0: [desc: I#24=TG1_T0_LEVEL] +EVENT[46]: 0.000488500 - core[0].svSysDesc(14), plen 0: [desc: I#25=TG1_T1_LEVEL] +EVENT[47]: 0.000488500 - core[1].svSysDesc(14), plen 0: [desc: I#25=TG1_T1_LEVEL] +EVENT[48]: 0.000508975 - core[0].svSysDesc(14), plen 0: [desc: I#26=TG1_WDT_LEVEL] +EVENT[49]: 0.000508975 - core[1].svSysDesc(14), plen 0: [desc: I#26=TG1_WDT_LEVEL] +EVENT[50]: 0.000529850 - core[0].svSysDesc(14), plen 0: [desc: I#27=TG1_LACT_LEVEL] +EVENT[51]: 0.000529850 - core[1].svSysDesc(14), plen 0: [desc: I#27=TG1_LACT_LEVEL] +EVENT[52]: 0.000548375 - core[0].svSysDesc(14), plen 0: [desc: I#28=GPIO] +EVENT[53]: 0.000548375 - core[1].svSysDesc(14), plen 0: [desc: I#28=GPIO] +EVENT[54]: 0.000570825 - core[0].svSysDesc(14), plen 0: [desc: I#29=GPIO_NMI] +EVENT[55]: 0.000570825 - core[1].svSysDesc(14), plen 0: [desc: I#29=GPIO_NMI] +EVENT[56]: 0.000590425 - core[0].svSysDesc(14), plen 0: [desc: I#30=FROM_CPU0] +EVENT[57]: 0.000590425 - core[1].svSysDesc(14), plen 0: [desc: I#30=FROM_CPU0] +EVENT[58]: 0.000610000 - core[0].svSysDesc(14), plen 0: [desc: I#31=FROM_CPU1] +EVENT[59]: 0.000610000 - core[1].svSysDesc(14), plen 0: [desc: I#31=FROM_CPU1] +EVENT[60]: 0.000629625 - core[0].svSysDesc(14), plen 0: [desc: I#32=FROM_CPU2] +EVENT[61]: 0.000629625 - core[1].svSysDesc(14), plen 0: [desc: I#32=FROM_CPU2] +EVENT[62]: 0.000649425 - core[0].svSysDesc(14), plen 0: [desc: I#33=FROM_CPU3] +EVENT[63]: 0.000649425 - core[1].svSysDesc(14), plen 0: [desc: I#33=FROM_CPU3] +EVENT[64]: 0.000667975 - core[0].svSysDesc(14), plen 0: [desc: I#34=SPI0] +EVENT[65]: 0.000667975 - core[1].svSysDesc(14), plen 0: [desc: I#34=SPI0] +EVENT[66]: 0.000686500 - core[0].svSysDesc(14), plen 0: [desc: I#35=SPI1] +EVENT[67]: 0.000686500 - core[1].svSysDesc(14), plen 0: [desc: I#35=SPI1] +EVENT[68]: 0.000704825 - core[0].svSysDesc(14), plen 0: [desc: I#36=SPI2] +EVENT[69]: 0.000704825 - core[1].svSysDesc(14), plen 0: [desc: I#36=SPI2] +EVENT[70]: 0.000723100 - core[0].svSysDesc(14), plen 0: [desc: I#37=SPI3] +EVENT[71]: 0.000723100 - core[1].svSysDesc(14), plen 0: [desc: I#37=SPI3] +EVENT[72]: 0.000741550 - core[0].svSysDesc(14), plen 0: [desc: I#38=I2S0] +EVENT[73]: 0.000741550 - core[1].svSysDesc(14), plen 0: [desc: I#38=I2S0] +EVENT[74]: 0.000760000 - core[0].svSysDesc(14), plen 0: [desc: I#39=I2S1] +EVENT[75]: 0.000760000 - core[1].svSysDesc(14), plen 0: [desc: I#39=I2S1] +EVENT[76]: 0.000778475 - core[0].svSysDesc(14), plen 0: [desc: I#40=UART0] +EVENT[77]: 0.000778475 - core[1].svSysDesc(14), plen 0: [desc: I#40=UART0] +EVENT[78]: 0.000797050 - core[0].svSysDesc(14), plen 0: [desc: I#41=UART1] +EVENT[79]: 0.000797050 - core[1].svSysDesc(14), plen 0: [desc: I#41=UART1] +EVENT[80]: 0.000815625 - core[0].svSysDesc(14), plen 0: [desc: I#42=UART2] +EVENT[81]: 0.000815625 - core[1].svSysDesc(14), plen 0: [desc: I#42=UART2] +EVENT[82]: 0.000835000 - core[0].svSysDesc(14), plen 0: [desc: I#43=SDIO_HOST] +EVENT[83]: 0.000835000 - core[1].svSysDesc(14), plen 0: [desc: I#43=SDIO_HOST] +EVENT[84]: 0.000854075 - core[0].svSysDesc(14), plen 0: [desc: I#44=ETH_MAC] +EVENT[85]: 0.000854075 - core[1].svSysDesc(14), plen 0: [desc: I#44=ETH_MAC] +EVENT[86]: 0.000875600 - core[0].svSysDesc(14), plen 0: [desc: I#45=PWM0] +EVENT[87]: 0.000875600 - core[1].svSysDesc(14), plen 0: [desc: I#45=PWM0] +EVENT[88]: 0.000893850 - core[0].svSysDesc(14), plen 0: [desc: I#46=PWM1] +EVENT[89]: 0.000893850 - core[1].svSysDesc(14), plen 0: [desc: I#46=PWM1] +EVENT[90]: 0.000912375 - core[0].svSysDesc(14), plen 0: [desc: I#47=PWM2] +EVENT[91]: 0.000912375 - core[1].svSysDesc(14), plen 0: [desc: I#47=PWM2] +EVENT[92]: 0.000930950 - core[0].svSysDesc(14), plen 0: [desc: I#48=PWM3] +EVENT[93]: 0.000930950 - core[1].svSysDesc(14), plen 0: [desc: I#48=PWM3] +EVENT[94]: 0.000949375 - core[0].svSysDesc(14), plen 0: [desc: I#49=LEDC] +EVENT[95]: 0.000949375 - core[1].svSysDesc(14), plen 0: [desc: I#49=LEDC] +EVENT[96]: 0.000968075 - core[0].svSysDesc(14), plen 0: [desc: I#50=EFUSE] +EVENT[97]: 0.000968075 - core[1].svSysDesc(14), plen 0: [desc: I#50=EFUSE] +EVENT[98]: 0.000986275 - core[0].svSysDesc(14), plen 0: [desc: I#51=CAN] +EVENT[99]: 0.000986275 - core[1].svSysDesc(14), plen 0: [desc: I#51=CAN] +EVENT[100]: 0.001005625 - core[0].svSysDesc(14), plen 0: [desc: I#52=RTC_CORE] +EVENT[101]: 0.001005625 - core[1].svSysDesc(14), plen 0: [desc: I#52=RTC_CORE] +EVENT[102]: 0.001023700 - core[0].svSysDesc(14), plen 0: [desc: I#53=RMT] +EVENT[103]: 0.001023700 - core[1].svSysDesc(14), plen 0: [desc: I#53=RMT] +EVENT[104]: 0.001042050 - core[0].svSysDesc(14), plen 0: [desc: I#54=PCNT] +EVENT[105]: 0.001042050 - core[1].svSysDesc(14), plen 0: [desc: I#54=PCNT] +EVENT[106]: 0.001061500 - core[0].svSysDesc(14), plen 0: [desc: I#55=I2C_EXT0] +EVENT[107]: 0.001061500 - core[1].svSysDesc(14), plen 0: [desc: I#55=I2C_EXT0] +EVENT[108]: 0.001081100 - core[0].svSysDesc(14), plen 0: [desc: I#56=I2C_EXT1] +EVENT[109]: 0.001081100 - core[1].svSysDesc(14), plen 0: [desc: I#56=I2C_EXT1] +EVENT[110]: 0.001099425 - core[0].svSysDesc(14), plen 0: [desc: I#57=RSA] +EVENT[111]: 0.001099425 - core[1].svSysDesc(14), plen 0: [desc: I#57=RSA] +EVENT[112]: 0.001118625 - core[0].svSysDesc(14), plen 0: [desc: I#58=SPI1_DMA] +EVENT[113]: 0.001118625 - core[1].svSysDesc(14), plen 0: [desc: I#58=SPI1_DMA] +EVENT[114]: 0.001137775 - core[0].svSysDesc(14), plen 0: [desc: I#59=SPI2_DMA] +EVENT[115]: 0.001137775 - core[1].svSysDesc(14), plen 0: [desc: I#59=SPI2_DMA] +EVENT[116]: 0.001156950 - core[0].svSysDesc(14), plen 0: [desc: I#60=SPI3_DMA] +EVENT[117]: 0.001156950 - core[1].svSysDesc(14), plen 0: [desc: I#60=SPI3_DMA] +EVENT[118]: 0.001175175 - core[0].svSysDesc(14), plen 0: [desc: I#61=WDT] +EVENT[119]: 0.001175175 - core[1].svSysDesc(14), plen 0: [desc: I#61=WDT] +EVENT[120]: 0.001197300 - core[0].svSysDesc(14), plen 0: [desc: I#62=TIMER1] +EVENT[121]: 0.001197300 - core[1].svSysDesc(14), plen 0: [desc: I#62=TIMER1] +EVENT[122]: 0.001216250 - core[0].svSysDesc(14), plen 0: [desc: I#63=TIMER2] +EVENT[123]: 0.001216250 - core[1].svSysDesc(14), plen 0: [desc: I#63=TIMER2] +EVENT[124]: 0.001236175 - core[0].svSysDesc(14), plen 0: [desc: I#64=TG0_T0_EDGE] +EVENT[125]: 0.001236175 - core[1].svSysDesc(14), plen 0: [desc: I#64=TG0_T0_EDGE] +EVENT[126]: 0.001256275 - core[0].svSysDesc(14), plen 0: [desc: I#65=TG0_T1_EDGE] +EVENT[127]: 0.001256275 - core[1].svSysDesc(14), plen 0: [desc: I#65=TG0_T1_EDGE] +EVENT[128]: 0.001276675 - core[0].svSysDesc(14), plen 0: [desc: I#66=TG0_WDT_EDGE] +EVENT[129]: 0.001276675 - core[1].svSysDesc(14), plen 0: [desc: I#66=TG0_WDT_EDGE] +EVENT[130]: 0.001297375 - core[0].svSysDesc(14), plen 0: [desc: I#67=TG0_LACT_EDGE] +EVENT[131]: 0.001297375 - core[1].svSysDesc(14), plen 0: [desc: I#67=TG0_LACT_EDGE] +EVENT[132]: 0.001317425 - core[0].svSysDesc(14), plen 0: [desc: I#68=TG1_T0_EDGE] +EVENT[133]: 0.001317425 - core[1].svSysDesc(14), plen 0: [desc: I#68=TG1_T0_EDGE] +EVENT[134]: 0.001337650 - core[0].svSysDesc(14), plen 0: [desc: I#69=TG1_T1_EDGE] +EVENT[135]: 0.001337650 - core[1].svSysDesc(14), plen 0: [desc: I#69=TG1_T1_EDGE] +EVENT[136]: 0.001357950 - core[0].svSysDesc(14), plen 0: [desc: I#70=TG1_WDT_EDGE] +EVENT[137]: 0.001357950 - core[1].svSysDesc(14), plen 0: [desc: I#70=TG1_WDT_EDGE] +EVENT[138]: 0.001378625 - core[0].svSysDesc(14), plen 0: [desc: I#71=TG1_LACT_EDGE] +EVENT[139]: 0.001378625 - core[1].svSysDesc(14), plen 0: [desc: I#71=TG1_LACT_EDGE] +EVENT[140]: 0.001397500 - core[0].svSysDesc(14), plen 0: [desc: I#72=MMU_IA] +EVENT[141]: 0.001397500 - core[1].svSysDesc(14), plen 0: [desc: I#72=MMU_IA] +EVENT[142]: 0.001416425 - core[0].svSysDesc(14), plen 0: [desc: I#73=MPU_IA] +EVENT[143]: 0.001416425 - core[1].svSysDesc(14), plen 0: [desc: I#73=MPU_IA] +EVENT[144]: 0.001435550 - core[0].svSysDesc(14), plen 0: [desc: I#74=CACHE_IA] +EVENT[145]: 0.001435550 - core[1].svSysDesc(14), plen 0: [desc: I#74=CACHE_IA] +EVENT[146]: 0.001441950 - core[0].svSysTimeUs(13), plen 0: [time: 10000] +EVENT[147]: 0.001441950 - core[1].svSysTimeUs(13), plen 0: [time: 10000] +EVENT[148]: 0.001647400 - core[0].svTaskInfo(9), plen 0: [tid: 12253880, prio: 22, name: esp_timer] +EVENT[149]: 0.001647400 - core[1].svTaskInfo(9), plen 0: [tid: 12253880, prio: 22, name: esp_timer] +EVENT[150]: 0.001652000 - core[0].svStackInfo(21), plen 0: [tid: 12253880, base: 1073408692, sz: 3436, unused: 0] +EVENT[151]: 0.001652000 - core[1].svStackInfo(21), plen 0: [tid: 12253880, base: 1073408692, sz: 3436, unused: 0] +EVENT[152]: 0.001738550 - core[0].svTaskInfo(9), plen 0: [tid: 12254636, prio: 24, name: ipc0] +EVENT[153]: 0.001738550 - core[1].svTaskInfo(9), plen 0: [tid: 12254636, prio: 24, name: ipc0] +EVENT[154]: 0.001742750 - core[0].svStackInfo(21), plen 0: [tid: 12254636, base: 1073430180, sz: 1388, unused: 0] +EVENT[155]: 0.001742750 - core[1].svStackInfo(21), plen 0: [tid: 12254636, base: 1073430180, sz: 1388, unused: 0] +EVENT[156]: 0.001828975 - core[0].svTaskInfo(9), plen 0: [tid: 12275372, prio: 24, name: ipc1] +EVENT[157]: 0.001828975 - core[1].svTaskInfo(9), plen 0: [tid: 12275372, prio: 24, name: ipc1] +EVENT[158]: 0.001833225 - core[0].svStackInfo(21), plen 0: [tid: 12275372, base: 1073432232, sz: 1384, unused: 0] +EVENT[159]: 0.001833225 - core[1].svStackInfo(21), plen 0: [tid: 12275372, base: 1073432232, sz: 1384, unused: 0] +EVENT[160]: 0.001871225 - core[0].svTaskInfo(9), plen 0: [tid: 12291908, prio: 5, name: blink_task] +EVENT[161]: 0.001871225 - core[1].svTaskInfo(9), plen 0: [tid: 12291908, prio: 5, name: blink_task] +EVENT[162]: 0.001875650 - core[0].svStackInfo(21), plen 0: [tid: 12291908, base: 1073448452, sz: 524, unused: 0] +EVENT[163]: 0.001875650 - core[1].svStackInfo(21), plen 0: [tid: 12291908, base: 1073448452, sz: 524, unused: 0] +EVENT[164]: 0.002070800 - core[0].svTaskInfo(9), plen 0: [tid: 12282660, prio: 1, name: main] +EVENT[165]: 0.002070800 - core[1].svTaskInfo(9), plen 0: [tid: 12282660, prio: 1, name: main] +EVENT[166]: 0.002075200 - core[0].svStackInfo(21), plen 0: [tid: 12282660, base: 1073437472, sz: 3296, unused: 0] +EVENT[167]: 0.002075200 - core[1].svStackInfo(21), plen 0: [tid: 12282660, base: 1073437472, sz: 3296, unused: 0] +EVENT[168]: 0.002153375 - core[0].svTaskInfo(9), plen 0: [tid: 12284560, prio: 0, name: IDLE0] +EVENT[169]: 0.002153375 - core[1].svTaskInfo(9), plen 0: [tid: 12284560, prio: 0, name: IDLE0] +EVENT[170]: 0.002157850 - core[0].svStackInfo(21), plen 0: [tid: 12284560, base: 1073441932, sz: 1236, unused: 0] +EVENT[171]: 0.002157850 - core[1].svStackInfo(21), plen 0: [tid: 12284560, base: 1073441932, sz: 1236, unused: 0] +EVENT[172]: 0.002228950 - core[0].svTaskInfo(9), plen 0: [tid: 12286460, prio: 0, name: IDLE1] +EVENT[173]: 0.002228950 - core[1].svTaskInfo(9), plen 0: [tid: 12286460, prio: 0, name: IDLE1] +EVENT[174]: 0.002233250 - core[0].svStackInfo(21), plen 0: [tid: 12286460, base: 1073443832, sz: 1112, unused: 0] +EVENT[175]: 0.002233250 - core[1].svStackInfo(21), plen 0: [tid: 12286460, base: 1073443832, sz: 1112, unused: 0] +EVENT[176]: 0.002319675 - core[0].svTaskInfo(9), plen 0: [tid: 12289116, prio: 1, name: Tmr Svc] +EVENT[177]: 0.002319675 - core[1].svTaskInfo(9), plen 0: [tid: 12289116, prio: 1, name: Tmr Svc] +EVENT[178]: 0.002324100 - core[0].svStackInfo(21), plen 0: [tid: 12289116, base: 1073445976, sz: 1384, unused: 0] +EVENT[179]: 0.002324100 - core[1].svStackInfo(21), plen 0: [tid: 12289116, base: 1073445976, sz: 1384, unused: 0] +EVENT[180]: 0.002431200 - core[0].svTaskInfo(9), plen 0: [tid: 12294320, prio: 5, name: blink_task2] +EVENT[181]: 0.002431200 - core[1].svTaskInfo(9), plen 0: [tid: 12294320, prio: 5, name: blink_task2] +EVENT[182]: 0.002438750 - core[0].svStackInfo(21), plen 0: [tid: 12294320, base: 1073451180, sz: 1748, unused: 0] +EVENT[183]: 0.002438750 - core[1].svStackInfo(21), plen 0: [tid: 12294320, base: 1073451180, sz: 1748, unused: 0] +EVENT[184]: 0.002446150 - core[0].svNumModules(27), plen 1: [mod_cnt: 0] +EVENT[185]: 0.002446150 - core[1].svNumModules(27), plen 1: [mod_cnt: 0] +EVENT[186]: 0.002484225 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[187]: 0.002496125 - core[0].svTaskStopReady(7), plen 0: [tid: 12291908, cause: 4] +EVENT[188]: 0.002508025 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[189]: 0.002516350 - core[0].svIsrEnter(2), plen 0: [irq_num: 30] +EVENT[190]: 0.002524325 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[191]: 0.002532350 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[192]: 0.002541200 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[193]: 0.002548475 - core[0].svTaskStartExec(4), plen 0: [tid: 12282660] +EVENT[194]: 0.002556375 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[195]: 0.002564450 - core[0].vTaskDelete(33), plen 4: [xTaskToDelete: 12282660] +EVENT[196]: 0.002577700 - core[1].svIdle(17), plen 0: [] +EVENT[197]: 0.002585225 - core[0].svIsrEnter(2), plen 0: [irq_num: 30] +EVENT[198]: 0.002592950 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[199]: 0.002605950 - core[0].svIdle(17), plen 0: [] +EVENT[200]: 0.008819550 - core[0].svIsrEnter(2), plen 0: [irq_num: 5] +EVENT[201]: 0.008828075 - core[0].svTaskStartReady(6), plen 0: [tid: 12291908] +EVENT[202]: 0.008828075 - core[1].svTaskStartReady(6), plen 0: [tid: 12291908] +EVENT[203]: 0.008837475 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[204]: 0.008850450 - core[0].svTaskStartExec(4), plen 0: [tid: 12291908] +EVENT[205]: 0.008872650 - core[0].svModuleDesc(22), plen 0: [mod_id: 0, evt_off: 512, desc: ESP32 SystemView Heap Tracing Module] +EVENT[206]: 0.008872650 - core[1].svModuleDesc(22), plen 0: [mod_id: 0, evt_off: 512, desc: ESP32 SystemView Heap Tracing Module] +EVENT[207]: 0.008886175 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[208]: 0.008886175 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[209]: 0.008897425 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[210]: 0.008906150 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[211]: 0.008919900 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450504, size: 64, callers: [1074601571, 1074296884]] +[0.008919900] HEAP: Allocated 64 bytes @ 0x3ffb8e08 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:65 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[212]: 0.008928250 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[213]: 0.008957950 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450572, size: 80, callers: [1074298654, 1074299267]] +[0.008957950] HEAP: Allocated 80 bytes @ 0x3ffb8e4c from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 + +EVENT[214]: 0.008967250 - core[0].xQueueGenericCreate(47), plen 3: [uxQueueLength: 1, uxItemSize: 0, ucQueueType: 4] +EVENT[215]: 0.008977300 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[216]: 0.008984625 - core[1].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450656, size: 65, callers: [1074601382, 1074296884]] +[0.008984625] HEAP: Allocated 65 bytes @ 0x3ffb8ea0 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:30 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[217]: 0.008995725 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[218]: 0.009010075 - core[1].svIsrEnter(2), plen 0: [irq_num: 5] +EVENT[219]: 0.009018025 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[220]: 0.009031900 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[221]: 0.009089600 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073434644, size: 80, callers: [1074298654, 1074299267]] +[0.009089600] HEAP: Allocated 80 bytes @ 0x3ffb5014 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 + +EVENT[222]: 0.009098175 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[223]: 0.009106300 - core[0].xQueueGenericCreate(47), plen 3: [uxQueueLength: 1, uxItemSize: 0, ucQueueType: 4] +EVENT[224]: 0.009113825 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[225]: 0.009121600 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[226]: 0.009129000 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[227]: 0.009137900 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[228]: 0.009145425 - core[1].svIdle(17), plen 0: [] +EVENT[229]: 0.009169600 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[230]: 0.009185225 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[231]: 0.009195125 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[232]: 0.009195125 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[233]: 0.009207000 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[234]: 0.009215575 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[235]: 0.009223275 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073434728, size: 96, callers: [1074601587, 1074296884]] +[0.009223275] HEAP: Allocated 96 bytes @ 0x3ffb5068 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:68 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[236]: 0.009231050 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[237]: 0.009241875 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[238]: 0.009257225 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[239]: 0.009269200 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[240]: 0.009278275 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[241]: 0.009286275 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[242]: 0.009303450 - core[1].svIdle(17), plen 0: [] +EVENT[243]: 0.009310950 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[244]: 0.009329625 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[245]: 0.009339525 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[246]: 0.009339525 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[247]: 0.009351425 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[248]: 0.009359450 - core[0].esp_sysview_heap_trace_free(513), plen 15: [addr: 1073450504, callers: [1074601600, 1074296884]] +[0.009359450] HEAP: Freed bytes @ 0x3ffb8e08 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:70 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[249]: 0.009367800 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[250]: 0.009378950 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[251]: 0.009387450 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[252]: 0.009402575 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[253]: 0.009414900 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[254]: 0.009423125 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[255]: 0.009430250 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[256]: 0.009445425 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[257]: 0.009453075 - core[1].svIdle(17), plen 0: [] +EVENT[258]: 0.009469225 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[259]: 0.009479025 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[260]: 0.009479025 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[261]: 0.009490950 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[262]: 0.009499475 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[263]: 0.009507600 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450504, size: 10, callers: [1074601615, 1074296884]] +[0.009507600] HEAP: Allocated 10 bytes @ 0x3ffb8e08 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:72 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[264]: 0.009515300 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[265]: 0.009526100 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[266]: 0.009541550 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[267]: 0.009553850 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[268]: 0.009561100 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[269]: 0.009568400 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[270]: 0.009585075 - core[1].svIdle(17), plen 0: [] +EVENT[271]: 0.009593375 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[272]: 0.009609150 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[273]: 0.009621875 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[274]: 0.009621875 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[275]: 0.009633775 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[276]: 0.009642300 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[277]: 0.009649475 - core[0].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450520, size: 23, callers: [1074601628, 1074296884]] +[0.009649475] HEAP: Allocated 23 bytes @ 0x3ffb8e18 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:73 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[278]: 0.009657875 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[279]: 0.009666025 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[280]: 0.009681500 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[281]: 0.009693375 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[282]: 0.009702800 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[283]: 0.009710550 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[284]: 0.009726725 - core[1].svIdle(17), plen 0: [] +EVENT[285]: 0.010504825 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[286]: 0.010520650 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[287]: 0.010530550 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[288]: 0.010530550 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[289]: 0.010542400 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[290]: 0.010550025 - core[0].esp_sysview_heap_trace_free(513), plen 15: [addr: 1073450520, callers: [1074601643, 1074296884]] +[0.010550025] HEAP: Freed bytes @ 0x3ffb8e18 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:76 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[291]: 0.010557450 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[292]: 0.010569700 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[293]: 0.010577700 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[294]: 0.010592825 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[295]: 0.010605950 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[296]: 0.010613575 - core[0].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[297]: 0.010620900 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[298]: 0.010637050 - core[1].svIdle(17), plen 0: [] +EVENT[299]: 0.012240950 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[300]: 0.012256775 - core[0].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[301]: 0.012266650 - core[0].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[302]: 0.012266650 - core[1].svTaskStartReady(6), plen 0: [tid: 12294320] +EVENT[303]: 0.012281350 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[304]: 0.012289475 - core[0].svTaskStopReady(7), plen 0: [tid: 12291908, cause: 27] +EVENT[305]: 0.012297450 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[306]: 0.012306350 - core[0].svIsrEnter(2), plen 0: [irq_num: 30] +EVENT[307]: 0.012312875 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[308]: 0.012320700 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[309]: 0.012328950 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[310]: 0.012338100 - core[0].svIdle(17), plen 0: [] +EVENT[311]: 0.012640475 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[312]: 0.014931850 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[313]: 0.014963325 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[314]: 0.014984150 - core[1].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073434828, size: 97, callers: [1074601399, 1074296884]] +[0.014984150] HEAP: Allocated 97 bytes @ 0x3ffb50cc from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:33 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[315]: 0.014997400 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[316]: 0.015031050 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[317]: 0.017622800 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[318]: 0.017638675 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[319]: 0.017656375 - core[1].esp_sysview_heap_trace_free(513), plen 15: [addr: 1073450656, callers: [1074601412, 1074296884]] +[0.017656375] HEAP: Freed bytes @ 0x3ffb8ea0 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:35 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[320]: 0.017674025 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[321]: 0.017701700 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[322]: 0.018819550 - core[0].svIsrEnter(2), plen 0: [irq_num: 5] +EVENT[323]: 0.018829625 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[324]: 0.018844750 - core[0].svIdle(17), plen 0: [] +EVENT[325]: 0.019010075 - core[1].svIsrEnter(2), plen 0: [irq_num: 5] +EVENT[326]: 0.019017950 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[327]: 0.019033200 - core[1].svTaskStartExec(4), plen 0: [tid: 12294320] +EVENT[328]: 0.019358925 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[329]: 0.019374600 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[330]: 0.019395425 - core[1].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450520, size: 11, callers: [1074601427, 1074296884]] +[0.019395425] HEAP: Allocated 11 bytes @ 0x3ffb8e18 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:37 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[331]: 0.019412600 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[332]: 0.019446250 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[333]: 0.022049900 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[334]: 0.022065775 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[335]: 0.022086625 - core[1].esp_sysview_heap_trace_alloc(512), plen 16: [addr: 1073450536, size: 24, callers: [1074601440, 1074296884]] +[0.022086625] HEAP: Allocated 24 bytes @ 0x3ffb8e28 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:38 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[336]: 0.022103925 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[337]: 0.022137550 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[338]: 0.024740850 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[339]: 0.024756725 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[340]: 0.024770475 - core[1].esp_sysview_heap_trace_free(513), plen 15: [addr: 1073450536, callers: [1074601455, 1074296884]] +[0.024770475] HEAP: Freed bytes @ 0x3ffb8e28 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:41 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +EVENT[341]: 0.024791750 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12291660, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[342]: 0.024819500 - core[1].xQueueGenericReceive(49), plen 15: [xQueue: 12275732, pvBuffer: 3233808384, xTicksToWait: 4294967295, xJustPeek: 0] +EVENT[343]: 0.026476950 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12275732, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[344]: 0.026495700 - core[1].xQueueGenericSend(53), plen 7: [xQueue: 12291660, pvItemToQueue: 0, xTicksToWait: 0, xCopyPosition: 0] +EVENT[345]: 0.026506975 - core[0].svTaskStartReady(6), plen 0: [tid: 12291908] +EVENT[346]: 0.026506975 - core[1].svTaskStartReady(6), plen 0: [tid: 12291908] +EVENT[347]: 0.026518525 - core[1].svTaskStopReady(7), plen 0: [tid: 12294320, cause: 27] +EVENT[348]: 0.026526625 - core[0].svIsrEnter(2), plen 0: [irq_num: 30] +EVENT[349]: 0.026535575 - core[0].svExitIsrToScheduler(18), plen 0: [] +EVENT[350]: 0.026544075 - core[1].svIsrEnter(2), plen 0: [irq_num: 31] +EVENT[351]: 0.026551650 - core[0].svTaskStartExec(4), plen 0: [tid: 12291908] +EVENT[352]: 0.026559500 - core[1].svExitIsrToScheduler(18), plen 0: [] +EVENT[353]: 0.148816725 - core[1].svIdle(17), plen 0: [] +EVENT[354]: 0.148825750 - core[0].vTaskDelay(34), plen 1: [xTicksToDelay: 1] +EVENT[355]: 0.148833200 - core[0].svTaskStopReady(7), plen 0: [tid: 12291908, cause: 4] +EVENT[356]: 0.148839250 - core[0].svTraceStop(11), plen 0: [] +EVENT[357]: 0.148839250 - core[1].svTraceStop(11), plen 0: [] +Processing completed. +Processed 358 events +=============== LOG TRACE REPORT =============== +Processed 0 log messages. +=============== HEAP TRACE REPORT =============== +Processed 14 heap events. +[0.008957950] HEAP: Allocated 80 bytes @ 0x3ffb8e4c from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 + +[0.009089600] HEAP: Allocated 80 bytes @ 0x3ffb5014 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 +/home/alexey/projects/esp/esp-idf/components/freertos/queue.c:2037 + +[0.009223275] HEAP: Allocated 96 bytes @ 0x3ffb5068 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:68 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +[0.009507600] HEAP: Allocated 10 bytes @ 0x3ffb8e08 from task "blink_task" on core 0 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:72 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +[0.014984150] HEAP: Allocated 97 bytes @ 0x3ffb50cc from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:33 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +[0.019395425] HEAP: Allocated 11 bytes @ 0x3ffb8e18 from task "blink_task2" on core 1 by: +/home/alexey/projects/esp/esp-idf/examples/get-started/blink/main/blink.c:37 +/home/alexey/projects/esp/esp-idf/components/freertos/port.c:355 (discriminator 1) + +Found 374 leaked bytes in 6 blocks. diff --git a/tools/esp_app_trace/test/sysview/gdbinit b/tools/esp_app_trace/test/sysview/gdbinit new file mode 100644 index 000000000..137182c22 --- /dev/null +++ b/tools/esp_app_trace/test/sysview/gdbinit @@ -0,0 +1,19 @@ +target remote :3333 + +mon reset halt +flushregs + +b heap_trace_start +commands +clear heap_trace_start +mon esp32 sysview start file://cpu0.svdat file://cpu1.svdat +c +end + +b heap_trace_stop +commands +clear heap_trace_stop +mon esp32 sysview stop +end + +c diff --git a/tools/esp_app_trace/test/sysview/test.elf b/tools/esp_app_trace/test/sysview/test.elf new file mode 100644 index 000000000..9ce51ec4c Binary files /dev/null and b/tools/esp_app_trace/test/sysview/test.elf differ diff --git a/tools/esp_app_trace/test/sysview/test.sh b/tools/esp_app_trace/test/sysview/test.sh new file mode 100755 index 000000000..ec45fa09c --- /dev/null +++ b/tools/esp_app_trace/test/sysview/test.sh @@ -0,0 +1,8 @@ +#! /bin/bash + +{ coverage debug sys \ + && coverage erase &> output \ + && coverage run -a $IDF_PATH/tools/esp_app_trace/sysviewtrace_proc.py -d -p cpu0.svdat cpu1.svdat test.elf &>> output \ + && diff output expected_output \ + && coverage report \ +; } || { echo 'The test for sysviewtrace_proc has failed. Please examine the artifacts.' ; exit 1; }