[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 18/36: services: hurd: Add dummy loopback.
From: |
Jan Nieuwenhuizen |
Subject: |
Re: 18/36: services: hurd: Add dummy loopback. |
Date: |
Tue, 05 May 2020 14:46:34 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Ludovic Courtès writes:
Hi,
>> Something like that: sizeof-ifconf is set to 16 (like on x86_64), but
>> it's size should be 8.
>
> Oh, that’s because ‘define-c-struct’ does all the work at
> macro-expansion time, with the host types and alignment constraints. I
> wonder how we didn’t notice it earlier. Cross-compiling from x86_64 to
> ARMv7 has the same problem, but maybe the networking ioctls work by
> chance.
>
> The patch below appears to fix it:
Yes, it fixes the struct sizes in the cross-compiled .go file. Thanks!
I have added it as the attached patch to "wip-hurd-vm" for now. I did
./pre-inst-env guild compile --target=i586-pc-gnu -o syscalls.go
guix/build/syscalls.scm
and copied that to the Hurd.
When running this (changed #$... to UPPERCASE)
--8<---------------cut here---------------start------------->8---
(use-modules (guix build syscalls))
(define LOOPBACK? #t)
(define IP "127.0.0.1" )
(define INTERFACE "lo")
(define NETMASK #f)
(define GATEWAY #f)
(format #t "ifreq-struct-size: ~a\n" (@@ (guix build syscalls)
ifreq-struct-size))
(format #t "sizeof-ifconf: ~s\n" (@@ (guix build syscalls) sizeof-ifconf))
(define (test)
(let* ((addr (inet-pton AF_INET IP))
(sockaddr (make-socket-address AF_INET addr 0))
(mask (and NETMASK
(inet-pton AF_INET NETMASK)))
(maskaddr (and mask
(make-socket-address AF_INET
mask 0)))
(gateway (and GATEWAY
(inet-pton AF_INET GATEWAY)))
(gatewayaddr (and gateway
(make-socket-address AF_INET
gateway 0))))
(configure-network-interface INTERFACE sockaddr
(logior IFF_UP
(if LOOPBACK?
IFF_LOOPBACK
0))
#:netmask maskaddr)
(when gateway
(let ((sock (socket AF_INET SOCK_DGRAM 0)))
(add-network-route/gateway sock gatewayaddr)
(close-port sock)))))
(test)
--8<---------------cut here---------------end--------------->8---
Now I see the correct sizes...
root@guixygnu# guile -L . -C . static.scm
;;; note: source file /root/static.scm
;;; newer than compiled
/root/.cache/guile/ccache/3.0-LE-4-4.2/root/static.scm.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /root/static.scm
;;; compiled /root/.cache/guile/ccache/3.0-LE-4-4.2/root/static.scm.go
ifreq-struct-size: 32
sizeof-ifconf: 8
Backtrace:
In ice-9/boot-9.scm:
1736:10 9 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
8 (apply-smob/0 #<thunk 2e6430>)
In ice-9/boot-9.scm:
718:2 7 (call-with-prompt _ _ #<procedure default-prompt-handle?>)
In ice-9/eval.scm:
619:8 6 (_ #(#(#<directory (guile-user) 2dd820>)))
In ice-9/boot-9.scm:
2806:4 5 (save-module-excursion _)
4351:12 4 (_)
In static.scm:
24:4 3 (test)
In guix/build/syscalls.scm:
1529:8 2 (configure-network-interface "lo" #(2 2130706433 0) 9 # _)
1464:18 1 (_ _ "lo" _)
In unknown file:
Exception thrown while printing backtrace:
In procedure primitive-call-ip: Wrong type argument in position 1 (expecting
PRIMITIVE_P): #<procedure 8f8560 (_ _ _)>
ERROR: Value out of range 0 to 4294967295: -1
...but still/again a similar range error; Ideas?
Greetings,
janneke
>From 33fbfcd7f46cf675cc24db92b1110d38afa51ae5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <address@hidden>
Date: Tue, 5 May 2020 11:53:39 +0200
Subject: [PATCH] syscalls: Cross-build fix for alignof*, sizeof*.
See <https://lists.gnu.org/archive/html/guix-devel/2020-05/msg00008.html>.
Reported by Jan (janneke) Nieuwenhuizen <address@hidden>.
* guix/build/syscalls.scm (sizeof*, alignof*): When cross-compiling, emit code
to call at runtime.
---
guix/build/syscalls.scm | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 73b439fb7d..00d8ceb480 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -23,6 +23,7 @@
(define-module (guix build syscalls)
#:use-module (system foreign)
+ #:use-module (system base target)
#:use-module (rnrs bytevectors)
#:autoload (ice-9 binary-ports) (get-bytevector-n)
#:use-module (srfi srfi-1)
@@ -194,9 +195,14 @@
(* (sizeof* type) n))
((_ type)
(let-syntax ((v (lambda (s)
- (let ((val (sizeof type)))
- (syntax-case s ()
- (_ val))))))
+ ;; When compiling natively, call 'sizeof' at expansion
+ ;; time; otherwise, emit code to call it at run time.
+ (syntax-case s ()
+ (_
+ (if (= (target-word-size)
+ (with-target %host-type target-word-size))
+ (sizeof type)
+ #'(sizeof type)))))))
v))))
(define-syntax alignof*
@@ -208,9 +214,14 @@
(alignof* type))
((_ type)
(let-syntax ((v (lambda (s)
- (let ((val (alignof type)))
- (syntax-case s ()
- (_ val))))))
+ ;; When compiling natively, call 'sizeof' at expansion
+ ;; time; otherwise, emit code to call it at run time.
+ (syntax-case s ()
+ (_
+ (if (= (target-word-size)
+ (with-target %host-type target-word-size))
+ (alignof type)
+ #'(alignof type)))))))
v))))
(define-syntax align ;as found in (system foreign)
--
2.26.0
--
Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com