Hi,
 
Am Sonntag, November 25, 2018 21:22 CET, David Chisnall 
<gnus...@theravensnest.org> schrieb: 
 
> On 25 Nov 2018, at 18:30, Sebastian Reitenbach 
> <sebas...@l00-bugdead-prods.de> wrote:
> > 
> > So, the thing is, when I replace all /usr/bin/ld* with the /usr/bin/ld.bfd, 
> > and rebuild everything,
> > then GUI apps, as well as SOGo start up. But I can't do that when building 
> > packages :(
> 
> You can do that with -fuse-ld=bfd in LDFLAGS, but I agree it’s not the right 
> solution.

This workaround is good for the time being getting things to work again.

> 
> The bugs that you’re seeing look as if they may be symptoms of the hash table 
> bugs that I fixed in libobjc2 a month or two ago.  Can you check if they’re 
> still there with the 1.9 release branch?

Installing the 1.9 branch doesn't seem to help, the error persists. First when 
creating the package for the 1.9 branch, I got some
error when the ports infrastructued atempted to install it into the fake-root:

===>  Faking installation for gnustep-libobjc2-1.9.0
[0/1] cd /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/build-amd64 && 
/usr/local/bin/cmake -P cmake_install.cmake
-- Install configuration: "Release"
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/lib/libobjc2.so.1.1
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/lib/libobjc2.a
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/Availability.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/Object.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/Protocol.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/blocks_private.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/blocks_runtime.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/capabilities.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/developer.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/encoding.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/hooks.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/message.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc-api.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc-arc.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc-auto.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc-class.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc-runtime.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/objc.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/runtime-deprecated.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/runtime.h
-- Installing: 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/slot.h
failed to create symbolic link 'include/Block.h': No such file or directory
-- Symlinking: include/Block.h -> include/gnustep/objc/blocks_runtime.h
failed to create symbolic link 'include/Block_private.h': No such file or 
directory
-- Symlinking: include/Block_private.h -> include/gnustep/objc/blocks_private.h
sebastia@communicator:/home/ports/x11/gnustep/libobjc2> find 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0 -name Block.h                     
sebastia@communicator:/home/ports/x11/gnustep/libobjc2> find 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0 -name blocks_runtime.h
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/blocks_runtime.h
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/objc/blocks_runtime.h
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/fake-amd64/usr/local/include/gnustep/objc/blocks_runtime.h

In order to get me going, I created this symlink, and the Block_private.h 
symlink manually, and commented out the two
lines creating the symlinks from the CMakeLists.txt file.
With that manual editing I got the 1.9 branch installed, and rebuilt all the 
rest of GNUstep.

However, the problem is still there, see new stepping through gdb at the end.
Let me know if there is any more info I can provide, or if there is something 
else I should test.

thanks,
Sebastian


sebastia@communicator:/tmp> egdb /usr/local/bin/GMines                          
                                                                                
                 
GNU gdb (GDB) 7.12.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-openbsd6.4".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/local/bin/GMines...done.
(gdb) r
Starting program: /usr/local/bin/GMines 

Program received signal SIGFPE, Arithmetic exception.
0x00000527770d024c in _dl_find_symbol_obj (obj=0x52722e05c00, 
sl=0x7f7fffff5108) at /usr/src/libexec/ld.so/resolve.c:584
584             for (si = obj->buckets[sl->sl_elf_hash % obj->nbuckets];
(gdb) bt    
#0  0x00000527770d024c in _dl_find_symbol_obj (obj=0x52722e05c00, 
sl=0x7f7fffff5108) at /usr/src/libexec/ld.so/resolve.c:584
#1  0x00000527770d0068 in _dl_find_symbol (name=0x526ae984ea5 "getpid", 
this=0x7f7fffff51a8, flags=48, ref_sym=0x526ae9194c8, req_obj=<optimized out>, 
pobj=0x7f7fffff51a0)
    at /usr/src/libexec/ld.so/resolve.c:663
