У меня есть приложение C, скомпилированное с помощью cc и связанное с CC, которое прекрасно работает, когда используется solarisstudio12.3, но segvs в _stack_grow (), когда версия компилятора изменяется на developerstudio12.6 и флаг компоновщика -std = c ++ 03 равен используемый.
Разборка функции показывает
(dbx) dis func1
0x000000010048dae0: func1 : save %sp, -176, %sp
0x000000010048dae4: func1+0x0004: sethi %hi(0x3c00), %l0
0x000000010048dae8: func1+0x0008: btog -400, %l0
0x000000010048daec: func1+0x000c: call _stack_grow [PLT] ! 0x101d87640
входя в отладчик я вижу это
t@1 (l@1) stopped in (unknown) at 0x0000000101d87640
0x0000000101d87640: _stack_grow [PLT]: nop
(dbx) stepi
t@1 (l@1) stopped in (unknown) at 0x0000000101d87644
0x0000000101d87644: _stack_grow+0x0004 [PLT]: sethi %hi(0x82cb0c00), %g5
(dbx) stepi
t@1 (l@1) stopped in (unknown) at 0x0000000101d87648
0x0000000101d87648: _stack_grow+0x0008 [PLT]: xnor %g5, 879, %g1
(dbx) stepi
t@1 (l@1) stopped in (unknown) at 0x0000000101d8764c
0x0000000101d8764c: _stack_grow+0x000c [PLT]: jmp %g1
(dbx) stepi
t@1 (l@1) stopped in (unknown) at 0x0000000101d87650
0x0000000101d87650: _stack_grow+0x0010 [PLT]: nop
(dbx) stepi
t@1 (l@1) stopped in _stack_grow at 0xffffffff7d34f090
и наконец
t@1 (l@1) signal SEGV (no mapping at the fault address) in _stack_grow at 0xffffffff7d34f0d8
0xffffffff7d34f0d8: _stack_grow+0x0048: ldub [%o1 - 1], %g0
Любопытно, что разные адреса для _stack_grow (): 0x0000000101d87640 и 0xffffffff7d34f090. Почему разные?
Любые комментарии будут с благодарностью.
Задача ещё не решена.
Других решений пока нет …