delay cross-system-library-subpath
call
In `compiler/private/mach-o` --- which is reachable via `racket` due to being a dependency of `setup/dirs` --- delay the call to `cross-system-library-subpath` until needed.
This commit is contained in:
parent
8da6e9bd6b
commit
4acf864b0e
|
@ -1,13 +1,15 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require setup/cross-system)
|
(require setup/cross-system
|
||||||
|
racket/promise)
|
||||||
|
|
||||||
(provide add-plt-segment
|
(provide add-plt-segment
|
||||||
get/set-dylib-path)
|
get/set-dylib-path)
|
||||||
|
|
||||||
(define exe-id
|
(define exe-id
|
||||||
(if (equal? (path->bytes (cross-system-library-subpath #f)) #"x86_64-macosx")
|
(delay
|
||||||
#xFeedFacf
|
(if (equal? (path->bytes (cross-system-library-subpath #f)) #"x86_64-macosx")
|
||||||
#xFeedFace))
|
#xFeedFacf
|
||||||
|
#xFeedFace)))
|
||||||
|
|
||||||
(define (read-ulong p)
|
(define (read-ulong p)
|
||||||
(integer-bytes->integer (read-bytes 4 p) #f))
|
(integer-bytes->integer (read-bytes 4 p) #f))
|
||||||
|
@ -63,7 +65,7 @@
|
||||||
void
|
void
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(file-stream-buffer-mode out 'none)
|
(file-stream-buffer-mode out 'none)
|
||||||
(check-same exe-id (read-ulong p))
|
(check-same (force exe-id) (read-ulong p))
|
||||||
(read-ulong p)
|
(read-ulong p)
|
||||||
(read-ulong p)
|
(read-ulong p)
|
||||||
(check-same #x2 (read-ulong p))
|
(check-same #x2 (read-ulong p))
|
||||||
|
@ -93,7 +95,7 @@
|
||||||
[linkedit-limit-offset 0])
|
[linkedit-limit-offset 0])
|
||||||
;; (printf "~a cmds, length 0x~x\n" cnt cmdssz)
|
;; (printf "~a cmds, length 0x~x\n" cnt cmdssz)
|
||||||
(read-ulong p) ; flags
|
(read-ulong p) ; flags
|
||||||
(when (equal? exe-id #xFeedFacf)
|
(when (equal? (force exe-id) #xFeedFacf)
|
||||||
(read-ulong p)) ; extra reserved word for 64-bit header
|
(read-ulong p)) ; extra reserved word for 64-bit header
|
||||||
(let loop ([cnt total-cnt])
|
(let loop ([cnt total-cnt])
|
||||||
(unless (zero? cnt)
|
(unless (zero? cnt)
|
||||||
|
@ -136,7 +138,7 @@
|
||||||
[reloff (read-ulong p)]
|
[reloff (read-ulong p)]
|
||||||
[nreloc (read-ulong p)]
|
[nreloc (read-ulong p)]
|
||||||
[flags (read-ulong p)])
|
[flags (read-ulong p)])
|
||||||
(when ((+ offset vmsz) . > . (+ cmdssz (if (equal? exe-id #xFeedFacf) 32 28)))
|
(when ((+ offset vmsz) . > . (+ cmdssz (if (equal? (force exe-id) #xFeedFacf) 32 28)))
|
||||||
(when (and (positive? offset)
|
(when (and (positive? offset)
|
||||||
(offset . < . min-used))
|
(offset . < . min-used))
|
||||||
;; (printf " new min!\n")
|
;; (printf " new min!\n")
|
||||||
|
@ -250,7 +252,7 @@
|
||||||
(loop (sub1 cnt)))))
|
(loop (sub1 cnt)))))
|
||||||
;; (printf "Start offset: 0x~x\n" min-used)
|
;; (printf "Start offset: 0x~x\n" min-used)
|
||||||
(let ([end-cmd (+ cmdssz
|
(let ([end-cmd (+ cmdssz
|
||||||
(if (equal? exe-id #xFeedFacf) 32 28)
|
(if (equal? (force exe-id) #xFeedFacf) 32 28)
|
||||||
(- code-signature-lc-sz))]
|
(- code-signature-lc-sz))]
|
||||||
[new-cmd-sz (if link-edit-64? 72 56)]
|
[new-cmd-sz (if link-edit-64? 72 56)]
|
||||||
[outlen (round-up-page (bytes-length segdata))]
|
[outlen (round-up-page (bytes-length segdata))]
|
||||||
|
@ -400,14 +402,14 @@
|
||||||
(dynamic-wind
|
(dynamic-wind
|
||||||
void
|
void
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(check-same exe-id (read-ulong p))
|
(check-same (force exe-id) (read-ulong p))
|
||||||
(read-ulong p)
|
(read-ulong p)
|
||||||
(read-ulong p)
|
(read-ulong p)
|
||||||
(read-ulong p) ; 2 is executable, etc.
|
(read-ulong p) ; 2 is executable, etc.
|
||||||
(let* ([cnt (read-ulong p)]
|
(let* ([cnt (read-ulong p)]
|
||||||
[cmdssz (read-ulong p)])
|
[cmdssz (read-ulong p)])
|
||||||
(read-ulong p)
|
(read-ulong p)
|
||||||
(when (equal? exe-id #xFeedFacf)
|
(when (equal? (force exe-id) #xFeedFacf)
|
||||||
(read-ulong p))
|
(read-ulong p))
|
||||||
(let loop ([cnt cnt] [base 0] [delta 0] [result null])
|
(let loop ([cnt cnt] [base 0] [delta 0] [result null])
|
||||||
(if (zero? cnt)
|
(if (zero? cnt)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user