I'll try to get a debian install to boot for armhf, but it'll take me a
bit because it's not straightforward (to put it mildly :).
How urgent/important is this issue?
Alberto Bertogli wrote:
I'll try to get a debian install to boot for armhf, but it'll take me a
bit because it's not straightforward (to put it mildly :).
Oh, yeah. :/ Perhaps qemu might be better option here. There might
even be pre-built disk images flying around.
El 25/3/24 a las 20:12, Chris Lamb escribiĆ³:
Alberto Bertogli wrote:
If you know of a functional official image that I can use to try to >>>reproduce the problem, or recently-tested steps I can follow to get
a working qemu install, please let me know.
Alas, I can't actually be helpful here. There are no official images
as far as I knowā¦ and somewhat annoyingly I (ie. a Debian Developer) >>actually have access to some machines set aside for this purpose. I
call this "annoying" because I naturally can't then give you direct
SSH access transitively ā but I can proxy ideas, of course.
Hi.
I can't offer ssh access either (for now), but I've checked and
this error may be reproduced easily on an arm64 machine using an
armel chroot.
On Sat, Apr 20, 2024 at 12:00:00AM +0200, Santiago Vila wrote:
I can't offer ssh access either (for now), but I've checked and
this error may be reproduced easily on an arm64 machine using an
armel chroot.
Oohhh this is good to know, I didn't know that was a viable option.
Thank you for the suggestion!
I will try to reproduce it this way, I'll let you know how it goes.
The problem seems to be that some of the functions that have 64-bit
variants (e.g. pread64, pwrite64) have an assembler name declared for
the regular variant in the header; while other platforms don't do that
and have the two functions declared separately.
https://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html
For example, this is the declaration of pread and pwrite in a >post-preprocessed file, diff between x86_64 (without the bug, '-') and
armel (with the bug, '+'):
```
@@ -1068,18 +1111,14 @@
extern ssize_t write (int __fd, const void *__buf, size_t __n)
__attribute__ ((__access__ (__read_only__, 2, 3)));
-# 389 "/usr/include/unistd.h" 3 4
-extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
- __off_t __offset)
- __attribute__ ((__access__ (__write_only__, 2, 3)));
-
-
+# 404 "/usr/include/unistd.h" 3 4
+extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64")
+ __attribute__ ((__access__ (__write_only__, 2, 3)));
+extern ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64")
-extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
- __off_t __offset)
__attribute__ ((__access__ (__read_only__, 2, 3)));
# 422 "/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
```
That's why it's the assembler (and not linking) stage that's
complaining, because that means both functions end up named as the
64-bit variant. This can be seen in the assembly file. Continuing to
use pread/pread64 as an example, there is no definition for pread(),
only pread64() twice: once for pread and one for pread64.
It's tricky to support this in a generic way, because it's difficult
to detect this is even happening, as the assembler name operates at a >compiler level so we can't just undo it.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 297 |
Nodes: | 16 (2 / 14) |
Uptime: | 03:22:09 |
Calls: | 6,666 |
Calls today: | 4 |
Files: | 12,212 |
Messages: | 5,335,699 |