Project

General

Profile

Actions

Bug #155

closed

Переименование функции clone()

Added by Alexander Kamkin about 14 years ago. Updated over 13 years ago.

Status:
Rejected
Priority:
Normal
Target version:
-
Start date:
02/18/2010
Due date:
% Done:

0%

Estimated time:
Detected in build:
091215
Platform:
Linux x86
Published in build:

Description

Если тестовую систему, разработанную с помощью CTESK, скомпилировать под Linux как разделяемую библиотеку (.so), то при запуске теста возникает Segmentation fault.

Анализ проблемы показал, что дело в следующем.

В CTESK для клонирования объектов спецификационных типов используется функция clone (object.h). Проблема в том, что в Linux есть системный вызов clone, используемый для создания потоков:

#include <sched.h>
int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);

Если тестовая система компилируется как динамическая библиотека, линкер сопоставляет символу clone адрес системного вызова, то есть при клонировании объекта вызывается функция создания нового потока, которая завершается с ошибкой, возвращая -1, который потом присваивается указателю на копию объекта. Дальнейшее понятно.

Не знаю, можно ли эту проблему решить флажками линковки. Мне было проще написать в файле object.h:

#define clone myClone

Предлагается изменить название функции clone на что-то более уникальное.

Actions

Also available in: Atom PDF