Hi everyone!

I'm tracing go functions with uprobes/bpf and printing the contents of 
registers/stacks. So I can see the content of registers and stack at the 
entry of specified go functions.

I'm looking at a function with floats as parameters, and what I notice is 
that sometimes Go puts these values on the stack, and other times it puts 
them in registers

The Go ABI spec says the following: *"If T is a floating-point type and can 
be represented without loss of precision in a floating-point register, 
assign V to register FP and increment FP."*

and if I understand correctly, it would otherwise assign to the stack. I 
would say I see the float values on the stack ~15% of the time

My question is: Why would a floating point type not be able to be 
represented without loss of precision? Why isn't it deterministic when the 
architecture/OS is the same?

This is on a linux vm running on m1 apple silicon (so linux arm64)

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ba10fd3e-5b62-40af-ba93-f50e85fb17fcn%40googlegroups.com.

Reply via email to