| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,6 +29,7 @@ jobs: | |||
| 29 | 29 | target: | |
| 30 | 30 | - i686-pc-windows-msvc/msvc | |
| 31 | 31 | - x86_64-pc-windows-msvc/msvc | |
| 32 | + - aarch64-pc-windows-msvc/msvc | ||
| 32 | 33 | - x86_64-apple-darwin/clang | |
| 33 | 34 | - aarch64-apple-darwin/clang | |
| 34 | 35 | - x86_64-unknown-linux-gnu/gcc | |
@@ -49,6 +50,10 @@ jobs: | |||
| 49 | 50 | architecture: x64 | |
| 50 | 51 | runner: windows-latest | |
| 51 | 52 | compiler: msvc | |
| 53 | + - target: aarch64-pc-windows-msvc/msvc | ||
| 54 | + architecture: ARM64 | ||
| 55 | + runner: windows-latest | ||
| 56 | + compiler: msvc | ||
| 52 | 57 | - target: x86_64-apple-darwin/clang | |
| 53 | 58 | architecture: x86_64 | |
| 54 | 59 | runner: macos-13 | |
@@ -85,14 +90,21 @@ jobs: | |||
| 85 | 90 | with: | |
| 86 | 91 | python-version: '3.11' | |
| 87 | 92 | ||
| 88 | - - name: Windows | ||
| 89 | - if: runner.os == 'Windows' | ||
| 93 | + - name: Native Windows | ||
| 94 | + if: runner.os == 'Windows' && matrix.architecture != 'ARM64' | ||
| 90 | 95 | run: | | |
| 91 | 96 | choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }} | |
| 92 | 97 | ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '--pgo' }} -p ${{ matrix.architecture }} | |
| 93 | 98 | ./PCbuild/rt.bat ${{ matrix.debug && '-d' }} -p ${{ matrix.architecture }} -q --exclude ${{ matrix.exclude }} --multiprocess 0 --timeout 3600 --verbose2 --verbose3 | |
| 94 | 99 | ||
| 95 | - - name: macOS | ||
| 100 | + # No PGO or tests (yet): | ||
| 101 | + - name: Emulated Windows | ||
| 102 | + if: runner.os == 'Windows' && matrix.architecture == 'ARM64' | ||
| 103 | + run: | | ||
| 104 | + choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }} | ||
| 105 | + ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} | ||
| 106 | + | ||
| 107 | + - name: Native macOS | ||
| 96 | 108 | if: runner.os == 'macOS' | |
| 97 | 109 | run: | | |
| 98 | 110 | brew install llvm@${{ matrix.llvm }} | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -185,6 +185,8 @@ patch(unsigned char *base, const Stencil *stencil, uint64_t *patches) | |||
| 185 | 185 | // - https://github.com/llvm/llvm-project/blob/main/lld/MachO/Arch/ARM64.cpp | |
| 186 | 186 | // - https://github.com/llvm/llvm-project/blob/main/lld/MachO/Arch/ARM64Common.cpp | |
| 187 | 187 | // - https://github.com/llvm/llvm-project/blob/main/lld/MachO/Arch/ARM64Common.h | |
| 188 | + // - aarch64-pc-windows-msvc: | ||
| 189 | + // - https://github.com/llvm/llvm-project/blob/main/lld/COFF/Chunks.cpp | ||
| 188 | 190 | // - aarch64-unknown-linux-gnu: | |
| 189 | 191 | // - https://github.com/llvm/llvm-project/blob/main/lld/ELF/Arch/AArch64.cpp | |
| 190 | 192 | // - i686-pc-windows-msvc: | |
@@ -252,6 +254,7 @@ patch(unsigned char *base, const Stencil *stencil, uint64_t *patches) | |||
| 252 | 254 | assert((int64_t)value < (1LL << 31)); | |
| 253 | 255 | *loc32 = (uint32_t)value; | |
| 254 | 256 | continue; | |
| 257 | + case HoleKind_IMAGE_REL_ARM64_BRANCH26: | ||
| 255 | 258 | case HoleKind_R_AARCH64_CALL26: | |
| 256 | 259 | case HoleKind_R_AARCH64_JUMP26: | |
| 257 | 260 | // 28-bit relative branch. | |
@@ -293,6 +296,7 @@ patch(unsigned char *base, const Stencil *stencil, uint64_t *patches) | |||
| 293 | 296 | set_bits(loc32, 5, value, 48, 16); | |
| 294 | 297 | continue; | |
| 295 | 298 | case HoleKind_ARM64_RELOC_GOT_LOAD_PAGE21: | |
| 299 | + case HoleKind_IMAGE_REL_ARM64_PAGEBASE_REL21: | ||
| 296 | 300 | case HoleKind_R_AARCH64_ADR_GOT_PAGE: | |
| 297 | 301 | // 21-bit count of pages between this page and an absolute address's | |
| 298 | 302 | // page... I know, I know, it's weird. Pairs nicely with | |
@@ -302,6 +306,7 @@ patch(unsigned char *base, const Stencil *stencil, uint64_t *patches) | |||
| 302 | 306 | const Hole *next_hole = &stencil->holes[i + 1]; | |
| 303 | 307 | if (i + 1 < stencil->holes_size && | |
| 304 | 308 | (next_hole->kind == HoleKind_ARM64_RELOC_GOT_LOAD_PAGEOFF12 || | |
| 309 | + next_hole->kind == HoleKind_IMAGE_REL_ARM64_PAGEOFFSET_12L || | ||
| 305 | 310 | next_hole->kind == HoleKind_R_AARCH64_LD64_GOT_LO12_NC) && | |
| 306 | 311 | next_hole->offset == hole->offset + 4 && | |
| 307 | 312 | next_hole->symbol == hole->symbol && | |
@@ -354,6 +359,8 @@ patch(unsigned char *base, const Stencil *stencil, uint64_t *patches) | |||
| 354 | 359 | continue; | |
| 355 | 360 | case HoleKind_ARM64_RELOC_GOT_LOAD_PAGEOFF12: | |
| 356 | 361 | case HoleKind_ARM64_RELOC_PAGEOFF12: | |
| 362 | + case HoleKind_IMAGE_REL_ARM64_PAGEOFFSET_12A: | ||
| 363 | + case HoleKind_IMAGE_REL_ARM64_PAGEOFFSET_12L: | ||
| 357 | 364 | case HoleKind_R_AARCH64_LD64_GOT_LO12_NC: | |
| 358 | 365 | // 12-bit low part of an absolute address. Pairs nicely with | |
| 359 | 366 | // ARM64_RELOC_GOT_LOAD_PAGE21 (above). | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -8,6 +8,10 @@ | |||
| 8 | 8 | "ARM64_RELOC_PAGEOFF12", | |
| 9 | 9 | "ARM64_RELOC_UNSIGNED", | |
| 10 | 10 | "IMAGE_REL_AMD64_REL32", | |
| 11 | + "IMAGE_REL_ARM64_BRANCH26", | ||
| 12 | + "IMAGE_REL_ARM64_PAGEBASE_REL21", | ||
| 13 | + "IMAGE_REL_ARM64_PAGEOFFSET_12A", | ||
| 14 | + "IMAGE_REL_ARM64_PAGEOFFSET_12L", | ||
| 11 | 15 | "IMAGE_REL_I386_DIR32", | |
| 12 | 16 | "IMAGE_REL_I386_REL32", | |
| 13 | 17 | "R_AARCH64_ABS64", | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -238,6 +238,19 @@ def _handle_relocation( | |||
| 238 | 238 | addend = ( | |
| 239 | 239 | int.from_bytes(raw[offset : offset + 4], "little", signed=True) - 4 | |
| 240 | 240 | ) | |
| 241 | + case { | ||
| 242 | + "Offset": offset, | ||
| 243 | + "Symbol": s, | ||
| 244 | + "Type": { | ||
| 245 | + "Value": "IMAGE_REL_ARM64_BRANCH26" | ||
| 246 | + | "IMAGE_REL_ARM64_PAGEBASE_REL21" | ||
| 247 | + | "IMAGE_REL_ARM64_PAGEOFFSET_12A" | ||
| 248 | + | "IMAGE_REL_ARM64_PAGEOFFSET_12L" as kind | ||
| 249 | + }, | ||
| 250 | + }: | ||
| 251 | + offset += base | ||
| 252 | + value, symbol = self._unwrap_dllimport(s) | ||
| 253 | + addend = 0 | ||
| 241 | 254 | case _: | |
| 242 | 255 | raise NotImplementedError(relocation) | |
| 243 | 256 | return _stencils.Hole(offset, kind, value, symbol, addend) | |
@@ -435,6 +448,9 @@ def get_target(host: str) -> _COFF | _ELF | _MachO: | |||
| 435 | 448 | if re.fullmatch(r"aarch64-apple-darwin.*", host): | |
| 436 | 449 | args = ["-mcmodel=large"] | |
| 437 | 450 | return _MachO(host, alignment=8, args=args, prefix="_") | |
| 451 | + if re.fullmatch(r"aarch64-pc-windows-msvc", host): | ||
| 452 | + args = ["-fms-runtime-lib=dll"] | ||
| 453 | + return _COFF(host, alignment=8, args=args) | ||
| 438 | 454 | if re.fullmatch(r"aarch64-.*-linux-gnu", host): | |
| 439 | 455 | args = ["-mcmodel=large"] | |
| 440 | 456 | return _ELF(host, alignment=8, args=args) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments