* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking @ 2021-01-26 6:37 Ahmed Khanzada 2021-01-26 6:57 ` Ahmed Khanzada 2021-01-26 9:36 ` Philipp Stephani 0 siblings, 2 replies; 23+ messages in thread From: Ahmed Khanzada @ 2021-01-26 6:37 UTC (permalink / raw) To: 46111 I'm not an expert on C, OpenBSD, or SPARC64, but I did notice emacs-current was not compiling. During a gmake, bootstrap-emacs would get a SIGBUS and fail. Running gdb led me to the hash_string function where it seemed to be failing. Reverting the hash_string function to a previous version seems to have fixed the issue. If I had to guess, it may have something to do with SPARC64 alignment. I don't have an updated AMD64 OpenBSD box running at the moment, but if you would like me to test there, I could find a way. I understand that reverting this function might not be the best way forward, but wrote a patch just in case that reverts hash_string to an earlier version that compiles on OpenBSD/SPARC64. I am already signed all my GNU contributor docs. --[[text/plain; type=patch; name="0001-Reverting-hash_string-function-due-to-problem-on-Ope.patch" Content-Disposition: attachment; filename="0001-Reverting-hasattach filh_string-function-due-to-problem-on-Ope.patch"][base64]] RnJvbSBkOTM4NzQ1Y2U1NjA1OGJlMjQwNzhlYzUyZDk3Mzk4Njk3ZGI0Yjc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBaG1lZCBLaGFuemFkYSA8bWVAZW56dS5ydT4KRGF0ZTogTW9u LCAyNSBKYW4gMjAyMSAyMToxNjo0OCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFJldmVydGluZyBo YXNoX3N0cmluZyBmdW5jdGlvbiBkdWUgdG8gcHJvYmxlbSBvbgogT3BlbkJTRC9TUEFSQzY0Cgot LS0KIHNyYy9mbnMuYyB8IDMyICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvZm5zLmMgYi9zcmMvZm5zLmMKaW5kZXggN2FiMmU4ZjFhMC4uMDEyN2ZlM2Y0OCAxMDA2 NDQKLS0tIGEvc3JjL2Zucy5jCisrKyBiL3NyYy9mbnMuYwpAQCAtNDU5OSwzNCArNDU5OSwxNiBA QCAjZGVmaW5lIFNYSEFTSF9NQVhfTEVOICAgNwogRU1BQ1NfVUlOVAogaGFzaF9zdHJpbmcgKGNo YXIgY29uc3QgKnB0ciwgcHRyZGlmZl90IGxlbikKIHsKLSAgRU1BQ1NfVUlOVCBjb25zdCAqcCAg ID0gKEVNQUNTX1VJTlQgY29uc3QgKikgcHRyOwotICBFTUFDU19VSU5UIGNvbnN0ICplbmQgPSAo RU1BQ1NfVUlOVCBjb25zdCAqKSAocHRyICsgbGVuKTsKLSAgRU1BQ1NfVUlOVCBoYXNoID0gbGVu OwotICAvKiBBdCBtb3N0IDggc3RlcHMuICBXZSBjb3VsZCByZXVzZSBTWEhBU0hfTUFYX0xFTiwg b2YgY291cnNlLAotICAgKiBidXQgZGl2aWRpbmcgYnkgOCBpcyBjaGVhcGVyLiAgKi8KLSAgcHRy ZGlmZl90IHN0ZXAgPSAxICsgKChlbmQgLSBwKSA+PiAzKTsKLQotICAvKiBCZXdhcmU6IGBlbmRg IG1pZ2h0IGJlIHVuYWxpZ25lZCwgc28gYHAgPCBlbmRgIGlzIG5vdCBhbHdheXMgdGhlIHNhbWUK LSAgICogYXMgYHAgPD0gZW5kIC0gMWAuICAqLwotICB3aGlsZSAocCA8PSBlbmQgLSAxKQorICBj aGFyIGNvbnN0ICpwID0gcHRyOworICBjaGFyIGNvbnN0ICplbmQgPSBwICsgbGVuOworICB1bnNp Z25lZCBjaGFyIGM7CisgIEVNQUNTX1VJTlQgaGFzaCA9IDA7CisKKyAgd2hpbGUgKHAgIT0gZW5k KQogICAgIHsKLSAgICAgIEVNQUNTX1VJTlQgYyA9ICpwOwotICAgICAgcCArPSBzdGVwOworICAg ICAgYyA9ICpwKys7CiAgICAgICBoYXNoID0gc3hoYXNoX2NvbWJpbmUgKGhhc2gsIGMpOwogICAg IH0KLSAgaWYgKHAgPCBlbmQpCi0gICAgeyAvKiBBIGZldyBsYXN0IGJ5dGVzIHJlbWFpbiAoc21h bGxlciB0aGFuIGFuIEVNQUNTX1VJTlQpLiAgKi8KLSAgICAgIC8qIEZJWE1FOiBXZSBjb3VsZCBk byB0aGlzIHdpdGhvdXQgYSBsb29wLCBidXQgaXQnZCByZXF1aXJlCi0gICAgICAgICBlbmRpYW4t ZGVwZW5kZW50IGNvZGUgOi0oICAqLwotICAgICAgY2hhciBjb25zdCAqcDEgPSAoY2hhciBjb25z dCAqKXA7Ci0gICAgICBjaGFyIGNvbnN0ICplbmQxID0gKGNoYXIgY29uc3QgKillbmQ7Ci0gICAg ICBkbwotICAgICAgICB7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnAxKys7Ci0gICAg ICAgICAgaGFzaCA9IHN4aGFzaF9jb21iaW5lIChoYXNoLCBjKTsKLSAgICAgICAgfQotICAgICAg d2hpbGUgKHAxIDwgZW5kMSk7Ci0gICAgfQogCiAgIHJldHVybiBoYXNoOwogfQotLSAKMi4yOC4w Cgo= ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 6:37 bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking Ahmed Khanzada @ 2021-01-26 6:57 ` Ahmed Khanzada 2021-01-26 11:15 ` Eli Zaretskii 2021-01-26 9:36 ` Philipp Stephani 1 sibling, 1 reply; 23+ messages in thread From: Ahmed Khanzada @ 2021-01-26 6:57 UTC (permalink / raw) To: 46111, me [-- Attachment #1: Type: text/plain, Size: 3452 bytes --] Not sure if the patch attached correctly. Trying again. On Mon, Jan 25, 2021 at 10:37 PM Ahmed Khanzada <me@enzu.ru> wrote: > > I'm not an expert on C, OpenBSD, or SPARC64, but I did notice > emacs-current was not compiling. > > During a gmake, bootstrap-emacs would get a SIGBUS and fail. Running > gdb led me to the hash_string function where it seemed to be failing. > > Reverting the hash_string function to a previous version seems to have > fixed the issue. > > If I had to guess, it may have something to do with SPARC64 alignment. > > I don't have an updated AMD64 OpenBSD box running at the moment, but if you > would like me to test there, I could find a way. > > I understand that reverting this function might not be the best way > forward, but wrote a patch just in case that reverts hash_string to an > earlier version that compiles on OpenBSD/SPARC64. > > I am already signed all my GNU contributor docs. > > --[[text/plain; type=patch; name="0001-Reverting-hash_string-function-due-to-problem-on-Ope.patch" > Content-Disposition: attachment; filename="0001-Reverting-hasattach filh_string-function-due-to-problem-on-Ope.patch"][base64]] > RnJvbSBkOTM4NzQ1Y2U1NjA1OGJlMjQwNzhlYzUyZDk3Mzk4Njk3ZGI0Yjc2IE1vbiBTZXAgMTcg > MDA6MDA6MDAgMjAwMQpGcm9tOiBBaG1lZCBLaGFuemFkYSA8bWVAZW56dS5ydT4KRGF0ZTogTW9u > LCAyNSBKYW4gMjAyMSAyMToxNjo0OCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFJldmVydGluZyBo > YXNoX3N0cmluZyBmdW5jdGlvbiBkdWUgdG8gcHJvYmxlbSBvbgogT3BlbkJTRC9TUEFSQzY0Cgot > LS0KIHNyYy9mbnMuYyB8IDMyICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp > bGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg > YS9zcmMvZm5zLmMgYi9zcmMvZm5zLmMKaW5kZXggN2FiMmU4ZjFhMC4uMDEyN2ZlM2Y0OCAxMDA2 > NDQKLS0tIGEvc3JjL2Zucy5jCisrKyBiL3NyYy9mbnMuYwpAQCAtNDU5OSwzNCArNDU5OSwxNiBA > QCAjZGVmaW5lIFNYSEFTSF9NQVhfTEVOICAgNwogRU1BQ1NfVUlOVAogaGFzaF9zdHJpbmcgKGNo > YXIgY29uc3QgKnB0ciwgcHRyZGlmZl90IGxlbikKIHsKLSAgRU1BQ1NfVUlOVCBjb25zdCAqcCAg > ID0gKEVNQUNTX1VJTlQgY29uc3QgKikgcHRyOwotICBFTUFDU19VSU5UIGNvbnN0ICplbmQgPSAo > RU1BQ1NfVUlOVCBjb25zdCAqKSAocHRyICsgbGVuKTsKLSAgRU1BQ1NfVUlOVCBoYXNoID0gbGVu > OwotICAvKiBBdCBtb3N0IDggc3RlcHMuICBXZSBjb3VsZCByZXVzZSBTWEhBU0hfTUFYX0xFTiwg > b2YgY291cnNlLAotICAgKiBidXQgZGl2aWRpbmcgYnkgOCBpcyBjaGVhcGVyLiAgKi8KLSAgcHRy > ZGlmZl90IHN0ZXAgPSAxICsgKChlbmQgLSBwKSA+PiAzKTsKLQotICAvKiBCZXdhcmU6IGBlbmRg > IG1pZ2h0IGJlIHVuYWxpZ25lZCwgc28gYHAgPCBlbmRgIGlzIG5vdCBhbHdheXMgdGhlIHNhbWUK > LSAgICogYXMgYHAgPD0gZW5kIC0gMWAuICAqLwotICB3aGlsZSAocCA8PSBlbmQgLSAxKQorICBj > aGFyIGNvbnN0ICpwID0gcHRyOworICBjaGFyIGNvbnN0ICplbmQgPSBwICsgbGVuOworICB1bnNp > Z25lZCBjaGFyIGM7CisgIEVNQUNTX1VJTlQgaGFzaCA9IDA7CisKKyAgd2hpbGUgKHAgIT0gZW5k > KQogICAgIHsKLSAgICAgIEVNQUNTX1VJTlQgYyA9ICpwOwotICAgICAgcCArPSBzdGVwOworICAg > ICAgYyA9ICpwKys7CiAgICAgICBoYXNoID0gc3hoYXNoX2NvbWJpbmUgKGhhc2gsIGMpOwogICAg > IH0KLSAgaWYgKHAgPCBlbmQpCi0gICAgeyAvKiBBIGZldyBsYXN0IGJ5dGVzIHJlbWFpbiAoc21h > bGxlciB0aGFuIGFuIEVNQUNTX1VJTlQpLiAgKi8KLSAgICAgIC8qIEZJWE1FOiBXZSBjb3VsZCBk > byB0aGlzIHdpdGhvdXQgYSBsb29wLCBidXQgaXQnZCByZXF1aXJlCi0gICAgICAgICBlbmRpYW4t > ZGVwZW5kZW50IGNvZGUgOi0oICAqLwotICAgICAgY2hhciBjb25zdCAqcDEgPSAoY2hhciBjb25z > dCAqKXA7Ci0gICAgICBjaGFyIGNvbnN0ICplbmQxID0gKGNoYXIgY29uc3QgKillbmQ7Ci0gICAg > ICBkbwotICAgICAgICB7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKnAxKys7Ci0gICAg > ICAgICAgaGFzaCA9IHN4aGFzaF9jb21iaW5lIChoYXNoLCBjKTsKLSAgICAgICAgfQotICAgICAg > d2hpbGUgKHAxIDwgZW5kMSk7Ci0gICAgfQogCiAgIHJldHVybiBoYXNoOwogfQotLSAKMi4yOC4w > Cgo= [-- Attachment #2: 0001-Reverting-hash_string-function-due-to-problem-on-Ope.patch --] [-- Type: application/octet-stream, Size: 1655 bytes --] From d938745ce56058be24078ec52d97398697db4b76 Mon Sep 17 00:00:00 2001 From: Ahmed Khanzada <me@enzu.ru> Date: Mon, 25 Jan 2021 21:16:48 -0800 Subject: [PATCH] Reverting hash_string function due to problem on OpenBSD/SPARC64 --- src/fns.c | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/src/fns.c b/src/fns.c index 7ab2e8f1a0..0127fe3f48 100644 --- a/src/fns.c +++ b/src/fns.c @@ -4599,34 +4599,16 @@ #define SXHASH_MAX_LEN 7 EMACS_UINT hash_string (char const *ptr, ptrdiff_t len) { - EMACS_UINT const *p = (EMACS_UINT const *) ptr; - EMACS_UINT const *end = (EMACS_UINT const *) (ptr + len); - EMACS_UINT hash = len; - /* At most 8 steps. We could reuse SXHASH_MAX_LEN, of course, - * but dividing by 8 is cheaper. */ - ptrdiff_t step = 1 + ((end - p) >> 3); - - /* Beware: `end` might be unaligned, so `p < end` is not always the same - * as `p <= end - 1`. */ - while (p <= end - 1) + char const *p = ptr; + char const *end = p + len; + unsigned char c; + EMACS_UINT hash = 0; + + while (p != end) { - EMACS_UINT c = *p; - p += step; + c = *p++; hash = sxhash_combine (hash, c); } - if (p < end) - { /* A few last bytes remain (smaller than an EMACS_UINT). */ - /* FIXME: We could do this without a loop, but it'd require - endian-dependent code :-( */ - char const *p1 = (char const *)p; - char const *end1 = (char const *)end; - do - { - unsigned char c = *p1++; - hash = sxhash_combine (hash, c); - } - while (p1 < end1); - } return hash; } -- 2.28.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 6:57 ` Ahmed Khanzada @ 2021-01-26 11:15 ` Eli Zaretskii 2021-01-28 4:06 ` Ahmed Khanzada 0 siblings, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2021-01-26 11:15 UTC (permalink / raw) To: 46111, me, me On January 26, 2021 8:57:18 AM GMT+02:00, Ahmed Khanzada <me@enzu.ru> wrote: > Not sure if the patch attached correctly. Trying again. Thanks. However, could you please show the C-level backtrace from the SIGBUS crash, as displayed by GDB? I think we'd like to know which string has its data unaligned to cause this. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:15 ` Eli Zaretskii @ 2021-01-28 4:06 ` Ahmed Khanzada 2021-01-28 13:58 ` Eli Zaretskii 2021-01-28 15:09 ` Stefan Monnier 0 siblings, 2 replies; 23+ messages in thread From: Ahmed Khanzada @ 2021-01-28 4:06 UTC (permalink / raw) To: eliz, 46111 Eli Zaretskii <eliz@gnu.org> writes: > On January 26, 2021 8:57:18 AM GMT+02:00, Ahmed Khanzada <me@enzu.ru> wrote: >> Not sure if the patch attached correctly. Trying again. > > > Thanks. However, could you please show the C-level backtrace from the SIGBUS crash, as displayed by GDB? I think we'd like to know which string has its data unaligned to cause this. Is the log below the information that you are looking for? Starting program: /home/enzuru/src/emacs/src/bootstrap-emacs Breakpoint 1, hash_string (ptr=0x47fa34d596 "DndProtocol", len=11) at fns.c:4602 4602 EMACS_UINT const *p = (EMACS_UINT const *) ptr; (gdb) info args ptr = 0x47fa34d596 "DndProtocol" len = 11 (gdb) next 4603 EMACS_UINT const *end = (EMACS_UINT const *) (ptr + len); (gdb) next 4604 EMACS_UINT hash = len; (gdb) next 4607 ptrdiff_t step = 1 + ((end - p) >> 3); (gdb) next 4611 while (p <= end - 1) (gdb) next 4613 EMACS_UINT c = *p; (gdb) next Program received signal SIGBUS, Bus error. 0x000000455fe1dc6c in hash_string (ptr=0x47fa34d596 "DndProtocol", len=11) at fns.c:4613 4613 EMACS_UINT c = *p; (gdb) backtrace #0 0x000000455fe1dc6c in hash_string (ptr=0x47fa34d596 "DndProtocol", len=11) at fns.c:4613 #1 0x000000455fe1dd48 in sxhash_string (ptr=0x47fa34d596 "DndProtocol", len=11) at fns.c:4640 #2 0x000000455fe1e36c in sxhash_obj (obj=0x47fa02f0bc, depth=0) at fns.c:4759 #3 0x000000455fe1e270 in sxhash (obj=0x47fa02f0bc) at fns.c:4741 #4 0x000000455fe1c52c in hashfn_equal (key=0x47fa02f0bc, h=0x47fa02eff0) at fns.c:4096 #5 0x000000455fe1cf44 in hash_table_rehash (hash=0x47fa02eff5) at fns.c:4342 #6 0x000000455fdc5264 in hash_table_thaw (hash=0x47fa02eff5) at pdumper.c:2652 #7 0x000000455fdcd184 in thaw_hash_tables () at pdumper.c:5477 #8 0x000000455fdcccf0 in pdumper_load (dump_filename=0x4832495d00 "/home/enzuru/src/emacs/src/bootstrap-emacs.pdmp") at pdumper.c:5405 #9 0x000000455fcea4ac in load_pdump (argc=1, argv=0xffffffffffff2968) at emacs.c:859 #10 0x000000455fceabec in main (argc=1, argv=0xffffffffffff2968) at emacs.c:1067 ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 4:06 ` Ahmed Khanzada @ 2021-01-28 13:58 ` Eli Zaretskii 2021-01-28 15:09 ` Stefan Monnier 1 sibling, 0 replies; 23+ messages in thread From: Eli Zaretskii @ 2021-01-28 13:58 UTC (permalink / raw) To: Ahmed Khanzada, Stefan Monnier; +Cc: 46111 > From: Ahmed Khanzada <me@enzu.ru> > Cc: > Date: Wed, 27 Jan 2021 20:06:01 -0800 > > Eli Zaretskii <eliz@gnu.org> writes: > > > Thanks. However, could you please show the C-level backtrace from the SIGBUS crash, as displayed by GDB? I think we'd like to know which string has its data unaligned to cause this. > > Is the log below the information that you are looking for? Yes, thanks. > 4613 EMACS_UINT c = *p; > (gdb) next > > Program received signal SIGBUS, Bus error. > 0x000000455fe1dc6c in hash_string (ptr=0x47fa34d596 "DndProtocol", > len=11) at fns.c:4613 > 4613 EMACS_UINT c = *p; > (gdb) backtrace > #0 0x000000455fe1dc6c in hash_string (ptr=0x47fa34d596 "DndProtocol", > len=11) at fns.c:4613 > #1 0x000000455fe1dd48 in sxhash_string (ptr=0x47fa34d596 "DndProtocol", > len=11) at fns.c:4640 > #2 0x000000455fe1e36c in sxhash_obj (obj=0x47fa02f0bc, depth=0) at > fns.c:4759 > #3 0x000000455fe1e270 in sxhash (obj=0x47fa02f0bc) at fns.c:4741 > #4 0x000000455fe1c52c in hashfn_equal (key=0x47fa02f0bc, > h=0x47fa02eff0) at fns.c:4096 > #5 0x000000455fe1cf44 in hash_table_rehash (hash=0x47fa02eff5) at > fns.c:4342 > #6 0x000000455fdc5264 in hash_table_thaw (hash=0x47fa02eff5) at > pdumper.c:2652 > #7 0x000000455fdcd184 in thaw_hash_tables () at pdumper.c:5477 Stefan, any ideas? One possibility is to use memcpy instead of dereferencing a pointer. We could do that either unconditionally or when the original pointer is not aligned on 4/8-byte boundary. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 4:06 ` Ahmed Khanzada 2021-01-28 13:58 ` Eli Zaretskii @ 2021-01-28 15:09 ` Stefan Monnier 2021-01-28 15:19 ` Eli Zaretskii 1 sibling, 1 reply; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 15:09 UTC (permalink / raw) To: Ahmed Khanzada; +Cc: 46111 > Starting program: /home/enzuru/src/emacs/src/bootstrap-emacs > > Breakpoint 1, hash_string (ptr=0x47fa34d596 "DndProtocol", len=11) at > fns.c:4602 > 4602 EMACS_UINT const *p = (EMACS_UINT const *) ptr; > (gdb) info args > ptr = 0x47fa34d596 "DndProtocol" > len = 11 > (gdb) next > 4603 EMACS_UINT const *end = (EMACS_UINT const *) (ptr + len); > (gdb) next > 4604 EMACS_UINT hash = len; > (gdb) next > 4607 ptrdiff_t step = 1 + ((end - p) >> 3); > (gdb) next > 4611 while (p <= end - 1) > (gdb) next > 4613 EMACS_UINT c = *p; > (gdb) next > > Program received signal SIGBUS, Bus error. Hmm... so it's doing a dereference at address 0x47fa34d596 and getting a bus error? I have two questions here: - I'd guess that the bus error is due to alignment restrictions. What hardware is this running on? Last I checked, the computer architecture community had agreed (many years ago already) that (except for very small CPUs maybe, those not able to run Emacs) it's better to have the hardware support unaligned memory accesses (it took more time to get there than the consensus on branch delay slots, admittedly), so I'd be curious if there is still moderately recent hardware that insists on signaling an error. - AFAICT from the backtrace, `ptr` points to a plain normal ELisp string's content, yet these are supposed to be aligned, so what's going on here (this question is not directed at you ;-) Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 15:09 ` Stefan Monnier @ 2021-01-28 15:19 ` Eli Zaretskii 2021-01-28 15:44 ` Stefan Monnier 0 siblings, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2021-01-28 15:19 UTC (permalink / raw) To: Stefan Monnier; +Cc: 46111, me > From: Stefan Monnier <monnier@iro.umontreal.ca> > Cc: eliz@gnu.org, 46111@debbugs.gnu.org > Date: Thu, 28 Jan 2021 10:09:21 -0500 > > Hmm... so it's doing a dereference at address 0x47fa34d596 and getting > a bus error? Yes. > I have two questions here: > > - I'd guess that the bus error is due to alignment restrictions. > What hardware is this running on? See the Subject: it's SPARC64. > - AFAICT from the backtrace, `ptr` points to a plain normal ELisp > string's content, yet these are supposed to be aligned, so what's > going on here I wondered that myself. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 15:19 ` Eli Zaretskii @ 2021-01-28 15:44 ` Stefan Monnier 2021-01-28 15:52 ` Stefan Monnier 2021-01-28 16:04 ` Andreas Schwab 0 siblings, 2 replies; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 15:44 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 46111, me >> - I'd guess that the bus error is due to alignment restrictions. >> What hardware is this running on? > See the Subject: it's SPARC64. I mean the actual hardware, not the architecture. [ I know most RISC processors started with a restriction that they only allowed aligned memory accesses, but AFAIK they've changed stance since (IIUC the extra hardware can be very little, sometimes even less than the hardware that would be needed to implement the ad-hoc "support instructions" used to do the unaligned access as a sequence of instructions). It's one of the RISC simplifications that just didn't pan out. ] >> - AFAICT from the backtrace, `ptr` points to a plain normal ELisp >> string's content, yet these are supposed to be aligned, so what's >> going on here > I wondered that myself. And what did you conclude? ;-) Stef ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 15:44 ` Stefan Monnier @ 2021-01-28 15:52 ` Stefan Monnier 2021-01-28 16:17 ` Stefan Monnier 2021-01-28 16:04 ` Andreas Schwab 1 sibling, 1 reply; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 15:52 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 46111, me >>> - AFAICT from the backtrace, `ptr` points to a plain normal ELisp >>> string's content, yet these are supposed to be aligned, so what's >>> going on here >> I wondered that myself. > And what did you conclude? ;-) Hmm... now that I think about it, I think `make_pure_string` may get us there, because the string's content is allocated from the end without any alignment! And the backtrace shows we're hashing the string `DndProtocol` which comes from `lisp/x-dnd.el` which is indeed preloaded, so I think that's what's going on. Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 15:52 ` Stefan Monnier @ 2021-01-28 16:17 ` Stefan Monnier 2021-01-28 16:22 ` Andreas Schwab 2021-01-28 17:22 ` Eli Zaretskii 0 siblings, 2 replies; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 16:17 UTC (permalink / raw) To: Ahmed Khanzada; +Cc: 46111 > And the backtrace shows we're hashing the string `DndProtocol` which > comes from `lisp/x-dnd.el` which is indeed preloaded, so I think that's > what's going on. Could you try the patch below? Stefan diff --git a/src/fns.c b/src/fns.c index 7ab2e8f1a0..0c6bb770ef 100644 --- a/src/fns.c +++ b/src/fns.c @@ -4610,7 +4610,20 @@ hash_string (char const *ptr, ptrdiff_t len) * as `p <= end - 1`. */ while (p <= end - 1) { + /* Here `p` is *almost* always be properly aligned, so we want to + optimize for the aligned case, but we still need to support the + non-aligned case. */ + /* FIXME: Could we just always use `memcpy` and rely on GCC optimizing + it to a single word-sized memory access on all-but-sparc64? */ +#ifdef __sparc64__ /* Arch that still insists on aligned memory accesses. */ + EMACS_UINT c; + if (!((unsigned long)p) % sizeof (c)) + c = *p; + else + memcpy (&c, (char const *)p, sizeof (c)); /* `p` is unaligned! */ +#else EMACS_UINT c = *p; +#fi p += step; hash = sxhash_combine (hash, c); } ^ permalink raw reply related [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 16:17 ` Stefan Monnier @ 2021-01-28 16:22 ` Andreas Schwab 2021-01-28 17:22 ` Eli Zaretskii 1 sibling, 0 replies; 23+ messages in thread From: Andreas Schwab @ 2021-01-28 16:22 UTC (permalink / raw) To: Stefan Monnier; +Cc: 46111, Ahmed Khanzada On Jan 28 2021, Stefan Monnier wrote: > +#ifdef __sparc64__ /* Arch that still insists on aligned memory accesses. */ $ git grep -E '#define +STRICT_ALIGNMENT +1' -- gcc/config | wc -l 35 Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 16:17 ` Stefan Monnier 2021-01-28 16:22 ` Andreas Schwab @ 2021-01-28 17:22 ` Eli Zaretskii 2021-01-28 17:30 ` Stefan Monnier 1 sibling, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2021-01-28 17:22 UTC (permalink / raw) To: Stefan Monnier; +Cc: 46111, me > From: Stefan Monnier <monnier@iro.umontreal.ca> > Date: Thu, 28 Jan 2021 11:17:31 -0500 > Cc: 46111@debbugs.gnu.org > > + /* Here `p` is *almost* always be properly aligned, so we want to > + optimize for the aligned case, but we still need to support the > + non-aligned case. */ > + /* FIXME: Could we just always use `memcpy` and rely on GCC optimizing > + it to a single word-sized memory access on all-but-sparc64? */ > +#ifdef __sparc64__ /* Arch that still insists on aligned memory accesses. */ > + EMACS_UINT c; > + if (!((unsigned long)p) % sizeof (c)) > + c = *p; > + else > + memcpy (&c, (char const *)p, sizeof (c)); /* `p` is unaligned! */ > +#else > EMACS_UINT c = *p; > +#fi AFAIK, memcpy itself optimizes: once it gets to aligned address, it starts copying words instead of bytes. So I'm not sure we need either #ifdef or the run-time condition. I suggest to time both variants on x86 architecture, to see whether there's any performance hit due to use of memcpy, and if not, use memcpy always -- it will let us have the cake and eat it, too. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 17:22 ` Eli Zaretskii @ 2021-01-28 17:30 ` Stefan Monnier 0 siblings, 0 replies; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 17:30 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 46111-done, me > AFAIK, memcpy itself optimizes: once it gets to aligned address, it > starts copying words instead of bytes. I don't know what this `memcpy` code expands to on sparc64, but since it turns into a plain `mov` on x86, I simplified the code to always use `memcpy`. Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 15:44 ` Stefan Monnier 2021-01-28 15:52 ` Stefan Monnier @ 2021-01-28 16:04 ` Andreas Schwab 2021-01-28 16:14 ` Stefan Monnier 1 sibling, 1 reply; 23+ messages in thread From: Andreas Schwab @ 2021-01-28 16:04 UTC (permalink / raw) To: Stefan Monnier; +Cc: me, 46111 On Jan 28 2021, Stefan Monnier wrote: >>> - I'd guess that the bus error is due to alignment restrictions. >>> What hardware is this running on? >> See the Subject: it's SPARC64. > > I mean the actual hardware, not the architecture. Strict alignment is a property of the architecture, not the hardware. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-28 16:04 ` Andreas Schwab @ 2021-01-28 16:14 ` Stefan Monnier 0 siblings, 0 replies; 23+ messages in thread From: Stefan Monnier @ 2021-01-28 16:14 UTC (permalink / raw) To: Andreas Schwab; +Cc: me, 46111 Andreas Schwab [2021-01-28 17:04:19] wrote: > On Jan 28 2021, Stefan Monnier wrote: > >>>> - I'd guess that the bus error is due to alignment restrictions. >>>> What hardware is this running on? >>> See the Subject: it's SPARC64. >> >> I mean the actual hardware, not the architecture. > > Strict alignment is a property of the architecture, not the hardware. IIRC some RISC architectures *allowed* errors on unaligned memory accesses without requiring it, making it a property of the hardware. Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 6:37 bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking Ahmed Khanzada 2021-01-26 6:57 ` Ahmed Khanzada @ 2021-01-26 9:36 ` Philipp Stephani 2021-01-26 11:12 ` Eli Zaretskii 1 sibling, 1 reply; 23+ messages in thread From: Philipp Stephani @ 2021-01-26 9:36 UTC (permalink / raw) To: Ahmed Khanzada; +Cc: 46111 Am Di., 26. Jan. 2021 um 10:07 Uhr schrieb Ahmed Khanzada <me@enzu.ru>: > > I'm not an expert on C, OpenBSD, or SPARC64, but I did notice > emacs-current was not compiling. > > During a gmake, bootstrap-emacs would get a SIGBUS and fail. Running > gdb led me to the hash_string function where it seemed to be failing. The culprit might be commit be0f2de179235980b5409d5e77577207b93a4f12. I don't think that something like EMACS_UINT const *p = (EMACS_UINT const *) ptr; is legal on any platform; it just happens to work on forgiving platforms such as x86-64. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 9:36 ` Philipp Stephani @ 2021-01-26 11:12 ` Eli Zaretskii 2021-01-26 11:17 ` Andreas Schwab 0 siblings, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2021-01-26 11:12 UTC (permalink / raw) To: 46111, p.stephani2, me On January 26, 2021 11:36:25 AM GMT+02:00, Philipp Stephani <p.stephani2@gmail.com> wrote: > Am Di., 26. Jan. 2021 um 10:07 Uhr schrieb Ahmed Khanzada > <me@enzu.ru>: > > > > I'm not an expert on C, OpenBSD, or SPARC64, but I did notice > > emacs-current was not compiling. > > > > During a gmake, bootstrap-emacs would get a SIGBUS and fail. Running > > gdb led me to the hash_string function where it seemed to be > failing. > > > The culprit might be commit be0f2de179235980b5409d5e77577207b93a4f12. > I don't think that something like > EMACS_UINT const *p = (EMACS_UINT const *) ptr; > is legal on any platform; it just happens to work on forgiving > platforms such as x86-64. It's definitely legal, as it doesn't violate any laws... ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:12 ` Eli Zaretskii @ 2021-01-26 11:17 ` Andreas Schwab 2021-01-26 11:43 ` Eli Zaretskii 2021-01-27 7:42 ` Richard Stallman 0 siblings, 2 replies; 23+ messages in thread From: Andreas Schwab @ 2021-01-26 11:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 46111, me, p.stephani2 On Jan 26 2021, Eli Zaretskii wrote: > It's definitely legal, as it doesn't violate any laws... It violates the laws of C. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:17 ` Andreas Schwab @ 2021-01-26 11:43 ` Eli Zaretskii 2021-01-26 11:49 ` Andreas Schwab 2021-01-27 7:42 ` Richard Stallman 1 sibling, 1 reply; 23+ messages in thread From: Eli Zaretskii @ 2021-01-26 11:43 UTC (permalink / raw) To: Andreas Schwab; +Cc: 46111, me, p.stephani2 On January 26, 2021 1:17:06 PM GMT+02:00, Andreas Schwab <schwab@linux-m68k.org> wrote: > On Jan 26 2021, Eli Zaretskii wrote: > > > It's definitely legal, as it doesn't violate any laws... > > It violates the laws of C. We call that "invalid" not "illegal". ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:43 ` Eli Zaretskii @ 2021-01-26 11:49 ` Andreas Schwab 2021-01-26 15:36 ` Eli Zaretskii 0 siblings, 1 reply; 23+ messages in thread From: Andreas Schwab @ 2021-01-26 11:49 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 46111, me, p.stephani2 On Jan 26 2021, Eli Zaretskii wrote: > On January 26, 2021 1:17:06 PM GMT+02:00, Andreas Schwab <schwab@linux-m68k.org> wrote: >> On Jan 26 2021, Eli Zaretskii wrote: >> >> > It's definitely legal, as it doesn't violate any laws... >> >> It violates the laws of C. > > We call that "invalid" not "illegal". It's still a bug. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:49 ` Andreas Schwab @ 2021-01-26 15:36 ` Eli Zaretskii 0 siblings, 0 replies; 23+ messages in thread From: Eli Zaretskii @ 2021-01-26 15:36 UTC (permalink / raw) To: Andreas Schwab; +Cc: 46111, me, p.stephani2 > From: Andreas Schwab <schwab@linux-m68k.org> > Cc: 46111@debbugs.gnu.org, p.stephani2@gmail.com, me@enzu.ru > Date: Tue, 26 Jan 2021 12:49:44 +0100 > > On Jan 26 2021, Eli Zaretskii wrote: > > > On January 26, 2021 1:17:06 PM GMT+02:00, Andreas Schwab <schwab@linux-m68k.org> wrote: > >> On Jan 26 2021, Eli Zaretskii wrote: > >> > >> > It's definitely legal, as it doesn't violate any laws... > >> > >> It violates the laws of C. > > > > We call that "invalid" not "illegal". > > It's still a bug. That goes without saying: a crash is always a bug. ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-26 11:17 ` Andreas Schwab 2021-01-26 11:43 ` Eli Zaretskii @ 2021-01-27 7:42 ` Richard Stallman 2021-01-27 8:24 ` Andreas Schwab 1 sibling, 1 reply; 23+ messages in thread From: Richard Stallman @ 2021-01-27 7:42 UTC (permalink / raw) To: Andreas Schwab; +Cc: 46111, p.stephani2, me [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > It violates the laws of C. C is not a government, and neither is the ISO C Committee. Breaking the rules of C is not illegal. Indeed, GNU C goes against the standard in some simple ways unless you specify options such as --pedantic. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 23+ messages in thread
* bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking 2021-01-27 7:42 ` Richard Stallman @ 2021-01-27 8:24 ` Andreas Schwab 0 siblings, 0 replies; 23+ messages in thread From: Andreas Schwab @ 2021-01-27 8:24 UTC (permalink / raw) To: Richard Stallman; +Cc: 46111, p.stephani2, me On Jan 27 2021, Richard Stallman wrote: > Breaking the rules of C is not illegal. If it breaks, you get to keep both pieces. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different." ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2021-01-28 17:30 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-01-26 6:37 bug#46111: Reverting fns.c hash function due to OpenBSD/SPARC64 compile breaking Ahmed Khanzada 2021-01-26 6:57 ` Ahmed Khanzada 2021-01-26 11:15 ` Eli Zaretskii 2021-01-28 4:06 ` Ahmed Khanzada 2021-01-28 13:58 ` Eli Zaretskii 2021-01-28 15:09 ` Stefan Monnier 2021-01-28 15:19 ` Eli Zaretskii 2021-01-28 15:44 ` Stefan Monnier 2021-01-28 15:52 ` Stefan Monnier 2021-01-28 16:17 ` Stefan Monnier 2021-01-28 16:22 ` Andreas Schwab 2021-01-28 17:22 ` Eli Zaretskii 2021-01-28 17:30 ` Stefan Monnier 2021-01-28 16:04 ` Andreas Schwab 2021-01-28 16:14 ` Stefan Monnier 2021-01-26 9:36 ` Philipp Stephani 2021-01-26 11:12 ` Eli Zaretskii 2021-01-26 11:17 ` Andreas Schwab 2021-01-26 11:43 ` Eli Zaretskii 2021-01-26 11:49 ` Andreas Schwab 2021-01-26 15:36 ` Eli Zaretskii 2021-01-27 7:42 ` Richard Stallman 2021-01-27 8:24 ` Andreas Schwab
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).