#2  0x00000527770cef1a in _dl_bind (object=0x526d8585800, index=<optimized 
out>) at /usr/src/libexec/ld.so/amd64/rtld_machine.c:357
#3  0x00000527770d0fed in _dl_bind_start () at 
/usr/src/libexec/ld.so/amd64/ldasm.S:108
#4  0x00000526aedbe4d4 in NSLogv (format=0x526be50df08, args=0x7f7fffff54f0) at 
NSLog.m:350
#5  0x00000526aecc6d05 in -[NSAssertionHandler 
handleFailureInFunction:file:lineNumber:description:] (self=0x526cc013ef8, 
_cmd=0x52731dc3a18 <.objc_selector_list+1984>, 
    functionName=0x52737e9bc88, fileName=0x5271bbe0988, line=323, 
format=0x52731dc10e8 <.objc_str.404>) at NSAssertionHandler.m:101
#6  0x0000052731a32c57 in initialize_gnustep_backend () at NSApplication.m:322
#7  0x0000052731a3522b in -[NSApplication _init] (self=0x5270bc8e308, 
_cmd=0x52731dc3558 <.objc_selector_list+768>) at NSApplication.m:878
#8  0x00000526aede1522 in -[NSObject performSelector:withObject:] 
(self=0x5270bc8e308, _cmd=0x526af008360 <.objc_selector_list>, 
    aSelector=0x52731dc3558 <.objc_selector_list+768>, anObject=0x5270bc8e308) 
at NSObject.m:2000
#9  0x00000526aee7773a in -[NSObject(NSThreadPerformAdditions) 
performSelector:onThread:withObject:waitUntilDone:modes:] (self=0x5270bc8e308, 
    _cmd=0x526af0085c0 <.objc_selector_list+608>, aSelector=0x52731dc3558 
<.objc_selector_list+768>, aThread=0x5269ef8eb08, anObject=0x5270bc8e308, 
aFlag=1 '\001', 
    anArray=0x52754df30c8) at NSThread.m:1672
#10 0x00000526aee773f3 in -[NSObject(NSThreadPerformAdditions) 
performSelectorOnMainThread:withObject:waitUntilDone:modes:] 
(self=0x5270bc8e308, 
    _cmd=0x526af008600 <.objc_selector_list+672>, aSelector=0x52731dc3558 
<.objc_selector_list+768>, anObject=0x5270bc8e308, aFlag=1 '\001', 
anArray=0x52754df30c8)
    at NSThread.m:1627
#11 0x00000526aee7748e in -[NSObject(NSThreadPerformAdditions) 
performSelectorOnMainThread:withObject:waitUntilDone:] (self=0x5270bc8e308, 
    _cmd=0x52731dc3358 <.objc_selector_list+256>, aSelector=0x52731dc3558 
<.objc_selector_list+768>, anObject=0x5270bc8e308, aFlag=1 '\001') at 
NSThread.m:1638
#12 0x0000052731a35995 in -[NSApplication init] (self=0x5270bc8e308, 
_cmd=0x52731dc3b78 <.objc_selector_list+2336>) at NSApplication.m:978
#13 0x0000052731a3519d in +[NSApplication sharedApplication] 
(self=0x52731dc28b8 <_OBJC_CLASS_NSApplication>, _cmd=0x524923ff1d8 
<.objc_selector_list+16>) at NSApplication.m:850
#14 0x00000524923f1fc2 in gnustep_base_user_main (argc=1, argv=0x7f7fffff5b78, 
env=0x7f7fffff5b88) at main.m:44
#15 0x00000526aee152f7 in main (argc=1, argv=0x7f7fffff5b78, 
env=0x7f7fffff5b88) at NSProcessInfo.m:1002
#16 0x00000524923ee056 in ___start ()
#17 0x0000000000000000 in ?? ()
(gdb) fram 6
#6  0x0000052731a32c57 in initialize_gnustep_backend () at NSApplication.m:322
322             NSCAssert1 (backend != Nil, 
(gdb) list
317                         path);
318             
319             /* Now get the GSBackend class, which should have just been 
loaded
320              * from the bundle.  */
321             backend = NSClassFromString (@"GSBackend");
322             NSCAssert1 (backend != Nil, 
323               _(@"Backend at path %@ doesn't contain the GSBackend class"), 
path);
324             [backend initializeBackend];
325           }
326     
(gdb) break NSApplication.m:321
Breakpoint 1 at 0x52731a32b2e: file NSApplication.m, line 321.
(gdb) c
Continuing.

Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
(gdb) r
Starting program: /usr/local/bin/GMines 

