Segfault, имитирующий #Embed на GCC 14 с .incbin в .rodata и определение глобального промежутка <>C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Segfault, имитирующий #Embed на GCC 14 с .incbin в .rodata и определение глобального промежутка <>

Сообщение Anonymous »

У меня есть проект, который должен использовать GCC 14, который не имеет #embed поддержки.
Я попытался смоделировать его следующим образом.

Код: Выделить всё

namespace  {
namespace {
extern "C" {
extern std::byte const t1StartPtr[];
extern std::byte const t1EndPtr[];
}
asm(R"(
.section .rodata
.global t1StartPtr
.global t1EndPtr
.balign 8
t1StartPtr:
.incbin "/tmp/t1File.zip"
t1EndPtr:
)");
std::span t1 { t1StartPtr, t1EndPtr };
}

// Adding this reference makes the crash go away
//std::span const & t1ConstRef = t1;

namespace {
extern "C" {
extern std::byte const t2StartPtr[];
extern std::byte const t2EndPtr[];
}
asm(R"(
.section .rodata
.global t1StartPtr
.global t1EndPtr
.balign 8
t2StartPtr:
.incbin "/tmp/t2File.zip"
t2EndPtr:
)");
std::span t2 { t2StartPtr, t2EndPtr };
}

// Adding this reference makes the crash go away
//std::span const & t2ConstRef = t2;
}
Все отлично подходят для первого файла, который я включаю. Ошибка компилятора или (очень вероятно), что я наткнулся на какое -то неопределенное поведение - особенно потому, что я смешиваю встроенной сборке, но я не уверен точно, что не так. Места верны
[*] Утверждая, что std :: span правильно выровнен (они оба выровнены по границам 16 байтов)
[*] Проверка (в отладчике), что _M_PT (т.е. size_t dummy = 0; не решает проблему)

Я в настоящее время немного озадачен тем, что попробовать дальше. Может ли кто -нибудь заметить то, что я делаю неправильно (конечно, я довольно слаб в своей встроенной сборке). < /P>

Для ясности фактические файлы - это zip -архивы, которые я использую для данных (не для исполняемого кода), так что до тех пор, пока страница, содержащая эти файлы, отображаются для прочтения, это должно быть в порядке. MSVC был бы огромным подъемом по другим причинам в проекте. Содержимое которого я не могу загрузить. Я посмотрю, смогу ли я выяснить что -то похожее на загрузку для компилятора Explorer. Общий исполняемый размер весит примерно на 275 МБ.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ining-a-gl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»