├── .github
└── workflows
│ ├── test_linux.yml
│ └── test_macos.yml
├── .gitignore
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ └── contents.xcworkspacedata
├── LICENSE.md
├── Package.swift
├── README.md
├── Sources
├── Clibelf
│ └── module.modulemap
└── SwiftELF
│ ├── RuntimeError.swift
│ ├── SwiftELF+Header.swift
│ ├── SwiftELF+Kind.swift
│ ├── SwiftELF+Section.swift
│ ├── SwiftELF+SymbolTable.swift
│ └── SwiftELF.swift
└── Tests
├── Files
├── elf-FreeBSD-x86_64-echo
├── elf-Linux-lib-x64.so
├── elf-Linux-x64-bash
└── testfile-phdrs.elf
├── LinuxMain.swift
└── SwiftELFTests
├── SwiftELFTests.swift
├── TestFiles.swift
└── XCTestManifests.swift
/.github/workflows/test_linux.yml:
--------------------------------------------------------------------------------
1 | name: Run tests on Linux
2 | on:
3 | push:
4 | branches:
5 | - main
6 | jobs:
7 | test:
8 | name: Test on Linux
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Checkout
12 | uses: actions/checkout@v1
13 | - name: Install libelf
14 | run: sudo apt install libelf-dev
15 | - name: Run tests
16 | run: swift test
17 |
--------------------------------------------------------------------------------
/.github/workflows/test_macos.yml:
--------------------------------------------------------------------------------
1 | name: Run tests on macOS
2 | on:
3 | push:
4 | branches:
5 | - main
6 | jobs:
7 | test:
8 | name: Test on macOS
9 | runs-on: macos-latest
10 | steps:
11 | - name: Checkout
12 | uses: actions/checkout@v1
13 | - name: Install libelf
14 | run: brew install libelf
15 | - name: Run tests
16 | run: swift test
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Marcus Kida
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.2
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "SwiftELF",
8 | products: [
9 | // Products define the executables and libraries a package produces, and make them visible to other packages.
10 | .library(
11 | name: "SwiftELF",
12 | targets: ["SwiftELF"]),
13 | ],
14 | dependencies: [
15 | // Dependencies declare other packages that this package depends on.
16 | // .package(url: /* package url */, from: "1.0.0"),
17 | ],
18 | targets: [
19 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
20 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
21 | .target(
22 | name: "SwiftELF",
23 | dependencies: ["Clibelf"]),
24 | .testTarget(
25 | name: "SwiftELFTests",
26 | dependencies: ["SwiftELF"]),
27 | .systemLibrary(
28 | name: "Clibelf",
29 | pkgConfig: "libelf",
30 | providers: [
31 | .brew(["libelf"]),
32 | .apt(["libelf-dev"])
33 | ]
34 | ),
35 | ]
36 | )
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftELF
2 |
3 | A Swift Wrapper for libelf.
4 |
5 |  
6 |
7 | This wrapper shall be compatible with macOS and Linux and will use the installed `libelf` which you can install using the package manager of your choice.
8 |
9 | For macOS, you can easily install `libelf` using Homebrew:
10 |
11 | ```
12 | $ brew install libelf
13 | ```
14 |
--------------------------------------------------------------------------------
/Sources/Clibelf/module.modulemap:
--------------------------------------------------------------------------------
1 | module ClibelfMac {
2 | header "/usr/local/include/libelf/libelf.h"
3 | header "/usr/local/include/libelf/gelf.h"
4 | link "elf"
5 | export *
6 | }
7 |
8 | module ClibelfLinux {
9 | header "/usr/include/libelf.h"
10 | header "/usr/include/gelf.h"
11 | link "elf"
12 | export *
13 | }
14 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/RuntimeError.swift:
--------------------------------------------------------------------------------
1 | public enum RuntimeError: Error {
2 | case fileNotFound
3 | case invalidVersion
4 | case initialization
5 | case invalidKind
6 | case couldNotGetHeader
7 | case couldNotGetClass
8 | case couldNotGetIdent
9 | case couldNotFetchStringTableSectionIndex
10 | case undefined
11 | }
12 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/SwiftELF+Header.swift:
--------------------------------------------------------------------------------
1 | #if canImport(Darwin)
2 | import Darwin
3 | import ClibelfMac
4 | #else
5 | import Glibc
6 | import ClibelfLinux
7 | #endif
8 |
9 | public extension SwiftELF {
10 | func printHeader() throws {
11 | guard let kind = kind, case Kind.elf = kind else {
12 | throw RuntimeError.invalidKind
13 | }
14 |
15 | let ehdr = UnsafeMutablePointer.allocate(capacity: 1)
16 | guard gelf_getehdr(elf, ehdr) != nil else {
17 | throw RuntimeError.couldNotGetHeader
18 | }
19 |
20 | let cls = gelf_getclass(elf)
21 | guard cls != ELFCLASSNONE else {
22 | throw RuntimeError.couldNotGetClass
23 | }
24 |
25 | guard let _ = elf_getident(elf, nil) else {
26 | throw RuntimeError.couldNotGetIdent
27 | }
28 |
29 | // todo: this method should actually return the header in a
30 | // useful format.
31 |
32 | print("-- ELF Header Begin ---")
33 | print("e_ident", ehdr.pointee.e_ident)
34 | print("e_type", ehdr.pointee.e_type)
35 | print("e_machine", ehdr.pointee.e_machine)
36 | print("e_version", ehdr.pointee.e_version)
37 | print("e_entry", ehdr.pointee.e_entry)
38 | print("e_phoff", ehdr.pointee.e_phoff)
39 | print("e_shoff", ehdr.pointee.e_shoff)
40 | print("e_flags", ehdr.pointee.e_flags)
41 | print("e_ehsize", ehdr.pointee.e_ehsize)
42 | print("e_phentsize", ehdr.pointee.e_phentsize)
43 | print("e_shentsize", ehdr.pointee.e_shentsize)
44 | print("-- ELF Header End ---")
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/SwiftELF+Kind.swift:
--------------------------------------------------------------------------------
1 | #if canImport(Darwin)
2 | import Darwin
3 | import ClibelfMac
4 | #else
5 | import Glibc
6 | import ClibelfLinux
7 | #endif
8 |
9 | public extension SwiftELF {
10 | var kind: Kind? {
11 | let kind = elf_kind(elf)
12 | if kind == ELF_K_NONE {
13 | return Kind.none
14 | } else if kind == ELF_K_AR {
15 | return .ar
16 | } else if kind == ELF_K_COFF {
17 | return .coff
18 | } else if kind == ELF_K_ELF {
19 | return .elf
20 | } else if kind == ELF_K_NUM {
21 | return .num
22 | }
23 | return nil
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/SwiftELF+Section.swift:
--------------------------------------------------------------------------------
1 | #if canImport(Darwin)
2 | import Darwin
3 | import ClibelfMac
4 | #else
5 | import Glibc
6 | import ClibelfLinux
7 | #endif
8 |
9 | public extension SwiftELF {
10 | func getSectionNames() throws -> [String: Int] {
11 | guard elf_kind(elf) == ELF_K_ELF else {
12 | throw RuntimeError.invalidKind
13 | }
14 |
15 | let shstrndx = UnsafeMutablePointer.allocate(capacity: 1)
16 |
17 | guard elf_getshdrstrndx(elf, shstrndx) == 0 else {
18 | throw RuntimeError.couldNotFetchStringTableSectionIndex
19 | }
20 |
21 | var sectionsNames = [String: Int]()
22 | var scn: OpaquePointer? = nil
23 | let shdr = UnsafeMutablePointer.allocate(capacity: 1)
24 | repeat {
25 | scn = elf_nextscn(elf, scn)
26 |
27 | if gelf_getshdr(scn, shdr) != shdr {
28 | throw RuntimeError.undefined // todo: add proper error
29 | }
30 |
31 | guard let name = elf_strptr(elf, shstrndx.pointee, Int(shdr.pointee.sh_name)) else {
32 | throw RuntimeError.undefined
33 | }
34 |
35 | sectionsNames[String(cString: name)] = elf_ndxscn(scn)
36 |
37 | } while elf_nextscn(elf, scn) != nil
38 |
39 | scn = elf_getscn(elf, shstrndx.pointee)
40 |
41 | guard scn != nil else {
42 | throw RuntimeError.undefined
43 | }
44 |
45 | guard gelf_getshdr(scn, shdr) == shdr else {
46 | throw RuntimeError.undefined
47 | }
48 |
49 | return sectionsNames
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/SwiftELF+SymbolTable.swift:
--------------------------------------------------------------------------------
1 | #if canImport(Darwin)
2 | import Darwin
3 | import ClibelfMac
4 | #else
5 | import Glibc
6 | import ClibelfLinux
7 | #endif
8 |
9 | public extension SwiftELF {
10 | enum SymbolTableType {
11 | case symtab, dynsym, unknown
12 | }
13 |
14 | typealias SymbolTable = [String: Int]
15 |
16 | func getSymbolTables() throws -> [SymbolTableType: SymbolTable] {
17 | var symbols = [SymbolTableType: SymbolTable]()
18 |
19 | let ehdr = UnsafeMutablePointer.allocate(capacity: 1)
20 | guard gelf_getehdr(elf, ehdr) != nil else {
21 | throw RuntimeError.couldNotGetHeader
22 | }
23 |
24 | var scn: OpaquePointer? = nil
25 | let shdr = UnsafeMutablePointer.allocate(capacity: 1)
26 | var data = UnsafeMutablePointer.allocate(capacity: 1)
27 | var count: Int = 0
28 |
29 | repeat {
30 | scn = elf_nextscn(elf, scn)
31 | gelf_getshdr(scn, shdr)
32 |
33 | if shdr.pointee.sh_type == SHT_SYMTAB || shdr.pointee.sh_type == SHT_DYNSYM {
34 | data = elf_getdata(scn, nil)
35 | count = Int(shdr.pointee.sh_size / shdr.pointee.sh_entsize)
36 |
37 | symbols[{
38 | switch Int32(shdr.pointee.sh_type) {
39 | case SHT_SYMTAB:
40 | return .symtab
41 | case SHT_DYNSYM:
42 | return .dynsym
43 | default:
44 | return .unknown // this should never happen
45 | }
46 | }()] = {
47 | var values = SymbolTable()
48 | for i in 0 ..< count {
49 | var sym = UnsafeMutablePointer.allocate(capacity: 1)
50 | sym = gelf_getsym(data, Int32(i), sym)
51 | values[String(cString: elf_strptr(elf, Int(shdr.pointee.sh_link), Int(sym.pointee.st_name)))] = Int(sym.pointee.st_value.description)
52 | }
53 | return values
54 | }()
55 | }
56 |
57 | } while elf_nextscn(elf, scn) != nil
58 |
59 | return symbols
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/Sources/SwiftELF/SwiftELF.swift:
--------------------------------------------------------------------------------
1 | #if canImport(Darwin)
2 | import Darwin
3 | import ClibelfMac
4 | #else
5 | import Glibc
6 | import ClibelfLinux
7 | #endif
8 |
9 | public enum Kind {
10 | case none, ar, coff, elf, num
11 | }
12 |
13 | public class SwiftELF {
14 | internal let elf: OpaquePointer
15 | internal let fd: Int32
16 |
17 | public init(at path: String) throws {
18 | fd = open(path, O_RDONLY)
19 | guard fd >= 0 else {
20 | throw RuntimeError.fileNotFound
21 | }
22 | guard elf_version(UInt32(EV_CURRENT)) != EV_NONE else {
23 | throw RuntimeError.invalidVersion
24 | }
25 | guard let elf = elf_begin(fd, ELF_C_READ, nil) else {
26 | throw RuntimeError.initialization
27 | }
28 | self.elf = elf
29 | }
30 |
31 | private func end() {
32 | elf_end(elf)
33 | close(fd)
34 | }
35 |
36 | deinit {
37 | end()
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Tests/Files/elf-FreeBSD-x86_64-echo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EmbeddedSwift/SwiftELF/c0fe366631e487a3b712f04100d00e6f0c3dc723/Tests/Files/elf-FreeBSD-x86_64-echo
--------------------------------------------------------------------------------
/Tests/Files/elf-Linux-lib-x64.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EmbeddedSwift/SwiftELF/c0fe366631e487a3b712f04100d00e6f0c3dc723/Tests/Files/elf-Linux-lib-x64.so
--------------------------------------------------------------------------------
/Tests/Files/elf-Linux-x64-bash:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EmbeddedSwift/SwiftELF/c0fe366631e487a3b712f04100d00e6f0c3dc723/Tests/Files/elf-Linux-x64-bash
--------------------------------------------------------------------------------
/Tests/Files/testfile-phdrs.elf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EmbeddedSwift/SwiftELF/c0fe366631e487a3b712f04100d00e6f0c3dc723/Tests/Files/testfile-phdrs.elf
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import SwiftELFTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += SwiftELFTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/Tests/SwiftELFTests/SwiftELFTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import SwiftELF
3 |
4 | final class SwiftELFTests: XCTestCase {
5 |
6 | var sut: SwiftELF!
7 |
8 | override func setUp() {
9 | super.setUp()
10 | XCTAssertNoThrow(sut = try SwiftELF(at: TestFiles.elfLinuxLibX86.path))
11 | }
12 |
13 | override func tearDown() {
14 | sut = nil
15 | super.tearDown()
16 | }
17 |
18 | func test_loads_elf() {
19 | XCTAssertNotNil(sut)
20 | }
21 |
22 | func test_gets_kind() {
23 | XCTAssertEqual(sut.kind, Kind.elf)
24 | }
25 |
26 | func test_prints_header() {
27 | XCTAssertNoThrow(try sut.printHeader())
28 | }
29 |
30 | func test_gets_sectionNames() {
31 | let sectionNames = try! sut.getSectionNames()
32 | XCTAssertEqual(sectionNames, TestFiles.elfLinuxLibX86.sectionData)
33 | }
34 |
35 | func test_get_symbolTable() {
36 | let symbolTables = try! sut.getSymbolTables()
37 | XCTAssertEqual(symbolTables, TestFiles.elfLinuxLibX86.symbolTables)
38 | }
39 |
40 | static var allTests = [
41 | ("test_loads_elf", test_loads_elf),
42 | ("test_gets_kind", test_gets_kind),
43 | ("test_prints_header", test_prints_header),
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/Tests/SwiftELFTests/TestFiles.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import SwiftELF
3 |
4 | enum TestFiles {
5 | case elfLinuxLibX86
6 | case testfilePhdrsElf
7 | case elfLinuxX64Bash
8 |
9 | var path: String {
10 | switch self {
11 | case .elfLinuxLibX86:
12 | return basePath.appendingPathComponent("elf-Linux-lib-x64.so").path
13 | case .testfilePhdrsElf:
14 | return basePath.appendingPathComponent("testfile-phdrs.elf").path
15 | case .elfLinuxX64Bash:
16 | return basePath.appendingPathComponent("elf-Linux-x64-bash").path
17 | }
18 | }
19 |
20 | var sectionData: [String: Int]? {
21 | switch self {
22 | case .elfLinuxLibX86:
23 | return [".data": 23, ".hash": 1, ".gnu.version_r": 6, ".fini_array": 17, ".init": 9, ".plt": 10, ".shstrtab": 25, ".gnu.hash": 2, ".rela.dyn": 7, ".fini": 12, ".eh_frame_hdr": 14, ".data.rel.ro": 19, ".eh_frame": 15, ".got.plt": 22, ".rela.plt": 8, ".dynstr": 4, ".got": 21, ".dynsym": 3, ".gnu.version": 5, ".init_array": 16, ".dynamic": 20, ".jcr": 18, ".text": 11, ".bss": 24, ".rodata": 13]
24 | case .testfilePhdrsElf:
25 | return [:]
26 | case .elfLinuxX64Bash:
27 | return [:]
28 | }
29 | }
30 |
31 | var symbolTables: [SwiftELF.SymbolTableType: SwiftELF.SymbolTable] {
32 | switch self {
33 | case .elfLinuxLibX86:
34 | return [.dynsym: ["FT_Get_Next_Char": 0, "XDestroyWindow": 0, "XSetClipRectangles": 0, "glReadPixels": 0, "cairo_mesh_pattern_get_patch_count": 350384, "XRenderFreeGlyphs": 0, "sincos": 0, "cairo_pattern_set_matrix": 334032, "puts": 0, "__printf_chk": 0, "ldiv": 0, "FT_Get_Glyph_Name": 0, "cairo_xcb_surface_create_for_bitmap": 668640, "cairo_show_page": 144624, "cairo_mesh_pattern_set_corner_color_rgba": 332400, "cairo_recording_surface_ink_extents": 389632, "png_get_valid": 0, "_XReadEvents": 0, "pthread_mutexattr_settype": 0, "cairo_surface_get_reference_count": 437504, "cairo_pattern_create_raster_source": 377712, "glClearColor": 0, "cairo_scaled_font_set_user_data": 409984, "cairo_surface_get_device_offset": 440912, "pixman_image_create_solid_fill": 0, "xcb_shm_attach_checked": 0, "pixman_image_set_destroy_function": 0, "cairo_transform": 142800, "cairo_set_font_matrix": 145728, "cairo_gl_surface_create_for_texture": 760416, "cairo_script_surface_create": 790016, "pixman_region32_translate": 0, "FcPatternGetFTFace": 0, "glDisable": 0, "modf": 0, "cairo_surface_observer_add_finish_callback": 460384, "cairo_matrix_init": 240992, "cairo_append_path": 148944, "pixman_region32_union": 0, "cairo_pattern_get_surface": 349696, "dlsym": 0, "xcb_render_fill_rectangles": 0, "cairo_pattern_get_matrix": 334256, "cairo_pattern_create_linear": 329120, "xcb_get_maximum_request_length": 0, "FT_Set_Char_Size": 0, "FcPatternGet": 0, "cairo_surface_create_for_rectangle": 467440, "strncpy": 0, "cairo_get_dash_count": 142528, "XQueryColors": 0, "cairo_font_extents": 145520, "cairo_user_to_device": 142944, "png_set_palette_to_rgb": 0, "xcb_shm_get_image_reply": 0, "_end": 3247672, "cairo_recording_surface_get_extents": 390032, "cairo_pattern_status": 330176, "frexp": 0, "XShmQueryExtension": 0, "cairo_get_current_point": 147136, "access": 0, "eglQueryContext": 0, "cairo_region_intersect": 399264, "cairo_get_font_matrix": 145776, "qsort": 0, "cairo_matrix_translate": 241600, "cairo_pattern_get_filter": 334336, "cairo_get_user_data": 141488, "cairo_matrix_rotate": 241488, "xcb_send_request": 0, "cairo_mesh_pattern_end_patch": 331520, "FcPatternAddDouble": 0, "cairo_glyph_path": 146928, "xcb_render_pictdepth_next": 0, "png_destroy_read_struct": 0, "xcb_shm_id": 0, "cairo_xlib_surface_set_drawable": 638144, "strcmp": 0, "cairo_script_create_for_stream": 789808, "cairo_ps_surface_create_for_stream": 833904, "xcb_render_add_glyphs": 0, "FT_Get_X11_Font_Format": 0, "cairo_region_get_extents": 398944, "xcb_poly_fill_rectangle": 0, "XShmCreatePixmap": 0, "cairo_get_target": 148192, "cairo_ft_scaled_font_unlock_face": 807136, "cairo_surface_observer_add_mask_callback": 460144, "cairo_xcb_device_debug_cap_xrender_version": 652688, "cairo_scaled_font_text_to_glyphs": 415104, "glGetError": 0, "cairo_font_options_equal": 184000, "dlclose": 0, "cairo_surface_get_user_data": 437600, "XCreateWindow": 0, "xcb_poll_for_reply": 0, "rand": 0, "eglGetProcAddress": 0, "XRenderCompositeText32": 0, "memset": 0, "cairo_script_get_mode": 790000, "cairo_scaled_font_glyph_extents": 417072, "FT_Load_Glyph": 0, "cairo_copy_path_flat": 148912, "cairo_font_options_get_subpixel_order": 184272, "cairo_rectangle": 143920, "cairo_surface_status": 436864, "cairo_arc": 143312, "cairo_device_set_user_data": 178032, "xcb_get_image": 0, "pixman_region32_subtract": 0, "cairo_raster_source_pattern_set_finish": 378256, "cairo_get_matrix": 148160, "cairo_device_observer_glyphs_elapsed": 461232, "cairo_pattern_create_mesh": 329920, "glXSwapBuffers": 0, "XCreatePixmap": 0, "cairo_font_options_set_hint_metrics": 184496, "xcb_shm_detach_checked": 0, "cairo_ft_font_face_get_synthesize": 806928, "rewind": 0, "cairo_matrix_scale": 241536, "cairo_region_xor": 399680, "cairo_region_reference": 398480, "FcPatternDestroy": 0, "png_set_gray_to_rgb": 0, "cairo_xcb_device_debug_set_precision": 652864, "cairo_raster_source_pattern_get_finish": 378288, "_edata": 3241216, "XRenderCreateGlyphSet": 0, "pixman_region32_init_rect": 0, "cairo_surface_create_similar": 446432, "xcb_create_gc": 0, "XSync": 0, "cairo_image_surface_get_stride": 236528, "pixman_rasterize_trapezoid": 0, "__gnu_lto_v1": 3247664, "cairo_svg_get_versions": 897824, "cairo_set_source_rgb": 141856, "cairo_gl_surface_set_size": 760688, "cairo_pattern_create_radial": 329472, "cairo_ft_font_face_create_for_ft_face": 806752, "glStencilOp": 0, "cairo_rotate": 142752, "cairo_script_surface_create_for_target": 790128, "cairo_mesh_pattern_line_to": 331296, "pixman_region32_not_empty": 0, "cairo_user_font_face_set_render_glyph_func": 524448, "glClear": 0, "glActiveTexture": 0, "XRenderCompositeText16": 0, "FcPatternAddString": 0, "cairo_mask": 144192, "cairo_region_create": 397776, "cairo_font_face_get_reference_count": 179104, "deflateInit_": 0, "glXMakeCurrent": 0, "cairo_get_tolerance": 147040, "xcb_render_query_version_reply": 0, "cairo_script_create": 789760, "cairo_pattern_get_reference_count": 330416, "cairo_scaled_font_text_extents": 417824, "ctime_r": 0, "FT_Load_Sfnt_Table": 0, "cairo_pattern_create_for_surface": 328896, "cairo_ps_level_to_string": 834112, "cairo_xlib_device_debug_set_precision": 595024, "FT_GlyphSlot_Oblique": 0, "xcb_depth_visuals_iterator": 0, "pixman_image_set_transform": 0, "xcb_render_composite_glyphs_8": 0, "pixman_composite_glyphs_no_mask": 0, "cairo_get_miter_limit": 148128, "putchar": 0, "glEnable": 0, "cairo_pdf_get_versions": 880560, "xcb_generate_id": 0, "XFreePixmap": 0, "xcb_render_composite": 0, "XSendEvent": 0, "cairo_font_options_hash": 184128, "__ctype_b_loc": 0, "localeconv": 0, "_ITM_deregisterTMCloneTable": 0, "pthread_mutex_destroy": 0, "cairo_surface_flush": 439840, "cairo_move_to": 143168, "glDrawBuffer": 0, "cairo_set_fill_rule": 142272, "XRenderCreatePicture": 0, "glStencilFunc": 0, "png_write_image": 0, "png_create_info_struct": 0, "xcb_render_free_picture": 0, "cairo_set_user_data": 141504, "xcb_render_create_conical_gradient": 0, "cairo_arc_negative": 143552, "xcb_render_set_picture_filter": 0, "cairo_surface_mark_dirty": 444224, "cairo_surface_observer_add_flush_callback": 460336, "cairo_svg_version_to_string": 897856, "cairo_surface_get_type": 436832, "FT_Outline_Translate": 0, "png_set_packing": 0, "pixman_image_set_filter": 0, "cairo_user_font_face_set_unicode_to_glyph_func": 524672, "XCreateGC": 0, "cairo_region_contains_point": 400240, "xcb_render_create_solid_fill": 0, "FcPatternAddInteger": 0, "pixman_image_ref": 0, "cairo_script_from_recording_surface": 790288, "cairo_copy_page": 144576, "pixman_glyph_cache_thaw": 0, "cairo_device_observer_paint_elapsed": 460912, "XFree": 0, "cairo_scaled_font_extents": 410016, "pixman_region32_contains_point": 0, "png_read_info": 0, "cairo_device_acquire": 177600, "cairo_gl_surface_create": 760032, "pixman_image_set_clip_region32": 0, "eglQueryString": 0, "pixman_region32_init_rects": 0, "cairo_script_set_mode": 789984, "cairo_surface_observer_add_glyphs_callback": 460288, "cairo_raster_source_pattern_get_callback_data": 378016, "acos": 0, "XRenderCompositeTrapezoids": 0, "cairo_set_matrix": 142848, "shmget": 0, "XRenderSetPictureTransform": 0, "cairo_device_release": 177424, "FT_New_Face": 0, "cairo_mesh_pattern_set_control_point": 332272, "FT_Render_Glyph": 0, "cairo_surface_get_fallback_resolution": 441152, "cairo_raster_source_pattern_set_callback_data": 377984, "cairo_device_reference": 177312, "pixman_add_triangles": 0, "stderr": 0, "cairo_xlib_surface_get_display": 638496, "xcb_render_composite_glyphs_16": 0, "xcb_discard_reply": 0, "XShmAttach": 0, "cairo_push_group": 141712, "cairo_device_observer_print": 460672, "_init": 81888, "cairo_raster_source_pattern_get_acquire": 378080, "png_set_write_fn": 0, "deflate": 0, "cairo_surface_get_mime_data": 437680, "cairo_xlib_surface_get_xrender_format": 637856, "cairo_identity_matrix": 142896, "cairo_matrix_transform_point": 241936, "cairo_glyph_extents": 146160, "xcb_render_free_glyphs": 0, "cairo_mesh_pattern_curve_to": 330816, "eglGetCurrentSurface": 0, "cairo_region_create_rectangle": 398368, "strstr": 0, "cairo_surface_supports_mime_type": 438192, "cairo_xcb_device_get_connection": 652576, "xcb_render_create_picture": 0, "pixman_image_create_linear_gradient": 0, "cairo_scale": 142704, "XSetErrorHandler": 0, "XFreeColormap": 0, "cairo_surface_get_font_options": 438544, "memmove": 0, "cairo_toy_font_face_get_weight": 498928, "XSetClipMask": 0, "fread": 0, "cairo_pattern_get_color_stop_rgba": 349760, "cairo_set_line_cap": 142384, "cairo_surface_unmap_image": 442224, "eglChooseConfig": 0, "cairo_user_to_device_distance": 142976, "cairo_debug_reset_static_data": 170624, "xcb_get_image_reply": 0, "XRenderFindVisualFormat": 0, "pthread_mutex_init": 0, "glBindTexture": 0, "XShmGetImage": 0, "memcmp": 0, "XShmDetach": 0, "FT_Done_Face": 0, "cairo_gl_surface_get_height": 760848, "png_set_write_user_transform_fn": 0, "cairo_show_text": 148224, "cairo_font_face_destroy": 178960, "pixman_image_get_width": 0, "__memcpy_chk": 0, "cairo_in_clip": 145264, "glScissor": 0, "cairo_matrix_init_translate": 241104, "cairo_get_dash": 142576, "FcPatternAddBool": 0, "dlopen": 0, "cairo_surface_show_page": 444048, "FT_GlyphSlot_Embolden": 0, "cairo_surface_observer_add_stroke_callback": 460240, "XRenderFreeGlyphSet": 0, "XFlush": 0, "cairo_fill_extents": 144928, "cairo_glx_device_get_display": 765456, "cairo_xlib_device_debug_cap_xrender_version": 594944, "cairo_create": 141184, "FT_Outline_Get_CBox": 0, "cairo_xlib_surface_get_height": 638800, "cairo_ps_surface_create": 833808, "hypot": 0, "xcb_render_query_version": 0, "pixman_image_create_radial_gradient": 0, "shmctl": 0, "cairo_set_line_join": 142432, "cairo_get_line_join": 148096, "cairo_path_destroy": 278768, "pixman_image_get_stride": 0, "cairo_scaled_font_get_font_options": 418368, "png_read_end": 0, "cairo_destroy": 141408, "XRenderFillRectangles": 0, "cairo_image_surface_create_from_png_stream": 709776, "glXGetVisualFromFBConfig": 0, "XInitExtension": 0, "cairo_scaled_font_get_ctm": 418192, "pixman_format_supported_destination": 0, "xcb_render_pictscreen_depths_iterator": 0, "cairo_surface_observer_add_fill_callback": 460192, "cairo_script_write_comment": 789856, "glViewport": 0, "xcb_shm_get_image": 0, "XRenderFindFormat": 0, "glColorMask": 0, "time": 0, "cairo_font_options_merge": 183856, "cairo_region_union_rectangle": 399552, "FcConfigGetCurrent": 0, "calloc": 0, "fmod": 0, "cairo_glx_device_get_context": 765504, "cairo_surface_observer_elapsed": 460560, "cairo_xlib_surface_set_size": 637904, "glDepthMask": 0, "cairo_new_path": 143072, "__finite": 0, "cairo_user_font_face_create": 524224, "xcb_render_trapezoids": 0, "cairo_has_current_point": 147104, "pixman_region32_intersect": 0, "cairo_scaled_font_destroy": 407392, "glXGetCurrentDrawable": 0, "png_read_update_info": 0, "cairo_device_observer_mask_elapsed": 460992, "glTexSubImage2D": 0, "png_get_error_ptr": 0, "__cxa_finalize": 0, "__fprintf_chk": 0, "XAddExtension": 0, "cairo_font_options_get_antialias": 184208, "cairo_surface_destroy": 438896, "eglSwapBuffers": 0, "cairo_curve_to": 143264, "xcb_render_id": 0, "cairo_get_antialias": 147072, "cairo_image_surface_create": 236176, "getenv": 0, "eglMakeCurrent": 0, "png_write_end": 0, "cairo_show_glyphs": 146288, "cairo_scaled_font_create": 407920, "png_write_info": 0, "xcb_create_pixmap_checked": 0, "png_set_filler": 0, "xcb_wait_for_reply": 0, "cairo_text_cluster_free": 265136, "strchr": 0, "pixman_glyph_get_mask_format": 0, "FT_Library_SetLcdFilter": 0, "FcPatternCreate": 0, "XInitImage": 0, "shmdt": 0, "pixman_region32_init": 0, "cairo_region_destroy": 398560, "FcInitBringUptoDate": 0, "cairo_font_options_copy": 183648, "cairo_font_face_set_user_data": 179168, "cairo_image_surface_create_for_data": 237200, "png_get_io_ptr": 0, "cairo_device_observer_fill_elapsed": 461072, "pthread_mutex_unlock": 0, "xcb_render_create_glyph_set": 0, "XUnlockDisplay": 0, "glPixelStorei": 0, "glDrawElements": 0, "pixman_region32_rectangles": 0, "cairo_get_operator": 147008, "cairo_recording_surface_create": 386720, "FcPatternGetInteger": 0, "cairo_paint_with_alpha": 144144, "cairo_pattern_create_rgb": 328880, "cairo_translate": 142656, "cairo_surface_get_content": 436848, "cairo_surface_finish": 439760, "cairo_font_face_reference": 178928, "cairo_glyph_allocate": 265040, "XShmPutImage": 0, "FT_Set_Transform": 0, "XGetImage": 0, "realloc": 0, "cairo_xlib_surface_create": 637200, "cairo_ps_surface_get_eps": 834208, "cairo_surface_create_similar_image": 445856, "fopen": 0, "xcb_get_input_focus": 0, "cairo_stroke_preserve": 144432, "cairo_svg_surface_create_for_stream": 897456, "cairo_surface_copy_page": 443936, "cairo_surface_has_show_text_glyphs": 444320, "cairo_scaled_font_status": 404624, "FT_Vector_Transform": 0, "png_create_read_struct": 0, "XFreeGC": 0, "png_set_bKGD": 0, "xcb_render_pictvisual_next": 0, "cairo_xcb_surface_set_size": 669328, "cairo_user_font_face_get_render_glyph_func": 524848, "XRenderCompositeTriStrip": 0, "cairo_set_source_surface": 141952, "pixman_region32_contains_rectangle": 0, "XRenderSetPictureClipRectangles": 0, "cairo_ps_surface_set_eps": 834144, "cairo_raster_source_pattern_get_copy": 378224, "cairo_scaled_font_get_type": 404592, "strncmp": 0, "cairo_status": 149056, "FcPatternDel": 0, "cairo_device_get_reference_count": 177984, "cairo_region_union": 399472, "cairo_stroke_extents": 144832, "cairo_region_contains_rectangle": 400144, "glXQueryExtensionsString": 0, "cairo_user_font_face_get_unicode_to_glyph_func": 524976, "pixman_transform_point_3d": 0, "XRenderAddGlyphs": 0, "cairo_xlib_surface_get_width": 638752, "cairo_pattern_reference": 330096, "cairo_get_reference_count": 141536, "cairo_pdf_surface_create_for_stream": 880288, "cairo_ft_font_face_unset_synthesize": 806896, "cairo_fill_preserve": 144528, "pixman_image_set_repeat": 0, "png_set_tRNS_to_alpha": 0, "cairo_pattern_add_color_stop_rgba": 332832, "eglDestroySurface": 0, "xcb_get_setup": 0, "cairo_pattern_set_filter": 334304, "cairo_user_font_face_get_text_to_glyphs_func": 524912, "cairo_copy_clip_rectangle_list": 145344, "xcb_render_pictscreen_next": 0, "xcb_render_query_pict_formats_formats_iterator": 0, "cairo_mask_surface": 144256, "cairo_xcb_surface_set_drawable": 669472, "png_set_expand_gray_1_2_4_to_8": 0, "tmpfile": 0, "pixman_composite_glyphs": 0, "pixman_image_get_height": 0, "cairo_clip": 145024, "cairo_ft_scaled_font_lock_face": 806960, "xcb_prefetch_extension_data": 0, "xcb_prefetch_maximum_request_length": 0, "png_set_interlace_handling": 0, "XRenderChangePicture": 0, "xcb_render_set_picture_clip_rectangles": 0, "shmat": 0, "xcb_get_extension_data": 0, "cairo_rel_curve_to": 143872, "cairo_set_tolerance": 142176, "cairo_stroke": 144384, "cairo_surface_set_mime_data": 437856, "cairo_egl_device_create": 763488, "png_set_read_user_transform_fn": 0, "cairo_region_is_empty": 400064, "xcb_request_check": 0, "cairo_path_extents": 144016, "XShmQueryVersion": 0, "floor": 0, "XRenderQuerySubpixelOrder": 0, "sqrt": 0, "cairo_in_fill": 144752, "cairo_set_font_options": 145808, "cairo_device_get_user_data": 178016, "fclose": 0, "cairo_device_observer_elapsed": 460800, "cairo_device_to_user": 143008, "cairo_mesh_pattern_get_path": 350496, "glGetString": 0, "FcConfigSubstitute": 0, "XRenderFreePicture": 0, "cairo_new_sub_path": 143120, "cairo_pattern_add_color_stop_rgb": 334016, "XRenderFindStandardFormat": 0, "FcPatternDuplicate": 0, "XChangeGC": 0, "cairo_user_font_face_get_init_func": 524784, "cairo_toy_font_face_create": 498000, "cairo_reset_clip": 145120, "FT_Init_FreeType": 0, "cairo_pdf_surface_set_size": 880624, "__assert_fail": 0, "FcDefaultSubstitute": 0, "glReadBuffer": 0, "cairo_surface_write_to_png_stream": 709552, "cairo_set_dash": 142480, "cairo_xlib_surface_get_drawable": 638544, "malloc": 0, "xcb_shm_detach": 0, "__snprintf_chk": 0, "cairo_xcb_device_debug_cap_xshm_version": 652608, "cairo_pattern_set_user_data": 330464, "xcb_depth_next": 0, "xcb_copy_area": 0, "cairo_font_options_get_hint_style": 184464, "cairo_text_path": 147296, "cairo_font_options_get_hint_metrics": 184528, "XRenderCompositeText8": 0, "cairo_set_line_width": 142320, "pixman_image_unref": 0, "memcpy": 0, "glClearStencil": 0, "cairo_ps_get_levels": 834080, "xcb_shm_query_version_reply": 0, "cairo_copy_path": 148880, "cairo_image_surface_get_format": 236336, "cairo_scaled_font_get_font_face": 418064, "cairo_scaled_font_get_scale_matrix": 418272, "cairo_xlib_surface_get_visual": 638656, "cairo_user_font_face_set_init_func": 524336, "cairo_get_scaled_font": 146128, "cairo_get_font_options": 145920, "pixman_region32_extents": 0, "cairo_get_font_face": 145648, "xcb_shm_query_version": 0, "cairo_user_font_face_set_text_to_glyphs_func": 524560, "cairo_surface_map_to_image": 445616, "ceil": 0, "XRenderSetPictureFilter": 0, "glIsEnabled": 0, "cairo_rel_line_to": 143824, "cairo_clip_extents": 145168, "strcpy": 0, "xcb_change_gc": 0, "xcb_render_composite_glyphs_32": 0, "cairo_region_intersect_rectangle": 399344, "cairo_font_options_set_hint_style": 184432, "pixman_glyph_cache_freeze": 0, "cairo_gl_surface_swapbuffers": 760880, "cairo_paint": 144096, "cairo_set_operator": 141808, "cairo_scaled_font_get_font_matrix": 418112, "cairo_pattern_create_rgba": 328720, "FT_Outline_Decompose": 0, "cairo_version": 525040, "cairo_surface_observer_add_paint_callback": 460096, "cairo_font_face_get_type": 179072, "__errno_location": 0, "FcNameConstant": 0, "cairo_set_font_face": 145600, "pixman_image_set_component_alpha": 0, "pow": 0, "xcb_flush": 0, "free": 0, "cairo_ps_surface_dsc_begin_page_setup": 834832, "XEventsQueued": 0, "glBlendFunc": 0, "cairo_glyph_free": 265088, "cairo_image_surface_create_from_png": 709616, "cairo_region_create_rectangles": 397840, "cairo_xcb_surface_create": 667952, "XCopyArea": 0, "cairo_scaled_font_get_user_data": 409968, "cairo_ps_surface_dsc_begin_setup": 834736, "_setjmp": 0, "cairo_raster_source_pattern_set_snapshot": 378128, "cairo_matrix_init_identity": 240944, "xcb_shm_attach": 0, "_ITM_registerTMCloneTable": 0, "xcb_put_image": 0, "cairo_device_finish": 177744, "pixman_glyph_cache_remove": 0, "glXChooseFBConfig": 0, "pixman_region32_equal": 0, "xcb_render_query_pict_formats": 0, "cairo_region_translate": 400112, "glXGetProcAddress": 0, "cairo_surface_mark_dirty_rectangle": 439888, "cairo_text_cluster_allocate": 265104, "__strncpy_chk": 0, "xcb_screen_allowed_depths_iterator": 0, "cairo_tee_surface_index": 900752, "eglGetCurrentContext": 0, "cairo_ft_font_options_substitute": 806560, "cairo_device_status": 177376, "cairo_font_options_status": 183824, "XScreenNumberOfScreen": 0, "xcb_render_free_glyph_set": 0, "xcb_shm_put_image": 0, "xcb_render_change_picture": 0, "cairo_raster_source_pattern_get_snapshot": 378160, "cairo_device_destroy": 177808, "pixman_glyph_cache_create": 0, "png_error": 0, "cairo_close_path": 143968, "XRenderCreateRadialGradient": 0, "pthread_mutexattr_init": 0, "cairo_status_to_string": 264400, "feof": 0, "xcb_render_pictdepth_visuals_iterator": 0, "cairo_device_to_user_distance": 143040, "__bss_start": 3241216, "XLockDisplay": 0, "XRenderFillRectangle": 0, "pixman_glyph_cache_lookup": 0, "strtol": 0, "cairo_pattern_get_color_stop_count": 350032, "FT_Get_First_Char": 0, "glXGetCurrentContext": 0, "cairo_set_miter_limit": 142608, "glDrawArrays": 0, "cairo_get_group_target": 148848, "cairo_surface_create_observer": 459808, "cairo_pattern_get_radial_circles": 350224, "png_destroy_write_struct": 0, "cairo_set_antialias": 142224, "XFillRectangle": 0, "FcFreeTypeCharIndex": 0, "deflateEnd": 0, "cairo_set_source_rgba": 141904, "png_get_IHDR": 0, "png_set_packswap": 0, "__strdup": 0, "cairo_toy_font_face_get_slant": 498848, "XMaxRequestSize": 0, "sscanf": 0, "cairo_region_subtract": 399056, "pthread_mutexattr_destroy": 0, "cairo_matrix_init_rotate": 241200, "cairo_gl_surface_get_width": 760816, "__strcpy_chk": 0, "cairo_line_to": 143216, "xcb_render_create_linear_gradient": 0, "cairo_pattern_set_extend": 334352, "cairo_region_get_rectangle": 398800, "cairo_font_options_set_antialias": 184176, "clock_gettime": 0, "cairo_svg_surface_restrict_to_version": 897648, "xcb_visualtype_next": 0, "XPutImage": 0, "cairo_rectangle_list_destroy": 155168, "pixman_region32_fini": 0, "cairo_surface_get_device": 436880, "cairo_get_line_cap": 148064, "pixman_fill": 0, "cairo_tee_surface_add": 899984, "FT_Done_FreeType": 0, "pixman_glyph_cache_insert": 0, "cairo_pop_group_to_source": 142080, "XExtendedMaxRequestSize": 0, "glBlendFuncSeparate": 0, "cairo_region_status": 399040, "glGetIntegerv": 0, "eglCreatePbufferSurface": 0, "fwrite": 0, "_fini": 901916, "cairo_raster_source_pattern_set_copy": 378192, "pixman_blt": 0, "cairo_ps_surface_restrict_to_level": 834000, "xcb_render_create_radial_gradient": 0, "cairo_tee_surface_create": 899856, "cairo_xlib_surface_create_with_xrender_format": 637680, "cairo_version_string": 525056, "cairo_font_options_create": 183552, "cairo_font_face_get_user_data": 179152, "xcb_render_set_picture_transform": 0, "cairo_fill": 144480, "cairo_pattern_get_type": 330160, "__sprintf_chk": 0, "cairo_xlib_device_debug_get_precision": 595072, "XRenderQueryVersion": 0, "cairo_matrix_init_scale": 241152, "cairo_gl_device_set_thread_aware": 723808, "XESetCloseDisplay": 0, "cairo_pattern_get_rgba": 349488, "cairo_font_face_status": 179136, "pixman_region32_copy": 0, "cairo_xlib_surface_get_depth": 638704, "cairo_pattern_get_user_data": 330448, "png_set_IHDR": 0, "png_read_image": 0, "pixman_image_get_depth": 0, "cairo_pattern_get_linear_points": 350096, "": 81888, "cairo_font_options_set_subpixel_order": 184240, "cairo_scaled_font_reference": 407328, "xcb_render_pictforminfo_next": 0, "cairo_select_font_face": 145376, "png_set_strip_16": 0, "cairo_device_get_type": 177392, "xcb_create_pixmap": 0, "cairo_text_extents": 147680, "pthread_mutex_lock": 0, "cairo_glx_device_create": 764720, "png_create_write_struct": 0, "cairo_surface_reference": 437440, "cairo_push_group_with_content": 141664, "cairo_get_fill_rule": 148000, "cairo_surface_set_fallback_resolution": 440960, "cairo_show_text_glyphs": 146384, "cairo_mesh_pattern_begin_patch": 330496, "_Jv_RegisterClasses": 0, "cairo_pdf_surface_create": 880384, "cairo_format_stride_for_width": 237104, "cairo_in_stroke": 144672, "cairo_mesh_pattern_set_corner_color_rgb": 332816, "XRenderCreateLinearGradient": 0, "xcb_big_requests_id": 0, "xcb_get_image_data": 0, "cairo_mesh_pattern_get_control_point": 351200, "cairo_surface_write_to_png": 709328, "fputc": 0, "cairo_surface_observer_print": 460432, "cairo_font_options_destroy": 183776, "glTexImage2D": 0, "pixman_region32_n_rects": 0, "ferror": 0, "__gmon_start__": 0, "cairo_gl_surface_create_for_window": 765552, "cairo_xcb_surface_create_with_xrender_format": 668880, "XCreateColormap": 0, "cairo_surface_set_device_offset": 440608, "glTexParameteri": 0, "xcb_free_pixmap": 0, "cairo_get_source": 142144, "cairo_image_surface_get_height": 236464, "xcb_render_query_pict_formats_screens_iterator": 0, "cairo_matrix_transform_distance": 241872, "glXQueryContext": 0, "XAllocColor": 0, "cairo_get_line_width": 148032, "cairo_matrix_invert": 242896, "cairo_restore": 141616, "cairo_toy_font_face_get_family": 498736, "cairo_region_xor_rectangle": 399872, "XRenderComposite": 0, "xcb_free_gc": 0, "pixman_image_composite32": 0, "cairo_image_surface_get_width": 236400, "cairo_tee_surface_remove": 900384, "XGetDefault": 0, "png_set_longjmp_fn": 0, "cairo_set_font_size": 145680, "cairo_rel_move_to": 143776, "png_set_read_fn": 0, "cairo_pop_group": 141728, "cairo_region_num_rectangles": 398768, "FcFontMatch": 0, "XRenderCreateSolidFill": 0, "cairo_pdf_surface_restrict_to_version": 880480, "cairo_device_observer_stroke_elapsed": 461152, "cairo_clip_preserve": 145072, "cairo_gl_surface_create_for_egl": 764080, "cairo_svg_surface_create": 897552, "cairo_reference": 141328, "cairo_raster_source_pattern_set_acquire": 378048, "cairo_ps_surface_dsc_comment": 834496, "cairo_device_flush": 177680, "cairo_mesh_pattern_move_to": 330720, "strlen": 0, "cairo_mesh_pattern_get_corner_color_rgba": 350864, "cairo_xlib_surface_create_for_bitmap": 637536, "cairo_pattern_destroy": 330192, "cairo_set_scaled_font": 146048, "glDeleteTextures": 0, "FcPatternGetBool": 0, "fflush": 0, "FT_Outline_Transform": 0, "cairo_xcb_device_debug_get_precision": 652912, "pixman_image_create_bits": 0, "cairo_ft_font_face_create_for_pattern": 806640, "xcb_render_query_pict_formats_reply": 0, "glGenTextures": 0, "__longjmp_chk": 0, "pixman_image_get_data": 0, "cairo_matrix_multiply": 241296, "cairo_region_subtract_rectangle": 399136, "cairo_ps_surface_set_size": 834272, "cairo_surface_set_user_data": 437632, "xcb_setup_roots_iterator": 0, "xcb_screen_next": 0, "cairo_region_equal": 400288, "cairo_save": 141568, "cairo_pdf_version_to_string": 880592, "cairo_ft_font_face_set_synthesize": 806864, "cairo_region_copy": 398656, "cairo_image_surface_get_data": 236272, "FcPatternGetString": 0, "cairo_xlib_surface_get_screen": 638592, "cairo_scaled_font_get_reference_count": 409936, "xcb_connection_has_error": 0, "cairo_set_source": 142016, "cairo_pattern_get_extend": 334384, "tan": 0]]
35 | default:
36 | return [:]
37 | }
38 | }
39 | }
40 |
41 | private extension TestFiles {
42 | var basePath: URL {
43 | URL(fileURLWithPath: #file).deletingLastPathComponent().appendingPathComponent("../Files/")
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Tests/SwiftELFTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | #if !canImport(ObjectiveC)
4 | public func allTests() -> [XCTestCaseEntry] {
5 | return [
6 | testCase(SwiftELFTests.allTests),
7 | ]
8 | }
9 | #endif
10 |
--------------------------------------------------------------------------------