Breakpoint 1, initialize_gnustep_backend () at NSApplication.m:321
321             backend = NSClassFromString (@"GSBackend");
(gdb) s
NSClassFromString (aClassName=0xe3b0ee55008) at NSObjCRuntime.m:107
107     {
(gdb) 
108       if (aClassName != nil)
(gdb) 
110           int       len = [aClassName length];
(gdb) 
111           char      buf[len+1];
(gdb) 
113           [aClassName getCString: buf
(gdb) 
114                        maxLength: len + 1
(gdb) 
113           [aClassName getCString: buf
(gdb) 
116           return objc_lookUpClass (buf);
(gdb) 
objc_lookUpClass (name=0xde02e335da7ed992 <error: Cannot access memory at 
address 0xde02e335da7ed992>)
    at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/class_table.c:530
530     {
(gdb) s
531             return (id)class_table_get_safe(name);
(gdb) 
class_table_get_safe (class_name=0xe3aadc5663f <objc_lookUpClass+31> 
"H\203\304\bA[]L3\034$L;\035\237\354\001")
    at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/class_table.c:130
130     {
(gdb) list
125             }
126             class_table_internal_insert(class_table, class);
127     }
128     
129     PRIVATE Class class_table_get_safe(const char *class_name)
130     {
131             if (NULL == class_name) { return Nil; }
132             return class_table_internal_table_get(class_table, class_name);
133     }
134     
(gdb) s
131             if (NULL == class_name) { return Nil; }
(gdb) 
132             return class_table_internal_table_get(class_table, class_name);
(gdb) 
class_table_internal_table_get (table=0x7f7ffffe4ff0, key=0xa) at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:434
434     {
(gdb) 
435             PREFIX(_table_cell) cell = PREFIX(_table_get_cell)(table, key);
(gdb) 
class_table_internal_table_get_cell (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:337
337     {
(gdb) 
338             uint32_t hash = MAP_TABLE_HASH_KEY(key);
(gdb) 
string_hash (str=0x7f7ffffe4fe0 "`P\376\377\177\177") at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/string_hash.h:9
9       {
(gdb) 
10              uint32_t hash = 0;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb)
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
14                      hash = c + (hash << 6) + (hash << 16) - hash;
(gdb) 
12              while ((c = *str++))
(gdb) 
16              return hash;
(gdb) 
class_table_internal_table_get_cell (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:339
339             PREFIX(_table_cell) cell = PREFIX(_table_lookup)(table, hash);
(gdb) print hash
$1 = 4054769640
(gdb) print table
$2 = (class_table_internal_table *) 0xe3b21ef2b80
(gdb) 
$3 = (class_table_internal_table *) 0xe3b21ef2b80
(gdb) s
class_table_internal_table_lookup (table=0x7f7ffffe4fe0, hash=3643) at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:218
218     {
(gdb) 
219             hash = hash % TABLE_SIZE(table);
(gdb) 
220             return &table->table[hash];
(gdb) print &table->table[hash]
$4 = (struct class_table_internal_table_cell_struct *) 0xe3b5cce3e80
(gdb) print table->table[hash]
$5 = {secondMaps = 0, value = 0xe3b5265a620 <_OBJC_CLASS_IBConnectionRecord>}
(gdb) s
class_table_internal_table_get_cell (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:341
341             if (!MAP_TABLE_VALUE_NULL(cell->value))
(gdb) print cell->value
$6 = (void *) 0xe3b5265a620 <_OBJC_CLASS_IBConnectionRecord>
(gdb) s
class_table_internal_is_null (value=0x7f7ffffe4fe0) at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:76
76      {
(gdb) 
77              return value == NULL;
(gdb) 
class_table_internal_table_get_cell (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:343
343                     if (MAP_TABLE_COMPARE_FUNCTION(key, cell->value))
(gdb) print key
$7 = (const void *) 0x7f7ffffe4ff0
(gdb) print (char *) key
$8 = 0x7f7ffffe4ff0 "GSBackend"
(gdb) print cell->value
$9 = (void *) 0xe3b5265a620 <_OBJC_CLASS_IBConnectionRecord>
(gdb) s
class_compare (name=0x7f7ffffe4fe0 "`P\376\377\177\177", class=0xe3b21ef2b80) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/class_table.c:70
70      {
(gdb) 
71              return string_compare(name, class->name);
(gdb) print name
$10 = 0x7f7ffffe4ff0 "GSBackend"
(gdb) print class->name
$11 = 0xe3b519e5d0e "IBConnectionRecord"
(gdb) s
string_compare (str1=0xe3b5265a620 <_OBJC_CLASS_IBConnectionRecord> 
"\220\245eR;\016", str2=0xe3b75f04e10 <str_encoding_table> "\001")
    at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/string_hash.h:24
24      {
(gdb) 
25              if (str1 == str2)
(gdb) 
29              if (str1 == NULL || str2 == NULL) 
(gdb) 
33              return strcmp(str1, str2) == 0;
(gdb) 
strcmp () at /usr/src/lib/libc/arch/amd64/string/strcmp.S:12
12              RETGUARD_SETUP(strcmp, r11)
(gdb) print str1
No symbol "str1" in current context.
(gdb) 
No symbol "str1" in current context.
(gdb) 
No symbol "str1" in current context.
(gdb) s
18              testb   $7,%dil
(gdb) 
19              je      .Ls1aligned
(gdb) 
35              testb   $7,%sil
(gdb) 
36              jne     .Lbyte_loop
(gdb) 
59              movb    (%rdi),%al
(gdb) 
60              incq    %rdi
(gdb) 
61              movb    (%rsi),%dl
(gdb) 
62              incq    %rsi
(gdb) 
63              testb   %al,%al
(gdb) 
64              je      .Ldone
(gdb) 
65              cmpb    %al,%dl
(gdb) 
66              je      .Lbyte_loop
(gdb) 
69              movzbq  %al,%rax
(gdb) 
70              movzbq  %dl,%rdx
(gdb) 
71              subq    %rdx,%rax
(gdb) 
72              RETGUARD_CHECK(strcmp, r11)
(gdb) 
strcmp () at /usr/src/lib/libc/arch/amd64/string/strcmp.S:73
73              ret
(gdb) 
string_compare (str1=0x7f7ffffe4ff0 "GSBackend", str2=0xe3b519e5d0e 
"IBConnectionRecord") at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/string_hash.h:34
34      }
(gdb) 
class_table_internal_table_get_cell (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) 
at /home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:347
347                     uint32_t jump = cell->secondMaps;
(gdb) 
349                     for (int hop = __builtin_ffs(jump) ; hop > 0 ; hop = 
__builtin_ffs(jump))
(gdb) 
359             }
(gdb) print hop 
No symbol "hop" in current context.
(gdb) 
No symbol "hop" in current context.
(gdb) 
No symbol "hop" in current context.
(gdb) s
361             if (table->old)
(gdb) 
366             return NULL;
(gdb) 
367     }
(gdb) 
class_table_internal_table_get (table=0xe3b21ef2b80, key=0x7f7ffffe4ff0) at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/hash_table.h:436
436             if (NULL == cell)
(gdb) print cell
$12 = (class_table_internal_table_cell) 0x0
(gdb) 
$13 = (class_table_internal_table_cell) 0x0
(gdb) s
441                     return MAP_TABLE_VALUE_PLACEHOLDER;
(gdb) 
449     }
(gdb) 
class_table_get_safe (class_name=0x7f7ffffe4ff0 "GSBackend") at 
/home/ports/pobj/amd64/gnustep-libobjc2-1.9.0/libobjc2-1.9.0/class_table.c:133
133     }
(gdb) 
NSClassFromString (aClassName=0xe3b5247afe0 <.objc_str.393>) at 
NSObjCRuntime.m:117
117         }
(gdb) 
119     }
(gdb) 
initialize_gnustep_backend () at NSApplication.m:322
322             NSCAssert1 (backend != Nil, 
(gdb)


_______________________________________________
Discuss-gnustep mailing list
Discuss-gnustep@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to